Вопросы (Yerkin Sagandykov) - страница 10

 
Yerkin Sagandykov #:

а можно ли считать с графика стрелку которую МТ установил по алерту ?

Нет. Это не графический объект.

 


Всем привет !

в цикле прохожу по открытым ордерам , фильтру по маджику . ордера посредством a_trade.Buy открываются. Все ли верно в цикле оформлено ? почему то один и тот же ордер выбирает

а_trade.SetExpertMagicNumber(MagicNumber);
a_trade.Buy(required_lot_size, a_symbol.Name(), ask_price, 0, take_profit_price, "MartiNULL"))



for(int i = PositionsTotal() - 1; i >= 0; i--)
     {
      if(PositionSelect(PositionGetSymbol(i))) // Используем PositionGetSymbol для индекса
        {
         Print("Commme ", PositionGetString(POSITION_COMMENT), " ", PositionGetInteger(POSITION_MAGIC));
         if(PositionGetInteger(POSITION_MAGIC) == MagicNumber && PositionGetSymbol(i) == a_symbol.Name())
           {
 
Yerkin Sagandykov #:


Всем привет !

в цикле прохожу по открытым ордерам , фильтру по маджику . ордера посредством a_trade.Buy открываются. Все ли верно в цикле оформлено ? почему то один и тот же ордер выбирает

Здесь проход не по ордерам, а по позициям (по ордерам - функции OrderSelect(), OrderGetXXX()). Если счет типа NETTING, то, по большому счету, подход правильный, если не рассматривать избыточность кода:

PositionSelect(PositionGetSymbol(i))

В этом месте два раза подряд происходит одно и то же. Достаточно было бы:

if (PositionGetSymbol(i) != "")

Если же счет типа HEDGING, то подход в корне неправильный. Правильно вот так: https://www.mql5.com/ru/docs/trading/positiongetticket. Причем это универсальный способ, не зависящий от типа счета.

Документация по MQL5: Торговые функции / PositionGetTicket
Документация по MQL5: Торговые функции / PositionGetTicket
  • www.mql5.com
Функция возвращает тикет позиции по индексу в списке открытых позиций и автоматически выбирает эту позицию для дальнейшей работы с ней при помощи...
 

Всем привет ! удаляю старые лимитки и заново устанавливаю новые. И почему некоторых брокеров не срабатывает условие и не удаляется ордер, а у некоторых работает ? у которых ен работает ставлю Sleep(1000) то тогда работает 

 long timeSinceSetup = TimeLocal() - a_order.TimeSetup(); 
  if(timeSinceSetup >= 5) // Удаление ордера, если он старше 5 секунд
       {
           a_trade.OrderDelete(a_order.Ticket());
      }
 
Yerkin Sagandykov #:

Всем привет ! удаляю старые лимитки и заново устанавливаю новые. И почему некоторых брокеров не срабатывает условие и не удаляется ордер, а у некоторых работает ? у которых ен работает ставлю Sleep(1000) то тогда работает 

TimeSetup() - насколько пониямаю время установки ордера....оно у вас точно в локальном времени измеряетя ? скорее по серверу..

тогда вместо TimeLocal() надо использовать TimeTradeServer()

 
Maxim Kuznetsov #:

TimeSetup() - насколько пониямаю время установки ордера....оно у вас точно в локальном времени измеряетя ? скорее по серверу..

тогда вместо TimeLocal() надо использовать TimeTradeServer()

Спасибо !

 

Привет всем !

как сделать чтоб на графике с одни м ТФ  строилась средняя по данным другого ТФ ? к пример на графике с 4ч средняя была по  данным дневного ТФ ...

 
Yerkin Sagandykov #:

Привет всем !

как сделать чтоб на графике с одни м ТФ  строилась средняя по данным другого ТФ ? к пример на графике с 4ч средняя была по  данным дневного ТФ ...

Взять данные МА с дневного ТФ, а отобразить данные на Н4:

datetime dtH4Time = iTime(NULL, PERIOD_H4, <your H4 bar index>);
int nH4atD1BarIndex = iBarShift(NULL, PERIOD_D1, dtH4Time);
double fMA = iMA(NULL, PERIOD_D1, 31, 0, MODE_EMA, PRICE_CLOSE, nH4atD1BarIndex);

После таких вычислений отображаете полученное значение fMA на баре <your H4 bar index>. В итоге на шести барах подряд получите одно и то же значение (подсказка для оптимизации).

P. S. Код для MQL4

 
Ihor Herasko #:
datetime dtH4Time = iTime(NULL, PERIOD_H4, <your H4 bar index>); int nH4atD1BarIndex = iBarShift(NULL, PERIOD_D1, dtH4Time); double fMA = iMA(NULL, PERIOD_D1, 31, 0, MODE_EMA, PRICE_CLOSE, nH4atD1BarIndex);
Ihor Herasko #:

Взять данные МА с дневного ТФ, а отобразить данные на Н4:

После таких вычислений отображаете полученное значение fMA на баре <your H4 bar index>. В итоге на шести барах подряд получите одно и то же значение (подсказка для оптимизации).

P. S. Код для MQL4

раньше не сталкивался ,  мне надо в исходный код MA вставить ваш код ? или ? и еще -  для MQL5 нет примера  ?

 
Yerkin Sagandykov #:

раньше не сталкивался ,  мне надо в исходный код MA вставить ваш код ? или ? и еще -  для MQL5 нет примера  ?

MTF-индикатор - это не пятиминутное дело. Поэтому готовый пример вряд ли получится. Я показал непосредственно подход, причем наиболее скользкий момент - преобразование индекса бара между ТФ.

Для МQL5 кода будет немного больше. Сначала потребуется создать Handle для МА (в OnInit(), смотрите документацию по iCustom, там хороший пример), а только потом получить расчетное значение через CopyBuffer(). С iTime() и iBarShift() в МQL5 все то же самое. Также не забудьте, что по умолчанию нумерация баров в МТ5 обратна нумерации, используемой в МТ4.