Пишем эффективного советника - страница 6

 
Vladimir Baskakov #:
Вы и без меня знаете будет 0. Если бы это было не так, не создавали бы эту ветку

А что, иных причин быть не может?

Короче, мне надоел этот пустопорожний трёп. Будете вести диалог вне темы советника, буду игнорировать Ваши посты.

Ваши прогнозы - не интересны, ибо они уже противоречат эффективности работы торговго робота. В моём видео показано как управлять линией тренда, чтоб получить профит. Не сможете научиться, не сможете и воспользоваться. Это как игра на музыкальном инструменте. Я, как мастер, утверждаю, что инструмент хороший. Я это знаю, ибо программированием для форекса занимаюсь уже более 15 лет. Инструмент я дал. Не факт, что Вы сможете виртуозно его использовать.

И вот ещё что, инструмент, который я использовал в видеоролике, называется не луч, он называется линия тренда. Луч - это ПАРАМЕТР данного инструмента, который по желанию можно выключать.

На этом точка. Я больше не хочу прикасаться к необоснованным прогнозам.

 
Vitaly Murlenko #:

А что, иных причин быть не может?

Короче, мне надоел этот пустопорожний трёп. Будете вести диалог вне темы советника, буду игнорировать Ваши посты.

Ваши прогнозы - не интересны, ибо они уже противоречат эффективности работы торговго робота. В моём видео показано как управлять линией тренда, чтоб получить профит. Не сможете научиться, не сможете и воспользоваться. Это как игра на музыкальном инструменте. Я, как мастер, утверждаю, что инструмент хороший. Я это знаю, ибо программированием для форекса занимаюсь уже более 15 лет. Инструмент я дал. Не факт, что Вы сможете виртуозно его использовать.

И вот ещё что, инструмент, который я использовал в видеоролике, называется не луч, он называется линия тренда. Луч - это ПАРАМЕТР данного инструмента, который по желанию можно выключать.

На этом точка. Я больше не хочу прикасаться к необоснованным прогнозам.

Стейт где? 
Сравнить количество красных свечей и синих это не определение тренда
 
Vladimir Baskakov #:
Стейт где? 
Сравнить количество красных свечей и синих это не определение тренда

Хорошо, но я покажу, но промежуточный результат в реальных "боевых" условиях. Вот скрин:

Деньги заведены вчера в 15 часов. Там был ноль (придётся Вам тут поверить мне на-слово).

Вот стейт:

8

9

10

11

 
Поможет этот стейт Вашей аналитике?
 
Vitaly Murlenko #:
Поможет этот стейт Вашей аналитике?
Вот Стейт.
Кстати, зачем мучиться искать тренд., Если его продолжение вероятно 50/50 с тем, что оно развернется
 
Vitaly Murlenko #:

К посту приложен советник (файл Binarnic_1.0.mq4) и скрипт, который я использовал в видео (файл Script_0.mq4).

Во избежание недоразумений, посмотрите сначала видеоролик. Посмотрел в наушниках свой ролик - со звуком вроде всё нормально.

Хотел выложить его на ютуб, да там гугл что-то с безопасностью так намудрил, что я даже через мобилу не смог разобраться. Короче, выложил ролик на майл-ру в облако. Просто скачайте, ибо просмотрщик этого сервера явно страдает качеством. Формат файла - mp4. Размер файла 252 мегабайта. Вот ссылка на скачивание: https://cloud.mail.ru/public/Ewoq/ymNxHFJ2Z

Всем доброе утро и хорошего настроения!

Виталий, Вы планируете писать код советника только для МТ4 или все-таки будет версия для МТ5? С четверкой не знаком, так как прошёл небольшой курс самообучения языку программирования MQL5, поэтому что либо добавить к коду Вашего советника вряд ли смогу. А жаль!

С уважением, Владимир.

 
MrBrooklin #:

Всем доброе утро и хорошего настроения!

Виталий, Вы планируете писать код советника только для МТ4 или все-таки будет версия для МТ5? С четверкой не знаком, так как прошёл небольшой курс самообучения языку программирования MQL5, поэтому что либо добавить к коду Вашего советника вряд ли смогу. А жаль!

С уважением, Владимир.

MQL4 ничем не отличается от MQL5. Разница лишь только в доступе к данным и торговых функциях. Все это "оборачивается" в классы с общим виртуальным интерфейсом - и вуаля, получаем переносимый код, который без изменения компилируется и там, и там. 

 
Georgiy Merts #:

MQL4 ничем не отличается от MQL5. Разница лишь только в доступе к данным и торговых функциях. Все это "оборачивается" в классы с общим виртуальным интерфейсом - и вуаля, получаем переносимый код, который без изменения компилируется и там, и там. 

https://www.mql5.com/ru/docs/basis/preprosessor/conditional_compilation
 
Georgiy Merts #:

Разница лишь только в доступе к данным и торговых функциях. 


Не только.

 

Вот-вот. 

Как раз с помощью директив условной компиляции. Все эти директивы работают внутри реальных классов. Пишем виртуальный универсальный интерфейс торговых действий, а в классах реализации - с помощью условной компиляции разделяем ветки MQL4-MQL5. И далее просто создаем объект, который будет торговать, с помощью виртуального интерфейса обращаемся к нему. И вобще забываем про всякое отличие платформ. 

Скажем, вот мой виртуальный интерфейс торгового процессора:

// СTradeProcessorI - интерфейс торгового процессора

#include <MyLib\Common\MyObject.mqh>
#include <MyLib\Common\CurSymEnum.mq5>

class CTradePosComponentI;
class COrderInfoCore;

class CTradeProcessorI : public CMyObject
{
public:
   void CTradeProcessorI() {    SetMyObjectType(MOT_TRADE_PROCESSOR_I); };
   virtual void ~CTradeProcessorI() {};
   
   // Настроечный интерфейс
   virtual void SetSlippage(uint uiSlippage) = 0;
   
   // Торговый интерфейс
   // Все функции возвращают код возврата торгового сервера
   virtual int Buy(long & lTicket,ECurrencySymbol csSymbol,double dVolume,double dTP=0,double dSL=0,ulong ulMagic = 0,string strComment = NULL) = 0;               // Всегда по цене Ask, если успешно - возвращается lTicket
   virtual int Sell(long & lTicket,ECurrencySymbol csSymbol,double dVolume,double dTP=0,double dSL=0,ulong ulMagic = 0,string strComment = NULL) = 0;              // Всегда по цене Bid, если успешно - возвращается lTicket  

   virtual int ModifyTPSL(CTradePosComponentI* ptpcComponent,double dTP=0,double dSL=0) = 0;       
   virtual int ModifyTPSL(long lTPCTicket,double dTP=0,double dSL=0) = 0;       

   virtual int CloseTradeComponent(CTradePosComponentI* ptpcComponent,double dCloseVolume=EMPTY_VALUE) = 0;              // dCloseVolume - закрываемый объем. Если равен EMPTY_VALUE или равен или больше, чем объем торговой компоненты с указанным тикетом - закрывается вся торговая компонента.   
   virtual int CloseTradeComponent(long lTPCTicket,double dCloseVolume=EMPTY_VALUE) = 0;              // dCloseVolume - закрываемый объем. Если равен EMPTY_VALUE или равен или больше, чем объем торговой компоненты с указанным тикетом - закрывается вся торговая компонента.   
   
   virtual int PendingSet(long & lTicket,ECurrencySymbol csSymbol,ENUM_ORDER_TYPE otOrderType,double dSetPrice,double dVolume,double dTP=0,double dSL=0,ulong ulMagic = 0,string strComment = NULL) = 0; // если успешно - возвращается lTicket
   virtual int PendingDelete(long lTicket) = 0; 
   virtual int PendingDelete(COrderInfoCore* poiOrder) = 0; 
   
   virtual int PendingModify(long lTicket,double dSetPrice,double dTP=0,double dSL=0) = 0;       
   virtual int PendingModify(COrderInfoCore* poiOrder,double dSetPrice,double dTP=0,double dSL=0) = 0;       
   
   // Проверка кода возврата
   virtual bool TradeOperationWasSuccessful(int iTradeResCode) const = 0;
   
   // Если функция возвращает true, то при возникновении пользовательских ошибок (iTradeResCode > ERR_USER_ERROR_FIRST) советник прекратит работу
   // В случае false - работа будет продолжена
   virtual bool IsUserErrorsFalal() const = 0; 

};


Все функции виртуальны, и совершенно платформонезависимы. Введено платформонезависимое понятие "торговой компоненты", которая представляет либо отдельный ордер МТ4 либо открытую позицию по символу в МТ5. И работа происходит именно с такой торговой компонентой. 

Реальный класс, реализующий этот интерфейс, выглядит так:

// СTradeProcessor - переносимый класс торгового процессора
// Именно этот класс необходимо использовать для торговли. 
// Класс реализует интерфейс CTradeProcessorI

#ifdef __MQL5__
#include <MyLib\Trade\MT5TradeProcessor.mq5>
#else // __MQL5__
#include <MyLib\Trade\MT4TradeProcessor.mq5>
#endif //__MQL5__

#ifdef __MQL5__
class CTradeProcessor : public CMT5TradeProcessor
#else // __MQL5__
class CTradeProcessor : public CMT4TradeProcessor
#endif //__MQL5__

{
public:
   void CTradeProcessor(uint uiSlippage = DEFAULT_TRADE_POINT_SLIPPAGE);
   void ~CTradeProcessor() {};
};


Фактически, вся реализация происходит внутри платформозависимых классов CMT5TradeProcessor и CMT4TradeProcessor.