preasto

 
Уровень 11

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


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

Рейтинг 2089



РЕКОМЕНДУЮ



Вспомогательный советник с отложками

Андрей, просьба сделать вспомогательный советник ставящий к открытым ордерам отложки — стоп-ордера с переоткрытием в таком порядке:

При открытии первичного рыночного ордера любого направления Buy или Sell, любым способом (руками, отложкой, др. советником)
вспомогательный советник ставит к нему на р-нии Delta-1 стоп-ордер той же лотности с коэфф.умнож.=1 (по умолч).
При срабатывании этого стоп-ордера в рыночный, уже к нему открывается другой стоп-ордер, уже на р-нии Delta-2 той же лотности с коэфф.=1.
И т.д. до указанного количества повторов этого цикла = 5 по умолч. (Здесь выставление последующих стоп-ордеров в серии к этому первичному рыночному прекращается. На новом первичном рыночном ордере начинается своя серия ордеров.).
Т.е. к рыночным ордерам в направлении первого открытого рыночного ордера стоп-ордера ставятся на р-нии Delta-1,
а к противоположным рыночным ордерам на р-нии Delta-2.
При этом каждый выставленный стоп-ордер сразу тралится вслед за ценой.
Настройки и вкл/откл. трала для каждого типа стоп-ордеров с Delta-1 и Delta-2 отдельные. Если трал для какого-то направления не задан ( =0 ) — выставленные по нему стоп-ордера остаются на месте(не тралятся).

В случае, если цена прошла Х1 п. в прибыль от цены открытого ордера где есть несработавший к нему стоп-ордер,
этот стоп ордер переносится с отступом У1 от этого рыночного ордера (между ним и ценой).
При проходе цены далее на р-ние Х2 от этого рыночного ордера включается трал стоп-ордера (или по параметру: вкл. трал от линии БУ).

В советник добавить включаемое/откл. авто-открытие ордеров по МА с фильтром по стохастику.
(Тогда советник сопровождает и эти ордера, при откл. — только открытые извне).

Примеры решений по части кода и функций (справочно).
Скрипт открытия рыночных ордеров со стоп-ордером: zakaz.opentraders.ru/36541.html
(с начатым там же советником автоматически выставляющим отложки)
Пример скрипта трала стоп-ордеров: _ Trail Lock (Stop Order).mq4 (5 Kb)
— скрипт будет тралить этот ордер за ценой вплоть до срабатывания> после чего закончит свою работу.
Если не указан лот в параметре Lot, то скрипт сам вычисляет лот как разницу суммы лотов направлений (лок)

(наверное, для упрощения задачи, код, функции такого скрипта можно встроить в советник и продублировать с настройками для условий и параметров Delta-1 и Delta-2, т.к. сам скрипт имеет нужные параметры и проверен в работе).
  • +6
  • Просмотров: 3765
  • 20 февраля 2017, 15:28
  • preasto
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Open Hi Lo (MQL5)
Следующая запись в группе  
Нужен советник по шаблону в МТ4
19 февраля 2017
20 февраля 2017

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

+
+2
Я часа 2 с ним просидел. Даже простейший вариант реализовать не удалось. Обращайтесь к платному.

Вот мой набросок нерабочий:


//+------------------------------------------------------------------+
//|                                                   DeltaOrder.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

input int Delta=200;
input double KLot=2;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
struct OrdersInfo
  {
   int               tick;                // тикет
   string            symb;                // символ
   int               cmd;                 // торговая операция
   double            oop;                 // цена открытия
   double            lot;                 // количество лотов
   bool              otl;                 // есть отложка
  };

OrdersInfo ord[1];
//+------------------------------------------------------------------+
//| 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=Green;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
     }

   r=OrderSend(NULL,type,0.2,NormalizeDouble(price,Digits),0,0,0,"",0,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DelOrder()
  {
   bool del;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()>1) del=OrderDelete(OrderTicket());
           }
        }
     }
   return;
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   ArrayResize(ord,OrdersTotal(),1);

   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()<2)
           {
            ord[i].tick=OrderTicket();
            ord[i].symb=OrderSymbol();
            ord[i].cmd=OrderType();
            ord[i].oop=OrderOpenPrice();
            ord[i].lot=OrderLots();
            ord[i].otl=false;
            if(!ord[i].otl)
              {
               //int r=OrderSend(NULL,OP_BUYSTOP,0.2,ord[0].oop+Delta*Point,3,0,0,"",0,0,Green);
               ord[0].otl=true;
              }
           }
        }
     }
     
   DelOrder();
   
   Comment("\n OOP: ",ord[0].oop,
           "\n Array Size: ",ArraySize(ord),
           "\n ORD: ",ord[0].otl);
  }
//+------------------------------------------------------------------+

avatar

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

  • 21 февраля 2017, 20:05
+
+1
Вот эта версия уже показывает какой то результат:




//+------------------------------------------------------------------+
//|                                                   DeltaOrder.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

input int Delta=200;
input double KLot=2;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
struct OrdersInfo
  {
   int               tick;                // тикет
   string            symb;                // символ
   int               cmd;                 // торговая операция
   double            oop;                 // цена открытия
   double            lot;                 // количество лотов
   bool              otl;                 // есть отложка
  };

OrdersInfo ord[1];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()<2)
           {
            ord[i].tick=OrderTicket();
            ord[i].symb=OrderSymbol();
            ord[i].cmd=OrderType();
            ord[i].oop=OrderOpenPrice();
            ord[i].lot=OrderLots();
            ord[0].otl=false;
           }
        }
     }
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int r=0;
   ArrayResize(ord,OrdersTotal(),1);

   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()<2)
           {
            if(!ord[i].otl)
              {
               if(OrderType()==0)  r=OrderSend(NULL,5,OrderLots()*KLot,ord[0].oop-Delta*Point,3,0,0,"",0,0,Green);
               if(OrderType()==1)  r=OrderSend(NULL,4,OrderLots()*KLot,ord[0].oop+Delta*Point,3,0,0,"",0,0,Green);
               ord[i].otl=true;
              }
           }
        }
     }

   Comment("\n OOP: ",ord[0].oop,
           "\n Array Size: ",ArraySize(ord),
           "\n ORD: ",ord[0].otl);
  }
//+------------------------------------------------------------------+

avatar

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

  • 22 февраля 2017, 07:25
+
0
компилировал в МетаЭдиторе, тестил в демке — советник выносит из окна ч/з пару сек., потому — стоп-ордера и не открыты.
avatar

  11  preasto Автор Сообщений: 445

  • 22 февраля 2017, 18:25
+
0
у меня что-то и эта версия ничего не открывает *???* 
В Журнале и Экспертах — только про открытые руками ордера.
avatar

  11  preasto Автор Сообщений: 445

  • 22 февраля 2017, 11:37

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