撰写一份有效的顾问报告 - 页 6

 
Vladimir Baskakov #:
你已经知道会是0,如果不是,你就不会创建这个主题了

没有其他原因吗?

简而言之,我已经受够了这些闲聊的内容。如果你在EA话题之外继续对话,我将忽略你的帖子。

你的预测并不有趣,因为它们已经与交易机器人的有效性相矛盾。我的视频告诉你如何管理趋势线,以获得利润。如果你不能学习它,你就不能使用它。这就像演奏一种乐器。我作为一个大师,声称这个乐器是好的。我知道,因为我已经为外汇编程超过15年了。我给你的工具。你能熟练地使用它并不是一个事实。

还有一点,我在视频中使用的工具不叫射线,它叫趋势线。射线是这个工具的PARAMETER,如果你愿意,你可以把它关掉。

这就结束了。我不想再碰任何未经证实的预测了。

 
Vitaly Murlenko #:

没有其他原因吗?

简而言之,我已经受够了这些闲聊的内容。如果你继续在EA的主题之外说话,我将忽略你的帖子。

你的预测并不有趣,因为它们已经与交易机器人的有效性相矛盾。我的视频告诉你如何管理趋势线,以获得利润。如果你不能学习它,你就不能使用它。这就像演奏一种乐器。我作为一个大师,声称这个乐器是好的。我知道,因为我已经为外汇编程超过15年了。我给你的工具。你能熟练地使用它并不是一个事实。

还有一点,我在视频中使用的工具不叫射线,它叫趋势线。射线是这个工具的PARAMETER,如果你愿意,你可以把它关掉。

这就结束了。我不想再碰任何未经证实的预测了。

说明在哪里?
比较红色蜡烛和蓝色蜡烛的数量并不是趋势的定义。
 
Vladimir Baskakov #:
说明在哪里?
比较红色蜡烛和蓝色蜡烛的数量并不是趋势检测。

好的,但我要展示的是真正 "活 "的条件下的中间结果。这里有一张截图。

钱在昨天下午3点进入。没有(你必须相信我的话)。

这里是国家。

8

9

10

11

 
这种状态对你的分析有帮助吗?
 
Vitaly Murlenko #:
这种状态对你的分析有帮助吗?
这里是国家。
顺便说一句,如果一个趋势的延续有50/50的可能会逆转,为什么还要去寻找它呢?
 
Vitaly Murlenko #:

帖子的附件是专家顾问(文件Binarnic_1.0.mq4)和我在视频中使用的脚本(文件Script_0.mq4)。

为避免误解,请先观看视频。我带着耳机看了我的视频--声音似乎没有问题。

我想在YouTube上使用它,但谷歌在那里的安全问题上出了问题,我在手机上甚至无法理解它。总之,我把它上传到云中的myl-ru。只要下载就可以了,因为这个服务器的查看器明显受到质量的影响。文件格式为mp4。文件大小为252兆字节。这里有一个下载链接:https://cloud.mail.ru/public/Ewoq/ymNxHFJ2Z

大家早上好,心情不错!

维塔利,你打算只为MT4写专家顾问的代码,还是会有MT5的版本?我不知道4,因为我有一个自学MQL5编程语言的短期课程,这就是为什么我几乎不能对你的EA的代码进行任何补充。太糟糕了!

问候,弗拉基米尔。

 
MrBrooklin #:

大家早上好,心情不错!

维塔利,你打算只为MT4写专家顾问的代码,还是会有MT5的版本?我不知道4,因为我有一个短期的MQL5编程语言自学课程,这就是为什么我不太可能在你的EA代码中添加任何东西。太糟糕了!

最好的问候,弗拉基米尔。

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; 

};


所有的功能都是虚拟的,而且完全与平台无关。我们引入了 "交易组件 "这一独立于平台的概念,它代表了MT4订单或MT5中某个符号的未结头寸。而我们正在努力的正是这种交易部分。

实现这个接口的真正的类看起来如下。

// С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中进行的。