FOREX - Тенденции, прогнозы и следствия 2016 - страница 721

 
new-rena:

Как версия...

Во первых 5-знак, а это значит что дофига тиков и количества раз отработки одного и того же алгоритма. Правильно, что на ГЭПе может пролететь ошибка, связанная с резким изменением цены открытия ордера. Ордер не открылся, алгоритм не обработал ошибку и вот - второй ордер.

Версия чего ? MT4  988

Код под #property strict

У меня обрабатывается только первый тик открытия свечи, правлильная ли такая конструкция ?

 

//=============== Переменные =========================================

int      prev_time = 0;       // Работа по ценам открытия свечи 

 

void OnTick()

  {//-Start-

// ======= Работа по ценам открытия свечи ============================

  if ( Time[0] <= prev_time ) {return;}

  prev_time = (int)Time[0];

  }//-Start End- 

 
Vladimir Zubov:
Версия чего ? MT4  988
Версия причины возникновения такой фишки, которую ты описал.
 
Vladimir Zubov:

...

Код под #property strict

Это проверка ошибок в коде, а не ошибок отработки команды OrderSelect. У тебя есть в коде функция обработки ошибок OrderSelect?
 
new-rena:
Это проверка ошибок в коде, а не ошибок отработки команды OrderSelect. У тебя есть в коде функция обработки ошибок OrderSelect?

добавил как свечу определяет, может в этом дело ?

Но дисконов и перезапуска терминала небыло. При перезапуске знаю что метод не корректный, может открыть посреди свечи, но на М1 это не столь важно, и перезапуска небыло. 

 
new-rena:
Это проверка ошибок в коде, а не ошибок отработки команды OrderSelect. У тебя есть в коде функция обработки ошибок OrderSelect?

OrderSelect у меня на страже Кимовские функции, что бы на свече небыло открытия, там вроде без проблем всё.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара открытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t=0;
  int      i, k=OrdersTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
  return(iBarShift(sy, tf, t, True));
}
//End

 Тут точно не в функции дело, а в ньансах работы на реале.

 
Vladimir Zubov:

добавил как свечу определяет, может в этом дело ?

Но дисконов и перезапуска терминала небыло. При перезапуске знаю что метод не корректный, может открыть посреди свечи, но на М1 это не столь важно, и перезапуска небыло. 

это у тебя каждый тик будет. Используй iTime(...PERIOD_XX...). Вот если сделаешь так, то у тебя будет работать только на открытии свечи того ТФ, который укажешь. Однако, если команда на открытие/закрытие ордера вернет ошибку, то повторно робот её выдаст в новой свече.

Ну или  iTime(...Period()...). - это на текущем ТФ, т.е. который на графике, где советник

 
Vladimir Zubov:

OrderSelect у меня на страже Кимовские функции, что бы на свече небыло открытия, там вроде без проблем всё.

 Тут точно не в функции дело, а в ньансах работы на реале.

шихта....

на реал такое не надо...

 
new-rena:

шихта....

на реал такое не надо...

1. А как сделать контроль новой свечи, что бы одна итерация была при первом тике ?

у меня вроде этот код работает контроля срабатывания по открытию свечи :(

2. Почему не надо, дело в функцие Кима для определения бара открытой позиции ?

P/S Переворотили МТ4 теперь всё заного писать ... 

 
new-rena:

это у тебя каждый тик будет. Используй iTime(...PERIOD_XX...). Вот если сделаешь так, то у тебя будет работать только на открытии свечи того ТФ, который укажешь. Однако, если команда на открытие/закрытие ордера вернет ошибку, то повторно робот её выдаст в новой свече.

Ну или  iTime(...Period()...). - это на текущем ТФ, т.е. который на графике, где советник

я код из примера тут брал на сайте лет пять назад, а теперь все "умные" стали и только ругаются и за фриланс и маркет дерутся...

Как по новому и правильно открытие свечи определить ? 

 
Vladimir Zubov:

1. А как сделать контроль новой свечи, что бы одна итерация была при первом тике ?

у меня вроде этот код работает контроля срабатывания по открытию свечи :(

2. Почему не надо, дело в функцие Кима для определения бара открытой позиции ?

P/S Переворотили МТ4 теперь всё заного писать ... 

1.

 if(iTime(Symbol(),PERIOD_H1,0)==prevTime) return(0);

datetime prevTime=iTime(Symbol(),PERIOD_H1,0);

Дальше твой код

И всё....

//Это для H1

А ну да, бар там смотрит. Ну потянет тоды

А после int ticket=OrderSelect() есть у тебя анализ - открылся ордер или нет? if(ticket<0)GetLastError() - есть?

Причина обращения: