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

mark harris script.mq4

Вы автор или правообладатель?

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

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

О программе

Данный советник для платформы MetaTrader 4 предназначен для автоматического размещения отложенных ордеров типа Buy Stop и Sell Stop на рынке. Он работает в цикле обработки событий, проверяя разрешение на торговлю и состояние эксперта. Советник управляет позицией через несколько уровней с нарастающим расстоянием и объёмом лотов.

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

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

#property show_inputs

extern bool

   UseBuyStop     = true,
   UseSellStop    = true;
extern int
   Slippage       = 6,
   TakeProfit     = 0,
   StopLoss       = 0;
extern int
   Levels         = 4,
   Initial_Level_Distance = 5,
   Level_Distance_Increment = 5;
extern double
   Lots           = 0.01,
   AddLots        = 0.01;

datetime TT;
int MagicNumber;        
int MyDigits;
double MyPoint;   
string TicketComment = "Mark Harris Script";  
bool Ready_Trade;   //INPUT EA NAME HERE              

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

   Comment("");

   return(0);
  }

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

int subTotalTrade()
{
   int
      cnt, 
      total = 0;

   for(cnt=0;cnt<OrdersTotal();cnt++)
   {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() &&
         OrderMagicNumber()==MagicNumber) total++;
   }
   return(total);
}

void PlaceBuyPendingOrders(int levels, int level_distance,int increment, int price_distance,double addlots)
{
   double OP = Bid+(price_distance*MyPoint);
   int LV = price_distance;
   double AL = addlots;
   double Lotz = Lots;
   for(int cnt=1;cnt<=levels;cnt++)
   {
       int ticket = 0;
       LV = LV+increment;

       ticket = subOpenPendingOrder(OP_BUYSTOP, OP, Lotz, TakeProfit,StopLoss);
       Lotz = Lotz+AL;
       if(ticket<0)cnt=cnt-1;     
       if(ticket>0)OP = OP+(LV*MyPoint);
   }
}
void PlaceSellPendingOrders(int levels, int level_distance, int increment , int price_distance,double addlots)
{
   double OP = Bid-(price_distance*MyPoint);
   int LV = price_distance;
   double AL = addlots;
   double Lotz = Lots;
   for(int cnt=1;cnt<=levels;cnt++)
   {
       int ticket = 0;
       LV = LV+increment;

       ticket = subOpenPendingOrder(OP_SELLSTOP, OP, Lotz, TakeProfit , StopLoss);
       Lotz = Lotz+AL;
       if(ticket<0)cnt=cnt-1;     
       if(ticket>0)OP = OP-(LV*MyPoint);
   }
}
int subOpenPendingOrder(int type, double OpenPrice,double Lots ,double takeprofit,double stoploss)
{  
   int
         ticket      = 0,
         err         = 0,
         c           = 0;

    double         
         aStopLoss   = 0,
         aTakeProfit = 0,
         aOpenPrice  = 0,
         bStopLoss   = 0,

         bTakeProfit = 0;
   OpenPrice = NormalizeDouble(OpenPrice,Digits);

   if(takeprofit!=0)
   {
      aTakeProfit = NormalizeDouble(OpenPrice+takeprofit*MyPoint,Digits);
      bTakeProfit = NormalizeDouble(OpenPrice-takeprofit*MyPoint,Digits);
   }
   if(stoploss!=0)
   {
      aStopLoss   = NormalizeDouble(OpenPrice-stoploss*MyPoint,Digits);
      bStopLoss   = NormalizeDouble(OpenPrice+stoploss*MyPoint,Digits);
   }

   if(type==OP_BUYSTOP)
   {
      for(c=0;c<10;c++)
      {
         ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,OpenPrice,6,aStopLoss,aTakeProfit,TicketComment,MagicNumber,0,CLR_NONE);
         err=GetLastError();
         if(err==0)
         { 
            if(ticket>0) break;
         }
         else
         {
            Print("ERROR "+err+": "+error(err));
            if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
            {

               continue;
            }
            else //normal error
            {
               if(ticket>0) break;
            }  

         }
         if(err==148)return(0);
      }   
   }
   if(type==OP_SELLSTOP)
   {   
      for(c=0;c<10;c++)
      {
         ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,OpenPrice,6,bStopLoss,bTakeProfit,TicketComment,MagicNumber,0,CLR_NONE);
         err=GetLastError();
         if(err==0)
         { 
            if(ticket>0) break;
         }
         else
         {
            Print("ERROR "+err+": "+error(err));
            if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
            {

               continue;
            }
            else //normal error
            {
               if(ticket>0) break;
            }  
         }
         if(err==148)return(0);
      }   
   }
   if(type==OP_BUYLIMIT)
   {
      for(c=0;c<10;c++)
      {
         ticket=OrderSend(Symbol(),OP_BUYLIMIT,Lots,OpenPrice,6,aStopLoss,aTakeProfit,TicketComment,MagicNumber,0,Green);
         err=GetLastError();
         if(err==0)
         { 
            if(ticket>0) break;
         }
         else
         {
            Print("ERROR "+err+": "+error(err));
            if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
            {
               Sleep(5000);
               continue;
            }
            else //normal error
            {
               if(ticket>0) break;
            }  
         }
      }   
   }
   if(type==OP_SELLLIMIT)
   {   
      for(c=0;c<10;c++)
      {
         ticket=OrderSend(Symbol(),OP_SELLLIMIT,Lots,OpenPrice,6,bStopLoss,bTakeProfit,TicketComment,MagicNumber,0,Red);
         err=GetLastError();
         if(err==0)
         { 
            if(ticket>0) break;
         }
         else
         {
            Print("ERROR "+err+": "+error(err));
            if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
            {
               Sleep(5000);
               continue;
            }
            else //normal error
            {
               if(ticket>0) break;
            }  
         }
      }   
   }  
   return(ticket);  
}
string error(int ai_0) 
{
   switch (ai_0) {
   case 0:
      return ("No error returned.");
   case 1:
      return ("No error returned, but the result is unknown. ");
   case 2:
      return ("Common error. ");
   case 3:
      return ("Invalid trade parameters. ");
   case 4:
      return ("Trade server is busy. ");
   case 5:
      return ("Old version of the client terminal. ");
   case 6:
      return ("No connection with trade server. ");
   case 7:
      return ("Not enough rights. ");
   case 8:
      return ("Too frequent requests.");
   case 9:
      return ("Malfunctional trade operation. ");
   case 64:
      return ("Account disabled. ");
   case 65:
      return ("Invalid account. ");
   

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

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

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

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

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

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

Стоимость полного кода
966,10₽ ≈ $11.81