Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 9330
- Рейтинг:
- Опубликован:
- 2008.12.04 08:56
- Обновлен:
- 2016.11.22 07:33
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Описание:
Идея была разработать эксперта, который торгует по всем новостям механически, без какого-либо ручного исполнения. Этот советник не может быть протестирован на истории, только на будущем, так как он запрограммирован на ожидание выхода новостей, он принимает торговые решения по разнице между (актуальной и прогнозной) или (актуальной и предыдущей) информацией. Советник очень прост, он определяет какое событие по календарю DAILYFX является следующим, потом он принимает торговые решения. Эксперт может быть использован на любом графике, на любом таймфрейме, потому как он использует графики только для исполнения ордеров и поддерживает любые валютные пары. Ниже приведены подробности.
ПРИМЕЧАНИЕ: Чтобы эксперт начал работать, Вам необходимо строго следовать инструкциям по установке основных файлов, расположенным по адресу https://www.mql5.com/ru/articles/1502. Данный эксперт разработан на основе кода индикатора, расположенного по той же ссылке. Сначала вы должны следовать инструкциям, расположенным по ссылке, и установить следующие файлы: getright_setup.zip, Time.mq4, Time.mqh. Убедитесь, что Вы изменили директорию для скачивания файла в "get right", установленную по умолчанию, в которую будет скачен календарь, иначе советник не будет работать. Убедитесь, что Вы прочитали статью медленно и следовали каждому указанию. Вы можете прочитать всё об этих файлах, их функциях, эта статья очень полезна в плане изложения того, что происходит для того, чтобы новостные события отображались в окне графика, после чего советник будет работать без каких-либо проблем. Исходный код индикатора был пререработан для того, чтобы он стал советником, который будет торговать по новостям, а не просто их показывать. Когда Вы установите вышеуказанные файлы по ссылке, также указанной выше, Вы можете скачать этот советник вместе с "str2double.dll", и тогда советник начнет торговать по новосятм, выпускаемым на DAILYFX. Файл "str2double.dll" должен быть помещен в корневую директорию, т.е. в C:\Program Files\Interbank FX Trader 4\
За торговлей стоит следующая логика: существует два типа событий, которые происходят при торговле по новостям. Во первых, Вы имеете актуальную экономическую информацию, которая сравнивается с прогнозной. Во вторых, Вы имеете актуальную экономическую информацию, которая сравнивается с предыдущей информацией. Разница между информацией может влиять на направление цены валюты, а процентная разница между экономической информацией дает высокую вероятность того, что выход новостей повлечет реакцию рынка в определенном направлении. Для получения более подробной информации можно посетить сайт www.pfxglobal.com. В таком случае, при большой процентной разнице между экономическими данными советник исполняет ордера с бОльшими лотами. Эти размеры лотов указываются при наложении эксперта на график с помощью перменных: lot1,lot2,lot3,lot4,lot5,lot6......lot18. Конкретный размер лота будет выбираться советником в зависимости от процентной разницы между экономическими данными.
Советник Fundamental Trader настроен на соотношении риска к прибыли 1:3, при первом наложении советника на график значения risk=20, reward=3 по умолчанию. Risk - это значения StopLoss в пипсах, а Reward - это множитель, таким образом при риске равном 20 пипсов, вы ожидаете получить 60 пипсов профита. Эти значения могут быть изменены при наложении эксперта на график.
Новости не выпускаются в точно запланированнное время их выпуска, для советника необходимо задать интервал времени для ожидания выпуска новостей. Следующий отрезок кода определяет время, которое советник будет ждать выхода новостей. После того как время ожидания новостей истекло, советник переходит к следующему новостному событию. xTime - это перменная, которая может быть изменена при первом наложении эксперта на график. Значение по умолчанию - 15 минут.
if(Date>(TimeCurrent()-(xTime*60)))
Советник Fundamental Trader торгует на всех валютах, поддерживающихся на dailyfx.com/calendar. Ниже приведен отрезок кода, где указывается какой валютой торговать в зависимости от страны, для которой выходят новости. Список валют таков: EUR, USD, JPY, GBP, CHF, AUD, CAD, NZD.
string ordercurrency=""; if(stCurrency=="EUR" ){ordercurrency="EURUSD";} //торговля по eurusd if(stCurrency=="USD" ){ordercurrency="EURUSD";} //торговля по eurusd if(stCurrency=="JPY" ){ordercurrency="USDJPY";} //торговля по usdjpy if(stCurrency=="GBP" ){ordercurrency="GBPUSD";} //торговля по usdgbp if(stCurrency=="CHF" ){ordercurrency="USDCHF";} //торговля по usdchf if(stCurrency=="AUD" ){ordercurrency="AUDUSD";} //торговля по audusd if(stCurrency=="CAD" ){ordercurrency="USDCAD";} //торговля по usdcad if(stCurrency=="NZD" ){ordercurrency="NZDUSD";} //торговля по nzdusd
Далее приводится разъяснение как советник принимает торговые решения: когда советник ожидает экномические данные, когда советнику доступна информация о прогнозных экономических показателях. Когда прогнозная информация недоступна, советник использует предыдущие данные для совершения сделки. Следующий отрезок кода показывает, как исполняется сделка на основе актуальной и прогнозной информации. Такой же алгоритм используется, когда советник принимает решения на основе предыдущих и актульных данных.
if(StringToDouble(stActual)>StringToDouble(stForecast)) { Alert("Stronger(actual vs forecast): "+stCurrency+" "+"Time: "+stTime); int total=OrdersTotal(); for(int cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); //check opened orders if(OrderComment()==stCurrency+stActual+stForecast+"BUY"|| OrderComment()==stCurrency+stActual+stForecast+"SELL") { FileClose(file);Comment("\n"+"Live Trade Open"+OrderTicket());return(0); } } int historytotal=OrdersHistoryTotal(); for(cnt=0;cnt<historytotal;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY); //check opened orders if(OrderComment()==stCurrency+stActual+stForecast+"BUY"|| OrderComment()==stCurrency+stActual+stForecast+"SELL"){ FileClose(file);Comment("\n"+"Trade Executed"+OrderTicket());return(0); } } if(stCurrency=="EUR"||stCurrency=="GBP"||stCurrency=="AUD") { double ask=MarketInfo(ordercurrency,MODE_ASK); double point1=MarketInfo(ordercurrency,MODE_POINT); OrderSend(ordercurrency,OP_BUY,lot_p,ask,3,ask-(risk*point1), ask+reward*risk*point1),stCurrency+stActual+stForecast+"BUY");} if(stCurrency=="CHF"||stCurrency=="CAD"||stCurrency=="NZD"||stCurrency=="JPY"||stCurrency=="USD") { double bid=MarketInfo(ordercurrency,MODE_BID); double point2=MarketInfo(ordercurrency,MODE_POINT); OrderSend(ordercurrency,OP_SELL,lot_p,bid,3,bid+risk*point2), bid-(reward*risk*point2),stCurrency+stActual+stForecast+"SELL");}
Во первых, следует отметить, что советник может установить только один ордер на одной новости, поэтому он сначала проверяет нет ли уже открытого ордера, и если таковой есть, он выходит. Во вторых, советник определяет были ли ордер до этого открыт и закрыт, и если таковой присутствовал (с прибылью или потерей), советник выходит. Эти две проверки позволяют быть уверенным, что не произойдет дублирования ордеров, что позволит советнику открывать только одну сделку на каждой новости. Далее он определяет для какой страны выпущены данные и открывает позицию с помощью определенной функции ordersend, когда экономические показатели выходят. Вышуказанный код предназначен для: когда актуальные показатели выше прогнозных, используется аналогичный код как, когда актуальные показатели меньше прогнозных, единственная разница - это направление торговли. Такой же алгоритм применяется, когда предыдущие показатели сравниваются с актуальными, в случае если нет прогнозных данных.
Эксперт сравнивает (акутальные и прогнозные данные) или (актуальные и предыдущие данные), процентная разница между данными в новостях влияет на количество лотов в сделках, открываемых советником. Следующий отрезок кода показывает как советник определяет процентную разницу, указывает размер лота. Размер лота - это внешнее число, которое может быть изменено для того, чтобы поддерживаться любым брокером. Вы устанавливаете размер лотов, когда в первый раз накладываете советника на график. Значения по умлочанию: 0.01, 0.02, 0.03...0.17.
double percent_d_AF=MathAbs((MathAbs(StringToDouble(stActual)-StringToDouble(stForecast)) /StringToDouble(stForecast))*100);//процентная разница между актуальными и прогнозными double lot_p=0; if((percent_d_AF>0 && percent_d_AF<=3)){lot_p=lot1;}//0.1 лота if((percent_d_AF>3 && percent_d_AF<=6)){lot_p=lot2;}//0.2 лота if((percent_d_AF>6 && percent_d_AF<=9)){lot_p=lot3;}//0.3 лота if((percent_d_AF>9 && percent_d_AF<=12)){lot_p=lot4;}//0.4 лота if((percent_d_AF>12 && percent_d_AF<=15)){lot_p=lot5;}//0.5 лота if((percent_d_AF>15 && percent_d_AF<=18)){lot_p=lot6;}//0.6 лота if((percent_d_AF>18 && percent_d_AF<=21)){lot_p=lot7;}//0.7 лота if((percent_d_AF>21 && percent_d_AF<=24)){lot_p=lot8;}//0.8 лота if((percent_d_AF>24 && percent_d_AF<=27)){lot_p=lot9;}//0.9 лота if((percent_d_AF>27 && percent_d_AF<=30)){lot_p=lot10;}//1 лот if((percent_d_AF>30 && percent_d_AF<=40)){lot_p=lot11;}//2 лота if((percent_d_AF>40 && percent_d_AF<=50)){lot_p=lot12;}//3 лота if((percent_d_AF>50 && percent_d_AF<=60)){lot_p=lot13;}//4 лота if((percent_d_AF>60 && percent_d_AF<=70)){lot_p=lot14;}//5 лотов if((percent_d_AF>70 && percent_d_AF<=80)){lot_p=lot15;}//6 лотов if((percent_d_AF>80 && percent_d_AF<=90)){lot_p=lot16;}//7 лотов if((percent_d_AF>90 && percent_d_AF<=100)){lot_p=lot17;}//8 лотов if((percent_d_AF>100)) {lot_p=lot18;}//8 лотов
Screen Shot of Fundamental News Data
Когда при первом наложении эксперта на график Вы указываете значения "xTime", "risk", "reward" и указываете минимальный и максимальный размер лота, убедитесь, что Вы покинули директорию в которую устанавливается в "get right" по умолчанию. Советник скачает календарь dialyfx и определит, какое новостное событие будет следующим. Он покажет следующую информацию о новостном событии: Дата, Время, Часовой пояс, Валюта, Описание, Важность, Актуальные, Прогнозные и Предыдущие, как показано на рисунке выше. На картинке, приведенной выше, советник находится в ожидании новости, которая выйдет в 2:00, и, как видите, известны предыдущие экономические данные (73,5%), и советник ждет выхода актуальных данных. Когда экономические показатели выйдут, эксперт сравнит их и примет торговое решение, основываясь на разнице предыдущих и актуальных данных. Всё это пока Вы наблюдаете. И наконец, советник скачивает информацию календаря минуту в минуту, пока не выйдет экономическая информация.
Обзор: Данный советник торгует на каждом экономическом событии выпущенном на dailyfx.com/calendar в формате CSV. Календарь скачивается программой "get right". Советник скачивает календарь каждую минуту. Советник разбирает календарь и определяет какая новость будет следующей, потом 15 минут ждет выхода новости. Как только информация выходит, он определяет что сравнивать - (актуальную и прогнозную) или (актуальную и предыдущую) информацию. Советник определяет размер лота, валюту, по которой провести сделку, а также направление сделки на основе события экономического календаря. Эта информация может быть найдена на графике с запущенным экспертом. Ордер исполняется с соотношением риска к выигрышу 1:3. Советник настроен на то, чтобы исполнять только один ордер за одну новость.
Не забудьте следовать всем инструкциям по ссылке https://www.mql5.com/ru/articles/1502, чтобы календарь был корректно скачан и чтобы время Вашего брокера было настроено правильно для обработки новостей. Информация с dailyfx.com/calendar - GMT.
Удачи в торговле или в допуске советника тоговать за Вас!!!
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/en/code/8491
![MF_BreakDown_Flat](https://c.mql5.com/i/code/indicator.png)
Индикатор утреннего флета.
![The MasterMind 3 (Вариант для чемпионата)](https://c.mql5.com/i/code/expert.png)
Из-за "якобы" 24 тысяч ошибок в журнале советник не попал на чемпионат. Может в следующем году, друзья :) До сих пор ошибок найдено не было. "The Grid" (массивный хеждер) уже на подходе...