0
что совсем без разницы как вставить? )
avatar

AM2

  • 16 мая 2016, 17:57
0
да для открытия позиции для теста или если торговать им будете.
avatar

AM2

  • 16 мая 2016, 17:11
0
Можете изменить название как вам нравится.
avatar

AM2

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


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

AM2

  • 16 мая 2016, 15:25
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

AM2

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

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

AM2

  • 16 мая 2016, 12:53
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

AM2

  • 16 мая 2016, 12:18
0
Начну сейчас с дня :) 
avatar

AM2

  • 16 мая 2016, 11:41
0
при тесте на дэйли сова не видит время начало-конец торгов?


На Д1 предыдущие свечки анализирует, а на текущей уже все как положено по тикам.
avatar

AM2

  • 16 мая 2016, 11:33
0
В *.ex4 ничего не добавишь, нужен файл *.mq4
avatar

AM2

  • 16 мая 2016, 08:57
0
у меня на D1 не открывает ни одной сделки

скрины логи в студию как обычно :) 
avatar

AM2

  • 16 мая 2016, 06:20
0
скрины логи как обычно :) 
avatar

AM2

  • 16 мая 2016, 06:19
0
Еще бы убрать назойливую ошибку:

Меня просили стоп на лоу ставить, не попадает значит где то.
avatar

AM2

  • 15 мая 2016, 22:11
0
Cейчас есть все самые основные моменты ТЗ: www.opentraders.ru/downloads/1176/
avatar

AM2

  • 15 мая 2016, 18:19
+2
Для МТ4 версия есть, или тока к МТ5?

Мой вариант для 4-ки как раз. Если посмотрите сделки и логику оригинала советника, то примерно соответствует и можете самостоятельно доработать. Если нужна оригинальная версия, обратитесь к автору, он вам за 2000$ и для МТ4 нарисует :) 
avatar

AM2

  • 15 мая 2016, 16:37
0
Бесплатно за такой не возьмется никто.
avatar

AM2

  • 15 мая 2016, 12:10
0
Сейчас есть где то процентов 70 от ТЗ: www.opentraders.ru/downloads/1176/


avatar

AM2

  • 15 мая 2016, 09:21
+2
Добавил изменение лота стопового ордера и запрет на его установку:
www.opentraders.ru/downloads/1177/

//+------------------------------------------------------------------+
//|                                                      Trailer.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 KLot       = 2;        // изменение лота
extern int StopLoss      = 500;      // лось
extern int Delta         = 300;      // расстояние для отложки
extern int TakeProfit    = 500;      // язь
extern int BULevel       = 0;        // уровень БУ
extern int BUPoint       = 30;       // пункты БУ
extern int TrailingStop  = 0;        // 1-трал
extern int BuySell       = 0;        // 1-buy 2-sell 0-off
extern int BuyStop       = 0;        // 1-buystop 0-off
extern int Slip          = 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)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0,lot=Lots;

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

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
     }
     
   if(KLot>0 && type>1) lot*=KLot;
   r=OrderSend(NULL,type,lot,NormalizeDouble(price,Digits),Slip,0,0,"",Magic,TimeCurrent()+3600*10,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutStopOrder()
  {
   if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     {
      if(OrderSymbol()==Symbol() || OrderMagicNumber()==Magic)
        {
         if(OrderType()==OP_BUY)
           {
            if(NormalizeDouble(OrderPrice(),Digits)!=NormalizeDouble(OrderOpenPrice()-Delta*Point,Digits)) PutOrder(5,OrderOpenPrice()-Delta*Point);
           }

         if(OrderType()==OP_SELL)
           {
            if(NormalizeDouble(OrderPrice(),Digits)!=NormalizeDouble(OrderOpenPrice()+Delta*Point,Digits)) PutOrder(4,OrderOpenPrice()+Delta*Point);
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double OrderPrice()
  {
   double pr=0;
   if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     {
      if(OrderSymbol()==Symbol() || OrderMagicNumber()==Magic)
        {
         if(OrderType()>3)
           {
            pr=OrderOpenPrice();
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Mode()
  {
   bool m;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderStopLoss()==0 || OrderTakeProfit()==0)
              {
               if(OrderType()==0) m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-StopLoss*Point,OrderOpenPrice()+TakeProfit*Point,0,Blue);
               if(OrderType()==1) m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+StopLoss*Point,OrderOpenPrice()-TakeProfit*Point,0,Blue);
              }
           }
        }
     }
   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);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() || OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(NormalizeDouble(Low[1],Digits)>OrderOpenPrice() && Bid>NormalizeDouble(Low[1],Digits))
                 {
                  if(OrderStopLoss()!=NormalizeDouble(Low[1],Digits))
                    {
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Low[1],Digits),OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(NormalizeDouble(High[1],Digits)<OrderOpenPrice() && Ask<NormalizeDouble(High[1],Digits))
                 {
                  if(OrderStopLoss()!=NormalizeDouble(High[1],Digits))
                    {
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(High[1],Digits),OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void BU()
  {
   bool m;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() || OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(OrderOpenPrice()<=(Bid-(BULevel+BUPoint)*Point) && OrderOpenPrice()>OrderStopLoss())
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+BUPoint*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderOpenPrice()>=(Ask+(BULevel+BUPoint)*Point) && (OrderOpenPrice()<OrderStopLoss() || OrderStopLoss()==0))
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-BUPoint*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   Mode();
   if(BULevel>0) BU();
   if(BuyStop>0) PutStopOrder();
   if(TrailingStop>0) Trailing();
   if(CountTrades()<1 && BuySell==1) PutOrder(0,Ask);
   if(CountTrades()<1 && BuySell==2) PutOrder(1,Bid);

   Comment("\n ");
  }
//+------------------------------------------------------------------+
avatar

AM2

  • 15 мая 2016, 07:59
0
У вас в этом месяце уже есть заказ.
avatar

AM2

  • 14 мая 2016, 11:09
0
Посмотрю после выходных.
avatar

AM2

  • 14 мая 2016, 11:07