Позиция не закрывается-открывается

 

Добрый день!

При прогоне советника через тестер стратегий советник открывает позицию, позиция остается открытой на следующий день и на следующий и т.д.

Советник тестился на MT5 с московским временем. Если тестить на других MT5 необходимо параметр timedifference поменять  на X, где X -  на сколько часов отстает время в MT5 от московского.

Тест проводился на периоде 18.09.11-24.09.11. В 23.59.59 каждого торгового дня  открытая позиция должна закрыться, а в 00.00.00 следующего дня автоматический открыться. Так происходит все время, за исключением первого дня. Т.е. 18.09.11 в 21.00 открывается, далее ничего не происходит до 19.09.11 23.59.59, хотя 18.09.11 в 23.59.59 должна была закрыться, а 19.09.11 в 00.00.00 открыться.

ПОЧЕМУ НЕ ЗАКРЫВАЕТСЯ-ОТКРЫВАЕТСЯПосле теста

 Здесь показан только часть советника, которая отвечает за открытие позиции.

//+------------------------------------------------------------------+
//|                                         19-20keepup21-22temp.mq5 |
//|                                    Copyright 2011, Alexey Pavlov |
//|                                                   alanat@list.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, Alexey Pavlov"
#property link      "alanat@list.ru"
#property version   "1.00"

//--- input parameters
input int      TIME_DIFFERENCE=0;
input int      STOPLOSS=7000;
input int      SHOULDER=13;


//#define TIME_DIFFERENCE 0
//////////////////////////////////////////////////////////////////////
//для московского времени 0
///////////////////////////////////////////////////////////////////////

//#define STOPLOSS 7000
///////////////////////////////////////////////////////////////////////
//STOPLOSS - переменная для stop loss в пунктах
//////////////////////////////////////////////////////////////////////
#define CHECK_TIME 21
///////////////////////////////////////////////////////////////////////
//время, когда надо проверять свечи в 10 и 11 часов
//////////////////////////////////////////////////////////////////////


int OnInit()
  {
   return(0);
  }

void OnDeinit(const int reason)
  {
   
  }

void OnTick()
  {
      MqlDateTime time_cur;
      MqlRates rates[];
      MqlTradeRequest request;
      MqlTradeResult result;
      MqlTick prices;
      
      TimeCurrent(time_cur);
      SymbolInfoTick(Symbol(), prices);
      
      ArraySetAsSeries(rates,true);
      CopyRates (Symbol(), 0, 0, 13, rates);

      if (!GlobalVariableCheck("signal1")) GlobalVariableSet("signal1", 0);

      
      request.action = TRADE_ACTION_DEAL;
      request.symbol = Symbol();
      request.deviation = 10;
      request.type_filling = ORDER_FILLING_AON;
      request.type_time = ORDER_TIME_GTC;
  
      if ((time_cur.hour == CHECK_TIME-TIME_DIFFERENCE) && (time_cur.min == 0) && (time_cur.sec >= 0) && (GlobalVariableGet("signal1") == 0))
         {
            printf("%d.00", time_cur.hour);
            if (PositionsTotal() == 0)
               {
                  if ((rates[2].open < rates[2].close) && (rates[2].open < rates[1].close))
                     {
                        SymbolInfoTick(Symbol(), prices);
                        request.type = ORDER_TYPE_BUY;
                        request.price = prices.ask;
                        request.tp = 0.0;
                        request.tp = 0.0;
                        request.volume = 0.1*MathFloor(10*AccountInfoDouble(ACCOUNT_BALANCE)*SHOULDER/100000);
                        OrderSend(request, result);
                        while ((result.retcode == TRADE_RETCODE_PRICE_CHANGED) || (result.retcode == TRADE_RETCODE_REQUOTE) || (result.retcode == TRADE_RETCODE_REJECT) || (result.retcode == TRADE_RETCODE_CANCEL) || (result.retcode == TRADE_RETCODE_CONNECTION))
                           {
                              SymbolInfoTick(Symbol(), prices);
                              request.price = prices.ask;
                              request.tp = 0.0;
                              request.tp = 0.0;                              
                              OrderSend(request, result);
                           }
                        GlobalVariableSet("signalup", 1);
                        Print("Вход в рынок");
                     }
                     else Print("Ожидание входа в рынок перенесено на следующие сутки");
               }
            else Print("Есть незакрытая позиция");
            GlobalVariableSet("signal1", 1);
         }
     
  }
 
alanat:

Отсутствие минутного бара не редкость на любых инструментах.

Попробуйте увеличить время на закрытие/открытие минут до пяти-пятнадцати.

 
А где та часть кода, которая отвечает за закрытие? Без неё проблему не выявить.
 
avoitenko:
А где та часть кода, которая отвечает за закрытие? Без неё проблему не выявить.

 

Если напишу другую часть кода, то можно совсем запутаться, там еще хуже будет проблема. Там будет открытие и закрытие в 23.00, что очень странно, поэтому решил начать с малого. Позиция должна открываться и закрываться сама в 00.00, даже, если я не написал код, а это почему-то не происходит.

 
Swan:

Отсутствие минутного бара не редкость на любых инструментах.

Попробуйте увеличить время на закрытие/открытие минут до пяти-пятнадцати.

Не совсем понял: т.е. при тестировании у меня не вся история? Из-за этого не показывает закрытие-открытие? Точно такая же ситуация и в другие временные рамки, не только 18.09.11-24.09.11
 
Swan:

 

Попробуйте увеличить время на закрытие/открытие минут до пяти-пятнадцати.

Я не устанавливал рамок по закрытию-открытию. Это делает брокер.
 
alanat:

time_cur.min == 0
в коде сигнал на открытие в программе может появится в течении одной минуты. Нет тиков в эту минуту - таки нет открытия.
 

Насколько я знаю, торговый сервер от Альфа банка сам делает пере открытие сделок когда время переходит через 00:00.

Таким образом чтобы клиенты не платили своп.

В условие на открытие я бы внес изменения чтобы был запас по времени:

time_cur.min >= 0 && time_cur.min < 5

 

 

 

Как вы видите, проблем с открытием нет. Проблема состоит в том, что при тестировании позиция открывается в 21.00, а переноситься (закрываться-открываться) должна независимо от того, что написано в советнике. Это же делает брокер. Но почему-то переноса не происходит и позиция просто остается открытой без свопа. Это косяк брокера? Если ДА, то почему дальше такого нет? Это же повторяется и на других тестовых промежутках.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 

Мое предложение не совсем в тему, но для реала оно актуально. 

Я недавно обращался в севисдеск с похожей проблемой по терминалу от Альфа-Банка.

При пере открытии сделки, в тестере не выставлялись стоп лосс и тейк профит если они были поставлены изначально при открытии позиции.

Так вот в севисдеске с этим быстро разобрались. Так что вам туда прямая дорога.

 
avoitenko:

Мое предложение не совсем в тему, но для реала оно актуально. 

Я недавно обращался в севисдеск с похожей проблемой по терминалу от Альфа-Банка.

При пере открытии сделки, в тестере не выставлялись стоп лосс и тейк профит если они были поставлены изначально при открытии позиции.

Так вот в севисдеске с этим быстро разобрались. Так что вам туда прямая дорога.

Т.е. это косяк Альфы? Они не очень-то готовы помочь, если дело касается советника. Но попробую. Спс.
Причина обращения: