文章 "MQL5 向导:如何创建未平仓位的追踪模块" - 页 2 12 新评论 Hamed T 2013.02.05 10:17 #11 感谢您的精彩文章、我想请您举例说明如何在编写专家顾问时使用该类,我的意思是在 EA 模板中使用该类,而不是在 EA 中生成。再次感谢您 Vitaliy Polishchuk 2015.08.31 20:57 #12 下午好。该模块无法运行。日志显示, 临界利润水平必须大于设置订单的水平。在构造函数中,我初始化了不为空且不等于零的变量。为什么会出错? //+------------------------------------------------------------------+ //|TrailingFixedPips.mqh //| 版权所有 2009-2013, MetaQuotes Software Corp. //|http://www.mql5.com || //+------------------------------------------------------------------+ #include <Expert\ExpertTrailing.mqh> // 向导描述开始 //+----------------------------------------------------------------------+ //| 类的描述| Title=Trailing with floating Stop Loss (Fox104) | //| Title=Trailing with floating Stop Loss (Fox104) | | //| 类型=拖曳| //| 名称=固定点差| //| Class=CTrailingFixedPips| //| Page=| //| 参数=StopLevel,int,30,止损追踪水平(单位:点) | | | 参数=StopLevel,int,30,止损追踪水平(单位:点 //| 参数=ProfitLevel,int,50,追踪获利水平(以点为单位) | | //+----------------------------------------------------------------------+ // 向导描述 结束 //+------------------------------------------------------------------+ //| 类 CTrailingFixedPips。| //| 目的:以点为单位设置固定止损水平的跟踪止损类别。 //| 源自 CExpertTrailing 类。| //+------------------------------------------------------------------+ class CTrailingFixedPips : public CExpertTrailing { protected: //--- 输入参数 int m_stop_level; int m_profit_level; public: CTrailingFixedPips(void); ~CTrailingFixedPips(void); //--- 受保护数据的初始化方法 void StopLevel(int stop_level) { m_stop_level=stop_level; } void ProfitLevel(int profit_level) { m_profit_level=profit_level; } virtual bool ValidationSettings(void); //--- virtual bool CheckTrailingStopLong(CPositionInfo *position,double &sl,double &tp); virtual bool CheckTrailingStopShort(CPositionInfo *position,double &sl,double &tp); }; //+------------------------------------------------------------------+ //| 构造函数| //+------------------------------------------------------------------+ void CTrailingFixedPips::CTrailingFixedPips(void) { m_stop_level = 30; m_profit_level = 50; } //+------------------------------------------------------------------+ //| 销毁器| //+------------------------------------------------------------------+ CTrailingFixedPips::~CTrailingFixedPips(void) { } //+------------------------------------------------------------------+ //|| 受保护数据的验证设置。 //+------------------------------------------------------------------+ bool CTrailingFixedPips::ValidationSettings(void) { if(!CExpertTrailing::ValidationSettings()) return(false); //--- 初始数据检查 if((m_profit_level-m_stop_level)*m_adjusted_point<=m_symbol.StopsLevel()*m_symbol.Point() && m_profit_level!=0.0) { printf(__FUNCTION__+":临界利润水平必须大于订单设置水平"。); return(false); } //--- ok return(true); } //+------------------------------------------------------------------+ //| 检查多头仓位的追踪止损和/或利润。 //+------------------------------------------------------------------+ bool CTrailingFixedPips::CheckTrailingStopLong(CPositionInfo *position,double &sl,double &tp) { //--- 检查 if(position==NULL) return(false); if(m_stop_level==0) return(false); //--- 参数检查 if(m_profit_level==0.0) return(false); //--- 已经达到收支平衡? double open=position.PriceOpen(); if(position.StopLoss()>=open) return(false); //--- 利润检查 sl=EMPTY_VALUE; tp=EMPTY_VALUE; if(m_symbol.Bid()-open>m_profit_level*m_adjusted_point) sl=m_symbol.NormalizePrice(open+m_stop_level*m_adjusted_point); //--- return(sl!=EMPTY_VALUE); } //+------------------------------------------------------------------+ //| 检查空头仓位的追踪止损和/或利润。 //+------------------------------------------------------------------+ bool CTrailingFixedPips::CheckTrailingStopShort(CPositionInfo *position,double &sl,double &tp) { //--- 检查 if(position==NULL) return(false); if(m_stop_level==0) return(false); //--- 参数检查 if(m_profit_level==0.0) return(false); //--- 已经达到收支平衡? double open=position.PriceOpen(); if(position.StopLoss()<=open) return(false); //--- 利润检查 sl=EMPTY_VALUE; tp=EMPTY_VALUE; if(open-m_symbol.Ask()>m_profit_level*m_adjusted_point) sl=m_symbol.NormalizePrice(open-m_stop_level*m_adjusted_point); //--- return(sl!=EMPTY_VALUE); } //+------------------------------------------------------------------+ Автоматический трейдинг и тестирование торговых стратегий www.mql5.com MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций Vladimir Karputov 2015.08.31 21:24 #13 Fox104:下午好。该模块无法运行。日志显示, 临界利润水平必须大于设置订单的水平。在构造函数中,我初始化了不为空且不等于零的变量。为什么会出错? 请在留言中正确输入 代码:在论坛中正确插入代码。(您的信息已被更正)。 Vladimir Karputov 2017.09.06 07:26 #14 Andy:使用文章中指定的模块时,在将智能交易系统加载到图表时,会在智能交易系统日志中产生错误:2017.09.06 00:28:29.873 1 (EURUSD,M5) OnInit: 错误初始化指标2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpertBase::SetPriceSeries: 禁止更改时间序列2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpertBase::SetOtherSeries: 禁止更改时间序列2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpertBase::InitIndicators: 未检查设置参数2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpert::InitIndicators: 错误初始化拖尾对象的指标2017.09.06 00:31:20.256 1 (EURUSD,M5) OnInit: 错误初始化指标也许它已经过时了,在哪里可以得到一个新的或修复这个问题?更改 跟踪模块 "sampleTrailing.mqh"://+------------------------------------------------------------------+ //| 检查设置参数。| //| INPUT: no.| //| 如果设置正确,则输出为 true,否则输出为 false。 //| 备注:没有。| //+------------------------------------------------------------------+ bool CSampleTrailing::ValidationSettings() { if(!CExpertTrailing::ValidationSettings()) return(false); //--- 万一没有调用 Init 方法 if(m_symbol==NULL) return(false); //--- 参数检查 if((m_profit-m_stop_level)*m_adjusted_point<=m_symbol.StopsLevel()*m_symbol.Point() && m_profit!=0.0) { printf(__FUNCTION__+":临界利润水平必须大于订单设置水平"。); return(false); } //--- ok return(true); } Rashid Umarov 2017.09.06 13:18 #15 Andy:使用文章中指定的模块时,在将智能交易系统加载到图表时会在日志中产生错误:也许它已经过时了,在哪里可以买到新的?感谢您的留言,文章已更正 Vladimir Karputov 2017.09.08 06:26 #16 Andy:当开立 空头头寸 并在参数中将常规止损(非移动止损)设置为 0 时,移动止损不会设置为盈亏平衡,但如果稍微移动常规止损并将其设置为至少-1 点,则一切正常。在做多时一切正常。在检查已经出现盈亏平衡(止损点小于价格)的条件时,止损点的初始值为 0,它不会让止损点继续移动。这就对了。正是指定的止损触发了跟踪模块在盈亏平衡时的工作。也就是说,假设头寸最初必须有止损。补充: 任何文章的目的都是展示和熟悉解决某些问题的方法。然后,用户应根据所学知识开发自己的代码。 Vladimir Karputov 2017.09.08 06:42 #17 Andy:应该对其进行补充,以便在没有止损的情况下,尾随也是--至少用开盘值填充变量。 (我收到了您 2 条信息的推送通知,但其中一条丢失了 - 已删除)?如果您需要更改某些内容,这不是本文要讨论的问题。在这里,您可以根据所学知识自行修改。也就是说,如果您想撰写技术作业,并认为文章会根据技术作业进行改写--事实并非如此。正如我所看到的那样:重写模块(稍作改动)并使用。补充:最后一次,请使用 "回复 "按钮。否则我不会回复。 Vladimir Karputov 2017.09.08 06:48 #18 Andy: 好吧,我自己写。你是否删除了你的某个帖子(如果删除了请告诉我,这样我就不用再找了)?你可以开一个新话题,比如"未结头寸维持 到盈亏平衡的模块"--我认为这样的话题会很有用。是的,我在编辑帖子时误点击了 "删除"--事实上我写了两篇帖子,删除了一篇。因此,推送是正确的。 12 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
感谢您的精彩文章、
我想请您举例说明如何在编写专家顾问时使用该类,我的意思是在 EA 模板中使用该类,而不是在 EA 中生成。
再次感谢您
下午好。该模块无法运行。
日志显示, 临界利润水平必须大于设置订单的水平。
在构造函数中,我初始化了不为空且不等于零的变量。为什么会出错?
下午好。该模块无法运行。
日志显示, 临界利润水平必须大于设置订单的水平。
在构造函数中,我初始化了不为空且不等于零的变量。为什么会出错?
使用文章中指定的模块时,在将智能交易系统加载到图表时,会在智能交易系统日志中产生错误:
2017.09.06 00:28:29.873 1 (EURUSD,M5) OnInit: 错误初始化指标
2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpertBase::SetPriceSeries: 禁止更改时间序列
2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpertBase::SetOtherSeries: 禁止更改时间序列
2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpertBase::InitIndicators: 未检查设置参数
2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpert::InitIndicators: 错误初始化拖尾对象的指标
2017.09.06 00:31:20.256 1 (EURUSD,M5) OnInit: 错误初始化指标
更改 跟踪模块 "sampleTrailing.mqh":
使用文章中指定的模块时,在将智能交易系统加载到图表时会在日志中产生错误:
感谢您的留言,文章已更正
当开立 空头头寸 并在参数中将常规止损(非移动止损)设置为 0 时,移动止损不会设置为盈亏平衡,但如果稍微移动常规止损并将其设置为至少-1 点,则一切正常。在做多时一切正常。在检查已经出现盈亏平衡(止损点小于价格)的条件时,止损点的初始值为 0,它不会让止损点继续移动。
这就对了。正是指定的止损触发了跟踪模块在盈亏平衡时的工作。也就是说,假设头寸最初必须有止损。
补充:
任何文章的目的都是展示和熟悉解决某些问题的方法。然后,用户应根据所学知识开发自己的代码。
应该对其进行补充,以便在没有止损的情况下,尾随也是--至少用开盘值填充变量。
(我收到了您 2 条信息的推送通知,但其中一条丢失了 - 已删除)?
如果您需要更改某些内容,这不是本文要讨论的问题。在这里,您可以根据所学知识自行修改。也就是说,如果您想撰写技术作业,并认为文章会根据技术作业进行改写--事实并非如此。
正如我所看到的那样:重写模块(稍作改动)并使用。
补充:最后一次,请使用 "回复 "按钮。否则我不会回复。
好吧,我自己写。你是否删除了你的某个帖子(如果删除了请告诉我,这样我就不用再找了)?
你可以开一个新话题,比如"未结头寸维持 到盈亏平衡的模块"--我认为这样的话题会很有用。
是的,我在编辑帖子时误点击了 "删除"--事实上我写了两篇帖子,删除了一篇。因此,推送是正确的。