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

Рейтинг 2156



РЕКОМЕНДУЮ



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

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

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

Брокер для ваших роботов, 15 лет на рынке

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

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

  35  AM2 Сообщений: 16537 - Андрей

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

avatar

  35  AM2 Сообщений: 16537 - Андрей

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

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

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

  35  AM2 Сообщений: 16537 - Андрей

  • 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

  35  AM2 Сообщений: 16537 - Андрей

  • 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

  35  AM2 Сообщений: 16537 - Андрей

  • 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

  35  AM2 Сообщений: 16537 - Андрей

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

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