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

Рейтинг 2073



РЕКОМЕНДУЮ



Усреднение с откусыванием

Добрый день. Не могли бы вы сделать для всеобщего пользования советник с усреднением и откусыванием застрявшей позиции?
  • +1
  • Просмотров: 3299
  • 26 июня 2021, 14:50
  • rus008
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

+
0
Не могли бы вы

мог бы, но со скринами
avatar

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

  • 26 июня 2021, 15:21
+
0
Я надеюсь получилось сформулировать мысль.А дальше как будет вам удобней исходя из вашего опыта

avatar

  6  rus008 Автор Сообщений: 46

  • 26 июня 2021, 16:45
+
0
strategy.opentraders.ru/39214.html
откусыватель от Андрея здесь. Посмотрите, может подойдет.
avatar

  13  verta81 Сообщений: 350

  • 26 июня 2021, 16:51
+
0
Спасибо.Сейчас буду пробовать
avatar

  6  rus008 Автор Сообщений: 46

  • 26 июня 2021, 16:54
+
0
в базе есть советник FurSеtka. не подойдет?
avatar

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

  • 26 июня 2021, 16:57
+
0
AM2 его сейчас тоже попробую. Но дело в том что я выставляю лимитные ордера в ручную.
avatar

  6  rus008 Автор Сообщений: 46

  • 26 июня 2021, 17:15
+
0
Предложу такой вариант:
1. сов открывает ордер по сигналу ( допустим Close[1]>Open[1]) и через step ставит следующий ордер в ту же сторону, сетка (можно с Lot*Klot).
2. если в сетке допустим 5 ордеров, то следующий будет усредняющий с лотом = 30% от суммы открытых лотов.
3.когда прибыль усредняющего ордера будет >= 10% от самого первого убыточного ордера в сетке, то закрываем 10% первого ордера и усредняющий ордер.
4.если цена пошла не в нашу сторону, то продолжаем ставить усредняющие ордера через step2.
avatar

  13  verta81 Сообщений: 350

  • 26 июня 2021, 17:07
+
0
Хороший вариант verta81
avatar

  6  rus008 Автор Сообщений: 46

  • 26 июня 2021, 17:14
+
0
С первым вариантом Откусыватель от Андрея столкнулся с такой ситуацией. Все хорошо работает когда один ордер. Если есть еще лимытные ордера которые уже открылись, то он перестает выполнять свою функцию
avatar

  6  rus008 Автор Сообщений: 46

  • 26 июня 2021, 17:17
+
0
здесь еще нужно согласовывать тз. пока все размыто
avatar

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

  • 26 июня 2021, 18:59
+
0
Андрей я уже часа 3 сижу не вставая тестирую ваш откусыватель. И пришел к такому выводу что помоему не стоит заново велосипед изобретать. А не много доработать ваш откусываетель. Усреднение не через N пипсов. а по пин бару с выбором таймфрейма для пин бара.

Хотя вариант verta81 тоже не плохой

Предложу такой вариант:
1. сов открывает ордер по сигналу ( допустим Close[1]>Open[1]) и через step ставит следующий ордер в ту же сторону, сетка (можно с Lot*Klot).
2. если в сетке допустим 5 ордеров, то следующий будет усредняющий с лотом = 30% от суммы открытых лотов.
3.когда прибыль усредняющего ордера будет >= 10% от самого первого убыточного ордера в сетке, то закрываем 10% первого ордера и усредняющий ордер.
4.если цена пошла не в нашу сторону, то продолжаем ставить усредняющие ордера через step2.
avatar

  6  rus008 Автор Сообщений: 46

  • 26 июня 2021, 19:51
+
0
на 2-е
avatar

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

  • 27 июня 2021, 06:39
+
0
объединил вариант в тз и последний и написал свой :) 



суть такая: зависший ордер или серию выводим в плюс сильно увеличенным лотом. допустим открыт один или несколько бай 0.1, они ушли в минус, где то на линии поддержки открываем ордер лотом 2 и когда все выходят в плюс закрываем.

лот вводим в окошко, закрытие идет при нажатой кнопке.


//+------------------------------------------------------------------+
//|                                                      Otkusim.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 int Slip          = 100;      // реквот
extern int Magic         = 123;      // магик

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   PutEdit("L",90,160,(string)Lots);
   PutButton("B",90,120,"BUY");
   PutButton("S",90,80,"SELL");
   PutButton("C",90,40,"CLOSE");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectDelete(0,"B");
   ObjectDelete(0,"S");
   ObjectDelete(0,"C");
   ObjectDelete(0,"L");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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,3);
//--- установим текст
   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 PutEdit(string name,int x,int y,string text)
  {
//--- создадим поле ввода
   ObjectCreate(0,name,OBJ_EDIT,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);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим способ выравнивания текста в объекте
   ObjectSetInteger(0,name,OBJPROP_ALIGN,ALIGN_CENTER);
//--- установим (true) или отменим (false) режим только для чтения
   ObjectSetInteger(0,name,OBJPROP_READONLY,false);
//--- установим угол графика, относительно которого будут определяться координаты объекта
   ObjectSetInteger(0,name,OBJPROP_CORNER,3);
//--- установим цвет текста
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll()
  {
   bool cl=1;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         string symb=OrderSymbol();
         double bid=MarketInfo(symb,MODE_BID);
         double ask=MarketInfo(symb,MODE_ASK);
         int dg=(int)SymbolInfoInteger(symb,SYMBOL_DIGITS);

         if(OrderType()==0)
           {
            RefreshRates();
            cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(bid,dg),Slip,White);
           }
         if(OrderType()==1)
           {
            RefreshRates();
            cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(ask,dg),Slip,White);
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Профит всех ордеров по типу ордера                               |
//+------------------------------------------------------------------+
double AllProfit(int ot=-1)
  {
   double pr=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))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }

            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int r=0;
   double lot=StringToDouble(ObjectGetString(0,"L",OBJPROP_TEXT));

   if(ObjectGetInteger(0,"B",OBJPROP_STATE)==1)
     {
      r=OrderSend(NULL,0,lot,NormalizeDouble(Ask,_Digits),Slip,0,0,"",Magic,0,Blue);
      ObjectSetInteger(0,"B",OBJPROP_STATE,0);
     }

   if(ObjectGetInteger(0,"S",OBJPROP_STATE)==1)
     {
      r=OrderSend(NULL,1,lot,NormalizeDouble(Bid,_Digits),Slip,0,0,"",Magic,0,Red);
      ObjectSetInteger(0,"S",OBJPROP_STATE,0);
     }

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

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

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

avatar

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

  • 1 июля 2021, 21:44
+
0
Спасибо!
avatar

  6  rus008 Автор Сообщений: 46

  • 25 июля 2021, 14:35
+
0
Попробовал написать вариант с откусыванием дальнего убыточного ордера:
www.opentraders.ru/downloads/3050/
Не судите строго))
avatar

  13  verta81 Сообщений: 350

  • 2 июля 2021, 00:17
+
0
И тебе спасибо!
avatar

  6  rus008 Автор Сообщений: 46

  • 25 июля 2021, 14:35

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