Алгоритм на ограничение время работы внутри торгового робота

 

Может есть у кого-то готовий алгоритм на ограничение время работы внутри эксперта, например Start time = 16.30 && End time = 03.20 ?

 
abeiks:

Может есть у кого-то готовий алгоритм на ограничение время работы внутри эксперта, например Start time = 16.30 && End time = 03.20 ?

 держи, хотел статью написать на эту тему, Рош сказал что на статью не тянет

//--- входные параметры
input string     Setup          = "Таймер";
input bool       Timer          = false;
input int        TradePeriod    = 1;
input string     OnTradePeriod  = "08:00";
input string     EndTradePeriod = "18:00";
//--- глобальные переменные
MqlDateTime str;
string data1;
string data2;
string treidperiod=" ";
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(TradeTimer())
     {
      //---
      // Здесь необходимо прописать код с торговыми условиями
      //---
     }
   Comment(treidperiod);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool TradeTimer()
  {
   if(Timer==true)
     {

      datetime date=TimeCurrent();
      TimeToStruct(date,str);

      string ty=string(str.year);
      string tm=string(str.mon);
      string td1=string(str.day);

      datetime d1  = StringToTime (ty+"."+tm+"."+td1+" "+OnTradePeriod);
      datetime d2  = StringToTime (ty+"."+tm+"."+td1+" "+EndTradePeriod);

      if(TradePeriod==1)
        {
         if(d1>d2 && date>=d1)
           {
            string td2=string(str.day+1);
            d1  = StringToTime (ty+"."+tm+"."+td1+" "+OnTradePeriod);
            d2  = StringToTime (ty+"."+tm+"."+td2+" "+EndTradePeriod);
           }
         else if(d1>d2 && date<=d2)
           {
            string td2=string(str.day-1);
            d1  = StringToTime (ty+"."+tm+"."+td2+" "+OnTradePeriod);
            d2  = StringToTime (ty+"."+tm+"."+td1+" "+EndTradePeriod);
           }
         data1 = TimeToString(d1,TIME_MINUTES);
         data2 = TimeToString(d2,TIME_MINUTES);
         treidperiod="c "+data1+" до "+data2;
         if(date>=d1 && date<=d2)return(true);
         else return(false);
        }

      if(TradePeriod==2)
        {
         data1 = TimeToString(d1,TIME_MINUTES);
         data2 = TimeToString(d2,TIME_MINUTES);
         treidperiod="c Пн "+data1+" до Пт "+data2;
         if((str.day_of_week==1 && date<d1) || (str.day_of_week==5 && date>d2))return(false);
         else return(true);
        }

     }
   treidperiod="Круглосуточно";
   return(true);
  }
//+------------------------------------------------------------------+
 
sergey1294:

 держи, хотел статью написать на эту тему, Рош сказал что на статью не тянет

sergey1294, большое спасибо. ;)

 
abeiks:

sergey1294, большое спасибо. ;)

sergey1294:

 держи, хотел статью написать на эту тему, Рош сказал что на статью не тянет

Только есть маленький нюанс - неподаётса оптимизацие. :)

Счас думаю как эту проблему решить.

 
 

 

Добрый день!

Переделал NewBar функцию в MQL5, но счас невидоетса рэзультат. Может кто замэтит ошибку?

 

bool NewBar() 
{
   datetime Time[];
   int count;        
   ArraySetAsSeries(Time,true);
   CopyTime(_Symbol,_Period,0,count,Time);
   
   bool r;
   static datetime bar = 0;
   if (bar == 0) 
   bar = TimeCurrent();
   
   if (bar == Time[0]) 
   r = false;
      else 
      { 
      bar = Time[0]; 
      r = true; 
      }
   return(r);
} 

 
abeiks:

Только есть маленький нюанс - неподаётса оптимизацие. :)

Счас думаю как эту проблему решить.

 

А если  время торговли указывать в целых числах? Минут от "о" часов.

 

input int OnTradePeriod = 480;        //  "08:00";
input int EndTradePeriod = 1080;    //  "18:00";

ну и внутри проверки на непротиворечивость  

 

 
Buter:

А если  время торговли указывать в целых числах? Минут от "о" часов.

 

input int OnTradePeriod = 480;        //  "08:00";
input int EndTradePeriod = 1080;    //  "18:00";

ну и внутри проверки на непротиворечивость  

 

Так неполучетса, в этои функцие должен быть "string"

datetime d1  = StringToTime (ty+"."+tm+"."+td1+" "+OnTradePeriod)

а у вас "int".

Надо изчо преобразовать "int" в "string".

 
abeiks:

 

Добрый день!

Переделал NewBar функцию в MQL5, но счас невидоетса рэзультат. Может кто замэтит ошибку?

 

Нашол в статях вот такое решение:

bool NewBar() 
{
   MqlRates rt[2];
   if(CopyRates(_Symbol,_Period,0,2,rt)!=2) 
     { 
     Print("CopyRates of ",_Symbol," failed, no history"); 
     return(false); 
     }
   if(rt[1].tick_volume>1) 
   return(false); 
   return(true);
} 

 

 
abeiks:

Нашол в статях вот такое решение: 

посмотрите вот это, может поможет https://www.mql5.com/ru/code/107
isNewBar
isNewBar
  • голосов: 7
  • 2010.05.07
  • Prival
  • www.mql5.com
Функция анализа появления нового бара на заданном таймфрейме.
 
Prival:
посмотрите вот это, может поможет https://www.mql5.com/ru/code/107
Спасибо.
Причина обращения: