когда перезапускается эксперт ?

 

Всем привет !

советник подразумевает,  что  после отктытия ордера, следубщий открывься должен только на следующий день

   if (iTime(nameSym,xPeriod,xshiftBar) < dateTradeLast)  
   {
      Alert("dateTradeLast ", dateTradeLast );           
      return false; 
   }  

на тестере все нормально. Но в реале иногда получается что ордера отрываются в неурочное время. Думаю из-за того что эксперт преезапускается и переменая dateTradeLast обнуляется...

Если так , то как этого измежать ?

 
Yerkin Sagandykov:

Всем привет !

советник подразумевает,  что  после отктытия ордера, следубщий открывься должен только на следующий день

на тестере все нормально. Но в реале иногда получается что ордера отрываются в неурочное время. Думаю из-за того что эксперт преезапускается и переменая dateTradeLast обнуляется...

Если так , то как этого измежать ?

Попробуйте функции GlobalVariableSet и GlobalVariableGet

 
STARIJ:

Попробуйте функции GlobalVariableSet и GlobalVariableGet

эм, а может проще вернуть дату последней сделки будь она в рынке или в истории с помощью простейшего цикла перебора ордеров

 
Aleksey Semenov:

эм, а может проще вернуть дату последней сделки будь она в рынке или в истории с помощью простейшего цикла перебора ордеров

Конечно, и не нужны никакие глобальные переменные для этих целей

 
Vitaly Muzichenko:

Конечно, и не нужны никакие глобальные переменные для этих целей

цикл перебирать постоянно ? или можно узнать когда переменная обнулилась ? то етсь  когда эксперт перегрузился ?


ваш вариант действительно проще . проверю

а в чем минусы использования глобальных переменных  ?  просто в том ,что можно использовать более простоый способ ? 

 
Yerkin Sagandykov:

цикл перебирать постоянно ? или можно узнать когда переменная обнулилась ? то етсь  когда эксперт перегрузился ?


ваш вариант действительно проще . проверю

а в чем минусы использования глобальных переменных  ?  просто в том ,что можно использовать более простоый способ ? 

Можно чисто при старте эксперта проверить в OnInit()

 
Yerkin Sagandykov:

Всем привет !

советник подразумевает,  что  после отктытия ордера, следубщий открывься должен только на следующий день

на тестере все нормально. Но в реале иногда получается что ордера отрываются в неурочное время. Думаю из-за того что эксперт преезапускается и переменая dateTradeLast обнуляется...

Если так , то как этого измежать ?

У KimIV такая функция есть:

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

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (TimeDay  (OrderOpenTime())==Day()
              &&  TimeMonth(OrderOpenTime())==Month()
              &&  TimeYear (OrderOpenTime())==Year()) return(true);
            }
          }
        }
      }
    }
  }
  k=OrdersTotal();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (TimeDay  (OrderOpenTime())==Day()
              &&  TimeMonth(OrderOpenTime())==Month()
              &&  TimeYear (OrderOpenTime())==Year()) return(true);
            }
          }
        }
      }
    }
  }
  return(false);
}
 
Aleksey Semenov:

эм, а может проще вернуть дату последней сделки будь она в рынке или в истории с помощью простейшего цикла перебора ордеров

А если ордера нет в истории ? В 4-ке как-то (даже не знаю как сейчас, уже давно на это не полагаюсь) было что глубина истории определена текущим GUI. Смотрит пользователь историю за сутки, ну и роботы тоже глубже ничего не видят.

"грузиньте апельсины бочками" :-) робот должен уметь сохранять состояние на время перезагрузки и вести собственную историю. Так что глоб.переменные они глобальны, потому как проще файлов.

 
Maxim Kuznetsov:

А если ордера нет в истории ? В 4-ке как-то (даже не знаю как сейчас, уже давно на это не полагаюсь) было что глубина истории определена текущим GUI. Смотрит пользователь историю за сутки, ну и роботы тоже глубже ничего не видят.

"грузиньте апельсины бочками" :-) робот должен уметь сохранять состояние на время перезагрузки и вести собственную историю. Так что глоб.переменные они глобальны, потому как проще файлов.

но с другой стороны, цель проверки такова, чтобы не открылись много ордеров, и если нет ордеров то  и вопрос отпадает..