Ограничения открытия сделок по строго определенному времени

 
 Добрый вечер, буду очень благодарен за помощь. Как сделать, чтобы в MT5 открытие сделки на 12 часовом графике в режиме реальной времени совпадало с результатами тестирования советника. Я имею ввиду тестирование по ценам открытия. Ведь в режиме реальной торговли результаты не совпадают с результатами тестирования, потому что в реале открытие сделок проходит по тикам. Чтобы приблизить реальную торговлю к результатам тестирования, я установил открытие сделок только в 12:00. Однако сделки перестали вообще открываться, хотя при тестировании в то же время они открываются. Что нужно сделать, чтобы они открывались ? Вот фрагмент кода:
void OnTick()
{
  
    //--- Достаточно ли баров
    if (Bars(_Symbol, _Period) < 60)
    {
        Alert("На графике меньше 60 баров, советник не будет работать!!");
        return;
    }

    //--- Определяем время нового бара
    static datetime Old_Time;
    datetime New_Time[1];
    bool IsNewBar = false;

    // Копируем время текущего бара
    int copied = CopyTime(_Symbol, _Period, 0, 1, New_Time);
    if (copied > 0)
    {
        if (Old_Time != New_Time[0])
        {
            IsNewBar = true;
            Old_Time = New_Time[0];
        }
    }
     
        
    MqlDateTime current;
    TimeToStruct(TimeCurrent(), current);
    
    // Определяем время открытия сделки
    if (current.hour != 12 || current.min != 0) {
        return; 
    }

    //--- Получаем размер позиции
    double balance = AccountInfoDouble(ACCOUNT_BALANCE);
    double lotSize = CalculateLotSize(balance);
    
    //--- Проверка появления нового бара
    if (!IsNewBar)
        return;
        

    //--- Получаем последние котировки
    MqlTick latest_price;
    if (!SymbolInfoTick(_Symbol, latest_price))
    {
        Alert("Ошибка получения последних котировок - ошибка:", GetLastError(), "!!");
        return;
    }

    //--- Получение исторических данных последних 3-х баров
    MqlRates mrate[];
    if (CopyRates(_Symbol, _Period, 0, 3, mrate) < 0)
    {
        Alert("Ошибка копирования исторических данных - ошибка:", GetLastError());
        return;
    }

 
ilmir2902:
 Добрый вечер, буду очень благодарен за помощь. Как сделать, чтобы в MT5 открытие сделки на 12 часовом графике в режиме реальной времени совпадало с результатами тестирования советника. Я имею ввиду тестирование по ценам открытия. Ведь в режиме реальной торговли результаты не совпадают с результатами тестирования, потому что в реале открытие сделок проходит по тикам. Чтобы приблизить реальную торговлю к результатам тестирования, я установил открытие сделок только в 12:00. Однако сделки перестали вообще открываться, хотя при тестировании в то же время они открываются. Что нужно сделать, чтобы они открывались ? Вот фрагмент кода:

Зачастую бары открываются не в ровно 12:00:00, обычно открытие происходит с задержкой в несколько секунд, а на малоликвидных инструментах, задержка может быть и несколько минут.

Ваш код позволяет сделать одну попытку открытия позиции, если в течении минуты после 12 часов появится тик и это при условии что этот код расположен в OnTick(), если же он работает в OnTimer(), то шансов открыть позицию у него практически нет.

 
ilmir2902:
я установил открытие сделок только в 12:00.

Тогда нужно четко прописать условие:

if(IsNewBar && current.hour == 12 && PositionsTotal() == 0)
   {
    //--- открываем позицию
   }

а в этой строке меняем _Period на PERIOD_H1:

int copied = CopyTime(_Symbol, PERIOD_H1, 0, 1, New_Time);

Предполагаю, что так должно работать.

С уважением, Владимир.