kipjatok001
Kipjatok001 Best Trader

 
Уровень 13

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


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

Рейтинг 2146



РЕКОМЕНДУЮ



Помогите создать советника помошника

Добрый день. Уважаемый AM2. Ваша работа бесценна. Спасибо Вам большое.
Можете создать один советник. Выставляет новые ордера в замен закрытых по ТП или СЛ
Параметры советника (с возможностью переключения)
1. При закрытии ордеров ставится стоповый ордер или лимитный
2. При закрытии выбираем, какого объема ставим ордер (такой же какой и был, увеличенный на сам себя или в х раз)
3. Ордера выставляются с указанным уровнем ТП и СЛ (про значении 0 — без низ)
4. Параметр работы на одной валютной паре или на всех
5. Если возможно — еще дополнительный параметр. Что бы на месте лимитных были лимитные ордера, а на месте стоповых — стоповые). Если нельзя — не страшно
Заранее большое человеческое спасибо.
  • +1
  • Просмотров: 3286
  • 21 января 2015, 15:03
  • kipjatok001
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Прошу создать в помощь 2 скрипта
17 января 2015
22 января 2015

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

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

+
+3
Предлагаю заголовок для следующего топика:
«Помогите создать советника помощника, который будет помогать создавать помощников»
avatar

  45  Bishop Сообщений: 5802 - АЛЬФАХАМЕЦ-Машковод

  • 21 января 2015, 15:12
+
0
да да
avatar

  13  kipjatok001 Автор Сообщений: 431 - Kipjatok001 Best Trader

  • 21 января 2015, 15:19
+
0
Можете нарисовать на скрине входы и выходы
avatar

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

  • 21 января 2015, 17:05
+
0
Мне в любом случае будет интересно создать советник который выставляет ордера вместо выбывших. Начал делать.
avatar

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

  • 21 января 2015, 22:34
+
+1
Этот набросок позволяет выставить сетку ордеров с установленными стопами и при достижении тейка, выставляется обратный ордер указанным в настройках лотом, отличающимся от лота сетки.




//+------------------------------------------------------------------+
//|                                                        Reset.mq4 |
//|                                           Copyright © 2014, AM2  |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright 2014, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

#define MAGIC  20150121

extern int    StopLoss    = 1900;//Стоплосс всех ордеров
extern int    TakeProfit  = 350; //Тейкпрофит всех ордеров
extern int    StopLimit   = 1;   //Ставим стоповые(0) или лимитные(1) ордера
extern int    Distance    = 250; //Расстояние от цены для установки стопового ордера
extern int    Step        = 250; //Шаг установки стоповых ордеров
extern int    Count       = 10;  //Количество устанавливаемых ордеров стоповых или лимитных 
extern int    Expiration  = 14;  //Время истечения ордера
extern double Lots        = 0.1; //Лот
extern double Lot         = 0.1; //Лот 2

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   Comment("");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int res=0,i;
   datetime expiration=TimeCurrent()+3600*Expiration;
   if(Volume[0]>1) return 0;

//--------------------------------------------------------------------    
   if(OrdersTotal()<=Count)
     {
      for(i=1;i<=Count;i++)
        {
           {
            if(StopLimit==1)
              {
               res=OrderSend(Symbol(),OP_BUYLIMIT,Lots,fND(Ask-(Distance*Point+i*Step*Point)),0,fND(Ask-(Distance*Point+i*Step*Point)-StopLoss*Point),fND(Ask-(Distance*Point+i*Step*Point)+TakeProfit*Point),"",MAGIC,expiration,Blue);
               res=OrderSend(Symbol(),OP_SELLLIMIT,Lots,fND(Bid+(Distance*Point+i*Step*Point)),0,fND(Bid+(Distance*Point+i*Step*Point)+StopLoss*Point),fND(Bid+(Distance*Point+i*Step*Point)-TakeProfit*Point),"",MAGIC,expiration,Red);
              }
            if(StopLimit==0)
              {
               res=OrderSend(Symbol(),OP_BUYSTOP,Lots,fND(Ask+(Distance*Point+i*Step*Point)),0,fND(Ask+(Distance*Point+i*Step*Point)-StopLoss*Point),fND(Ask+(Distance*Point+i*Step*Point)+TakeProfit*Point),"",MAGIC,expiration,Blue);
               res=OrderSend(Symbol(),OP_SELLSTOP,Lots,fND(Bid-(Distance*Point+i*Step*Point)),0,fND(Bid-(Distance*Point+i*Step*Point)+StopLoss*Point),fND(Bid-(Distance*Point+i*Step*Point)-TakeProfit*Point),"",MAGIC,expiration,Red);
              }
           }
        }
      }      
//--------------------------------------------------------------------     
   PutResetOrder();
   
   return(0);
  }
//+------------------------------------------------------------------+
double fND(double d,int n=-1)
  {
   if(n<0) return(NormalizeDouble(d, Digits));
   return(NormalizeDouble(d, n));
  }
//+------------------------------------------------------------------+
void PutResetOrder()
  {
   int res=0;   
   int ss=0,bs=0;
   double price;
   datetime expiration=TimeCurrent()+3600*Expiration;
   
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i, SELECT_BY_POS))
      {  
       if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=MAGIC) continue;
       if (OrderType()==OP_BUYSTOP) bs++;
       if (OrderType()==OP_SELLSTOP) ss++;                     
      }   
    }   
   
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderType()==OP_BUY)
        {
         price=OrderOpenPrice();
         if(OrderProfit()>0 && ss<1)
           {
            res=OrderSend(Symbol(),OP_SELLSTOP,Lot,fND(price),0,fND(price+StopLoss*Point),fND(price-TakeProfit*Point),"",MAGIC,expiration,Red);
            ss++;
           }
        }

      if(OrderType()==OP_SELL && bs<1)
        {
         price=OrderOpenPrice();
         if(OrderProfit()>0)
           {
            res=OrderSend(Symbol(),OP_BUYSTOP,Lot,fND(price),0,fND(price-StopLoss*Point),fND(price+TakeProfit*Point),"",MAGIC,expiration,Blue);
            bs++;
           }
        }
     }
     
   Comment("                       ss = ",ss, " bs = ",bs); 
         
  }
//+------------------------------------------------------------------+

avatar

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

  • 22 января 2015, 02:25
+
0
Спасибо. Все отлично работает. А можно ТП Каждого ордера? И потом на его месте ставится ордер увеличенного объема?
avatar

  13  kipjatok001 Автор Сообщений: 431 - Kipjatok001 Best Trader

  • 22 января 2015, 10:31
+
0
Каждому ордеру выставляется отдельный тейкпрофит. (Комменты от другого кода просто)

В настройках переменная Lots это лот для каждого ордера сетки, а переменная Lot для замещающего ордера. Скажем Lots может быть 0.1 а Lot 0.8, т.е. то значение которое вы сами укажете.

avatar

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

  • 22 января 2015, 10:41
+
0
Понял) Спасибо Вам Большое) Сейчас попробую)
avatar

  13  kipjatok001 Автор Сообщений: 431 - Kipjatok001 Best Trader

  • 22 января 2015, 11:31
+
0
А можно сетку ордеров сделать с увеличением на начальный лот?
avatar

  13  kipjatok001 Автор Сообщений: 431 - Kipjatok001 Best Trader

  • 22 января 2015, 12:00
+
+1
Добавил увеличение лота: www.opentraders.ru/downloads/565/

avatar

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

  • 22 января 2015, 22:30
+
0
AM2 Огромное спасибо.
Последний вопрос. А можно что бы на месте закрытых ордеров выставлялись ордера больше на начальны лот? закрылся 0.1 на его место 0.2
Закрылся 0.5 на его место 0.6 и так все время?
Заранее спасибо
avatar

  13  kipjatok001 Автор Сообщений: 431 - Kipjatok001 Best Trader

  • 23 января 2015, 10:28
+
0
Сделаю вечером.
avatar

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

  • 23 января 2015, 11:05
+
0
Огромное человеческое спасибо.
avatar

  13  kipjatok001 Автор Сообщений: 431 - Kipjatok001 Best Trader

  • 23 января 2015, 11:10
+
0
Сейчас увеличивает дополнительный лот:


//+------------------------------------------------------------------+
//|                                                        Reset.mq4 |
//|                                           Copyright © 2014, AM2  |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright 2014, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

#define MAGIC  20150121

extern int    StopLoss    = 1900;//Стоплосс всех ордеров
extern int    TakeProfit  = 350; //Тейкпрофит всех ордеров
extern int    StopLimit   = 1;   //Ставим стоповые(0) или лимитные(1) ордера
extern int    Distance    = 250; //Расстояние от цены для установки стопового ордера
extern int    Step        = 250; //Шаг установки стоповых ордеров
extern int    Count       = 10;  //Количество устанавливаемых ордеров стоповых или лимитных 
extern int    Expiration  = 14;  //Время истечения ордера
extern double Lots        = 0.1; //Лот
extern double PLot        = 0.1; //Плюс лот
extern double Lot         = 0.1; //Лот 2
extern double DopLot      = 0.1; //К закрытому лоту + DopLot

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   Comment("");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int res=0,i;
   double lot=Lots;
   datetime expiration=TimeCurrent()+3600*Expiration;
   if(Volume[0]>1) return 0;

//--------------------------------------------------------------------    
   if(OrdersTotal()<=Count)
     {
      for(i=1;i<=Count;i++)
        {
           {
            if(StopLimit==1)
              {
               res=OrderSend(Symbol(),OP_BUYLIMIT, lot,fND(Ask-(Distance*Point+i*Step*Point)),0,fND(Ask-(Distance*Point+i*Step*Point)-StopLoss*Point),fND(Ask-(Distance*Point+i*Step*Point)+TakeProfit*Point),"",MAGIC,expiration,Blue);
               res=OrderSend(Symbol(),OP_SELLLIMIT,lot,fND(Bid+(Distance*Point+i*Step*Point)),0,fND(Bid+(Distance*Point+i*Step*Point)+StopLoss*Point),fND(Bid+(Distance*Point+i*Step*Point)-TakeProfit*Point),"",MAGIC,expiration,Red);
               lot=lot+PLot;
              }
            if(StopLimit==0)
              {
               res=OrderSend(Symbol(),OP_BUYSTOP, lot,fND(Ask+(Distance*Point+i*Step*Point)),0,fND(Ask+(Distance*Point+i*Step*Point)-StopLoss*Point),fND(Ask+(Distance*Point+i*Step*Point)+TakeProfit*Point),"",MAGIC,expiration,Blue);
               res=OrderSend(Symbol(),OP_SELLSTOP,lot,fND(Bid-(Distance*Point+i*Step*Point)),0,fND(Bid-(Distance*Point+i*Step*Point)+StopLoss*Point),fND(Bid-(Distance*Point+i*Step*Point)-TakeProfit*Point),"",MAGIC,expiration,Red);
               lot=lot+PLot;
              }
           }
        }
      }      
//--------------------------------------------------------------------     
   PutResetOrder();
   
   return(0);
  }
//+------------------------------------------------------------------+
double fND(double d,int n=-1)
  {
   if(n<0) return(NormalizeDouble(d, Digits));
   return(NormalizeDouble(d, n));
  }
//+------------------------------------------------------------------+
double FindLastLot()
  {
   int oticket, ticketNumber=0;
   double llot=0;
     if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC && (OrderType()==OP_BUY || OrderType()==OP_SELL))
        {
         oticket=OrderTicket();
         if(oticket>ticketNumber)
          {
           ticketNumber=oticket;
           llot=OrderLots();
          }
        }
      }
    if(DopLot==0 || llot==0) llot=Lot;        
    return(llot);
  }  
//+------------------------------------------------------------------+  
void PutResetOrder()
  {
   int res=0;   
   int ss=0,bs=0;
   double price;
   datetime expiration=TimeCurrent()+3600*Expiration;
   
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i, SELECT_BY_POS))
      {  
       if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=MAGIC) continue;
       if (OrderType()==OP_BUYSTOP) bs++;
       if (OrderType()==OP_SELLSTOP) ss++;                     
      }   
    }   
   
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderType()==OP_BUY)
        {
         price=OrderOpenPrice();
         if(OrderProfit()>0 && ss<1)
           {
            res=OrderSend(Symbol(),OP_SELLSTOP,FindLastLot()+DopLot,fND(price),0,fND(price+StopLoss*Point),fND(price-TakeProfit*Point),"",MAGIC,expiration,Red);
            ss++;
           }
        }

      if(OrderType()==OP_SELL && bs<1)
        {
         price=OrderOpenPrice();
         if(OrderProfit()>0)
           {
            res=OrderSend(Symbol(),OP_BUYSTOP,FindLastLot()+DopLot,fND(price),0,fND(price-StopLoss*Point),fND(price+TakeProfit*Point),"",MAGIC,expiration,Blue);
            bs++;
           }
        }
     }
     
   Comment("                       ss = ",ss, " bs = ",bs); 
         
  }
//+------------------------------------------------------------------+

avatar

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

  • 24 января 2015, 14:26
+
0
И последняя просьба по этому сову. Можно задать параметр выставления первого ордера по цене? Допустим первый ордер бай стоп по цене 1.10100 а другой ордер селлстоп 1.10000?
avatar

  13  kipjatok001 Автор Сообщений: 431 - Kipjatok001 Best Trader

  • 23 января 2015, 13:49

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