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

Рейтинг 2146



РЕКОМЕНДУЮ



Советник-помощник для MT4

Добрый день, Андрей. Прошу написать советник, который открывает стоп-ордер, при закрытии ранее выставленного лота по ТР с определённым меджиком. Если этот лот закрылся по SL то ордер просто восстанавливается с прежними показателями. Советник имеет переменные; размер лота, ТР, SL, отступ от цены для вновь выставляемого лота, меджик контролируемого ордера, количество реквот.
  • 0
  • Просмотров: 3436
  • 4 апреля 2016, 18:20
  • obals
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Прошу Андрея написать советник
Следующая запись в группе  
советник manual grid
04 апреля 2016
05 апреля 2016

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

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

+
0
Подобные были здесь, смотрели в базе?
avatar

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

  • 4 апреля 2016, 19:55
+
0
Был советник /www.opentraders.ru/downloads/1071/ он ближе всего к желаемому, но он выставляет по одному ордеру выше и ниже цены и с ними работает, а это совершенно не то.
avatar

  5  obals Автор Сообщений: 36 - слава

  • 4 апреля 2016, 20:36
+
0
Набросаю завтра вариант.
avatar

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

  • 4 апреля 2016, 20:37
+
0
Для тестера советник имитирует позу а далее все как положено:




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

//--- Inputs
extern double Lots      = 0.1; // лот
extern double KLot      = 2;   // умножение лота
extern double MaxLot    = 5;   // максимальный лот
extern int StopLoss     = 500; // стоп лосс ордера
extern int TakeProfit   = 500; // тейк профит ордера
extern int Expiration   = 10;  // время истечения ордера в чсах
extern int Slip         = 30;  // реквот
extern int Delta        = 100; // расстояние от цены
extern int Magic        = 333; // магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int    r=0;
   color clr=clrNONE;
   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,TimeCurrent()+Expiration*3600,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()==0 || OrderType()==1) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountOrders(int type)
  {
   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()==type) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int LastDealResult()
  {
   int result=0;

   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderProfit()>0)
           {
            result=1;//tp  
           }
         if(OrderProfit()<0)
           {
            result=2;//sl  
           }
        }
     }
   return(result);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int LastDealType()
  {
   int type=0;
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderType()==OP_BUY)
           {
            type=1;//buy  
           }
         if(OrderType()==OP_SELL)
           {
            type=2;//sell  
           }
        }
     }
   return(type);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;

   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderProfit()>0)
           {
            lot=OrderLots()*KLot;
           }
        }
     }
   if(lot>MaxLot)lot=MaxLot;
   return(lot);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountTrades()<1)
     {
      if(IsTesting() && LastDealResult()==0)
        {
         PutOrder(0,Ask);
        }
        
      if(LastDealResult()==1 && LastDealType()==1)
        {
         if(CountOrders(4)<1) PutOrder(4,Bid+Delta*Point);
        }

      if(LastDealResult()==1 && LastDealType()==2)
        {
         if(CountOrders(5)<1) PutOrder(5,Bid-Delta*Point);
        }
     }
  }
//+------------------------------------------------------------------+

avatar

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

  • 5 апреля 2016, 09:22
+
0
Добрый день, Андрей. Спасибо за советник. Прошу простить меня за неполноту моего техзадания-если закрытие, ранее выставленного лота, происходит по ТР, тогда выставляется стоп-ордер, но противоположного направления, т.е. закрылся бай значит открывать сел. И советник должен выставлять лот с теми же параметрами что и были, если он закрылся по SL. Сейчас он этого не делает.
Редактирован: 6 апреля 2016, 07:07
avatar

  5  obals Автор Сообщений: 36 - слава

  • 5 апреля 2016, 12:47
+
0
Добрый день, Андрей. Можно ли переделать советник с учётом вышесказанных пожеланий.
avatar

  5  obals Автор Сообщений: 36 - слава

  • 6 апреля 2016, 07:11
+
0
если закрытие, ранее выставленного лота, происходит по ТР, тогда выставляется стоп-ордер, но противоположного направления, т.е. закрылся бай значит открывать сел.


Что тогда делаем если закрылись по стопу? Также противоположный ордер но с минимальным лотом?
avatar

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

  • 6 апреля 2016, 07:50
+
0
Если ордер закрывается по стопу, то он как бы восстанавливается, например был БАЙ ордер: если сработал SL, тогда выставляем стоп ордер на покупку, на расстоянии равном SL с минимальным лотом. Если этот же БАЙ ордер закрылся по ТР, тогда выставляем СЕЛ стоп ордер на расстояние, которое выставляется переменной «отступ от цены»т.е. противоположный по направлению, с тем же размером лота.
avatar

  5  obals Автор Сообщений: 36 - слава

  • 6 апреля 2016, 17:29
+
0
avatar

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

  • 6 апреля 2016, 20:03
+
0
Добрый день, Андрей.Спасибо за проделанную работу, но советник у меня не работает. Это легко проверить, установив на демо вилку на текущую цену из коротких стоп ордеров (близкие лоси и язи ) В журнале из 11 возможностей лишь один раз написал «open»
avatar

  5  obals Автор Сообщений: 36 - слава

  • 8 апреля 2016, 05:49
+
0
Добрый день, Андрей.Спасибо за проделанную работу, но советник у меня не работает. Это легко проверить, установив на демо вилку на текущую цену из коротких стоп ордеров (близкие лоси и язи ) В журнале из 11 возможностей лишь один раз написал «open»

Скиньте ваши настройки я посмотрю, насколько близкие?
avatar

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

  • 8 апреля 2016, 19:01
+
0
Можно на демо просто купить 1 лот ЕВРО-доллар и продать 1 лот одновременно, с лосем 75 и язем 49 (для 5-знака) и увидите, как советник не сработает при их закрытии.
Редактирован: 10 апреля 2016, 16:40
avatar

  5  obals Автор Сообщений: 36 - слава

  • 10 апреля 2016, 16:37
+
0
Сейчас поставлю на отладку.
avatar

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

  • 11 апреля 2016, 09:49
+
0
Можно на демо просто купить 1 лот ЕВРО-доллар и продать 1 лот одновременно, с лосем 75 и язем 49 (для 5-знака) и увидите, как советник не сработает при их закрытии.


Если вы руками открывали ордер, значит магик в советнике нужно ставить 0.
avatar

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

  • 11 апреля 2016, 09:52
+
0
avatar

  5  obals Автор Сообщений: 36 - слава

  • 11 апреля 2016, 10:12
+
0
Только что открыл продажу, закрыл вручную с минусом, бросил советник, магик выставил 0 — открылся ордер. Когда бросал с магиком 333 ничего не открыл.

avatar

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

  • 11 апреля 2016, 10:44
+
0
avatar

  5  obals Автор Сообщений: 36 - слава

  • 11 апреля 2016, 16:47
+
0
Уважаемый Андрей, может рисунок поможет нам выработать общий принцип открытия и закрытия ордеров советником.Нарисованная схема подразумевает, что советник открывает новые ордера в том числе и при закрытии своих предыдущих ордеров и количество выставления ордеров советником не ограничивается 1 ордером.Все нарисованные кружочки должен открывать советник.
Редактирован: 11 апреля 2016, 16:54
avatar

  5  obals Автор Сообщений: 36 - слава

  • 11 апреля 2016, 16:48
+
0
Уважаемый Андрей, может рисунок поможет нам выработать общий принцип открытия и закрытия ордеров советником.Нарисованная схема подразумевает, что советник открывает новые ордера в том числе и при закрытии своих предыдущих ордеров и количество выставления ордеров советником не ограничивается 1 ордером.Все нарисованные кружочки должен открывать советник.


Дааа, если бы в самом начале было подробное ТЗ мне бы не пришлось несколько раз переделывать.
avatar

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

  • 11 апреля 2016, 19:15
+
0
Сейчас чтобы что то получилось и не переделывать снова по нескольку раз, мне нужно будет составить понятное для себя ТЗ согласовать и только тогда делать.
avatar

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

  • 11 апреля 2016, 19:19
+
0
Вот такое у меня получилось ТЗ, если все верно начну делать.

Входы:

1.Покупка:

1.1. байстоп по цене открытия предыдущего селлстоп, если предыдущий сработавший ордер селлстоп закрылся по ТП.

1.2. байстоп по цене открытия предыдущего байстоп, если предыдущий сработавший ордер байстоп закрылся по СЛ.

2. Продажа:

2.1. если селлстоп закрылся по СЛ, ставим селлстоп по цене открытия предыдущего ордера.

2.2. если байстоп закрылся по ТП, ставим селлстоп по цене открытия предыдущего байстоп ордера.

Выходы по СЛ или ТП.
avatar

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

  • 11 апреля 2016, 20:04
+
0
Всё верно.
avatar

  5  obals Автор Сообщений: 36 - слава

  • 11 апреля 2016, 20:12
+
0
avatar

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

  • 11 апреля 2016, 21:04
+
0
Добрый день, Андрей.Спасибо за советник.Всё работает, но можно ли что-то сделать, что бы советник работал не с одним ордером, а с неопределённым количеством ордеров с единым MN?
avatar

  5  obals Автор Сообщений: 36 - слава

  • 12 апреля 2016, 13:45
+
0
Всё работает, но можно ли что-то сделать, что бы советник работал не с одним ордером, а с неопределённым количеством ордеров с единым MN?


Такие моменты нужно оговаривать сразу в ТЗ т.к. это может в разы усложнить создание советника.
avatar

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

  • 12 апреля 2016, 22:46
+
0
Добрый день, Андрей. Извиняюсь за назойливость, можно ли в следующем месяце, я повторю свою просьбу?
avatar

  5  obals Автор Сообщений: 36 - слава

  • 14 апреля 2016, 22:41
+
0
Добрый день, Андрей. Извиняюсь за назойливость, можно ли в следующем месяце, я повторю свою просьбу?

Я посмотрю, если можно быстро сделать сделаю.
avatar

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

  • 15 апреля 2016, 06:06
+
0
Добрый вечер, Андрей. Видимо по быстрому не получается?
avatar

  5  obals Автор Сообщений: 36 - слава

  • 19 апреля 2016, 18:45
+
0
В следующем месяце буду смотреть.
avatar

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

  • 19 апреля 2016, 19:13
+
0
За советник с несколькими ордерами я не возьмусь.
Редактирован: 20 апреля 2016, 06:53
avatar

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

  • 19 апреля 2016, 21:21
комментарий был удален 2016-04-20 07:28:51 obals


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