← К каталогу
Исходный код · ID 410

News Trading Pending Order EA

news trading pending order ea v1.6.mqh

Похожие материалы по тегам

#1.mtf_collider_h4_close_13_v18bar.mq4MQL4 / MetaTrader 4 · 1 общих теговea robofibo source v.11.2.mq4MQL4 / MetaTrader 4 · 1 общих теговsma crossover scalper ea for mt4.mq4MQL4 / MetaTrader 4 · 1 общих теговr15 pivot points expert advisor by @fundedmillionairess.mq4MQL4 / MetaTrader 4 · 1 общих теговnewstrader.mq5MQL5 / MetaTrader 5 · 1 общих теговmm3.0_flip_codepro_v3.1_with_cooldown@lifeindreamsworld.mq5MQL5 / MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Данный файл представляет собой библиотеку MQL4 для автоматического размещения отложенных ордеров в контексте торговли новостями. Код реализует размещение Buy Limit, Buy Stop, Sell Limit и Sell Stop ордеров на выбранных валютных парах с возможностью задания стоп-лосса, тейк-профита и времени истечения ордера.

Библиотека содержит функцию управления трейлинг-стопом для активных ордеров Buy и Sell, а также функцию удаления отложенных ордеров в заданном временном интервале. При инициализации советник проверяет выбранные валютные пары, настраивает трейлинг-стоп и очищает предыдущие отложенные ордера.

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

Настройки программы

НастройкаОписание
Lots Размер лота для размещаемых ордеров.
TakeProfit Уровень тейк-профита для ордеров (в пунктах). Если значение равно 0 или меньше, тейк-профит не устанавливается.
StopLoss Уровень стоп-лосса для ордеров (в пунктах). Если значение равно 0 или меньше, стоп-лосс не устанавливается.
StartDistance Расстояние от текущей цены до первого размещаемого ордера (в пунктах).
SpacingBetweenOrders Расстояние между последовательно размещаемыми ордерами одного типа (в пунктах).
TrailingStop Расстояние трейлинг-стопа (в пунктах). Если значение равно 0, трейлинг-стоп не активен.
NumberOfOrders Количество ордеров каждого типа, которые будут размещены.
ExpireMinutes Время жизни ордера в минутах. Если значение равно 0 или меньше, ордер не имеет ограничения по времени.
MagicNumber Магический номер для идентификации ордеров, размещённых данным советником.
Slippage Допустимое отклонение цены при размещении ордера (в пунктах).
Comments Текстовый комментарий, добавляемый к каждому размещённому ордеру.
NewsCurrency Выбранная валюта влияния новостей, определяющая, на каких парах размещать ордера.
MajorsMinors При включении советник работает как с мажорными, так и с минорными валютными парами.
ThisChart При включении советник размещает ордера на символе текущего графика.
BuyLimit Включает или отключает размещение ордеров Buy Limit.
SellLimit Включает или отключает размещение ордеров Sell Limit.
BuyStop Включает или отключает размещение ордеров Buy Stop.
SellStop Включает или отключает размещение ордеров Sell Stop.

Состав библиотеки

Классов: 0 · методов: 0 · конструкторов: 0 · деструкторов: 0 · отдельных функций: 6

Функции
Функция void ProcessOrders(string str)

Размещает отложенные ордера (Buy Limit, Buy Stop, Sell Limit, Sell Stop) на указанном валютном паре с настройками стоп-лосса, тейк-профита и истечения.

Функция void CheckCurrencyPairs()

Определяет, на каких валютных парах открывать сделки, исходя из выбранной валюты новостей, настройки работы с мажорами/минорами и текущего графика.

Функция void SetTrailingStop()

Управляет трейлинг-стопом для существующих ордеров Buy и Sell, перемещая стоп-лосс в нужную сторону при движении цены.

Функция void DeleteOrders()

Удаляет все отложенные ордера (не Buy/Sell) в течение заданного временного окна.

Функция int Max(int value1,int value2)

Возвращает большее из двух целочисленных значений.

Функция int OnInit()

Инициализирует советник при запуске: проверяет валютные пары, настраивает трейлинг-стоп и удаляет отложенные ордера.

Получить полный код

Поиск по коду файла

#property version   "1.6"
#property strict

#include <stderror.mqh>
#include <stdlib.mqh>

enum curr
  {
   EUR,
   GBP,
   USD,
   JPY
  };

input double   Lots                 =0.01;                  // Lot size
input double   TakeProfit           =0.0;                   // Take profit (Points)
input double   StopLoss             =5.0;                   // Stop loss (Points)
input double   StartDistance        =5.0;                   // Spacing from current price (Points)
input double   SpacingBetweenOrders =10.0;                  // Spacing between orders (Points)
input double   TrailingStop         =0.0;                   // Trailing Stop
input int      NumberOfOrders       =1;                     // Number of orders of each type
input int      ExpireMinutes        =5;                     // Order expiration time (Minutes)
input int      MagicNumber          =0;                     // Magic Number
input int      Slippage             =3;                     // Slippage
input string   Comments             ="";                    // Comment
input curr     NewsCurrency         =USD;                   // News impact currency
input bool     MajorsMinors         =True;                  // Open trade in majors and minors
input bool     ThisChart            =True;                  // Open trade in this chart symbol
input bool     BuyLimit             =True;                  // Open Buy Limit orders
input bool     SellLimit            =True;                  // Open Sell Limit orders
input bool     BuyStop              =True;                  // Open Buy Stop orders
input bool     SellStop             =True;                  // Open Sell Stop orders

void ProcessOrders(string str);
void CheckCurrencyPairs();
void SetTrailingStop();
void DeleteOrders();
int Max(int value1,int value2);

int OnInit()
  {
      // код доступен только после оплаты
   }

int Max(int value1,int value2)
  {
   if(value1>value2) return value1;
   else return value2;
  }

void DeleteOrders()
  {
   int i,Total,Type;
   bool Flag=True;
   datetime TimeEnd=TimeLocal()+5*60;

   while(Flag && TimeLocal()<=TimeEnd)
     {
      Flag=False;
      Total=OrdersTotal();
      for(i=0;i<Total;i++)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
           {
            Type=OrderType();
            if(Type!=OP_BUY && Type!=OP_SELL)
               if(OrderDelete(OrderTicket(),clrNONE)==false)
                  Flag=True;
           }
         else
            Flag=True;
        }
     }
   return;
  }

void CheckCurrencyPairs()
  {

   string Pairs[]={"EUR","GBP","USD","JPY"};
   string CurrencySymbol;
   bool Flag=True;
   int i;
   if(MajorsMinors)
     {
      for(i=0;i<4;i++)
        {
         if(i==NewsCurrency) continue;
         if(i<NewsCurrency)
            CurrencySymbol=StringConcatenate(Pairs[i],EnumToString(NewsCurrency));
         else if(i>NewsCurrency)
            CurrencySymbol=StringConcatenate(EnumToString(NewsCurrency),Pairs[i]);

         ProcessOrders(CurrencySymbol);
         if(CurrencySymbol==Symbol())
            Flag=False;
        }
     }
   if(ThisChart && Flag)
      ProcessOrders(Symbol());

   return;
  }

void SetTrailingStop()
  {

   int i,Total,Type;
   double OpenPrice,MarketPrice,TSPrice,Points,Spread;
   string CurrencySymbol;
   datetime TimeEnd=TimeLocal()+Max(ExpireMinutes,15)*60;

   Total=OrdersTotal();
   while(TimeLocal()<=TimeEnd && Total>0)
     {
      if(TrailingStop==0.0) continue;
      Total=OrdersTotal();
      for(i=0;i<Total;i++)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
           {

            Type=OrderType();

            if(Type==OP_BUY)
              {
               OpenPrice=OrderOpenPrice();
               CurrencySymbol=OrderSymbol();
               Points=MarketInfo(CurrencySymbol,MODE_POINT);
               Spread=MarketInfo(CurrencySymbol,MODE_SPREAD);
               MarketPrice=MarketInfo(CurrencySymbol,MODE_ASK);
               TSPrice=OpenPrice+MathMax(MathCeil(TrailingStop),Spread)*Points;

               if(MarketPrice>TSPrice && OrderStopLoss()<TSPrice)
                  if(OrderModify(OrderTicket(),OpenPrice,TSPrice,OrderTakeProfit(),OrderExpiration(),clrNONE)==False)
                     Alert(ErrorDescription(GetLastError()));
              }
            else if(Type==OP_SELL)
              {
               OpenPrice=OrderOpenPrice();
               CurrencySymbol=OrderSymbol();
               Points=MarketInfo(CurrencySymbol,MODE_POINT);
               Spread=Market

Показано первые 50% кода (символов: 6066)

Открыть по тарифу

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

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
606,60₽ ≈ $7.41