# Доработка ботов (советников, индикаторов) vol. 2

Раздел: Язык программирования MQL4
Автор темы: chocolate
Создана: 2014-10-02 12:48
Ответов: 33795 | Просмотров: 6649753
Страница 1366 из 1690
Источник: https://forexsystemru.com/threads/77111/page-1366

---

## Gliukin — 2022-02-13 17:18

> Цитата (AlexeNP):
> ну, так если нужен максимальный лот который был/есть в торговле, то нужно перебирать исторические/рыночные ордера)

Может набросаете примерчик как правильно это делать ? 
Зарание спасибо.

## MakarFX — 2022-02-13 17:42

> Цитата (Gliukin):
> Может набросаете примерчик как правильно это делать ?
> Зарание спасибо.

```

ObjectSetText(statname,"The maximum lot that was used in trading: "+DoubleToStr(MaxLot(),2),TextSyze,"Courier New",Orange);

//+----------------------------------------------------------------------------+
double MaxLot()
  {
   double result=0;
   int i=OrdersHistoryTotal();
   for(int pos=0;pos<=i;pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderType()==OP_BUY||OrderType()==OP_SELL)
              {
               if(result<OrderLots()) result=OrderLots();
              }
           }
        }
     }
   return(result);
  }
//+----------------------------------------------------------------------------+

```

## Gliukin — 2022-02-13 17:49

> Цитата (MakarFX):
> 
```

> ObjectSetText(statname,"The maximum lot that was used in trading: "+DoubleToStr(MaxLot(),2),TextSyze,"Courier New",Orange);
>
> //+----------------------------------------------------------------------------+
> double MaxLot()
>   {
>    double result=0;
>    int i=OrdersHistoryTotal();
>    for(int pos=0;pos<=i;pos++)
>      {
>       if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
>         {
>          if(OrderSymbol()==_Symbol)
>            {
>             if(OrderType()==OP_BUY||OrderType()==OP_SELL)
>               {
>                if(result<OrderLots()) result=OrderLots();
>               }
>            }
>         }
>      }
>    return(result);
>   }
> //+----------------------------------------------------------------------------+
> 
```

Спасибо вам большое !!! 
Буду сейчас разбираться.

## Gliukin — 2022-02-13 18:07

> Цитата (Gliukin):
> Спасибо вам большое !!!
> Буду сейчас разбираться.

Ещё раз большое спасибо, всё работает !!!

## P_M_Y — 2022-02-13 18:37

Здравствуйте. Помогите вставить в советник функцию увеличения лота

## djin1115 — 2022-02-13 20:52

Всем привет можно ли сделат что бы при касании канала отображалась стрелка на самом графике без отображения канала Пример на скрине!

## 1_Lexa — 2022-02-14 00:32

> Цитата (P_M_Y):
> Здравствуйте. Помогите вставить в советник функцию увеличения лота

Я тут скидывал свой советник, просил вставить или исправить множитель, я уже сам нашел решение, нужно заменить один блок кода
double GetLots()
  {
   double lot=LOTS;

   if(lot==0)
      lot = AccountBalance()*risk/100/10000/MarketInfo(Symbol(),MODE_MARGINREQUIRED);

   if(CountTrades()>0)
      lot=NormalizeDouble(LOTS*MathPow(LotMultiply,CountTrades()),2);
      
   if(lot>MaxLot)
     {
      lot=LOTS;
      if(lot==0)
         lot = AccountBalance()*risk/100/10000/MarketInfo(Symbol(),MODE_MARGINREQUIRED);
     }

   return(lot);
  
  }
Чтобы была дистанция добавил к Point, Point>=Step, и объявил в переменной

## AlexeNP — 2022-02-14 01:04

> Цитата (1_Lexa):
> Я тут скидывал свой советник, просил вставить или исправить множитель, я уже сам нашел решение, нужно заменить один блок кода
> double GetLots()
>   {
>    double lot=LOTS;
>
>    if(lot==0)
>       lot = AccountBalance()*risk/100/10000/MarketInfo(Symbol(),MODE_MARGINREQUIRED);
>
>    if(CountTrades()>0)
>       lot=NormalizeDouble(LOTS*MathPow(LotMultiply,CountTrades()),2);
>
>    if(lot>MaxLot)
>      {
>       lot=LOTS;
>       if(lot==0)
>          lot = AccountBalance()*risk/100/10000/MarketInfo(Symbol(),MODE_MARGINREQUIRED);
>      }
>
>    return(lot);
>
>   }
> Чтобы была дистанция добавил к Point, Point>=Step, и объявил в переменной

в таком виде твоя функция может работать неправильно... лот нужно нормализовывать через шаг изменения лота

## 1_Lexa — 2022-02-14 01:24

> Цитата (AlexeNP):
> в таком виде твоя функция может работать неправильно... лот нужно нормализовывать через шаг изменения лота

Поэтому я и написал сюда, в надежде что помогут
step=NormalizeDouble(LOTS  *Point,Digits);
Примерно так?

## AlexeNP — 2022-02-14 01:36

> Цитата (1_Lexa):
> Поэтому я и написал сюда, в надежде что помогут
> step=NormalizeDouble(LOTS  *Point,Digits);
> Примерно так?

ну, немного длинный код (можно сократить, но так яснее будет)
//lot - какое-то значение лота которое нужно привести в нормальный вид
double lot_min=SymbolInfoDouble(NULL,SYMBOL_VOLUME_MIN),
       lot_max=SymbolInfoDouble(NULL,SYMBOL_VOLUME_MAX),
       lot_step=SymbolInfoDouble(NULL,SYMBOL_VOLUME_STEP);
int step=(int)MathRound((lot-lot_min)/lot_step);
lot=lot_min+MathMax(0,step)*lot_step;
if(lot>lot_max)
   lot=lot_max;

## 1_Lexa — 2022-02-14 07:39

> Цитата (AlexeNP):
> ну, немного длинный код (можно сократить, но так яснее будет)
> //lot - какое-то значение лота которое нужно привести в нормальный вид
> double lot_min=SymbolInfoDouble(NULL,SYMBOL_VOLUME_MIN),
>        lot_max=SymbolInfoDouble(NULL,SYMBOL_VOLUME_MAX),
>        lot_step=SymbolInfoDouble(NULL,SYMBOL_VOLUME_STEP);
> int step=(int)MathRound((lot-lot_min)/lot_step);
> lot=lot_min+MathMax(0,step)*lot_step;
> if(lot>lot_max)
>    lot=lot_max;

EA 818, это советник который я скидывал, там немного другие законы работают, но все равно большое спасибо, что объяснили

## aladdin1982 — 2022-02-15 16:17

can you please fix the MTF on this indicator 
thank you

## prelest — 2022-02-15 17:24

Дорогие программисты, пожалуйста перекиньте на график индикатор целиком с уровнями. У индикатора отображаются только стрелки. И если можно,  в настройки ещё добавить.  :rolleyes:

## P_M_Y — 2022-02-15 19:54

Здравствуйте. Помогите вставить в советник функцию увеличения лота

## Абдулхаким — 2022-02-16 02:57

> Цитата (prelest):
> перекиньте на график индикатор целиком с уровнями

в индикаторе нет уровней :)
есть 6 МА, при определённом их расположении появляются стрелки

> Цитата (prelest):
> И если можно, в настройки ещё добавить

первые два параметра это период для МАшек,
а третий в коде не участвует

## prelest — 2022-02-16 11:54

> Цитата (Абдулхаким):
> в индикаторе нет уровней :)
> есть 6 АМ, при определённом их расположении появляются стрелки
>
> первые два параметра это период для МАшек,
> а третий в коде не участвует

спасибо вам. А эти 6 АМ, вы можете вывести на экран?

## Laser300 — 2022-02-16 13:29

Всем привет. Прошу посмотреть на несоответствия (неисправность) индикатор. После смены формата мт4 под мт5 у него странное поведение на фондовом рынке.
На рынке форекс мт4 индикатор подстраивается под амплитуду цены каждой пары индивидуально и это хорошо.
На фондовом рынке мт5 индикатор сжимается в кучу не смотря на волатильность инструмента. Настройки везде выставлены по умолчанию, одинаковы.
Подправьте пожалуйста до полного соответствия оценки волатильности как в исходнике мт4.
Скрины и исходник прилагаю.

## Абдулхаким — 2022-02-16 16:28

> Цитата (prelest):
> А эти 6 АМ, вы можете вывести на экран?

мне не сложно,
посмотрел внимательней на код (вчера видимо только уровни там искал :)),
в коде всего лишь два мувинга и для каждого из них ещё "вытаскивают" прошлое и будущее значение :)
если вам нужно визуально видеть мувинги, то их можно накинуть на график из стандартных индикаторов терминала (их периоды - первые два параметра в настройках, один по ценам close, другой по open, метод расчёта у них одинаковый).
что можно "выжать" из двух МАшек, кроме стрелок которые уже есть (например) ?

## prelest — 2022-02-16 17:49

> Цитата (Абдулхаким):
> мне не сложно,
> посмотрел внимательней на код (вчера видимо только уровни там искал :)),
> Спасибо вам большое, что уделили время  🍍

## gek4555 — 2022-02-16 18:11

Будьте добры, прикрутите алерт, пожалуйста :

---

Следующая страница: https://forexsystemru.com/threads/77111/page-1367
