как написать код для времени торговли

 
Хочу написать код для робота своего, чтобы торговал допустим с 9-00 до 13-00 а потом начинал только с 15-00 и до 19-00, и чтоб этот параметр можно было менять. Кто чем может) 
 
Kirill Andreev:
Хочу написать код для робота своего, чтобы торговал допустим с 9-00 до 13-00 а потом начинал только с 15-00 и до 19-00, и чтоб этот параметр можно было менять. Кто чем может) 

Конструкция 

                    
input string               i_sTimeSettings="Настройки времени торговли";         //  
input bool                  i_bExitClearing1=false;                                 // Закрывать позицию перед клирингом 1
input string               i_sClearing1StartTime="13:00";                              // Время начала клиринга 1
input string               i_sClearing1EndTime="13:03";                              // Время окончания клиринга 1
input bool                  i_bExitClearing2=false;                                 // Закрывать позицию перед клирингом 2
input string               i_sClearing2StartTime="18:44";                              // Время начала клиринга 2
input string               i_sClearing2EndTime="19:00";                              // Время окончания клиринга 2
input bool                  i_bExitEndSession=false;                                 // Закрывать позицию перед окончанием сессии
input string               i_sEndSessionTime="22:56";                              // Время окончания сессии

 Подойдет?

 
Alexander Antoshkin:

Конструкция 

 Подойдет?

спасибо отлично!!! 
 
Kirill Andreev:
спасибо отлично!!! 
//или делаем так:
//------------------------------------------------------------------------------------------------ 
input string               i_sTimeSettings="Настройки времени торговли";         // ---
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
enum bExitClearing1
  {
   sfal1=0, //Не использовать
   stru1=1  //Использовать
  };
input   bExitClearing1     i_bExitClearing1=0;                                 // Закрывать позицию перед клирингом 1
input string               i_sClearing1StartTime="13:59";                              // Время начала клиринга 1
input string               i_sClearing1EndTime="14:05";                              // Время окончания клиринга 1
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
enum bExitClearing2
  {
   fal2=0, //Не использовать
   tru2=1  //Использовать
  };
input  bExitClearing2        i_bExitClearing2=0;                                 // Закрывать позицию перед клирингом 2
input string               i_sClearing2StartTime="18:44";                              // Время начала клиринга 2
input string               i_sClearing2EndTime="19:00";                              // Время окончания клиринга 2
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
enum bExitEndSession
  {
   fal3=0, //Не использовать
   tru3=1  //Использовать
  };
input bExitEndSession      i_bExitEndSession=0;                                 // Закрывать позицию перед окончанием сессии
input string               i_sEndSessionTime="23:40";                              // Время окончания сессии

// время начала и окончания клиринга и окочания сессии
datetime g_dtClearing1StartTime,g_dtClearing1EndTime;
datetime g_dtClearing2StartTime,g_dtClearing2EndTime;
datetime g_dtEndSessionTime,g_dtLastOrderOpen;
bool bTradeTime;

int TaimSession()
{
// время торгов
   g_dtClearing1StartTime=StringToTime(i_sClearing1StartTime)%86400;
   g_dtClearing1EndTime=StringToTime(i_sClearing1EndTime)%86400;

   g_dtClearing2StartTime=StringToTime(i_sClearing2StartTime)%86400;
   g_dtClearing2EndTime=StringToTime(i_sClearing2EndTime)%86400;

   g_dtEndSessionTime=StringToTime(i_sEndSessionTime)%86400;
   
     return(INIT_SUCCEEDED); 
   

 

int OnInit()

  {

    TaimSession();//  таймер клирингов  

   return(INIT_SUCCEEDED);

  }

ну и далее  

 void OnTick()

{

if(PositionSelect(_Symbol) == true) // если есть поза

{

// в неторговое время немедленно всё закрываем

if(bTradeTime == false)

{

ClosePosition(_Symbol);  // здесь рисуйте вашу функцию закрытия позы

return;

}

 }
void OnTimer()
  {
проверяем время клиринга
   datetime dtCurrentTime=TimeTradeServer();
   bTradeTime=true;
   if(i_bExitClearing1 && (dtCurrentTime%86400>=g_dtClearing1StartTime-30) && (dtCurrentTime%86400<=g_dtClearing1EndTime))
      bTradeTime=false;
   if(i_bExitClearing2 && (dtCurrentTime%86400>=g_dtClearing2StartTime-30) && (dtCurrentTime%86400<=g_dtClearing2EndTime))
      bTradeTime=false;
   if(i_bExitEndSession && (dtCurrentTime%86400>=g_dtEndSessionTime-30))
      bTradeTime=false;
   return;
  }

или   чтоб с экономить пространство в советнике  сохраняем в mqh 

а в советнике запрашиваем   

//+------------------------------------------------------------------+
//|                                                          567.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

#include "TaimSession.mqh"// таймер сесии

int OnInit()
  {
    TaimSession();//  таймер клирингов  
   return(INIT_SUCCEEDED);
  }
 void OnTick()
{
if(PositionSelect(_Symbol) == true) // если есть поза
{
// в неторговое время немедленно всё закрываем
if(bTradeTime == false)
{
ClosePosition(_Symbol);  // здесь рисуйте вашу функцию закрытия позы
return;
}
 }

 

 

Файлы:
 
Kirill Andreev:
Хочу написать код для робота своего, чтобы торговал допустим с 9-00 до 13-00 а потом начинал только с 15-00 и до 19-00, и чтоб этот параметр можно было менять. Кто чем может) 
пусть робот ориентируется на глоб.переменную из которой читает можно/нет торговать. И отдельно своять GUI-индикатор с "шл@#ми и блекджеком" который эту переменную выставляет. Иначе код советника может стать излишне развеститым и по большей части станет заниматься ненужными вещами.
 
Maxim Kuznetsov:
пусть робот ориентируется на глоб.переменную из которой читает можно/нет торговать. И отдельно своять GUI-индикатор с "шл@#ми и блекджеком" который эту переменную выставляет. Иначе код советника может стать излишне развеститым и по большей части станет заниматься ненужными вещами.

мой советник смотрит 3 параметра

1) расстояние от мувинга до цены открытия свечи

2) выше или ниже цена открытия сделки над мувингом ил под мувингом

3) обьем свечи 

 
Kirill Andreev:

мой советник смотрит 3 параметра

1) расстояние от мувинга до цены открытия свечи

2) выше или ниже цена открытия сделки над мувингом ил под мувингом

3) обьем свечи 

Alexander Antoshkin:

или   чтоб с экономить пространство в советнике  сохраняем в mqh 

а в советнике запрашиваем   

 

 

а как вы скинули код его в самое начало нужно вставить только и все?  я сам просто только знакомлюсь с mql - ом а советника прогер писал, когда уже написал я вспомнил что хотел дополнить в нем. Щас вот пытаюсь

 
Alexander Antoshkin:

или   чтоб с экономить пространство в советнике  сохраняем в mqh 

а в советнике запрашиваем   

 

 

выдает ошибки , как исправить не пойму, пробовал закрытые скобки ставить а выходит еще больше ошибок. 
Файлы:
qqqqq.jpg  225 kb
 
Kirill Andreev:

а как вы скинули код его в самое начало нужно вставить только и все?  я сам просто только знакомлюсь с mql - ом а советника прогер писал, когда уже написал я вспомнил что хотел дополнить в нем. Щас вот пытаюсь

если не использовать mqh

это копируем в верх  , где находятся на у вас настройки :

input string               i_sTimeSettings="Настройки времени торговли";         // ---
enum bExitClearing1
  {
   sfal1=0, //Не использовать
   stru1=1  //Использовать
  };
input   bExitClearing1     i_bExitClearing1=0;                                 // Закрывать позицию перед клирингом 1
input string               i_sClearing1StartTime="13:59";                              // Время начала клиринга 1
input string               i_sClearing1EndTime="14:05";                              // Время окончания клиринга 1
enum bExitClearing2
  {
   fal2=0, //Не использовать
   tru2=1  //Использовать
  };
input  bExitClearing2        i_bExitClearing2=0;                                 // Закрывать позицию перед клирингом 2
input string               i_sClearing2StartTime="18:44";                              // Время начала клиринга 2
input string               i_sClearing2EndTime="19:00";                              // Время окончания клиринга 2

enum bExitEndSession
  {
   fal3=0, //Не использовать
   tru3=1  //Использовать
  };
input bExitEndSession      i_bExitEndSession=0;                                 // Закрывать позицию перед окончанием сессии
input string               i_sEndSessionTime="23:40";                              // Время окончания сессии
// время начала и окончания клиринга и окочания сессии
datetime g_dtClearing1StartTime,g_dtClearing1EndTime;
datetime g_dtClearing2StartTime,g_dtClearing2EndTime;
datetime g_dtEndSessionTime,g_dtLastOrderOpen; 

bool bTradeTime; 

далее  

ищите  переменную  int OnInit() вашего советника

за скобкой пишем( копируем):

 // время торгов

   g_dtClearing1StartTime=StringToTime(i_sClearing1StartTime)%86400;
   g_dtClearing1EndTime=StringToTime(i_sClearing1EndTime)%86400;

   g_dtClearing2StartTime=StringToTime(i_sClearing2StartTime)%86400;
   g_dtClearing2EndTime=StringToTime(i_sClearing2EndTime)%86400;

   g_dtEndSessionTime=StringToTime(i_sEndSessionTime)%86400;

 далее идет ваш код.........

 return(INIT_SUCCEEDED); 

скобка закрывается

 } 

это мы инициализировали   время торгов

далее ищем вот такую загигулину 

 void OnTick()

также за скобкой пишем 

 

 { 

 if(PositionSelect(_Symbol) == true) // если есть поза

{

// в неторговое время немедленно всё закрываем

if(bTradeTime == false)

{

ClosePosition(_Symbol);  // здесь рисуйте вашу функцию закрытия позы 

return;

}

 }

 точно также    начиням  буковками  функцию

 void OnTimer()

  {
проверяем время клиринга
   datetime dtCurrentTime=TimeTradeServer();
   bTradeTime=true;
   if(i_bExitClearing1 && (dtCurrentTime%86400>=g_dtClearing1StartTime-30) && (dtCurrentTime%86400<=g_dtClearing1EndTime))
      bTradeTime=false;
   if(i_bExitClearing2 && (dtCurrentTime%86400>=g_dtClearing2StartTime-30) && (dtCurrentTime%86400<=g_dtClearing2EndTime))
      bTradeTime=false;
   if(i_bExitEndSession && (dtCurrentTime%86400>=g_dtEndSessionTime-30))
      bTradeTime=false;
   return;
  }
Все !
 
Alexander Antoshkin:
//или делаем так:
А зачем три одинаковых, но разных enum ?
 
Artyom Trishkin:
А зачем три одинаковых enum ?
Да так ,для разнообразия .......,можно и одну , можно и ни одной.)