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

Рейтинг 2081



РЕКОМЕНДУЮ



Шахматный советник

При включении советник ставит рыночный buy или sell, какой именно первый ордер задается в настройках. При закрытии ордера, неважно по тейкпрофиту или стоплосу, ставится противоположный ордер с таким же лотом, например если первый был buy то следующий будет sell, потом снова buy и затем снова sell. При закрытии по стоплосу три раза подряд (количество задается в настройках), лот увеличивается. Например buy, sell, buy подряд закрылись по стопу, следующие ордера будут выставляться с увеличенным лотом. При достижении максимального лота, лот остается максимальным. Если разница между профитными и убыточными ордерами = 1 (задается в настройках), то лот скидывается до начального.
  • 0
  • Просмотров: 2760
  • 3 октября 2017, 23:36
  • pavel39638
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Индикатор для МТ4
Следующая запись в группе  
Советник MT4 на индикаторе Parabolic ZZ (ZigZag+Fibo)
03 октября 2017
04 октября 2017

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

+
0
В пятницу буду смотреть.
avatar

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

  • 4 октября 2017, 17:23
+
0
На фото 2 лося подряд и увеличил лот: www.opentraders.ru/downloads/1679/

avatar

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

  • 5 октября 2017, 19:34
+
0
у вас после первого же тейкпрофита лот скидывается до начального, а по техзаданию советник должен как бы подсчитывать количество всех убыточных и всех прибыльных ордеров, если прибыльных на один больше чем убыточных то только тогда лот скидывается до начального, исправьте пожалуйста
avatar

  6  pavel39638 Автор Сообщений: 69

  • 5 октября 2017, 21:03
+
0
на примере опишите?
avatar

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

  • 5 октября 2017, 21:48
+
0
например, buy 0.1 лот, sell 0.1, buy 0.1 убыточные подряд, следующий sell 0.2 лота прибыльный, имеем в сумме 4 ордера, поскольку убыточных больше чем прибыльных то следующий buy также будет 0.2 лота например он прибыльный, следующий sell 0.2 убыточный, сейчас имеем в сумме 6 ордеров, поскольку убыточный все равно больше чем прибыльных то следующий buy будет 0.2 лота, и так далее до тех пор пока прибыльных не станет больше чем убыточных
avatar

  6  pavel39638 Автор Сообщений: 69

  • 5 октября 2017, 22:08
+
0
какую глубину истории брать для расчета? сколько закрытых сделок?
avatar

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

  • 5 октября 2017, 22:36
+
0
например в ходе торговли советник открыл в сумме 15 ордеров, из них 7 убыточных и 8 прибыльных, лот скидывается до начального и советник начинает подсчет ордеров заново, с нуля
avatar

  6  pavel39638 Автор Сообщений: 69

  • 5 октября 2017, 22:50
+
0
то есть подсчет ордеров ведется до тех пор пока прибыльных ордеров не будет больше чем убыточных, как только это условие выполняется то счетчик ордеров обнуляется и подсчет начинается заново
avatar

  6  pavel39638 Автор Сообщений: 69

  • 5 октября 2017, 22:53
+
0
ааа так и надо было сразу писать а то я уже в 3-й раз переделываю. к платному.
avatar

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

  • 5 октября 2017, 23:13
+
0
Такой алгоритм не проходит, т.к. лосей может быть и 3 и 4 в это же время разница 5.
Т.е. лот должен увеличивать а он сбрасывает. См. фото и советник:




//+------------------------------------------------------------------+
//|                                                        Chess.mq4 |
//|                                              Copyright 2017, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.1;      // лот
extern double KLot       = 1;        // умножение лота
extern double MaxLot     = 5;        // максимальный лот
extern int StopLoss      = 2000;     // лось
extern int TakeProfit    = 3000;     // язь
extern int Slip          = 30;       // реквот
extern int BuySell       = 1;        // 1-первая бай 2-селл
extern int Losses        = 3;        // лосей
extern int Magic         = 123;      // магик

bool b=1,s=1;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(BuySell==2)b=0;
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   r=OrderSend(NULL,type,Lot(),NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Считает количество убыточных сделок в истории                    |
//+------------------------------------------------------------------+
int Loss()
  {
   int losses=0;
   for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0)
              {
               if(OrderOpenPrice()-OrderClosePrice()>0) losses++;
               if(OrderOpenPrice()-OrderClosePrice()<0) break;
              }
            if(OrderType()==1)
              {
               if(OrderOpenPrice()-OrderClosePrice()<0) losses++;
               if(OrderOpenPrice()-OrderClosePrice()>0) break;
              }
           }
        }
     }
   return(losses);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;
   for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(Delta()>0) lot=Lots;
            if(Loss()>=Losses)
              {
               lot=OrderLots()*KLot;
               break;
              }
           }
        }
     }
   if(lot>MaxLot)lot=MaxLot;
   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Delta()
  {
   int plus=0;
   int minus=0;

   for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderProfit()>0) plus++;
            if(OrderProfit()<0) minus++;
           }
        }
     }
   return(plus-minus);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountTrades()<1 && b)
     {
      PutOrder(0,Ask);
      b=0;s=1;
     }

   if(CountTrades()<1 && s)
     {
      PutOrder(1,Bid);
      s=0;b=1;
     }
     
   Comment("\n Losses: ",Loss(),"\n Delta: ",Delta());
  }
//+------------------------------------------------------------------+

avatar

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

  • 5 октября 2017, 23:12

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