Симулятор тестера для бинарных опционов

 

За не имением нормального тестера в мт4 для бинарных опционов, пытаюсь сделать что то подручное. Написал код что бы тестить прям в индикаторе, вставил код, добавил условие и получил результаты.

Но код работает не верно, обрабатывает каждый тик как значение для записи. Полагаю проблема в строках обработки времени экспирации, я их жирным и //### выделил. Подскажите у кого какие идеи?

//+------------------------------------------------------------------+
//|                                            Симулятор тестера.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window

double total_order_buy,open_order_buy,close_order_buy,profit_buy,profit_buy_buffer,stoploss_buy,stoploss_buy_buffer,
total_order_sell,open_order_sell,close_order_sell,profit_sell,profit_sell_buffer,stoploss_sell,stoploss_sell_buffer;
datetime close_time_buy,close_time_sell;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
//||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
//| Симулятор сделок BUY |||||||||||||||||||||||||||||||||||||||||||||
//||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  if(total_order_buy == 0 /* && Условие открытия BUY */)
  {
  total_order_buy = 1;
  open_order_buy = Bid;
  close_time_buy = time[0] + 60; //##################################   
  }
  else;
 
  if(time[0] >= close_time_buy) //###################################
  {
      close_order_buy = Bid;
      total_order_buy = 0;
      close_time_buy = 1000000;
      
          if(close_order_buy > open_order_buy)
          {
          profit_buy = profit_buy_buffer + 1;
          profit_buy_buffer = profit_buy;
          close_order_buy = 0;
          open_order_buy = 0;
          }
          else;
          if(close_order_buy < open_order_buy)
          {
          stoploss_buy = stoploss_buy_buffer + 1;
          stoploss_buy_buffer = stoploss_buy;
          close_order_buy = 0;
          open_order_buy = 0;
          }
          else;
  }
  else;

//||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
//| Симулятор сделок SELL ||||||||||||||||||||||||||||||||||||||||||||
//||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  if(total_order_sell == 0 /* && Условие открытия BUY */)
  {
  total_order_sell = 1;
  open_order_sell = Bid;
  close_time_sell = time[0] + 60; //##################################  
  }
  else;
 
  if(time[0] >= close_time_sell) //###################################
  {
      close_order_sell = Bid;
      total_order_sell = 0;
      close_time_sell = 1000000;
      
          if(close_order_sell > open_order_sell)
          {
          profit_sell = profit_sell_buffer + 1;
          profit_sell_buffer = profit_sell;
          close_order_sell = 0;
          open_order_sell = 0;
          }
          else;
          if(close_order_sell < open_order_sell)
          {
          stoploss_sell = stoploss_sell_buffer + 1;
          stoploss_sell_buffer = stoploss_sell;
          close_order_sell = 0;
          open_order_sell = 0;
          }
          else;
  }
  else; 
  Comment(StringFormat("\nПрофит BUY = %G\nУбытки BUY = %G\n-----\nПрофит SELL = %G\nУбытки SELL = %G",profit_buy,stoploss_buy,profit_sell,stoploss_sell));
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Полагаю что проблема в отсутсвии тайминга во время тестирования, возможно сделать какой то искусственный таймер в код? 
 

В этом коде много проблем, начиная с самой его концепции.

  1. Почему индикатор, а не советник?
  2. Проверка действительно на каждом тике, потому что так запускается OnCalculate. Сделайте проверку раз в бар.
  3. Что такое 1000000? Какое-то очень большое время? Попробуйте посмотреть его значение через TimeToString.
  4. Переменные, объявленные на гл. уровне, лучше инициализировать явно. Никто не гарантирует, что там нули.
  5. ...

Закажите в фрилансе что-нибудь простое, выйдет сильно дешевле.