← Назад к списку файлов

news trading pending order ea v1.6.mq4

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

#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 и нажмите кнопку, чтобы перейти к оплате.