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

Рейтинг 2153



РЕКОМЕНДУЮ



советник меняла

Добрый день Андрей. Можете сделать советник, который меняет у уже открытых ордеров (с определённым МН) ТП и стоп лосс? Сов должен передвигать их на тот же уровень что и у последнего открытого ордера, т.е. не закрывать все ордера по достижению ТП или стоп лосс уровней последнего открытого ордера, а именно менять-подтягивать уровни всех ранее открытых ордеров к уровню последнего открытого ордера. Хорошо бы в настройках иметь; 1.МН-ордеров у которых должен менять, 2.Выбор ТП (вкл-выкл), 3… Выбор Стоп лосс (вкл-выкл)
  • 0
  • Просмотров: 3385
  • 13 июля 2016, 13:51
  • obals
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
3 штуки подряд! Что это было? :D 
Схемку нарисуйте как располагаются ордера чтобы можно было смоделировать в тестере и попробую сейчас сообразить.
avatar

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

  • 13 июля 2016, 13:59
+
0
За 3 отсыла извиняюсь, видимо повис инет, а я тупо жал кнопку. Схемку попробую нарисовать.
avatar

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

  • 13 июля 2016, 14:03
0
Цена 1.3 открыт ПЕРВЫЙ ордер buy лот 0.1 с ТП при 1.4 и СЛ при 1.0
Цена пошла вниз
Цена 1.2 открыт ВТОРОЙ ордер селл лот 0.2 с ТП при 1.1 и СЛ при 1.5
ИЗМЕНИЛСЯ ПЕРВЫЙ ордер buy лот 0.1 ТП стал при 1.1 и СЛ при 1.5 Цена пошла вверх
Цена 1.3 открыт ТРЕТИЙ ордер buy лот 0.3 с ТП при 1.4 и СЛ при 1.0 ИЗМЕНИЛСЯ ВТОРОЙ ордер селл лот 0.2 с ТП стал при 1.4 и СЛ при 1.0
ИЗМЕНИЛСЯ ПЕРВЫЙ ордер buy лот 0.1 ТП стал при 1.4 и СЛ при 1.0
avatar

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

  • 13 июля 2016, 14:43
0
Скиньте код которым открываете ордера я прогоню в тестере, наглядно нужно чтобы было все, так не понятно. Не зря картинку просил или скрин дайте с терминала с ордерами?
avatar

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

  • 13 июля 2016, 15:07
0
Cмоделировал в тестере. Выставил ордера с разными стопами, затем все модифицировались по последнему. Пока сырой набросок.






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

extern int StopLoss    = 0;    // Order sroploss
extern int TakeProfit  = 0;    // Order takeprofit
extern int Magic       = 123;  // Magic number
//+------------------------------------------------------------------+
//| 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,err=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,0.1,NormalizeDouble(price,Digits),3,sl,tp,"",Magic,0,clr);
   
return;
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double LastSL()
 
{
   
double sl=0;
   
if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     
{
     
if(OrderType()<2) sl=OrderStopLoss();
     
}
   
return(sl);
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double LastTP()
 
{
   
double tp=0;
   
if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     
{
     
if(OrderType()<2) tp=OrderTakeProfit();
     
}
   
return(tp);
 
}
//+------------------------------------------------------------------+
//|  Модификация стопов                                              |
//+------------------------------------------------------------------+
void StopMode(double sl,double tp)
 
{
   
bool m;
   
for(int i=OrdersTotal()-1;i>=0;i--)
     
{
     
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
       
{
         
if(OrderType()==OP_BUY)
           
{
           
if(OrderStopLoss()!=sl && OrderTakeProfit()!=tp)
             
{
               m
=OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Yellow);
               
return;
             
}
           
}

         
if(OrderType()==OP_SELL)
           
{
           
if(OrderStopLoss()!=sl && OrderTakeProfit()!=tp)
             
{
               m
=OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Yellow);
               
return;
             
}
           
}
       
}
     
}
 
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
 
{
   
if(OrdersTotal()<1)
     
{
     
for(int i=1;i<=2;i++)
       
{
         
PutOrder(2,Bid-222*Point*i);
         
PutOrder(5,Bid-666*Point);
       
}
     
}

   
StopMode(LastSL(),LastTP());

   
Comment("\n SL: ",LastSL(),
           
"\n TP: ",LastTP());
 
}
//+------------------------------------------------------------------+

avatar

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

  • 13 июля 2016, 15:50
0
Я пользуюсь разработанным Вами советником Гридер на пробое свечи zakaz.opentraders.ru/32407.html
avatar

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

  • 13 июля 2016, 17:08
0
Когда разные ордера и стоп не туда попадет ошибка будет, здесь или большие стопы ставить или учитывать цену открытия.
avatar

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

  • 13 июля 2016, 19:03
+
0
Хорошо бы «разжевать» последнюю фразу для «тех кто в танке» Иначе мой мозг перегреется.
avatar

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

  • 13 июля 2016, 23:11
0
У меня также мозг кипит когда нет четкого ТЗ, необходимо чтобы было все предельно ясно и наглядно. Чтобы не приходилось все додумывать и догадываться а тем более вытягивать задание. Когда не ясности это просто выносит мозг. Чем доступнее и понятнее вы сможете донести до программиста желаемое тем лучше будет результат.
avatar

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

  • 14 июля 2016, 07:54
+
+1
avatar

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

  • 14 июля 2016, 08:15
+
+1
Еще
avatar

  13  Fargo Сообщений: 495

  • 14 июля 2016, 09:01
+
0
Fargo, беру на вооружение :D 
avatar

  27  Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..

  • 14 июля 2016, 12:52
0
Памятка заказчику :) 

avatar

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

  • 14 июля 2016, 13:37
+
0
Ваше задание индивидуальное, все функции нужно писать и отлаживать с нуля, это долго. Мне здесь оплачивается только небольшой объем работы. Пока такой вариант.




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

extern int StopLoss    = 0;    // Order sroploss
extern int TakeProfit  = 0;    // Order takeprofit
extern int Magic       = 123;  // Magic number
//+------------------------------------------------------------------+
//| 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,err=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,0.1,NormalizeDouble(price,Digits),3,sl,tp,"",Magic,0,clr);
   
return;
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double LastSL()
 
{
   
double sl=0;
   
if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     
{
     
if(OrderType()<2) sl=OrderStopLoss();
     
}
   
return(sl);
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double LastTP()
 
{
   
double tp=0;
   
if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     
{
     
if(OrderType()<2) tp=OrderTakeProfit();
     
}
   
return(tp);
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int LastType()
 
{
   
int type=8;
   
if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     
{
     
if(OrderType()<2) type=OrderType();
     
}
   
return(type);
 
}
//+------------------------------------------------------------------+
//|  Модификация стопов                                              |
//+------------------------------------------------------------------+
void StopMode(double sl,double tp)
 
{
   
bool m;
   
double st=0,tk=0;
   
for(int i=OrdersTotal()-1;i>=0;i--)
     
{
     
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
       
{
         
if(OrderType()==OP_BUY)
           
{
            st
=NormalizeDouble(sl,5);
            tk
=NormalizeDouble(tp,5);
           
           
if(OrderStopLoss()!=tk && OrderTakeProfit()!=st)
             
{
               m
=OrderModify(OrderTicket(),OrderOpenPrice(),tk,st,0,Yellow);
               
return;
             
}
           
}

         
if(OrderType()==OP_SELL)
           
{
            st
=NormalizeDouble(sl,5);
            tk
=NormalizeDouble(tp,5);
           
if(OrderStopLoss()!=st && OrderTakeProfit()!=tk)
             
{
               m
=OrderModify(OrderTicket(),OrderOpenPrice(),st,tk,0,Yellow);
               
return;
             
}
           
}
       
}
     
}
 
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
 
{
   
if(OrdersTotal()<1)
     
{
     
for(int i=1;i<=2;i++)
       
{
         
PutOrder(2,Bid-222*Point*i);
         
PutOrder(5,Bid-666*Point);
       
}
     
}

   
StopMode(LastSL(),LastTP());

   
Comment("\n SL: ",LastSL(),
           
"\n TP: ",LastTP(),
           
"\n Type: ",LastType());
 
}
//+------------------------------------------------------------------+

avatar

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

  • 14 июля 2016, 08:52
0
И за это спасибо.
avatar

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

  • 14 июля 2016, 20:26

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