Смотри, как бесплатно скачать роботов
Ищи нас в Twitter!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Советники

Советник на новостях OpenNewsTral . - эксперт для MetaTrader 4

Просмотров:
5914
Рейтинг:
(8)
Опубликован:
2020.07.16 17:30
Обновлен:
2020.07.22 16:09
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Советник OpenNewsTral выставляет выбранные типы ордеров перед появлением новости на выбранном инструменте и использует динамический трейлингстоп и трейлингпрофит для первого рыночного ордера.

После преобразования первого отложенного или лимитного ордера  в рыночный, оставшиеся отложенные и лимитные ордера удаляются.

Для рыночного ордера используется динамический трейлингстоп. Stoploss модифицируется на расстояние, не больше значения Трейлингстоп от текущей цены Bid, для ордеров Buy, и от цены Ask, для ордеров Sell и уменьшает Трейлингстоп при приближении к ТейкПрофит по формуле линейного уменьшения в первом варианте и убыстряющегося по обратной связи во втором варианте.

Для TakeProfit так же используется трейлинг на постоянную величину. При приближении текущей цены к уровню TakeProfit, Тейкпрофит модифицируется на расстояние TralingProfit.

После появления следующей новости, проводится проверка, если ранее выставленные отложенные ордера не стали рыночными, то они удаляются. Если есть рыночный ордер, то проводится проверка на профитность, если текущий профит меньше 0,25 (одной четверти) Тейкпрофита, то ордер удаляется как не профитный. И ордера выставляются заново. Если текущий рыночный ордер профитный, то ордер остается в рынке, ордера не выставляются.

Если Трейлингстоп или Трейлингпрофит не нужны, выбираем соответствующие значения 0.

Если динамического приближения Трейлингстопа не нужно, выбираем значение Ksl = 0

Если хотите использовать Prots - процент от свободных средств, установите значение Lots равным ноль.

  Об открытии, закрытии ордеров ведется запись в файл QstrV.csv

Добавлен флаг для Алертов. При значении ложь выводятся алерты появления новости, открытия отложенных ордеров, появлении рыночного ордера, закрытии непрофитных ордеров, удалении отложенных ордеров, при появлении рыночного.

При значении истина выводятся алерты контроля состояния через сто секунд.

  Добавлено время окончания работы советника.

  Для тестера в функции ОнИнит выставляются 2 отложенных стоп ордера для проверки работоспособности.    

Внимание! Для работы с советником, необходимо добавить в доверенные URL:

http://ec.forexprostools.com/?columns=exc_currency,exc_importance&importance=1,2,3&calType=week&timeZone=15&lang=1

 

Ограничения выбора типов ордеров:

1.                       Можно выбрать только один тип рыночного ордера, либо Buy, либо Sell. И с выбранным рыночным ордером нельзя выбрать отложенные ордера.

2.                       Отложенные и лимитные ордера можно выбирать в любом сочетании.

Вводные параметры

  input  int AfterNewsStop=5; // Indent after News, minuts Отступ после новости, минуты

input  int BeforeNewsStop=5; // Indent before News, minuts  Отступ перед новостями, минуты

input bool NewsLight= false; // Enable light news

input bool NewsMedium=false; // Enable medium news

input bool NewsHard=true; // Enable hard news

input int  offset=3;     // Your Time Zone, GMT (for news)

input string NewsSymb=""; //Currency to display the news (empty - only the current currencies)  Валюта для отображения новостей (пусто - только текущие валюты)

input bool  DrawLines=true;       // Draw lines on the chart  Нарисуйте линии на графике

input bool  Next           = false;      // Draw only the future of news line  Нарисуйте только будущее новостной линии

input bool  Signal         = false;      // Signals on the upcoming news  Сигналы о предстоящих новостях

input bool flagAlert=True;             // Флаг выставления Алертов

 

Lots=0.01; //working lot

Prots=0.01; // Percentage of available funds

slippage =2;  //the level of acceptable slippage - requote in points

  TakeProfit=500; //take profit in points

StopLoss=200; //stop loss in points

Open_Level_St=100; //distance level from the price for stop orders

Open_Level_Lim=200; //distance level from the price for limit orders

Tral_Stop=200;                        // Dist. persecutions StopLoss, Tral_Stop

Tral_Profit=100;                        // Dist. moving away TakeProfit, Tral_Profit

Ksl = 0.2; // StopLoss reduction coefficient, when approaching TakeProfit by the formula for Buy

         // linear approximation SL = Bid - (Tral - 0.2(Bid - OrderOpenPrice()))

        // dynamic approximation SL = Bid - (SL - Ksl (Bid - OrderOpenPrice()))

extern datetime Close_Time_EA=D'03.01.2019 13:00:00'; //время окончания работы советника, должно быть больше текущего времени.

Open_Time=D'03.01.2019 13:00:00'; //the time of opening orders must be greater than the current time.

time_op = 600; // The lifetime of pending orders, in minutes, must be more than 11 minutes.

extern int Magic=5345; //the magic number of our orders

coming=linear; // the choice of a linear approximation or a dynamic Trailing stop

extern bool Open_Buy=false;  //Yes/No working with buy orders

extern bool Open_Sell=false; //Yes/No working with sell orders

extern bool Open_Buy_Limit=false;  //Yes/No working with buy limit orders

extern bool Open_Sell_Limit=false; //Yes/No working with sell limit orders

extern bool Open_Buy_Stop=True;  //Yes/No working with buy stop orders

extern bool Open_Sell_Stop=True; //Yes/No working with sell stop orders

  Ksl = 0.2; // Коэффициент уменьшения StopLoss, по мере приближения к TakeProfit

                        // по формуле для Бай SL = Bid - (Tral_Stop - Ksl (Bid - OrderOpenPrice())) 

 В первом варианте

и для Бай SL = Bid - (SL - Ksl (Bid - OrderOpenPrice()))  во втором варианте.

В первом  и втором советнике подробно рассказал об алгоритме работы. В этом не будем повторять одинаковые алгоритмы и рассмотрим те, которые отличаются от первого советника.

 Алгоритм работы.

 При инициализации.

Алгоритм не отличается от первого советника. Проверка на ошибки и ограничения по типам ордеров, подсчет ордеров с нашим магик на всякий случай.

 Начинаем работу на Тике. Функция OnTick

 Проверки на критическую ошибку, окончание работы не отличаются от первого советника.

Так же логика проверки появления рыночного ордера, трейлинга, удаления ордеров как в предыдущем советнике.

За основу слежения за новостями взят эксперт News_EA.

После считывания и появления сигнала появления новости за 5 минут (время по умолчанию, можно изменить) флаг появления новости CheckNews>0 и если флаг выставления ордеров Ложь, в функции CheckMoneyForTrade() проверяем корректность торговых параметров, присваиваем переменной Close_Time время удаления отложенных ордеров, не ставших рыночными и открываем ордера. Флаг открытия ордеров делаем Истина. Счетчик количества новостей и флаг наличия новости ChNw= 1.

Далее, если флаг наличия новости ChNw== 0 и флаг открытия ордеров Истина, т.е. Новости появилась, а ордера открыты надо посмотреть, что за ордера.

Если флаг типа ордера больше 1, т.е. ордера есть и они отложенные, удаляем их и флаг открытия ордера Ложь.

Если же флаг типа ордера 0 или 1, т.е. рыночный и текущий профит меньше одной четвертой Тейкпрофита, то закрываем этот ордер, как не профитный, и флаг открытия ордера Ложь.

На следующем тике флаг наличия новости CheckNews>0 не измениться, он жив 5 минут, советник откроет новые стоп ордера.

По истечении 5 минут флаг появления новости обнулится, CheckNews=0 и тогда  сработает else и мы присвоим флаг наличия новости ChNw = 0

В конце контрольный 100 секундный алерт, если конечно хотим этого.

И уходим на ожидание нового тика.

На этом работа функции OnTick заканчивается.

 Алгоритм работы функций.

 Функция подсчета ордеров с нашим Магик Countinit()

 Алгоритм не отличается от первого советника. Подсчет рыночных и отложенных ордеров по нашему инструменту и с нашим Магик.

 Функция подсчета рыночных ордеров Count()

 Нет такой функции здесь.

 Функция модификации рыночного ордера по условиям Трейлингстоп ModifyTral()

 Алгоритм не отличается от второго советника.

Функция обработки ошибок Fun_Error(int Error). 

Алгоритм одинаков с первым советником, по кодам ошибок определяем, исправляемые они или нет и далее исправляем или флаг работы делаем Ложь. 

Функция проверки минимальной дистанции New_Stop(double Parametr).  

Алгоритм одинаков с первым советником, сравниваем значение параметра с минимально допустимым значением, и если меньше, то присваиваем параметру минимально допустимое значение. 

Функция открытия ордеров OpenOrder().

Функция открытия ордеров начинает свою работу после наступления времени открытия ордеров.

Алгоритм одинаков с первым советником. Функция открывает выбранные типы ордеров. 

Функция удаления ордеров DeleteOrder().

Функция удаления ордеров вызывается сразу после появления рыночного ордера в функции отслеживания появления рыночного ордера по тикету CountMarketOrder().

Алгоритм одинаков с первым советником. Удаляем отложенные ордера по условию, что тикет рыночного ордера не равен тикету отложенного ордера и тикет отложенного ордера не равен нулю. 

Функция отслеживания рыночного ордера CountMarketOrder() 

 Алгоритм не отличается от второго советника.

Функция присваивания значений ордера SelectOrder(int Tickets). 

Алгоритм не отличается от второго советника.

Функция расчета и проверки корректности лота CheckMoneyForTrade()

 

Обновляем данные и получаем данные от MarketInfo – минимальный допустимый лот, количество свободных средств, стоимость одного лота, шаг изменения лота и если Лот введен то if(Lots > 0)          Lts =Lots;                                // Если заданы лоты,то

Иначе рассчитываем Лот в процентах от свободных средств.

Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;

Если наш лот меньше минимально допустимого лота, то увеличиваем его до минимально допустимого.

А вот если наш Лот умноженный на стоимость лота меньше свободных средств, то алерт о нехватке средств и флаг работы Ложь Work=false;

Примечание, если мы изначально укажем лот больше свободных средств, советник не будет его уменьшать, а прекратит работу.

И в конце Алерт с размером лота и количеством свободных средств.

  Функция закрытия ордеров CloseOr()

  Закрывает ордера по Тикету рыночного ордера. Так как в системе только один рыночный ордер и после его появления он выбран ордерселект, то проверки не проводим, просто удаляем, смотрим ответ, если получилось, то пишем в файл, выводим алерт, если не получилось выводим ошибку.

После закрытия ордера присваиваем флагу типа ордера значение Or=-1;

И обнуляем значения тикетов.

  Функция открытия файла FileTest()

  Файл открываем для чтения и записи.

  Функция подсчета текущего профита ProfBS(int Orr)

  В зависимости от типа ордера вычитаем из Аск текущую цену или из текущей цены вычитаем Бид.

  if(Orr==0)

     {

      ProfB = round((Ask-Price)*point);

      proft = ProfB;

     }

     if(Orr==1)

     {

      ProfS = round((Price - Bid) *point);

      proft = ProfS;

     }

   return (proft) ;

DeGrid DeGrid

Простой советник-помощник информирующий или закрывающий сетку

Click Trade Click Trade

Кликер. Торговля кликом мышки.

Стратегия Александра Элдера Стратегия Александра Элдера

Обратимся к классике жанра - торговой системе трёх экранов Александра Элдера и напишем по ней советник.

Fibo Bars 3 Fibo Bars 3

Трехслойный индикатор Fibo Bars 2 создателя Ивана Корнилова