Скачать MetaTrader 5

как добавить лот в эксперта?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Храни исходные коды в MQL5 Storage. Это безопасно!
alekseq13orlov
40
alekseq13orlov 2015.09.01 06:36 

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

//+------------------------------------------------------------------+
//|                                                   ExpertMACD.mq5 |
//|                   Copyright 2009-2013, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "2009-2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Include                                                          |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
#include <Expert\Signal\SignalMACD.mqh>
#include <Expert\Trailing\TrailingNone.mqh>
#include <Expert\Money\MoneyNone.mqh>
//+------------------------------------------------------------------+
//| Inputs                                                           |
//+------------------------------------------------------------------+
//--- inputs for expert
input string Inp_Expert_Title            ="ExpertMACD";
int          Expert_MagicNumber          =10981;
bool         Expert_EveryTick            =false;
//--- inputs for signal
input int    Inp_Signal_MACD_PeriodFast  =12;
input int    Inp_Signal_MACD_PeriodSlow  =24;
input int    Inp_Signal_MACD_PeriodSignal=9;
input int    Inp_Signal_MACD_TakeProfit  =50;
input int    Inp_Signal_MACD_StopLoss    =20;
//+------------------------------------------------------------------+
//| Global expert object                                             |
//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+
//| Initialization function of the expert                            |
//+------------------------------------------------------------------+
int OnInit(void)
  {
//--- Initializing expert
   if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing expert");
      ExtExpert.Deinit();
      return(-1);
     }
//--- Creation of signal object
   CSignalMACD *signal=new CSignalMACD;
   if(signal==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating signal");
      ExtExpert.Deinit();
      return(-2);
     }
//--- Add signal to expert (will be deleted automatically))
   if(!ExtExpert.InitSignal(signal))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing signal");
      ExtExpert.Deinit();
      return(-3);
     }
//--- Set signal parameters
   signal.PeriodFast(Inp_Signal_MACD_PeriodFast);
   signal.PeriodSlow(Inp_Signal_MACD_PeriodSlow);
   signal.PeriodSignal(Inp_Signal_MACD_PeriodSignal);
   signal.TakeLevel(Inp_Signal_MACD_TakeProfit);
   signal.StopLevel(Inp_Signal_MACD_StopLoss);
//--- Check signal parameters
   if(!signal.ValidationSettings())
     {
      //--- failed
      printf(__FUNCTION__+": error signal parameters");
      ExtExpert.Deinit();
      return(-4);
     }
//--- Creation of trailing object
   CTrailingNone *trailing=new CTrailingNone;
   if(trailing==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating trailing");
      ExtExpert.Deinit();
      return(-5);
     }
//--- Add trailing to expert (will be deleted automatically))
   if(!ExtExpert.InitTrailing(trailing))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing trailing");
      ExtExpert.Deinit();
      return(-6);
     }
//--- Set trailing parameters
//--- Check trailing parameters
   if(!trailing.ValidationSettings())
     {
      //--- failed
      printf(__FUNCTION__+": error trailing parameters");
      ExtExpert.Deinit();
      return(-7);
     }
//--- Creation of money object
   CMoneyNone *money=new CMoneyNone;
   if(money==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating money");
      ExtExpert.Deinit();
      return(-8);
     }
//--- Add money to expert (will be deleted automatically))
   if(!ExtExpert.InitMoney(money))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing money");
      ExtExpert.Deinit();
      return(-9);
     }
//--- Set money parameters
//--- Check money parameters
   if(!money.ValidationSettings())
     {
      //--- failed
      printf(__FUNCTION__+": error money parameters");
      ExtExpert.Deinit();
      return(-10);
     }
//--- Tuning of all necessary indicators
   if(!ExtExpert.InitIndicators())
     {
      //--- failed
      printf(__FUNCTION__+": error initializing indicators");
      ExtExpert.Deinit();
      return(-11);
     }
//--- succeed
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Deinitialization function of the expert                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ExtExpert.Deinit();
  }
//+------------------------------------------------------------------+
//| Function-event handler "tick"                                    |
//+------------------------------------------------------------------+
void OnTick(void)
  {
   ExtExpert.OnTick();
  }
//+------------------------------------------------------------------+
//| Function-event handler "trade"                                   |
//+------------------------------------------------------------------+
void OnTrade(void)
  {
   ExtExpert.OnTrade();
  }
//+------------------------------------------------------------------+
//| Function-event handler "timer"                                   |
//+------------------------------------------------------------------+
void OnTimer(void)
  {
   ExtExpert.OnTimer();
  }
//+------------------------------------------------------------------+
Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
Файлы:
Vladimir Karputov
Модератор
45584
Vladimir Karputov 2015.09.01 09:42  
Пожалуйста правильно вставляйте код в сообщение: Правильно вставляем код на форуме. Ваше сообщение уже исправлено.
George Merts
3594
George Merts 2015.09.01 10:41  

Необходимо заменить объект  CMoneyNone. Это класс манименеджмента, выдающий минимальный лот в любом случае.

Можно заменить на, скажем, CMoneyFixedLot - будет работать с фиксированным лотом.

Но, надо хоть немного разбираться в ООП.

И что-то у меня сомнение, чтобы советник по MACD без всяких дополнительных наворотов стал бы прибыльным, тем более, "на любых парах".

alekseq13orlov
40
alekseq13orlov 2015.09.01 11:53  
George Merts:

Необходимо заменить объект  CMoneyNone. Это класс манименеджмента, выдающий минимальный лот в любом случае.

Можно заменить на, скажем, CMoneyFixedLot - будет работать с фиксированным лотом.

Но, надо хоть немного разбираться в ООП.

И что-то у меня сомнение, чтобы советник по MACD без всяких дополнительных наворотов стал бы прибыльным, тем более, "на любых парах".

ну в тестере и на демо счете приносит. "разбираться в ООП" это я так понимаю, там что то еще необходимо переписывать? так как замена CMoneyNone родила ошибку
George Merts
3594
George Merts 2015.09.01 12:23  
alekseq13orlov:
 так как замена CMoneyNone родила ошибку

Конечно, надо изменить немного. Ошибка-то в чем ? Что она говорит ?

alekseq13orlov
40
alekseq13orlov 2015.09.01 13:56  
George Merts:

Конечно, надо изменить немного. Ошибка-то в чем ? Что она говорит ?

'CMoneyFixedLot' - undeclared identifier

'money' - undeclared identifier ExpertMACD.mq5 104 20

'CMoneyFixedLot' - struct undefined ExpertMACD.mq5 104 30

 'new' - expression of 'void' type is illegal ExpertMACD.mq5 104 26

'*' - l-value required ExpertMACD.mq5 104 19

 '=' - l-value required ExpertMACD.mq5 104 25

'money' - parameter conversion not allowed ExpertMACD.mq5 113 28

104 это строчка CMoneyFixedLot *money=new CMoneyFixedLot;

113 это строчка  if(!ExtExpert.InitMoney(money))


George Merts
3594
George Merts 2015.09.01 15:51  
alekseq13orlov:

'CMoneyFixedLot' - undeclared identifier


Ну, неудивительно, вы создали объект, а описывать его кто будет ? Компилятор и написал, что он такого объекта не знает. С дальнейшими ошибками, повлекшими действия с неизвестным классом. Вы хоть немного бы думали над тем, что вам пишет компилятор в описании ошибки...

Класс описать надо.

К счастью, это сделали уже за вас в соответствующем .mqh-файле. Вам осталось включить в компиляцию этот .mqh-файл. (И можно удалить из компиляции файл с описанием класса CMoneyNone)

Sergey Ogly
210
Sergey Ogly 2015.09.17 03:57  

Можно так: 

добавить входной параметр, например для торговли фиксированным лотом:

input double InpLot    = 0.02; // Lot size

 Добавить свой класс наследник от CMoneyNone и переписать методы CheckOpenLong и CheckOpenLong - отвечают за размер лота, в них вставить вашу логику определяющую размер лота:

class CMoneyNoneMy : public CMoneyNone
  {
public:
    double    CheckOpenLong(double price,double sl);
    double    CheckOpenShort(double price,double sl);
};
double CMoneyNoneMy::CheckOpenLong(double price,double sl){
   return InpLot;  
}
double  CMoneyNoneMy::CheckOpenShort(double price,double sl){
   return InpLot;  
}

 и заменить строку

CMoneyNone *money=new CMoneyNone;

на свой класс

CMoneyNoneMy *money=new CMoneyNoneMy;
Boris
3901
Boris 2015.09.17 17:15  
Sergey Ogly:

Можно так: 

добавить входной параметр, например для торговли фиксированным лотом:

 Добавить свой класс наследник от CMoneyNone и переписать методы CheckOpenLong и CheckOpenLong - отвечают за размер лота, в них вставить вашу логику определяющую размер лота:

 и заменить строку

на свой класс

А без классов разве никак?! Этак бюрократия вновь подымет голову. Надо с ней бороться, а не разводить! Я за свободу творчества без крючкотворства!
George Merts
3594
George Merts 2015.09.17 19:50  
Boris:
А без классов разве никак?!

Если без классов - дык и надо тогда писать советника без классов.

А у автора - изначально советник построен на классах из Стандартной Библиотеки. И теперь, если вписывать отсутствующую функциональность без классов - потребуется довольно много кода. А с классами - все очень просто.

Boris
3901
Boris 2015.09.17 23:03  
George Merts:

Если без классов - дык и надо тогда писать советника без классов.

А у автора - изначально советник построен на классах из Стандартной Библиотеки. И теперь, если вписывать отсутствующую функциональность без классов - потребуется довольно много кода. А с классами - все очень просто.

"все очень просто", если штампуешь почти одно и то же, ради продаж, не заморачиваясь! А если делать программы, чтобы легко и удобно можно было менять, находя оригинальные решения, то эта заорганизованность тебя связывает по рукам и ногам! Имею короткие, но ёмкие универсальные наработки, которые переходят из программы в программу, без библиотек и прочих многотомных грузов. Как можно сочинять на все случаи жизни, если у всех вся жизнь впереди, а что позади, надо многое пересматривать. Программы должны быть гибкими, удобными, ясными, чтобы не заблуждаться, как в джунглях. ;)
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий