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

Рейтинг 2073



РЕКОМЕНДУЮ



Советник помощник.

Здравствуйте, друзья разработчики, сделайте, пожалуйста, советник-помогатор:

-сделки открываются вручную.
-при появлении открытой позиции советник бросает сетку лимитных ордеров в сторону открытия сделки. Количество и шаг задается в параметрах советника. (limits_number, step, лот такой же как в открытой позиции).
Например, появилась продажа, советник кидает селл лимиты соответственно выше цены открытой позиции. Для покупки бай лимиты устанавливаем ниже цены открытой позиции.

-если хотя бы одна сделка оказывается в плюсе на заданное количество пунктов (profit_pips), то
Смотрим:
-:) если в настройках разрешен безубыток (allow_BE), то
-при количестве открытых позиций больше одной, кроем все, кроме дальней (с наибольшим профитом). Самую дальнюю переводим в БУ на количество пунктов, указанное в настройках. (BE_pips)
(Соответственно, если позиция одна, то ставим ее в безубыток на то же количество пунктов BE_pips). Нетронутые лимитники удаляем.
-:) если безубыток не разрешен, то закрываем всё открытое, нетронутые лимитники удаляем.

Убытки контролировать не нужно, усредняться, мартинить и т.п. нет необходимости. В случае неудачи — стоп-аут.

PS: Разработчикам слава.*victory*  Админу печеньки:) 
  • 0
  • Просмотров: 855
  • 12 сентября 2022, 20:07
  • Enot-pipsun
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

+
0
скрины
avatar

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

  • 12 сентября 2022, 20:22
+
0
Вариант 1



Здравствуйте.

например в настройках выставили
количество лимитников-10
шаг-50 пунктов
прибыль для закрытия-500 пунктов
разрешить БУ-нет
размер БУ в пунктах-150

Картина следующая:
Событие 1: появляется открытая позиция на продажу по цене бид объемом 1 лот (синяя линия, аск -красная)
В этот момент советник раскидывает селл лимиты с шагом 50 пипсов (0,50 в нашем случае с золотом. 0,00050 обычные пары и 0,050 с йеной) в количестве 10 шт лотом 1, считая вверх от бида. Ставим из десяти лимитов все, что брокер позволит.

Событие 2: срабатывает лимит
Событие 3: срабатывает лимит
Событие 4: срабатывает лимит
Событие 5: срабатывает лимит
Событие 6: срабатывает лимит
Событие 7: в этот момент из всех открытых позиций одна в плюсе на 500 пунктов. БУ не разрешен-закрываем Всё. Удаляем нетронутые лимитники.


Вариант 2.



в настройках выставили
количество лимитников-10
шаг-50 пунктов
прибыль для закрытия-500 пунктов
разрешить БУ-да
размер БУ в пунктах-150

Событие 1: появляется открытая позиция на продажу по цене бид объемом 1 лот (синяя линия, аск -красная)
В этот момент советник раскидывает селл лимиты с шагом 50 пипсов (0,50 в нашем случае с золотом. 0,00050 обычные пары и 0,050 с йеной) в количестве 10 шт лотом 1, считая вверх от бида. Ставим из десяти лимитов все, что брокер позволит.

Событие 2: срабатывает лимит
Событие 3: срабатывает лимит
Событие 4: срабатывает лимит
Событие 5: срабатывает лимит
Событие 6: срабатывает лимит
Событие 7: в этот момент из всех открытых позиций одна в плюсе на 500 пунктов. Её переводим в БУ (желтая линия). Остальные: 2,3,4,5 закрываем. Удаляем нетронутые лимитники.


Для покупок зеркально наоборот.

PS основная цель-дождаться плюса по одной позиции в 500 пунктов. Дальше только два варианта.
avatar

  12  Enot-pipsun Автор Сообщений: 291

  • 13 сентября 2022, 16:02
+
0
на 19-е
avatar

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

  • 13 сентября 2022, 17:47
+
0
Спасибо*hi* 
avatar

  12  Enot-pipsun Автор Сообщений: 291

  • 13 сентября 2022, 18:20
+
+2
здесь нужно написать кучу уникальных функций. то что удалось быстро сделать:


//+------------------------------------------------------------------+
//|                                                     BuySell9.mq4 |
//|                                              Copyright 2022, AM2 |
//|                                     https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, AM2"
#property link      "https://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs

extern double Lots       = 0.1;        // лот
extern double Profit     = 500;        // профит в пп

extern int StopLoss      = 0;          // лось
extern int TakeProfit    = 0;          // язь

extern int Count         = 5;          // число ордеров
extern int Step          = 222;        // шаг
extern int Slip          = 30;         // реквот
extern int Magic         = 123;        // магик

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
   PutButton("b",66,77,"BUY");
   PutButton("s",66,55,"SELL");
   PutButton("c",66,33,"CLOSE");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=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,Lots,NormalizeDouble(price,_Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   bool cl=1;

   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);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Подсчет позиций                                                  |
//+------------------------------------------------------------------+
int CountTrades(int ot=-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()==0 && (ot==0 || ot==-1))
               count++;
            if(OrderType()==1 && (ot==1 || ot==-1))
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|     Тип крайней позы                                             |
//+------------------------------------------------------------------+
int LastOrderType()
  {
   int type=8;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            type=OrderType();
            break;
           }
        }
     }
   return(type);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double LastProfit()
  {
   double p=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)
              {
               p=(Bid-OrderOpenPrice())/_Point;
               break;
              }

            if(OrderType()==1)
              {
               p=(OrderOpenPrice()-Bid)/_Point;
               break;
              }
           }
        }
     }

   return(p);
  }
//+------------------------------------------------------------------+
//| Удаление отложенных ордеров                                      |
//+------------------------------------------------------------------+
void DelOrder(int type=-1)
  {
   bool del=1;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==type || type==-1)
               del=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
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 || type==-1)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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,60);
   ObjectSetInteger(0,name,OBJPROP_YSIZE,20);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,name,OBJPROP_CORNER,3);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,10);
//--- установим цвет текста
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(LastOrderType()==0 && CountOrders(2)<1)
     {
      for(int i=1; i<=Count; i++)
        {
         PutOrder(2,Bid-Step*i*_Point);
        }
     }

   if(LastOrderType()==1 && CountOrders(3)<1)
     {
      for(int i=1; i<=Count; i++)
        {
         PutOrder(3,Bid+Step*i*_Point);
        }
     }

   if(ObjectGetInteger(0,"b",OBJPROP_STATE)==1)
     {
      PutOrder(0,Ask);
      ObjectSetInteger(0,"b",OBJPROP_STATE,false);
     }
   if(ObjectGetInteger(0,"s",OBJPROP_STATE)==1)
     {
      PutOrder(1,Bid);
      ObjectSetInteger(0,"s",OBJPROP_STATE,false);
     }

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

   if(LastProfit()>Profit)
     {
      CloseAll();
      DelOrder();
     }

   Comment("\n Profit: ",LastProfit());
  }
//+------------------------------------------------------------------+

avatar

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

  • 19 сентября 2022, 22:17
+
0
Спасибо от всех мохнатых полосатых) Как наворуем печенек принесём)
avatar

  12  Enot-pipsun Автор Сообщений: 291

  • 20 сентября 2022, 17:05

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