shulgindv

 
Уровень 68

  Торгую в компаниях:


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

Рейтинг 2151



РЕКОМЕНДУЮ



Заказ советника "Risk Manager"

Требуется собрать робота «Risk Manager» с атрибутами (в валюте и процентах):
Риск на сделку
Максимальный риск на убыток в день
Максимальный риск на убыток в неделю
Максимальный риск на убыток в месяц
Максимальный риск на прибыль в день
Максимальный риск на прибыль в неделю
Максимальный риск на прибыль в месяц
Максимальное количество убыточных сделок подряд в день
Максимальное количество убыточных сделок подряд в неделю
Максимальное количество убыточных сделок подряд в месяц
Локирование
Ограничения по валютным парам и прочие настройки в текстовом документе (док. прилагается): cloud.mail.ru/public/2wws/ZucujvZqX

При достижении каких либо ограничений вывод на экран алерта с пояснялкой,
а так же закрытие сделок и удаление отложенных ордеров при попытке встать на грабли.
  • +5
  • Просмотров: 2641
  • 16 мая 2016, 10:10
  • shulgindv
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
прибыль это тоже риск? )
avatar

  13  writelint00 Сообщений: 592 - writelint

  • 16 мая 2016, 10:11
+
0
Риск потери прибыли :) 
avatar

  68  shulgindv Автор Сообщений: 5442

  • 16 мая 2016, 10:13
+
0
и чтоб вырубал терминал:) 
avatar

  10  cardon Сообщений: 376

  • 16 мая 2016, 10:42
+
0
как вариант отключения от торговли *yes*, но алерта не увидеть будет наверно
Редактирован: 16 мая 2016, 10:50
avatar

  68  shulgindv Автор Сообщений: 5442

  • 16 мая 2016, 10:49
+
0
Начну сейчас с дня :) 
avatar

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

  • 16 мая 2016, 11:41
+
0
Требуется собрать робота «Risk Manager» с атрибутами (в валюте и процентах):


Задание индивидуальное, здесь не собирать а каждый пункт кодить надо и соответственно работы в разы больше.

Вот вариант на день:


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

//--- Inputs
extern double Lots         = 0.1;    // лот
extern double Risk         = 10;     // риск в %
extern int StopLoss        = 500;    // лось
extern int TakeProfit      = 500;    // язь
extern int BuySell         = 0;      // 1-buy 2-sell 0-off
extern int Slip            = 30;     // реквот
extern int Magic           = 123;    // магик

extern int MaxDayLossDeals = 5;      // Максимальное количество убыточных сделок в день
extern int MaxDayRisk      = 10;     // Максимальный риск на убыток в день
//+------------------------------------------------------------------+
//| 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;
   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,Lot(Risk,StopLoss),NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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 Lot(double risk,int stop)
  {
   double lot=Lots;
   if(Lots==0)
     {
      lot=NormalizeDouble(AccountEquity()/risk/stop,2); // 10000*10/100*1000=1
      if(MaxDayLossDeals>0) lot=NormalizeDouble(AccountEquity()/(MaxDayRisk/MaxDayLossDeals)/stop,2); // 10000*10/100*1000=1
     }
   return(lot);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountTrades()<1 && BuySell==1) PutOrder(0,Ask);
   if(CountTrades()<1 && BuySell==2) PutOrder(1,Bid);
  }
//+------------------------------------------------------------------+

avatar

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

  • 16 мая 2016, 12:18
+
0
советник для ручной торговли, зачем лот, лось, язь и прочее? советник работает с балансом (Equity)
Редактирован: 16 мая 2016, 12:29
avatar

  68  shulgindv Автор Сообщений: 5442

  • 16 мая 2016, 12:25
+
0
это набросок, лось и др. чтобы проверить в тестере правильность расчетов.
лот по формуле: лот=депо/риск/стоп т.е. 10000*10/100/1000=1
и соответственно пересчитывается на день:

lot=NormalizeDouble(AccountEquity()/(MaxDayRisk/MaxDayLossDeals)/stop,2);
avatar

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

  • 16 мая 2016, 12:53
+
0
Если считаем день, неделя и месяц должны стоять нолики. В целом так получается. Если подходит, я все небходимое на экран выведу. Байселл 0 поставите и он не будет торговать, а так и можете им покупать продавать.


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

//--- Inputs
extern double Lots         = 0;      // лот
extern double Risk         = 10;     // риск в %
extern int StopLoss        = 500;    // лось
extern int TakeProfit      = 500;    // язь
extern int BuySell         = 0;      // 1-buy 2-sell 0-off
extern int Slip            = 30;     // реквот
extern int Magic           = 123;    // магик

extern int MaxDayLossDeals = 5;      // Максимальное количество убыточных сделок в день
extern int MaxDayRisk      = 10;     // Максимальный риск на убыток в день

extern int MaxWeakLossDeals = 0;     // Максимальное количество убыточных сделок в неделю
extern int MaxWeakRisk      = 30;    // Максимальный риск на убыток в неделю

extern int MaxMonthLossDeals = 0;    // Максимальное количество убыточных сделок в месяц
extern int MaxMonthRisk      = 50;   // Максимальный риск на убыток в месяц
//+------------------------------------------------------------------+
//| 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;
   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,Lot(Risk,StopLoss),NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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 Lot(double risk,int stop)
  {
   double lot=Lots;
   if(Lots==0)
     {
      lot=NormalizeDouble(AccountEquity()/risk/stop,2); // 10000*10/100*1000=1
      if(MaxDayLossDeals>0) lot=NormalizeDouble(AccountEquity()/(MaxDayRisk/MaxDayLossDeals)/stop,2); // 10000*10/100*1000=1
      if(MaxWeakLossDeals>0) lot=NormalizeDouble(AccountEquity()/(MaxWeakRisk/MaxWeakLossDeals)/stop,2); // 10000*10/100*1000=1
      if(MaxMonthLossDeals>0) lot=NormalizeDouble(AccountEquity()/(MaxMonthRisk/MaxMonthLossDeals)/stop,2); // 10000*10/100*1000=1
     }
   return(lot);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountTrades()<1 && BuySell==1) PutOrder(0,Ask);
   if(CountTrades()<1 && BuySell==2) PutOrder(1,Bid);
  }
//+------------------------------------------------------------------+

avatar

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

  • 16 мая 2016, 13:09
+
+1
в % или в валюте (нужна возможность выбора)
риск на прибыль: нужна возможность ограничить потери прибыли в день, неделю, месяц (%/$)
например: заработали 100$ ставим риск на дневную прибыль 20%, при потере 20% от полученной прибыли торговля закрыта (алерт) и соответственно закрытие новых сделок или отложек
нужен выбор валютных пар для торговли: EUR/USD, GBP/USD, AUD/USD, EUR/JPY
например: выбрали EUR/USD, GBP/USD, а по другим запрет (алерт и закрытие сделок) или только EUR/USD, а по другим запрет

выводить атрибуты лот, профит и прочее не нужно, советник чисто для риска.

риск на сделку
риск на день, неделя, месяц
риск на прибыль в день, неделя, месяц
максимальное количество убыточных сделок подряд в день, неделю, месяц (ключевое слово «подряд»)

Редактирован: 16 мая 2016, 14:45
avatar

  68  shulgindv Автор Сообщений: 5442

  • 16 мая 2016, 14:32
+
0
Добавьте пожалуйста функцию:
локирование убыточных обратными ордерами вместо закрытия.

А также — на случай превышения лимита по эквити/депозиту.

И отправку сообщения с причиной/событием — на емайл.

— выбор валютных пар для торговли: EUR/USD, GBP/USD, AUD/USD, EUR/JPY и т.д.
лучше сделать как везде: вписывать, через, запятую, в поля-строки, по типам пар
т.к. на ряде брокеров названия пар бывают нестандартные и с префиксами
в т.ч. на демках — одни префиксы, на реальных — свои, разные от типа счёта
— всё не учтёшь, а так можно вписать в нужном виде.

И ниже, для визуального контроля, в строках по типам пар:
— полностью выводить этот же список более мелким шрифтом,
т.к. содержимое в поле не видно — оно короткое. Либо, чтобы после ввода эти пары все были видны и переносились по строкам, если нужно.

Вариант:
— вписывать обозначения пар в соотв.поля-строки, и под ней появляется такая табл. с чеками — и там уже чекать.
так удобно (но больше места на экране занимает)
Редактирован: 16 мая 2016, 15:56
avatar

  11  preasto Сообщений: 445

  • 16 мая 2016, 14:47
+
0
Добавьте пожалуйста функцию:
локирование убыточных обратными ордерами вместо закрытия.

А также — на случай превышения лимита по эквити/депозиту

в моей версии это не нужно *wall* 
Редактирован: 16 мая 2016, 15:01
avatar

  68  shulgindv Автор Сообщений: 5442

  • 16 мая 2016, 14:54
+
0
оно не помешает, чтоб после не биться так головой об стену. Не нужно — можно не включать.
И иметь полное списание с депозита сразу.
Редактирован: 16 мая 2016, 15:04
avatar

  11  preasto Сообщений: 445

  • 16 мая 2016, 15:03
+
0
И отправку сообщения с причиной/событием — на емайл.

вот данный параметр будет полезным, так как советник будет эффективным только на сервере, а причину закрытие сделок надо бы знать. Алерты на сервере никто не увидит, само собой доступ к серверу будет ограничен и будет открыт в выходные дни.
ПЫ.СЫ Андерей Всемогущий, пожалуйста добавь еще отправку сообщения с причиной/событием — на емайл :) 
avatar

  68  shulgindv Автор Сообщений: 5442

  • 17 мая 2016, 08:43
+
+1
% или в валюте (нужна возможность выбора)
риск на прибыль: нужна возможность ограничить потери прибыли в день, неделю, месяц (%/$)
например: заработали 100$ ставим риск на дневную прибыль 20%, при потере 20% от полученной прибыли торговля закрыта (алерт) и соответственно закрытие новых сделок или отложек
нужен выбор валютных пар для торговли: EUR/USD, GBP/USD, AUD/USD, EUR/JPY
например: выбрали EUR/USD, GBP/USD, а по другим запрет (алерт и закрытие сделок) или только EUR/USD, а по другим запрет


Ой ей работы сколько! *shock* 
Если только свободное время будет буду потихоньку добавлять.
avatar

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

  • 16 мая 2016, 15:25
+
0
А мы никуда не торопимся :) 
avatar

  68  shulgindv Автор Сообщений: 5442

  • 16 мая 2016, 15:34
+
0
Нет не берусь слишком работы много для бесплатного. Я несколько раз пробовал делать все с очень большим скрипом продвигается, обратитесь лучше к платному.
avatar

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

  • 18 мая 2016, 07:27
+
0
ок
avatar

  68  shulgindv Автор Сообщений: 5442

  • 18 мая 2016, 07:36

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