devlad1990

 
Уровень 8

  Торгую в компаниях:


Группа "Стол заказов MQL"

Рейтинг 2088



РЕКОМЕНДУЮ



переделка совы

здравствуйте
а можно его же но для мт5?

zakaz.opentraders.ru/54493.html
  • 0
  • Просмотров: 1870
  • 24 мая 2020, 12:53
  • devlad1990
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Прикрутить Алерт к Fractal Level Xrust (MT5)
Следующая запись в группе  
Советник 3МА
24 мая 2020
25 мая 2020

Комментарии (4)

+
0
на 2-е
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 24 мая 2020, 16:29
+
0
спасибо, я вас обожаю.
avatar

  8  devlad1990 Автор Сообщений: 8

  • 24 мая 2020, 18:48
+
0
переписал часть функций:


//+------------------------------------------------------------------+
//|                                                      MALimit.mq5 |
//|                                              Copyright 2020, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"

#include <Trade\Trade.mqh>   // Подключаем торговый класс CTrade

//--- Inputs
input double Lots       = 0.1;      // лот
input double KLot       = 1;        // умножение лота
input double MaxLot     = 5;        // максимальный лот
input int StopLoss      = 2000;     // лось
input int TakeProfit    = 50;       // язь
input int BULevel       = 0;        // уровень БУ
input int BUPoint       = 30;       // пункты БУ
input int TrailingStop  = 200;      // трал
input int MAPeriod      = 800;      // период МА
input int Expiration    = 10;       // истечение ордеров
input int Slip          = 30;       // реквот
input int Shift         = 1;        // на каком баре сигнал индикатора
input int Magic         = 123;      // магик

input double Level1     = 100;      //
input double Level2     = 161.8;    //
input double Level3     = 255;      //
input double Level4     = 500;      //
input double Level5     = 1250;     //

int ma;
double pr[1];
CTrade trade;                // Используем торговый класс CTrade

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ma=iMA(NULL,0,MAPeriod,0,0,0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Trailing()
  {
   double tp=0,sl=0;
   double Ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);

   if(PositionSelect(_Symbol))
     {
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
         if(Bid-PositionGetDouble(POSITION_PRICE_OPEN)>TrailingStop*_Point)
           {
            if(PositionGetDouble(POSITION_SL)<Bid-TrailingStop*_Point)
              {
               sl = Bid-TrailingStop*_Point;
               tp = PositionGetDouble(POSITION_PRICE_OPEN)+TakeProfit*_Point;
               trade.PositionModify(_Symbol,sl,tp);
              }
           }
        }

      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
        {
         if(PositionGetDouble(POSITION_PRICE_OPEN)-Ask>TrailingStop*_Point)
           {
            if((PositionGetDouble(POSITION_SL)>(Ask+TrailingStop*_Point)) || (PositionGetDouble(POSITION_SL)==0))
              {
               sl=Ask+TrailingStop*_Point;
               tp=PositionGetDouble(POSITION_PRICE_OPEN)-TakeProfit*_Point;
               trade.PositionModify(_Symbol,sl,tp);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void BU()
  {
   double Ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
   double sl=0,tp=0;

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelect(_Symbol))
        {
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
           {
            if(PositionGetDouble(POSITION_PRICE_OPEN)<=Bid-BULevel*_Point)
              {
               if(PositionGetDouble(POSITION_PRICE_OPEN)>PositionGetDouble(POSITION_SL))
                 {
                  sl = PositionGetDouble(POSITION_PRICE_OPEN)+BUPoint*_Point;
                  tp = PositionGetDouble(POSITION_PRICE_OPEN)+TakeProfit*_Point;
                  trade.PositionModify(_Symbol,sl,tp);
                 }
              }
           }

         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
           {
            if(PositionGetDouble(POSITION_PRICE_OPEN)>=Ask+BULevel*_Point)
              {
               if(PositionGetDouble(POSITION_SL)>PositionGetDouble(POSITION_PRICE_OPEN))
                 {
                  sl = PositionGetDouble(POSITION_PRICE_OPEN)-BUPoint*_Point;
                  tp = PositionGetDouble(POSITION_PRICE_OPEN)-TakeProfit*_Point;
                  trade.PositionModify(_Symbol,sl,tp);
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountOrders(ENUM_ORDER_TYPE type)
  {
   int count=0;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(OrderGetTicket(i)))
        {
         if(OrderGetInteger(ORDER_TYPE)==type)
            count++;
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double Bid=SymbolInfoDouble(NULL,SYMBOL_BID);

   CopyBuffer(ma,0,0,1,pr);

   if(BULevel>0)
      BU();
   if(TrailingStop>0)
      Trailing();

   if(PositionsTotal()<1)
     {
      if(CountOrders(2)<1)
        {
         if(Bid<pr[0] && Bid>pr[0]-Level1*_Point && Level1>0)
            trade.BuyLimit(Lots,pr[0]-Level1*_Point,NULL,pr[0]-Level1*_Point-StopLoss*_Point,pr[0]-Level1*_Point+TakeProfit*_Point,ORDER_TIME_DAY,TimeCurrent()+Expiration*3600,"");

         if(Bid<pr[0] && Bid>pr[0]-Level2*_Point && Level2>0)
            trade.BuyLimit(Lots,pr[0]-Level2*_Point,NULL,pr[0]-Level2*_Point-StopLoss*_Point,pr[0]-Level2*_Point+TakeProfit*_Point,ORDER_TIME_DAY,TimeCurrent()+Expiration*3600,"");

         if(Bid<pr[0] && Bid>pr[0]-Level3*_Point && Level3>0)
            trade.BuyLimit(Lots,pr[0]-Level3*_Point,NULL,pr[0]-Level3*_Point-StopLoss*_Point,pr[0]-Level3*_Point+TakeProfit*_Point,ORDER_TIME_DAY,TimeCurrent()+Expiration*3600,"");

         if(Bid<pr[0] && Bid>pr[0]-Level4*_Point && Level4>0)
            trade.BuyLimit(Lots,pr[0]-Level4*_Point,NULL,pr[0]-Level4*_Point-StopLoss*_Point,pr[0]-Level4*_Point+TakeProfit*_Point,ORDER_TIME_DAY,TimeCurrent()+Expiration*3600,"");

         if(Bid<pr[0] && Bid>pr[0]-Level5*_Point && Level5>0)
            trade.BuyLimit(Lots,pr[0]-Level5*_Point,NULL,pr[0]-Level5*_Point-StopLoss*_Point,pr[0]-Level5*_Point+TakeProfit*_Point,ORDER_TIME_DAY,TimeCurrent()+Expiration*3600,"");
        }

      if(CountOrders(3)<1)
        {
         if(Bid>pr[0] && Bid<pr[0]+Level1*_Point && Level1>0)
            trade.SellLimit(Lots,pr[0]+Level1*_Point,NULL,pr[0]+Level1*_Point+StopLoss*_Point,pr[0]+Level1*_Point-TakeProfit*_Point,ORDER_TIME_DAY,TimeCurrent()+Expiration*3600,"");

         if(Bid>pr[0] && Bid<pr[0]+Level2*_Point && Level2>0)
            trade.SellLimit(Lots,pr[0]+Level2*_Point,NULL,pr[0]+Level2*_Point+StopLoss*_Point,pr[0]+Level2*_Point-TakeProfit*_Point,ORDER_TIME_DAY,TimeCurrent()+Expiration*3600,"");

         if(Bid>pr[0] && Bid<pr[0]+Level3*_Point && Level3>0)
            trade.SellLimit(Lots,pr[0]+Level3*_Point,NULL,pr[0]+Level3*_Point+StopLoss*_Point,pr[0]+Level3*_Point-TakeProfit*_Point,ORDER_TIME_DAY,TimeCurrent()+Expiration*3600,"");

         if(Bid>pr[0] && Bid<pr[0]+Level4*_Point && Level4>0)
            trade.SellLimit(Lots,pr[0]+Level4*_Point,NULL,pr[0]+Level4*_Point+StopLoss*_Point,pr[0]+Level4*_Point-TakeProfit*_Point,ORDER_TIME_DAY,TimeCurrent()+Expiration*3600,"");

         if(Bid>pr[0] && Bid<pr[0]+Level5*_Point && Level5>0)
            trade.SellLimit(Lots,pr[0]+Level5*_Point,NULL,pr[0]+Level5*_Point+StopLoss*_Point,pr[0]+Level5*_Point-TakeProfit*_Point,ORDER_TIME_DAY,TimeCurrent()+Expiration*3600,"");
        }
     }

   Comment("\n MA: ",pr[0],
           "\n Sell Limit: ",CountOrders(3),
           "\n Total: ",OrdersTotal());
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+


Редактирован: 28 мая 2020, 23:07
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 28 мая 2020, 22:07
+
0
переписал и добавил увеличение ордера в сетке:



www.opentraders.ru/downloads/2671/
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 29 мая 2020, 20:53

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари