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

Рейтинг 2091



РЕКОМЕНДУЮ



Помощник для выставления сетки

Андрей, здравствуйте!
Нужен помощник для ручной торговли на МТ4.

1. Панелька из трех кнопок:
— БАЙ
— СЕЛЛ
— Закрыть

2. В настройках:
— тейк начальный
— стоп начальный
— отложка 1 расстояние
— тейк 1
— стоп 1
— отложка 2 расстояние
— тейк 2
— стоп 2
— отложка 3 расстояние
— тейк 3
— стоп 3
— отложка 4 расстояние
— тейк 4
— стоп 4
— начальный лот
— коэфициент умножения лота
— магик
— % от эквити

3. Принцип работы.
Точка входа определяется трейдером. Ордер выставляется вручную путем нажатия соответствующей кнопки на панели.
Советник выставляет указанные в настройках начальные стоп и тейк, а также отложенные ордера бай-лимит (или селл-лимит) на указанных расстояниях с заданными параметрами.

Отсчет расстояния для всех стопов берется от цены открытия «ручного» ордера.
Тейки рассчитываются от цены открытия «своих» ордеров.

Лот для каждой последующей отложки умножается на коэффициент, указанный в настройках.
Например, объем начального ордера был 0,01. Коэф. = 2.
Для первой отложки лот будет 0,01*2=0,02.
Для второй отложки лот будет 0,02*2=0,04.
Для третьей отложки лот будет 0,04*2=0,08.
Для четвертой отложки лот будет 0,08*2=0,16.
Если цена пошла в ожидаемом направлении, то ордер закрывается по начальному тейку.
Если цена пошла в обратную сторону и сработала первая отложка, то начальный тейк переносится на уровень тейк 1.
Если цена и дальше идет против нас и сработала вторая отложка, то начальный тейк и тейк 1 переносятся на уровень тейк 2.
Если цена и дальше идет против нас и сработала третья отложка, то начальный тейк, тейк 1 и тейк 2 переносятся на уровень тейк 3.
Если цена и дальше идет против нас и сработала четвертая отложка, то начальный тейк, тейк 1, тейк 2 и тейк 3 переносятся на уровень тейк 4.

Советник контролирует убытки. Если просадка по счету достигает указанных %% по эквити, торговля автоматически прекращается.

Торговлю также в любой момент можно остановить с помощью кнопки «Закрыть».
Торговая панелька размещается в левом нижнем углу.

С уважением, Юрий.
  • 0
  • Просмотров: 3864
  • 26 мая 2021, 14:18
  • apologetest
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

+
0
на 28-е
avatar

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

  • 26 мая 2021, 17:53
+
0
процентов 60 сделал:




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

//--- Inputs
extern double Lots       = 0.1;      // лот позы
extern double KLot       = 2;        // умножение лота

extern int Delta1        = 100;      // расстояние от цены 1
extern int Delta2        = 200;      // расстояние от цены 2
extern int Delta3        = 300;      // расстояние от цены 3
extern int Delta4        = 400;      // расстояние от цены 4

extern int StopLoss1     = 2000;     // лось 1
extern int StopLoss2     = 2000;     // лось 2
extern int StopLoss3     = 2000;     // лось 3
extern int StopLoss4     = 2000;     // лось 4

extern int TakeProfit1   = 200;      // язь 1
extern int TakeProfit2   = 200;      // язь 2
extern int TakeProfit3   = 200;      // язь 3
extern int TakeProfit4   = 200;      // язь 4

extern int ClosePro      = 30;       // процент
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   PutButton("B",20,120,"BUY LIMIT");
   PutButton("S",20,80,"SELL LIMIT");
   PutButton("C",20,40,"CLOSE");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectDelete(0,"B");
   ObjectDelete(0,"S");
   ObjectDelete(0,"C");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutButton(string name,int x,int y,string text)
  {
   ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
//--- установим координаты кнопки
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
   ObjectSetInteger(0,name,OBJPROP_XSIZE,80);
   ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,name,OBJPROP_CORNER,2);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,9);
//--- установим цвет текста
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger(0,name,OBJPROP_HIDDEN,false);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger(0,name,OBJPROP_ZORDER,0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   bool cl;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,_Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,_Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Pro()
  {
   double pro=(AccountEquity()-AccountBalance())/AccountBalance()*100;//(1100-1000)/1000
   return(pro);
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
int CountOrders(int type=-1)
  {
   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 || (OrderType()>=0 && type==-1))
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Лот                                                              |
//+------------------------------------------------------------------+
double Lot(int type)
  {
   double lots=Lots;

   if(KLot>1)
      lots=NormalizeDouble(Lots*MathPow(KLot,CountOrders(type)),2);
   return(lots);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int r=0;

   if(Pro()<-ClosePro && ClosePro>0)
      CloseAll();

   if(ObjectGetInteger(0,"B",OBJPROP_STATE)==1)
     {
      r=OrderSend(NULL,2,Lot(2),NormalizeDouble(Ask-Delta1*_Point,_Digits),Slip,NormalizeDouble(Ask-Delta1*_Point-StopLoss1*_Point,_Digits),NormalizeDouble(Ask-Delta1*_Point+TakeProfit1*_Point,_Digits),"",Magic,0,Blue);
      r=OrderSend(NULL,2,Lot(2),NormalizeDouble(Ask-Delta2*_Point,_Digits),Slip,NormalizeDouble(Ask-Delta2*_Point-StopLoss2*_Point,_Digits),NormalizeDouble(Ask-Delta2*_Point+TakeProfit2*_Point,_Digits),"",Magic,0,Blue);
      r=OrderSend(NULL,2,Lot(2),NormalizeDouble(Ask-Delta3*_Point,_Digits),Slip,NormalizeDouble(Ask-Delta3*_Point-StopLoss3*_Point,_Digits),NormalizeDouble(Ask-Delta3*_Point+TakeProfit3*_Point,_Digits),"",Magic,0,Blue);
      r=OrderSend(NULL,2,Lot(2),NormalizeDouble(Ask-Delta4*_Point,_Digits),Slip,NormalizeDouble(Ask-Delta4*_Point-StopLoss4*_Point,_Digits),NormalizeDouble(Ask-Delta1*_Point+TakeProfit4*_Point,_Digits),"",Magic,0,Blue);
      ObjectSetInteger(0,"B",OBJPROP_STATE,0);
     }

   if(ObjectGetInteger(0,"S",OBJPROP_STATE)==1)
     {
      r=OrderSend(NULL,3,Lot(3),NormalizeDouble(Ask+Delta1*_Point,_Digits),Slip,NormalizeDouble(Ask+Delta1*_Point+StopLoss1*_Point,_Digits),NormalizeDouble(Ask+Delta1*_Point-TakeProfit1*_Point,_Digits),"",Magic,0,Red);
      r=OrderSend(NULL,3,Lot(3),NormalizeDouble(Ask+Delta2*_Point,_Digits),Slip,NormalizeDouble(Ask+Delta2*_Point+StopLoss2*_Point,_Digits),NormalizeDouble(Ask+Delta2*_Point-TakeProfit2*_Point,_Digits),"",Magic,0,Red);
      r=OrderSend(NULL,3,Lot(3),NormalizeDouble(Ask+Delta3*_Point,_Digits),Slip,NormalizeDouble(Ask+Delta3*_Point+StopLoss3*_Point,_Digits),NormalizeDouble(Ask+Delta3*_Point-TakeProfit3*_Point,_Digits),"",Magic,0,Red);
      r=OrderSend(NULL,3,Lot(3),NormalizeDouble(Ask+Delta4*_Point,_Digits),Slip,NormalizeDouble(Ask+Delta4*_Point+StopLoss4*_Point,_Digits),NormalizeDouble(Ask+Delta4*_Point-TakeProfit4*_Point,_Digits),"",Magic,0,Red);
      ObjectSetInteger(0,"S",OBJPROP_STATE,0);
     }

   if(ObjectGetInteger(0,"C",OBJPROP_STATE)==1)
     {
      CloseAll();
      ObjectSetInteger(0,"C",OBJPROP_STATE,0);
     }

   Comment("\n Equity: ",Pro());
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+


avatar

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

  • 26 мая 2021, 21:38
+
0
Андрей, в настройках есть только лоси и язи для четырех отложек.
Но не вижу стопа и тейка для цены «0».
Т.е. для цены ордера, открытого руками.
В ТЗ они названы
— тейк начальный
— стоп начальный

И все отложки выставляются на расстоянии от начальной «0» цены.
extern int Delta1 = 100; // расстояние от цены начальной
extern int Delta2 = 200; // расстояние от цены начальной
extern int Delta3 = 300; // расстояние от цены начальной
extern int Delta4 = 400; // расстояние от цены начальной

И все стопы выставляются на расстоянии от начальной «0» цены.
extern int StopLoss0 = 415; // лось 0
extern int StopLoss1 = 415; // лось 1
extern int StopLoss2 = 415; // лось 2
extern int StopLoss3 = 415; // лось 3
extern int StopLoss4 = 415; // лось 4

Получается, что все стопы одной величины цены для всех ордеров. Похоже, что можно прописать одной строчкой.

Тейки — каждый от цены своего ордера.
extern int TakeProfit0 = 95; // язь 0
extern int TakeProfit1 = 75; // язь 1
extern int TakeProfit2 = 85; // язь 2
extern int TakeProfit3 = 105; // язь 3
extern int TakeProfit4 = 115; // язь 4

Прошу простить, если что непонятно объясняю.
Готов, если нужно еще сто раз уточнять.

avatar

  11  apologetest Автор Сообщений: 284 - Юрий

  • 26 мая 2021, 23:11
+
0
Андрей, я сегодня раскидывал в очередной раз отложки при торговле и до меня таки дошло — а зачем отложкам вообще стопы нужны?! *bravo* 
Достаточно ведь одного стопа к самому первому ордеру, который рукам открывается.
А я два месяца мучился с этими стопами для отложек… *hi* 
avatar

  11  apologetest Автор Сообщений: 284 - Юрий

  • 27 мая 2021, 16:21
+
0
Достаточно ведь одного стопа к самому первому ордеру, который рукам открывается.
А я два месяца мучился с этими стопами для отложек


самый простой вариант — общий тейк всех поз.

в настройках есть только лоси и язи для четырех отложек.
Но не вижу стопа и тейка для цены «0».


сделано на 60%. остальное в следующем топике
avatar

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

  • 27 мая 2021, 17:55

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