Нужна помощь по программированию.Вопрос для профи.

 
Написал собственный советник, решил приделать к нему чтобы он отключался за 15 мин до новости и включался через 15 мин после новости, так же в начале европейской и американской сессии. Данные о выходе новости думаю брать из индикатора который на графике показывает ближайшие новости. А вот дальше понятия не имею как сделать, перерыл уже много форумов, подобного не нашел. И так как у самого опыта в этом нету(не программист я) прошу помощи у профессионалов.
Хотя бы подскажите как это реализовать.
 

Это открытие перед новостью. Дальше сам фантазируй.

 

P.S. Тут мало кто делится. ***

//opens orders before news
#property strict

extern string emp3 = "/////////////////////////////////////////////////////////";
extern bool use_news = true;
extern int Seconds_to_news_to_open = 10;
extern bool call_news_from_EA = true;
string news_name1="mFFCal_Minutes0";

extern string Indicator_on_chart = "FFCal_mini_DailyFX_nmc";
extern bool     IncludeHigh             = true;
extern bool     IncludeMedium           = true;
extern bool     IncludeLow                      = false;


int Sig_p;



//////////////////////////////////////////////////////////////
int OnInit()
{  
if(use_news)
{
EventSetTimer(1);
if(call_news_from_EA)
{
iCustom(Symbol(),0,Indicator_on_chart,IncludeHigh,IncludeMedium,IncludeLow,IncludeSpeaks,IsEA_Call,OffsetHours,AllowWebUpdates,minutes_update,Alert1MinsBefore,Alert2MinsBefore,ReportAllPairs,SkipSameTimeNews
,EnableLogging,ShowEventsNum,ShowTextOneLine,TxtSize,TxtColorNews,TxtColorOldNews,TxtColorImpactHigh,TxtColorImpactMed,TxtColorImpactLow,NewsCorner,SaveXmlFiles,UseDailyFXData,0,0);
}
}

return(INIT_SUCCEEDED);
}

////////////////////////////////////////////////////////////////////////
void OnTimer()
{
datetime news1_time=datetime(StringSubstr(ObjectGetString(0,news_name1,OBJPROP_TEXT),0,20));

if(news1_time>TimeLocal() && news1_time-TimeLocal()<=Seconds_to_news_to_open) Sig_p=1;
else Sig_p=0;

}
Файлы:
 
пока сложновато для меня, у меня была идея так сделать 

extern int T = 15;  //время отступа от новости

int TimeNew, Выключить_сову, Включить_сову ;

TimeNew = iCustom(Новостной индюк)

Выключить_сову = TimeNew - T;
Включить_сову   =  TimeNew + T;

if( (Hour() > Выключить_сову && Hour() < Включить_сову) )
{
 можно торговать
}


сижу на работе, так что пока только так пример могу скинуть
работаспособен?

 
Ooops:
пока сложновато для меня, у меня была идея так сделать 

extern int T = 15;  //время отступа от новости

int TimeNew, Выключить_сову, Включить_сову ;

TimeNew = iCustom(Новостной индюк)

Выключить_сову = TimeNew - T;
Включить_сову   =  TimeNew + T;

if( (Hour() > Выключить_сову && Hour() < Включить_сову) )
{
 можно торговать
}
сижу на работе, так что пока только так пример могу скинуть
работаспособен?

Переключатель торговых режимов CTradeState в составе универсального торгового движка. Он же в виде отдельного модуля: https://www.mql5.com/ru/code/14335
TradeState - переключатель торгового режима эксперта в зависимости от времени
TradeState - переключатель торгового режима эксперта в зависимости от времени
  • голосов: 19
  • 2015.12.02
  • Vasiliy Sokolov
  • www.mql5.com
Класс ограничивает торговлю эксперта по времени. Обладает гибкими возможностями конфигурирования, позволяя задавать произвольное количество временных зон, а также разрешать торговлю только по определенным дням недели.
 
Классная вещь, спасибо, НО
 обидно что она вроде только на MT5, а я сову написал на мт4 и все индюки от совы на мт4, так что возможности перехода на мт5 нету(
да и она не полностью автоматическая получается, что не очень приятно 
 
Ooops:
Классная вещь, спасибо, НО
 обидно что она вроде только на MT5, а я сову написал на мт4 и все индюки от совы на мт4, так что возможности перехода на мт5 нету(
да и она не полностью автоматическая получается, что не очень приятно 

TradeState платформонезависимая вещица. Никто не мешает использовать его в MT4.

На счет второго не понял. Что значит "не полностью автоматическая"? TradeState не может знать, какие именно ограничения по времени нужны конкретно Вам, поэтому его приходится конфигурировать. Примерное конфигурирование может быть таким:

CTradeState State;
bool ConfigState(void)
{
   datetime data_news = GetNewsTime();          // Каким-то способобом узнаем дату выхода ближайшей новости
   datetime stop_trade = data_news - 15*60;     // Находим время за 15 минут до выхода новости
   datetime start_trade = data_news + 15*60;    // Находим время через 15 минут после выхода новости
   MqlDateTime dt;                              
   TimeToStruct(data_news, dt);                 // Находим день недели, когда должна выйти новость.
   State.SetTradeState(stop_trade, start_trade, // Ставим режим остановки торгов за 15 минут до и 15 минут после
                       dt.day_of_week,          // выхода новости, в этот день недели
                       TRADE_WAIT);             // Wait означает, что никаких действий не требуется производить.
}

Теперь, когда TradeState сконфигурирован, торгуем:

void OnTick()
{
   if(State.GetState(TimeCurrent()) == TRADE_WAIT)
      return;
   // Здесь исполняем торговую логику
}
 
Как я понял с TradeState надо будет посидеть некоторое время на выходных или в начале торгового дня и записать в него все необходимые периоды. Если не правильно понял то извиняюсь, еще зеленый в MQL. А если я прав то получается надо постоянно вписывать в него новые ограничения и терять на это время, что в принцепи можно сделать автоматическим.
Пока не придумаю как сделать полностью автоматическим, буду пользоваться TradeState, так что спасибо)
 
Ooops:
Как я понял с TradeState надо будет посидеть некоторое время на выходных или в начале торгового дня и записать в него все необходимые периоды. Если не правильно понял то извиняюсь, еще зеленый в MQL. А если я прав то получается надо постоянно вписывать в него новые ограничения и терять на это время, что в принцепи можно сделать автоматическим.
Пока не придумаю как сделать полностью автоматическим, буду пользоваться TradeState, так что спасибо)

Не правильно поняли. TradeState можно конфигурировать налету: получили дату новости - сконфигурировали TradeState. Конфигурирование можно добавить прямо в OnTick например:

void OnTick()
{
   datetime data_news = GetNewsTime();          // Каким-то способом узнаем дату выхода ближайшей новости
   if(State.GetState(data_news) != TRADE_WAIT)  // Если время остановки еще не занесено в TradeState - заносим его туда
      ConfigState(data_news, TRADE_WAIT)        // с помощью метода ConfigState
   if(State.State(CurrenTime) == TRADE_WAIT)    // Торговля приостановлена? - выходим и ничего не делаем
      return;
   else
   {
      // Здесь размещается торговая логика      // Торговля разрешена
      // эксперта.
   }
}
Причина обращения: