Нужна помощь по программированию.Вопрос для профи.
Это открытие перед новостью. Дальше сам фантазируй.
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() < Включить_сову) )
{
можно торговать
}
сижу на работе, так что пока только так пример могу скинуть
работаспособен?
пока сложновато для меня, у меня была идея так сделать
extern int T = 15; //время отступа от новости
int TimeNew, Выключить_сову, Включить_сову ;
TimeNew = iCustom(Новостной индюк)
Выключить_сову = TimeNew - T;
Включить_сову = TimeNew + T;
if( (Hour() > Выключить_сову && Hour() < Включить_сову) )
{
можно торговать
}
сижу на работе, так что пока только так пример могу скинуть
работаспособен?
- голосов: 19
- 2015.12.02
- Vasiliy Sokolov
- www.mql5.com
обидно что она вроде только на MT5, а я сову написал на мт4 и все индюки от совы на мт4, так что возможности перехода на мт5 нету(
да и она не полностью автоматическая получается, что не очень приятно
Классная вещь, спасибо, НО
обидно что она вроде только на 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, так что спасибо)
Как я понял с 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 { // Здесь размещается торговая логика // Торговля разрешена // эксперта. } }
Хотя бы подскажите как это реализовать.