Spécifications
Техническое задание много валютного автоматического советника “Пунтик”
Меняющие значение которое водитса в терминале
минимальный лот 0.01
максимальный лот 10000
максимальная просатка 30%
кредитное плечо 500
Take Profit 100
Советник “Puntik” находитса в C:\Program Files\MetaTrader 4 \experts. При запуске автоматического советника “Puntik” запускаетса блок “LoadNews.mqh” которая находится в папке в include C:\Program Files\MetaTrader 4\experts\include.
Блок “Load News.mqh” ежедневно скачивает страницу новостей с сайта forexfactory.com. Дату для скачивание берётся из текущей даты терминала и автоматически и формируетса запрос адрес страницы автоматически блоком “Load News.mqh”. При запуске советника первоначально скачивает страницу новостей на текущую дату, потом ежедневно обновляет новости в 00ч00мин на дату следующего дня. Скаченные страницы должны сохранятся на компьютере в папке My Document/Puntik.html При сохранение новой страницы скаченных новостей ,предыдущая страница новостей удаляется.
Блок ''Load News’’ производит анализ с текста скаченной страницы и берет следующие сведение:
Важность переменная “Importance '“
Дата – переменная “Data”
Время-переменная “Time”
Страну переменная-“ Сountry”
С начало программа ищет в сохраненном файле ''Puntik.html’’ важность новостей “High Impact Expected” . Программа по строчно проверяет каждую предостающию новость списке файле ''Puntik.html’’. Если не обнаружилась не обходимая важность то он анализирует следущию строку новостей в файле ‘’Puntik.html’’ на текущию дату.Если во всех строках новостей нету важности со статусом “High Impact Expected” . То программа ждет когда она скачает новый список новостей на текущей день в 00ч 00мин(Если переменная importance не равна “High Impact Expected” то переходим сравниванию время переменным значением ''OpenTime’’ с терминальным временем).
Если списке скаченой странице файле ''Puntik.html’’ обнаружилась необходимая важность новостей (а нас интересует только особо важные новости) то программа формирует переменная “Importance '“ и анализирует следующий параметр дата ”Data’’ из строк сохраненого файла ‘’Puntik.html’’. Дальнейший анализ строк новостей беретса та строка где программа нашла необходимвй нам параметр важность Программа автоматически сравнивает текущую дату которая в терминале с текстовым значением даты новостей в сохраненом файле ''Puntik.html’’
Так как на сайте время указана Нью Йорское. Блок ''LoadNews’’ автоматически переводит 12 часовой формат в 24 часовой и переводим время в терминальное время. Время берет из значений указанных в файле ''Puntik.html’’.
Из полученого переведенного время вычисляем 1 минуту и сохраняем это время как переменая ''OpenTime’’ (Например новость должна выйти в 19ч00,у нас время открытие сделки 18ч59)
Анализируем следующий строку –страну и переводит массив Сountry в переменное значение валютную пару которая она будет открыватса. Для следующих стран должна открыватса следующие валютные пары.
если указана страна ''AUD’’ то позиция будет открыватса на валютной паре ''USD/AUD’’
если указана страна ''EUR’’ то позиция будет открыватса на валютной паре ''EUR/USD''
если указана страна ''GBP'' то позиция будет открыватса на валютной паре ''GBP/USD’’
если указана страна ''CHF'' то позиция будет открыватса на валютной паре ''USD/CHF''
если указана страна ''CAD'' то позиция будет открыватса на валютной паре ''USD/CAD''
если указана страна ''NZD'' то позиция будет открыватса на валютной паре ''NZD/USD''
если указана страна ''JPY'' то позиция будет открыватса на валютной паре ''USD/JPY''
если указана страна ''USA'' то позиция будет открыватса на валютной паре ''EUR/USD''
Сравниваем время переменным значением ‘’OpenTime’’ с терминальным временем. Если время не совпало то продолжаем сравнивать, если время совпало то проверяем массив ‘’Сountr '' котором указана страна и согласно данным из этого массива открываетса на терминале указанная валютная пара и открываетса скрипт вычисление лота депозита
Вычисление лота от депозита с учетом кредитного плеча. Вычисление суммы залога и лот происходит скриптом Lot.mq4. Скрип находитса по следующему пути C:\Program Files\MetaTrader 4\experts\Script. Параметры для скрипта беретса из параметров настройки советника.
Мин лот- Min Lots
Мак лот- Nax Lots
Просадка- Drawdown
Маржа- Margin
Скрипт вычисляет из имеющего депозита лот с условием маржи по формуле что и SmartVolume.mq4 и заносит это значение а переменную Lots. Но таким образом чтоб просадка была не более 30% от депозита. Если просадка совпала с указанной величиной то советник больше не открывает ордера и сообщает об достигнутой просадке на экран монитора следующий текст “Советник достиг максимальной просадки”. Скрипт вычисляет минимальной и максимальной лот для данного брокера и подставляет эти значение в переменную Lot.
Алгоритм советника Puntik.mq4.
Берет данные Ask и Bid из котировки открытой валютной пары
Вычисление данный спрейд (Spreed)
Spreed= Ask –Bid
Заносим полученные данные Spreed в переменные ‘’ Spreed’’
Запускаютса 2 отложенных ордера Buy stop и Sell stop на величину спрейда
Buy stop= Ask+ Spreed*Lots
Sell stop=Bid-Spreed*Lots
Заносим полученные данные Buy stop в переменные “BS”
Заносим полученные данные Sell stop в переменные “SS”
Значение стоп лос вычисляется по следующему выражению
Stop loss Buy stop=Sell stop+Spreed=Bid
Stop loss Sell stop= Buy stop- Spreed=Ask
Заносим полученные данные Stop Loss Buy в переменные “LBS”
Заносим полученные данные Stop Loss Sell в переменные “LSS”
Значение тайк профит вычисляется по следующему выражению
Take Profit Buy stop=100+ Spreed
Take Profit Sell Stop=100- Spreed
Заносим полученные данные Take Profit Buy stop в переменные “TPBS”
Заносим полученные данные Take Profit Sell Stop в переменные “TPSS”
Вычисление возможного убытка
Loss Buy stop= Ask- Spreed
Loss Sell stop=Bid-Spreed
Заносим полученные данные Loss Buy stop в переменные “LBS”
Заносим полученные данные Loss Sell stop в переменные “LSS”
При достижение цены Открытие отложенного ордера открываитса трелинг стоп SmartTral с величиной Spreed и шагом 1 пункт и закрываютса противоположный открытый отложенный ордер. Остаетса только один ордер с ценой его открытия, установленным стоп лосом и тейк профитом. Если цена достикла от цены открытие ордера Buy stop или Sell stop при плюс или минус Spreed(зависимости от направление Buy или Sell ) открываитса ордер . Stop loss этого ордера равен Buy stop или Sell stop (зависимости от направление Buy или Sell ) открываитса ордер. Лот ордера равен лоту Открытие убыточному закрытого ордера .Тейк профит лота равен переменным “LBS”или “LSS” . Таким образом возращаем дополнительно свой убыток закрытием противоположным ордером Если рынок изменит свое направление и цена достигнит стоп лосса, то получаем убыток на величину спрейда. Тогда все ордера закрываютса и снова запускаетса советник
Если цена продолжает двигатса в нужном направление то срабатывает треллинг стоп и то стоп лос передвигаитса на величину Spreed, то есть на цену открытие ордера(точка безубыточности) и при каждом изменение на величину шага 1 пунк тянет за собой прибыль и стоп лос. Если цена изменилась и упала на величину шага то сработает стоп лос треллинг стопа и мы получим прибыль зависимое от движение валютной пары.Все ордера закрываютса и советник запускаетса снова при поступление новых сравнение новостей в блоке News.
Если цена продолжает идти в нужном направление и достигнит тейк профита то получаем прибыль на указаную в тейк профите величину. Все ордера закрываютса и советник запускаетса снова при поступление новых сравнение новостей в блоке News.
P.S. Так как многие брокеры и дилинговые центры час предлогают не фиксированный спрейд а плавающий. Возникла необходимость вычислять спрейд. Даже те брокеры и ДЦ которые предлогают фиксированый спрейд то на разных валютных парах он отличаитса.
Название файлов и их размещение в Metatrader 4
Puntik.mq4 в папке experts
Lot.mq4 в папке scripts
SmartTral.mq4 в папке scripts
DelLoss.mq4 в папке scripts
LoadNews.mhq в папке include