preasto

 
Уровень 11

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


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

Рейтинг 2161



РЕКОМЕНДУЮ



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

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

При открытии первичного рыночного ордера любого направления 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
  • Просмотров: 4214
  • 20 февраля 2017, 15:28
  • preasto
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

Комментарии (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

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

  • 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

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

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

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

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

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

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

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