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

Рейтинг 2146



РЕКОМЕНДУЮ



Частичное закрытие убыточных сделок

Здравствуйте!
Просьба сделать советник, который не будет открывать ордера, а будет только работать с открытыми лотами.
(В конце оставлю ссылку на почти такой же готовый вариант, который Вы мне уже делали, можно либо сделать заново либо изменить один параметр в готовом. Хотелось бы конечно заново, чтобы потом этот доработать можно было, но не критично, можно и готовый изменить, лишь бы идея была выполнена :)  )

По параметрам:
# Часть лота, который советник будет закрыть у самого убыточного ордера, Например: 0.02
# Количество профитных сделок, которыми советник будет откусывать от самого убыточного лота. Например: 3 профитных лота.
# профит в пунтках
# направление buy или sell.

Опишу логику работы по указанным параметрам:
# Лот 0.02 (Плот который будет откусываться у самого убыточного ордера)
# 3 (максимальное количество профитных сделок для откусывания лота 0,02 у самого убыточного ордера)
# 10 пунктов профита (полученный профит при закрытии лота 0,02 за счёт профитных сделок)
# Buy or Sell (направление с которым советник будет работать, в этом случае buy будет закрываться с помощью buy)

Идея такова, советник всегда ищет и мониторит самый убыточный ордер на счете(в нашем примере ищет самый убыточный buy). Допустим у нас самый убыточный лот это buy обьемом 0.10.
В первом параметре мы указали лот 0.02. Таким образом советник от самого убыточного ордера (0.10 buy) будет пытаться откусить лот 0.02 за счёт 3-х прибыльных buy ордеров на этой паре. Соответственно если у нас есть один профитный ордер и его хватит, чтобы закрыть кусок от самого убыточного ордера 0,02 с профитом в 10 пунктов, то он закроет его, но не более 3-х ордеров.


*По поводу готового советника- Вы мне раньше делали почти точно такой же советник, только он закрывает ордер целиком, а не частично, можно просто в нём поменять с полного закрытия на частичное.
zakaz.opentraders.ru/25267.html
  • 0
  • Просмотров: 4802
  • 2 февраля 2019, 16:05
  • anathem
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
на 8-е
avatar

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

  • 3 февраля 2019, 11:30
+
+1
По поводу готового советника- Вы мне раньше делали почти точно такой же советник, только он закрывает ордер целиком, а не частично, можно просто в нём поменять с полного закрытия на частичное

посмотрел ссылку. я тогда не сделал его. а этот вариант еще сложнее.
avatar

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

  • 3 февраля 2019, 11:36
+
0
Тот советник полностью готов, он закрывает самый убыточный количеством профитных, которые указать. Я его пару месяцев на демо тестировал. Только вместо самого убыточного ордера, надо, чтобы закрывалась его часть, а не он целиком.
avatar

  7  anathem Автор Сообщений: 142

  • 4 февраля 2019, 19:03
+
+1
на основе своего кода еще могу что то посмотреть а тот советник оксаны.
avatar

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

  • 4 февраля 2019, 19:10
+
0
Прошу прощения, но по наброску ничего не понял. Советнику не надо открывать ордера, или это для теста?
avatar

  7  anathem Автор Сообщений: 142

  • 4 февраля 2019, 19:13
+
+1
чтобы сделать такой слепой советник, нужно смоделировать ситуацию в тестере. что я и сделал.
avatar

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

  • 4 февраля 2019, 19:15
+
+1
вот набросок от которого можно оттолкнуться:



1. 1-й лот — 0.5
2. остальные — 0.1
3. как только профит по остальным будет больше половины убытка по 1-му
кроем 0.2.
4. откусываем если ордеров больше 5



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

//--- Inputs
extern double  Lot1        = 0.5;      // лот 1
extern double  Lot2        = 0.1;      // лот 2
extern double  Lot3        = 0.2;      // лот 3
extern double  Loss        = 4500;     // лось в рублях
extern double  Profit      = 50;       // язь в рублях
extern int     Step        = 333;      // шаг ордеров
extern int     Count       = 5;        // количество ордеров
extern int     Slip        = 3;        // проскальзывание
extern int     Exp         = 30;       // истечение
extern int     Magic       = 123;      // магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price,double lot)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
     }

   r=OrderSend(NULL,type,lot,NormalizeDouble(price,Digits),Slip,0,0,"",Magic,0,clr);
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   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()<2) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|           Профит всех ордеров по лоту                            |
//+------------------------------------------------------------------+
double AllProfit(double lot)
  {
   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(OrderLots()==lot)pr+=OrderProfit()+OrderCommission()+OrderSwap();
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера                                  |
//+------------------------------------------------------------------+
void CloseAll()
  {
   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)
              {
               RefreshRates();
               if(OrderLots()==Lot2) cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
               if(OrderLots()==Lot1) cl=OrderClose(OrderTicket(),Lot3,NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==1)
              {
               RefreshRates();
               if(OrderLots()==Lot2) cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
               if(OrderLots()==Lot1) cl=OrderClose(OrderTicket(),Lot3,NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(OrdersTotal()<1)
     {
      PutOrder(0,Ask,Lot1);
      if(CountOrders(2)<1) for(int i=1;i<=Count;i++) PutOrder(2,Bid-Step*Point*i,Lot2);//buylimit
     }
     
   if(CountTrades()>Count  && AllProfit(Lot1)<0 && AllProfit(Lot2)>0 && AllProfit(Lot1)/2+AllProfit(Lot2)>0) CloseAll();
   
   Comment("\n Lot1 Profit: ",AllProfit(Lot1),
           "\n Lot2 Profit: ",AllProfit(Lot2),
           "\n Trades: ",CountTrades());
  }
//+------------------------------------------------------------------+
avatar

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

  • 4 февраля 2019, 18:23
+
0
Где скачать такой советник?
avatar

  9  cehfy Сообщений: 204 - Сергей

  • 9 февраля 2019, 12:07
+
0
Если бы я знал, 4 года балуюсь советниками, весь интернет перерыл, а такого полезного советника так и не нашел.
avatar

  7  anathem Автор Сообщений: 142

  • 9 февраля 2019, 12:55
+
0
Нечто подобное я попросил сворганить здесь, но оказалось лишь один прогер смог это реализовать и то тестерную, за реал просит 100 баксов — zakaz.opentraders.ru/55018.html#comment153117, если вы подобное нашли поделитесь с нами будем чрезмерно благодарны. С уважением.
avatar

  5  Lotos017 Сообщений: 70

  • 17 июля 2020, 20:56
+
0
Lotos017, я пишу советники и индикаторы бесплатно, но исключительно для Вас сделал исключение в виде небольшой платы за проделанную работу и потраченное время. Думаю, Вы понимаете из какого расчета взяты эти 100 баксов.
Редактирован: 17 июля 2020, 22:35
avatar

  18  Andrju81 Сообщений: 245 - Андрей

  • 17 июля 2020, 22:34
+
0
К сожалению да же представления не имею, разве, что догадку.
avatar

  5  Lotos017 Сообщений: 70

  • 18 июля 2020, 01:45

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