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

mission impossible power two open version 2.mq4

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

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

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

О программе

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

Советник поддерживает работу с несколькими позициями одновременно, используя сеточную логику для наращивания объёма при движении цены. Каждая позиция идентифицируется магическим номером, что позволяет фильтровать ордера именно этого советника.

Для управления рисками применяются уровни стоп-лосса и тейк-профита, настраиваемые пользователем. Размер лота рассчитывается с учётом ограничений брокера и заданного максимального значения. Перед открытием каждой сделки проверяется доступный маржинальный капитал и допустимое количество ордеров.

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

НастройкаОписание
Comment (comment) Комментарий — Текстовая строка, добавляемая к ордерам для идентификации.
Slippage (slippage) Проскальзывание — Максимально допустимое отклонение цены при открытии ордера.
Magic Number (MagicNumber) Магический номер — Идентификатор ордеров советника для их фильтрации.
Stop Loss (SL) Стоп-лосс — Уровень стоп-лосса в пунктах для управления рисками.
Take Profit (first position) (TP1) Тейк-профит первой позиции — Уровень фиксации прибыли для первой позиции в направлении.
Take Profit (next position) (TP) Тейк-профит последующих позиций — Уровень фиксации прибыли для дополнительных позиций.
Lots (Lots) Лоты — Начальный размер лота для открытия позиции.
Max Lots (MaxLots) Максимальный лот — Ограничение максимального размера лота.
Power (power) Множитель лота — Коэффициент увеличения лота при добавлении позиций.
Max PipsStep for grid (PipsStep) Максимальный шаг в пунктах — Допустимое отклонение цены в пунктах для открытия следующей позиции.
MaxTrades (MaxTrades) Максимум сделок — Максимальное количество одновременных позиций в одном направлении.
Получить полный код

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

#property version   "1.00"
#property strict
input string          comment="Mission Impossible Power Two Open Version";//Comment
input int             slippage=1;//Slippage
input int             MagicNumber=1;//Magic Number
input ushort          SL=400;//Stop Loss
input ushort          TP1=15;//Take Profit (first position)
extern ushort         TP=7;//Take Profit (next position)
extern double         Lots=0.01;//Lots
extern double         MaxLots=2;//Max Lots
input double          power=13.0;//Power
extern ushort         PipsStep=21;//Max PipsStep for grid
extern int            MaxTrades=16;//MaxTrades
int Tick;
double gpoint_320;
string Error;

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

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

void Buy_main(string ot_456)
  {
   if(Volume[0]>1)
      return;
   double lots;
   if(OrderAllowed())
      if((cou_tra_45(ot_456)==0 && Signal_1()==1)||(cou_tra_45(ot_456)>0 && nx_77(ot_456)))
        {
         lots=CheckVolumeValue(ne_234(ot_456));
         if(CheckMoney(lots,OP_BUY))
           {
            Tick=0;
            while(Tick<1)
              {
               while(IsTradeContextBusy())
                  Sleep(100);
               RefreshRates();
               Tick=OrderSend(Symbol(),OP_BUY,lots,nor_1(Ask),slippage,0,0,comment,MagicNumber,0,Blue);
               if(Tick<1)
                 {
                  Print("Error: ",GetLastError());
                  Sleep(1000);
                  RefreshRates();
                 }
               else
                 {
                  modify(ot_456);
                 }
              }
           }
        }
  }

void Sell_main(string ot_456)
  {
   if(Volume[0]>1)
      return;
   double lots;
   if(OrderAllowed())
      if((cou_tra_45(ot_456)==0 && Signal_1()==2)||(cou_tra_45(ot_456)>0 && nx_77(ot_456)))
        {
         lots=CheckVolumeValue(ne_234(ot_456));
         if(CheckMoney(lots,OP_SELL))
           {
            Tick=0;
            while(Tick<1)
              {
               while(IsTradeContextBusy())
                  Sleep(100);
               RefreshRates();
               Tick=OrderSend(Symbol(),OP_SELL,lots,nor_1(Bid),slippage,0,0,comment,MagicNumber,0,Red);
               if(Tick<1)
                 {
                  Print("Error: ",GetLastError());
                  Sleep(1000);
                  RefreshRates();
                 }
               else
                 {
                  modify(ot_456);
                 }
              }
           }
        }
  }

void modify(string ot_456)
  {
   int order=cou_tra_45(ot_456);
   int tr_45;
   double TP_all,SL_all,price;
   double avp_2=0;
   bool d;
   if(order>1){
      avp_2=avp_next(ot_456);
      }
   for(tr_45=OrdersTotal()-1; tr_45>=0; tr_45--)
     {
      if(!OrderSelect(tr_45,SELECT_BY_POS,MODE_TRADES))
         Print("Error in OrderSelect Takeprofit==true. Error code=",GetLastError());
      if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber)
         continue;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
        {
         if(ot_456=="buy")
           {
            if(OrderType()==OP_BUY)
              {
               if(order>1)
                 {
                  TP_all=nor_1(avp_2+(TP*gpoint_320));
                  SL_all=nor_1(avp_2-(SL*gpoint_320));
                  price=avp_2;
                 }
               else
                 {
                  TP_all=nor_1(OrderOpenPrice()+(TP1*gpoint_320));
                  SL_all=nor_1(OrderOpenPrice()-(SL*gpoint_320));
                  price=OrderOpenPrice();
                 }
               if(check_sl_tp(OP_BUY,SL_all,TP_all))
                  if(OrderTakeProfit()!=TP_all)
                     d=OrderModify(OrderTicket(),nor_1(price),SL_all,TP_all,0,Yellow);
               if(d)
                  Print("All TP for buy successfully");
               else
                  Print("Error in OrderModify buy Average + TP. Error code=",GetLastError());
              }
           }
         if(ot_456=="sell")
           {
            if(OrderType()==OP_SELL)
              {
               if(order>1)
                 {
                  TP_all=nor_1(avp_2-(TP*gpoint_320));
                  SL_all=nor_1(avp_2+(SL*gpoint_320));
                 }
               else
                 {
                  TP_all=nor_1(OrderOpenPrice()-(TP1*gpoint_320));
                  SL_all=nor_1(OrderOpenPrice()+(SL*gpoint_320));
                  price=OrderOpenPrice();
                 }
               if(check_sl_tp(OP_SELL,SL_all,TP_all))
                  if(OrderTakeProfit()!=TP_all)
                     d=OrderModify(OrderTicket(),nor_1(price),SL_all,TP_all,0,Yellow);
               if(d)
                  Print("All TP for sell successfully");
               else
                  Print("Error in OrderModify sell Average - TP. Error code=",GetLastError());
              }
           }
        }
     }
  }

double avp_next(string ot_456)
  {
   double
   Count=0,
   avp_2=0;
   int tr_45;
   for(tr_45=OrdersTotal()-1; tr_45>=0; tr_45--)
     {
      if(OrderSelect(tr_45,SELECT_BY_POS,MODE_TRADES)==False)
         Print("Error in OrderSelect avp_2. Error code=",GetLastError());
      if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber)
         continue;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
        {
         if(ot_456=="buy")
           {
            if(OrderType()==OP_BUY)
              {
               avp_2=avp_2+OrderOpenPrice()*OrderLots();
               Count=Count+OrderLots();
              }
           }
         if(ot_456=="sell")
           {
            if(OrderType()==OP_SELL)
              {
               avp_2=avp_2+OrderOpenPrice()*OrderLots();
               Count=Count+OrderLots();
              }
           }
        }
     }
   if(avp_2>0 && Count>0)
      avp_2=NormalizeDouble(avp_2/Count,Digits);
   return(avp_2);
  }

int Lots_Digits()
  {
   double Lotstep=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);
   int    LotsDigits=(int)MathCeil(MathAbs(MathLog(Lotste

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

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

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

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

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

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

Стоимость полного кода
816,50₽ ≈ $9.98