新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 624 1...617618619620621622623624625626627628629630631...1953 新评论 Igor Makanu 2018.09.15 21:01 #6231 Galim_V:这就是如何修改代码中存在 许多错误,在 if(OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss_SELL,0,0,Green)) 最好对价格进行规范化处理,这样他们就会工作,然后服务器会发出 "错误的价格 "的错误,最好对StopLoss_SELL 进行规范化处理。 最有可能的是,你需要检查StopLoss是否等于零--比较实数是否相等是不可取的,你应该尝试比较实数是否>或<。 Igor Makanu 2018.09.15 21:06 #6232 Jessy111:帮助我修复指标中的一个错误,当它在一小时的最后一根蜡烛上时,它不能画出当天的最高点和最低点。我已经勾画出了指标,你的代码不喜欢与字符串打交道,我会写得更简单,这里有一个例子。尽管如果你的任务是考虑到服务器的时间 偏移,那么就需要反过来。 #property copyright "Copyright 2018, MetaQuotes Software Corp." #property link "https://www.mql5.com/ru/users/igorm" #property version "1.00" #property strict #property indicator_chart_window #property indicator_buffers 2 #property indicator_plots 2 //--- plot line1 #property indicator_label1 "HighDay" #property indicator_type1 DRAW_LINE #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 1 #property indicator_label2 "LowDay" #property indicator_type2 DRAW_LINE #property indicator_color2 clrBlue #property indicator_style2 STYLE_SOLID #property indicator_width2 1 static int LastDay=-1,daystart; static double dhigh,dlow; //--- indicator buffers double H[],L[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,H); SetIndexBuffer(1,L); IndicatorDigits(_Digits); LastDay=-1; return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- int i,j,limit; if(prev_calculated==0) { limit=rates_total-1; LastDay=-1; daystart=limit; dhigh = high[limit]; dlow = low[limit]; // расчет истории for(i=limit; i>=0 && !IsStopped(); i--) { if(LastDay!=TimeDay(time[i])) { LastDay=TimeDay(time[i]); j=daystart; daystart=i; while(j>daystart) { H[j]=dhigh; L[j]=dlow; j--; } dhigh = high[i]; dlow = low[i]; } dhigh= fmax(dhigh,high[i]); dlow = fmin(dlow,low[i]); } // рисуем текущий день при первом запуске i=daystart; while(i>=0) { H[i]=dhigh; L[i]=dlow; i--; } } else { // рисуем текущий день на каждом тике i=0; dhigh = high[0]; dlow = low[0]; while(TimeDay(time[0])==TimeDay(time[i])) { dhigh= fmax(dhigh,high[i]); dlow = fmin(dlow,low[i]); i++; } while(i>=0) { H[i]=dhigh; L[i]=dlow; i--; } } //--- return(rates_total); } //+------------------------------------------------------------------+ 我的例子也不是例子,我写得很快,我想我不应该在第一次运行时从历史的终点算到起点,而是从零条算到历史,代码会更短,能更快地计算出当前日期--周期会更短。 但我在测试器中检查了一下,似乎没有问题,就让它这样吧,现在很晚了,我困了......我做了一个糟糕的例子((() Galim_V 2018.09.15 21:30 #6233 Igor Makanu:在代码 中存在很多错误,在 最好对价格进行规范化处理,这样他们就会工作,然后服务器会发出 "错误的价格 "的错误,最好对StopLoss_SELL 进行规范化处理。 而最有可能的是,你需要检查StopLoss是否等于零,而比较实数是否相等是不可取的,你应该尝试比较实数是否>或<。这就对了。我只是在代码中显示了一个地方,为什么它不修改市场订单:从市场上请求止损会得到0。 Jessy 2018.09.15 21:55 #6234 Igor Makanu:这是一个草图的指标,我不喜欢你用字符串的代码,我会写得更简单,这是一个例子。不过,如果你的任务是考虑到服务器的时间偏移,那么你必须以不同的方式进行。 我的例子也不是例子,我写得很快,我想我不应该在第一次运行时从历史的终点算到起点,而是从零条算到历史,代码会更短,能更快地计算出当前日期--周期会更短。 但我在测试器中检查了一下,似乎没有问题,就让它这样吧,现在很晚了,我困了......糟糕的例子做了((())。这不是我的代码,我在网上找到的,我不会写指标。:) 对于一个糟糕的例子来说,我真的很喜欢你的指标,它在策略测试器和真实图表上都能发挥作用。 非常感谢您的快速帮助! 我还可以请你删除绘制通道的线条吗? 我已经在截图上用红色箭头标出了它们。 如果一点都不麻烦的话,请增加关闭/开启当前日期的线条形成的功能。我在截图上用蓝色箭头标记了它们。https://prnt.sc/kuuj3e 提前感谢! Скриншот prnt.sc Снято с помощью Lightshot Игорь 2018.09.16 04:05 #6235 亲爱的,你好! 请告知如何执行OnInit()程序。 专家顾问的变量被改变后!? 当把专家顾问放在图表上时,有OnInit();但当变量被改变时,没有OnInit!? 如何识别专家顾问变量变化的事件!? 请帮助提供建议,或更确切地说,用代码,如何做到这一点!? Igor Makanu 2018.09.16 05:20 #6236 Игорь:亲爱的,你好! 请告知如何执行OnInit()程序。 专家顾问的变量被改变后!? 当把专家顾问放在图表上时,有OnInit();但当变量被改变时,没有OnInit!? 如何识别专家顾问变量变化的事件!? 请帮助提供建议,或更确切地说,用代码,如何做到这一点!?#property copyright "Copyright 2018, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict input int var1 = 1; //+------------------------------------------------------------------+ int OnInit() { Print("Вызов OnInit(), var1=",var1); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ void OnDeinit(const int reason){} //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { } //+------------------------------------------------------------------+ 用这段代码做实验,阅读EA日志中的信息(切换TF,输入变量,重新启动终端而不关闭EA......)。 第二个选项是在全局范围内用修饰符static 描述变量。 #property strict input int var1=1; static bool FirstRun=true; //+------------------------------------------------------------------+ int OnInit() { Print("Вызов OnInit(), var1=",var1); // раскоментируйте FirstRun=true; если нужно контролировать вызов OnInit() // FirstRun=true; return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ void OnDeinit(const int reason){} //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if(FirstRun) { Print("Это первый запуск эксперта"); FirstRun=false; } } //+------------------------------------------------------------------+ Alexey Viktorov 2018.09.16 06:14 #6237 Igor Makanu: 用这样的代码做实验,阅读Expert Advisor日志中的信息(切换TF,输入变量,重新加载终端而不关闭Expert Advisor......)。 第二个选项是在全局范围内用修饰符static 描述变量。 在全局范围内用修改器static????? 这是某种变态的行为。 Igor Makanu 2018.09.16 06:18 #6238 Alexey Viktorov:在全局层面上使用静态修改器static????? 这是某种变态的行为。但根据我的经验,当MT4的build经常更新时,最好是按照经典的C++编写,而不是在与开发人员沟通时听信 "正确编写代码 "的答案。 ZS:我记得我为什么开始全局性地写静态修改器,如果我想确保在MQL-程序运行期间不会 "丢失 "变量值。 早些时候(大约5年前),#property strict预编译器指令并不存在,当启用文件(#include或library-我已经不记得了)时,我曾经 "丢失了我的变量",因为变量名与变量名重合。我被MQL诅咒了,但后来我意外地发现了这个错误。 但如果我写一个静态修改器,编译器在这种情况下也会显示一个编译错误。 目前的编译器是MT4,相当方便和可靠,而且有#property strict指令,也许我不需要这样的预防措施,但当我不想 "失去一个变量的值 "时,我写静态是一种习惯。 ZZZY:这个修改器不影响MQL程序的执行速度,而且在一段时间后,我可以很方便地打开我的代码,当我看到静态的时候,我会很清楚地知道这个变量有一个值,这对在程序执行过程中 "不丢失 "很重要。 Alexey Viktorov 2018.09.16 09:03 #6239 Igor Makanu:但根据我的经验,当MT4的build经常更新时,最好是按照经典的C++编写,而不是在与开发人员沟通时听信 "正确编写代码 "的答案。 ZS:我记得我为什么开始全局性地写静态修改器,如果我想确保在MQL-程序运行期间不会 "丢失 "变量值。 早些时候(大约5年前),#property strict预编译器指令并不存在,当启用文件(#include或library-我已经不记得了)时,我曾经 "丢失 "我的变量,因为变量名与变量名重合。我被MQL诅咒了,但后来我意外地发现了这个错误。 但如果我写一个静态修改器,编译器在这种情况下也会显示一个编译错误。 目前的MT4编译器相当方便和可靠,而且有#属性严格指令,也许我不需要这样的预防措施,但当我不想 "失去一个变量的值 "时,我写静态是一种习惯。 ZZZY:这个修改器不影响MQL程序的执行速度,而且在一段时间后,我可以很方便地打开我的代码,当我看到静态的时候,我会很清楚地知道这个变量有一个值,这对在程序执行过程中 "不丢失 "很重要。如果变量名与include文件中的变量名重合,编译器将产生警告。对我来说,警告等于错误,我对它们的反应也是如此。而带有静态修改器 的全局水平变量等于油。 但是...如果你喜欢这样写,没有人可以禁止你。 Igor Makanu 2018.09.16 11:39 #6240 Alexey Viktorov: 但是...但是......如果你喜欢这样写,没有人可以禁止你。我对自己在这件事上的独特性产生了怀疑......。我不是唯一的一个,在MQL5文件夹中搜索,我发现在MT5交付的几个来源中,在全局水平上有这样的静态修改器 的声明。 甚至在 "摘要中的随机决定森林 "一文的源代码中,我发现了一个全局级别的声明:static datetime last_time=0。 所以我写了我认为合适的分配和将,我没有100%的变量在全局层面描述为静态的 上帝保护有需要的人,修女说... )))) 1...617618619620621622623624625626627628629630631...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
这就是如何修改
代码中存在 许多错误,在
最好对价格进行规范化处理,这样他们就会工作,然后服务器会发出 "错误的价格 "的错误,最好对StopLoss_SELL 进行规范化处理。
最有可能的是,你需要检查StopLoss是否等于零--比较实数是否相等是不可取的,你应该尝试比较实数是否>或<。
帮助我修复指标中的一个错误,当它在一小时的最后一根蜡烛上时,它不能画出当天的最高点和最低点。
我已经勾画出了指标,你的代码不喜欢与字符串打交道,我会写得更简单,这里有一个例子。尽管如果你的任务是考虑到服务器的时间 偏移,那么就需要反过来。
我的例子也不是例子,我写得很快,我想我不应该在第一次运行时从历史的终点算到起点,而是从零条算到历史,代码会更短,能更快地计算出当前日期--周期会更短。
但我在测试器中检查了一下,似乎没有问题,就让它这样吧,现在很晚了,我困了......我做了一个糟糕的例子((()
在代码 中存在很多错误,在
最好对价格进行规范化处理,这样他们就会工作,然后服务器会发出 "错误的价格 "的错误,最好对StopLoss_SELL 进行规范化处理。
而最有可能的是,你需要检查StopLoss是否等于零,而比较实数是否相等是不可取的,你应该尝试比较实数是否>或<。
这就对了。我只是在代码中显示了一个地方,为什么它不修改市场订单:从市场上请求止损会得到0。
这是一个草图的指标,我不喜欢你用字符串的代码,我会写得更简单,这是一个例子。不过,如果你的任务是考虑到服务器的时间偏移,那么你必须以不同的方式进行。
我的例子也不是例子,我写得很快,我想我不应该在第一次运行时从历史的终点算到起点,而是从零条算到历史,代码会更短,能更快地计算出当前日期--周期会更短。
但我在测试器中检查了一下,似乎没有问题,就让它这样吧,现在很晚了,我困了......糟糕的例子做了((())。
这不是我的代码,我在网上找到的,我不会写指标。:)
对于一个糟糕的例子来说,我真的很喜欢你的指标,它在策略测试器和真实图表上都能发挥作用。
非常感谢您的快速帮助!
我还可以请你删除绘制通道的线条吗? 我已经在截图上用红色箭头标出了它们。
如果一点都不麻烦的话,请增加关闭/开启当前日期的线条形成的功能。我在截图上用蓝色箭头标记了它们。https://prnt.sc/kuuj3e
提前感谢!
亲爱的,你好!
请告知如何执行OnInit()程序。
专家顾问的变量被改变后!?
当把专家顾问放在图表上时,有OnInit();但当变量被改变时,没有OnInit!?
如何识别专家顾问变量变化的事件!?
请帮助提供建议,或更确切地说,用代码,如何做到这一点!?
亲爱的,你好!
请告知如何执行OnInit()程序。
专家顾问的变量被改变后!?
当把专家顾问放在图表上时,有OnInit();但当变量被改变时,没有OnInit!?
如何识别专家顾问变量变化的事件!?
请帮助提供建议,或更确切地说,用代码,如何做到这一点!?
用这段代码做实验,阅读EA日志中的信息(切换TF,输入变量,重新启动终端而不关闭EA......)。
第二个选项是在全局范围内用修饰符static 描述变量。
用这样的代码做实验,阅读Expert Advisor日志中的信息(切换TF,输入变量,重新加载终端而不关闭Expert Advisor......)。
第二个选项是在全局范围内用修饰符static 描述变量。
在全局范围内用修改器static????? 这是某种变态的行为。
在全局层面上使用静态修改器static????? 这是某种变态的行为。
但根据我的经验,当MT4的build经常更新时,最好是按照经典的C++编写,而不是在与开发人员沟通时听信 "正确编写代码 "的答案。
ZS:我记得我为什么开始全局性地写静态修改器,如果我想确保在MQL-程序运行期间不会 "丢失 "变量值。 早些时候(大约5年前),#property strict预编译器指令并不存在,当启用文件(#include或library-我已经不记得了)时,我曾经 "丢失了我的变量",因为变量名与变量名重合。我被MQL诅咒了,但后来我意外地发现了这个错误。 但如果我写一个静态修改器,编译器在这种情况下也会显示一个编译错误。
目前的编译器是MT4,相当方便和可靠,而且有#property strict指令,也许我不需要这样的预防措施,但当我不想 "失去一个变量的值 "时,我写静态是一种习惯。
ZZZY:这个修改器不影响MQL程序的执行速度,而且在一段时间后,我可以很方便地打开我的代码,当我看到静态的时候,我会很清楚地知道这个变量有一个值,这对在程序执行过程中 "不丢失 "很重要。
但根据我的经验,当MT4的build经常更新时,最好是按照经典的C++编写,而不是在与开发人员沟通时听信 "正确编写代码 "的答案。
ZS:我记得我为什么开始全局性地写静态修改器,如果我想确保在MQL-程序运行期间不会 "丢失 "变量值。 早些时候(大约5年前),#property strict预编译器指令并不存在,当启用文件(#include或library-我已经不记得了)时,我曾经 "丢失 "我的变量,因为变量名与变量名重合。我被MQL诅咒了,但后来我意外地发现了这个错误。 但如果我写一个静态修改器,编译器在这种情况下也会显示一个编译错误。
目前的MT4编译器相当方便和可靠,而且有#属性严格指令,也许我不需要这样的预防措施,但当我不想 "失去一个变量的值 "时,我写静态是一种习惯。
ZZZY:这个修改器不影响MQL程序的执行速度,而且在一段时间后,我可以很方便地打开我的代码,当我看到静态的时候,我会很清楚地知道这个变量有一个值,这对在程序执行过程中 "不丢失 "很重要。
如果变量名与include文件中的变量名重合,编译器将产生警告。对我来说,警告等于错误,我对它们的反应也是如此。而带有静态修改器 的全局水平变量等于油。
但是...如果你喜欢这样写,没有人可以禁止你。
但是...但是......如果你喜欢这样写,没有人可以禁止你。
我对自己在这件事上的独特性产生了怀疑......。我不是唯一的一个,在MQL5文件夹中搜索,我发现在MT5交付的几个来源中,在全局水平上有这样的静态修改器 的声明。
甚至在 "摘要中的随机决定森林 "一文的源代码中,我发现了一个全局级别的声明:static datetime last_time=0。
所以我写了我认为合适的分配和将,我没有100%的变量在全局层面描述为静态的
上帝保护有需要的人,修女说... ))))