新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 771 1...764765766767768769770771772773774775776777778...1953 新评论 Alexander Layzerevich 2019.02.25 13:55 #7701 Igor Zakharov:只是不是日历上的那些。30天酒吧倒退(周日、周六)。 从没有移位参数的函数来看,你是在5中做的,而你在4中问了这个问题:)是的,如果从昨天算起,30条是21个工作日。(24.02.2019 - 25.01.2019) 我有 本月的平均蜡烛尺寸:598 一周的平均蜡烛尺寸:519 而iATR()给出的是十位数的数字... 所以我还不明白如何使用它。 Igor Zakharov 2019.02.25 14:38 #7702 Alexander Layzerevich:而iATR()输出十位数的数字...通常情况下,小数点后的分数(即像价格一样。 要转换为点数,需要除以_点)。 请看插图:截至今天,欧元/美元 - 本月每日560点。 Alexander Layzerevich 2019.02.25 17:33 #7703 Igor Zakharov:通常情况下,小数点后的分数(即像价格一样。 要转换为点数,要除以_点)。 请看插图:截至今天,欧元/美元 - 一个月内每天560点。 我在MQL4中检查了它。 Alexander Layzerevich 2019.02.25 18:19 #7704 Igor Zakharov:通常情况下,小数点后的分数(即像价格一样。 要转换为点数,要除以_点)。 请看插图:截至今天,欧元/美元 - 一个月内每天560点。 我在MQL5中检查了它。我写了以下代码来检查它。 //************************************************************************************************/ double iPointOrderStep() { int Awerage30 = (iATR (Symbol(),PERIOD_D1, 21)); Print ("Awerage30 = ", Awerage30); int Awerage7 = (iATR (Symbol(),PERIOD_D1, 5)); Print ("Awerage7 = ", Awerage7); double iPointOrderStep = NormalizeDouble(((Awerage30+Awerage7)/2),0); Print ("iPointOrderStep = ", iPointOrderStep); return (iPointOrderStep); } //************************************************************************************************/ 这就是它所显示的。 也就是说,它显示一个数值,但又显示一个不同的数值... Vitaly Muzichenko 2019.02.25 18:37 #7705 Alexander Layzerevich:在MQL5中进行了检查。写了这个代码来检查它。这就是它的输出。也就是说,它显示一个值,但又显示一个不同的值...在MQL5中,这样的指标工作结构并不适合 int Awerage30 = (iATR (Symbol(),PERIOD_D1, 21)); Print ("Awerage30 = ", Awerage30); 首先你必须创建一个句柄,你已经做到了,只有在这之后你才能从CopyBuffer 中获取数值 // этот код в Init() int handleATR=iATR(Symbol(),PERIOD_D1,21); if(handleATR==INVALID_HANDLE) return; // это уже в сам советник/индикатор: OnTick() double hATR[]; CopyBuffer(handleATR,0,0,1,hATR); // double ATR = hATR[0]; // здесь значение ATR Alexander Layzerevich 2019.02.25 18:55 #7706 Vitaly Muzichenko:在MQL5中,这样的指标工作结构并不适合 首先你必须创建一个句柄,这就是你现在所做的,之后你可以从CopyBuffer 中获取数值 谢谢,我将考虑到这一点并重写代码。 我只是在MT4中编写,使用#include <MT4Orders.mqh>在MT5中测试。 也许图书馆不支持指标。 Vitaly Muzichenko 2019.02.25 19:01 #7707 Alexander Layzerevich:谢谢,我将考虑到这一点并重写代码。 我只是在MT4中编写,并使用#include <MT4Orders.mqh>在MT5中测试。 也许该库不支持指标。是的,只有贸易功能。 Vitaly Muzichenko 2019.02.25 19:06 #7708 Alexander Layzerevich:谢谢,我将考虑到这一点并重写代码。 我只是在MT4中编写,并使用#include <MT4Orders.mqh>在MT5中测试。 也许该库不支持指标。这是一个非常快速的结合两个平台的方法,它很有效,但最好不要在mql5中这样做 double ATR(string symb,ENUM_TIMEFRAMES tf,int period,int index) { #ifdef __MQL4__ return(iATR(symb,tf,period,index)); #else double buf[1]; int handle=iATR(symb,tf,period); if(handle<0) { PrintFormat("Failed to create handle ATR %s/%s, Error: %d",symb,sTF(tf),GetLastError()); return(WRONG_VALUE); } else { if(CopyBuffer(handle,0,index,1,buf)<0) { PrintFormat("Failed to copy data from the indicator ATR %s/%s, Error: %d",symb,sTF(tf),GetLastError()); return(WRONG_VALUE); } } return(buf[0]); #endif } 并以与mql4中相同的方式应用该指标 double atr=ATR(Symbol(),PERIOD_D1, 30); Alexander Layzerevich 2019.02.26 04:59 #7709 Vitaly Muzichenko:这是一个非常快速的结合两个平台的选项,它可以工作,但最好不要在mql5中这样做 并以与mql4中相同的方式应用该指标 非常感谢您提供的代码。它已经成功了。 //************************************************************************************************/ double iPointOrderStep() { double Awerage30 = (int)((ATR(Symbol(),PERIOD_D1,21,1))/Point()); // Print ("Awerage30 = ", Awerage30); double Awerage7 = (int)((ATR(Symbol(),PERIOD_D1,5,1))/Point()); // Print ("Awerage7 = ", Awerage7); double iPointOrderStep = NormalizeDouble(((Awerage30+Awerage7)/2/6),0); // Print ("iPointOrderStep = ", iPointOrderStep); return (iPointOrderStep); } //************************************************************************************************/ double ATR(string symb,ENUM_TIMEFRAMES tf,int period,int index) { #ifdef __MQL4__ return(iATR(symb,tf,period,index)); #else double buf[1]; int handle=iATR(symb,tf,period); if(handle<0) { PrintFormat("Failed to create handle ATR %s/%s, Error: %d",symb,sTF(tf),GetLastError()); return(WRONG_VALUE); } else { if(CopyBuffer(handle,0,index,1,buf)<0) { PrintFormat("Failed to copy data from the indicator ATR %s/%s, Error: %d",symb,sTF(tf),GetLastError()); return(WRONG_VALUE); } } return(buf[0]); #endif } //************************************************************************************************/ 现在我在EA启动之初就有了平均数据。而这个数据在我每次访问这个函数时都会重新计算。 我明白,为了限制调用,我需要用计算出的数据做一个缓冲记录。 因此,我们需要设置重新计算的条件。在 "星期一",如果缓冲区内没有任何东西。 例如,声明变量buferStep = -1;在OnTick() 中,如果 buferStep <0或 "Monday",则重新计算。 这里我又被卡住了,机器人怎么能宣布今天是 "星期一 "呢? Vitaly Muzichenko 2019.02.26 06:14 #7710 Alexander Layzerevich:非常感谢您提供的代码。它的结果是这样的。 我现在有了EA开始时的平均数据。而这个数据在每次调用该函数时都会重新计算。 我明白,为了限制调用,我需要用计算出的数据做一个缓冲记录。 因此,我们需要设置重新计算的条件。在 "星期一",如果缓冲区内没有任何东西。 例如,声明变量buferStep = -1;在OnTick() 中,如果 buferStep <0或 "Monday",则重新计算。 在这里我又遇到了一个难题,机器人怎么能宣布今天是 "星期一"?我不想用星期一,我只想用几天前的数字。我将在每一个新的条形图上得到它,以避免在每一个刻度 上加载专家顾问的计算。 1...764765766767768769770771772773774775776777778...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
只是不是日历上的那些。30天酒吧倒退(周日、周六)。
从没有移位参数的函数来看,你是在5中做的,而你在4中问了这个问题:)
是的,如果从昨天算起,30条是21个工作日。(24.02.2019 - 25.01.2019)
我有
本月的平均蜡烛尺寸:598
一周的平均蜡烛尺寸:519
而iATR()给出的是十位数的数字...
所以我还不明白如何使用它。
而iATR()输出十位数的数字...
通常情况下,小数点后的分数(即像价格一样。 要转换为点数,需要除以_点)。
请看插图:截至今天,欧元/美元 - 本月每日560点。
通常情况下,小数点后的分数(即像价格一样。 要转换为点数,要除以_点)。
请看插图:截至今天,欧元/美元 - 一个月内每天560点。
我在MQL4中检查了它。
通常情况下,小数点后的分数(即像价格一样。 要转换为点数,要除以_点)。
请看插图:截至今天,欧元/美元 - 一个月内每天560点。
我在MQL5中检查了它。我写了以下代码来检查它。
这就是它所显示的。
也就是说,它显示一个数值,但又显示一个不同的数值...
在MQL5中进行了检查。写了这个代码来检查它。
这就是它的输出。
也就是说,它显示一个值,但又显示一个不同的值...
在MQL5中,这样的指标工作结构并不适合
首先你必须创建一个句柄,你已经做到了,只有在这之后你才能从CopyBuffer 中获取数值
在MQL5中,这样的指标工作结构并不适合
首先你必须创建一个句柄,这就是你现在所做的,之后你可以从CopyBuffer 中获取数值
谢谢,我将考虑到这一点并重写代码。
我只是在MT4中编写,使用#include <MT4Orders.mqh>在MT5中测试。
也许图书馆不支持指标。
谢谢,我将考虑到这一点并重写代码。
我只是在MT4中编写,并使用#include <MT4Orders.mqh>在MT5中测试。
也许该库不支持指标。
是的,只有贸易功能。
谢谢,我将考虑到这一点并重写代码。
我只是在MT4中编写,并使用#include <MT4Orders.mqh>在MT5中测试。
也许该库不支持指标。
这是一个非常快速的结合两个平台的方法,它很有效,但最好不要在mql5中这样做
并以与mql4中相同的方式应用该指标
这是一个非常快速的结合两个平台的选项,它可以工作,但最好不要在mql5中这样做
并以与mql4中相同的方式应用该指标
非常感谢您提供的代码。
它已经成功了。
现在我在EA启动之初就有了平均数据。而这个数据在我每次访问这个函数时都会重新计算。
我明白,为了限制调用,我需要用计算出的数据做一个缓冲记录。
因此,我们需要设置重新计算的条件。在 "星期一",如果缓冲区内没有任何东西。
例如,声明变量buferStep = -1;在OnTick() 中,如果 buferStep <0或 "Monday",则重新计算。
这里我又被卡住了,机器人怎么能宣布今天是 "星期一 "呢?
非常感谢您提供的代码。
它的结果是这样的。
我现在有了EA开始时的平均数据。而这个数据在每次调用该函数时都会重新计算。
我明白,为了限制调用,我需要用计算出的数据做一个缓冲记录。
因此,我们需要设置重新计算的条件。在 "星期一",如果缓冲区内没有任何东西。
例如,声明变量buferStep = -1;在OnTick() 中,如果 buferStep <0或 "Monday",则重新计算。
在这里我又遇到了一个难题,机器人怎么能宣布今天是 "星期一"?
我不想用星期一,我只想用几天前的数字。我将在每一个新的条形图上得到它,以避免在每一个刻度 上加载专家顾问的计算。