[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 656 1...649650651652653654655656657658659660661662663...1145 新评论 Igor Makanu 2010.06.29 07:13 #6551 artmedia70: 什么可能导致堆栈溢出?当你用大的取值开仓时(取值由波动率计算并乘以100,大小为41*100),然后堆栈溢出被写进日志,并且.........就拿去吧。在这个仓位关闭之前不会再开仓,而这个仓位当然不会关闭,因为有巨大的TP...而EA根本不能正常工作,因为它应该在达到预定的未结头寸的总利润时关闭所有头寸......。但这并没有发生,尽管这一个位置长期以来一直处于巨大的利润中,大约有两千点......我如何对抗它?人们无法保证在所有未结头寸将溢出堆栈的情况下,一切都会颠倒过来...... 堆栈不能只溢出一个超出类型范围的数字--会出现另一个错误。 传入一个函数的数据或对一个函数的递归调用而不退出,会使堆栈溢出。 start()也是一个函数--也许你那里有很多变量。 堆栈是一个存储函数中间值(局部变量)的内存区域;如果你使用动态数组,并且没有正确检查数组的范围,你可能会自己破坏堆栈,也就是说,你写的数据不是在数组中,而是在紧随数组之后的一个内存区域中。 试着把一些数组移到全局变量 上--把它们放在棋盘的顶部 ZS:至少在所有的编程语言中都是一样的,我想在mql中也是一样的。 Artyom Trishkin 2010.06.29 07:28 #6552 IgorM: 堆栈不能只溢出一个超出类型范围的数字--会出现另一个错误。传入一个函数的数据或对一个函数的递归调用而不退出,会使堆栈溢出。start()也是一个函数--也许你那里有很多变量。堆栈是一个存储函数中间值(局部变量)的内存区域;如果你使用动态数组,并且没有正确检查数组的范围,你可能会自己破坏堆栈,也就是说,你写的数据不是在数组中,而是在紧随数组之后的一个内存区域中。试着把一些数组移到全局变量上--把它们放在棋盘的顶部ZS:至少在所有的编程语言中都是一样的,我想在mql中也是一样的。 伊戈尔,你知道到目前为止我一直在避免使用数组...我的代码中只有几个数组--滴答前的订单数组和滴答后的订单数组。我把它们定义在全局变量区。有趣的是,我把打开这些头寸的代码移到EA的其他地方,错误就消失了。看起来有一个对 开单的递归调用,尽管我并没有真正去理会它。我只是决定,在代码中关闭所有头寸后立即放置开仓,以检查是否达到总利润并关闭所有头寸,这是不合适的...我把它弄得一团糟...:) Igor Makanu 2010.06.29 07:36 #6553 artmedia70: 伊戈尔,你知道到目前为止我一直在避免使用数组...我的代码中只有几个数组--滴答前的订单数组和滴答后的订单数组。我把它们定义在全局变量区。有趣的是,我把打开这些头寸的代码移到EA的其他地方,错误就消失了。看起来有一个对开单的递归调用,尽管我并没有真正去理会它。我只是决定,在代码中关闭所有头寸后立即放置开仓,以检查是否达到总利润并关闭所有头寸,这是不合适的...我把它弄得一团糟...:) 我做了一个创建EA 的模板--当一个订单被放置时,这种订单的标志会立即被设置,之后,在打开这种类型的新订单之前,我总是检查标志--订单是否存在,但我在写EA时只有一个订单 Artyom Trishkin 2010.06.29 08:05 #6554 IgorM: 我很久以前就做了一个创建EA的模板--当我下订单时,我立即设置一个标志(标志),表明存在这样的订单,然后在打开这种类型的新订单之前,我总是检查标志--是否存在这样的订单,但我写的EA只有一个订单。 好吧,我和我想其他人都有自己的发展、模板和其他好东西。这不是问题的关键。我仍在纠结于缩水问题,并尝试不同的方法、函数等。如果我严格按照趋势工作,我无法理解,如果在一个较早的TF上,趋势已经变成了平缓,而在较年轻的TF上,趋势仍然存在,但它即将结束,那么如何抓住趋势的衰竭。当在低价位上开仓时,有很大的可能性会造成平仓而不能及时平仓。我现在正试图从4小时图开始工作,在4小时图中,我们定义了方向,并且只在这个方向的所有低点工作。从趋势过渡到平缓的时刻我算是确定了,或多或少,我们会看一下结果。 [删除] 2010.06.29 12:52 #6555 Craft: 是的,我得到了 "0",但我应该怎么做呢? 我不能用两种方法(我甚至尝试了相等的周期),我同时尝试了Print("NormalizeDouble(c1b_1..."),但我得到了零(只有c1b[i]显示数值,其他所有的包括c1s[i]都是零),可以帮助我使其中一个达到工作状态或分享一个提示,如果你注意到任何缺陷? 新的。 旧的。 整个。 Yuri,在未来,如果代码至少重复 ,就应该分配给一个方法,你就不需要成堆的数组来扰乱代码了。 这里有一个方法给你。 //+------------------------------------------------------------------+ double iCCIAverage(string cci_symbol, int cci_timeframe, int cci_period, int cci_applied_price, int ma_period, int ma_method, int ma_shift){ double array[]; int loop_array; ArrayResize(array,ma_period + ma_shift); for(int loop = ma_period + ma_shift - 1; loop >= 0; loop--, loop_array++)array[loop_array] = iCCI(cci_symbol, cci_timeframe, cci_period, cci_applied_price, loop); return(iMAOnArray(array, 0, ma_period, 0, ma_method, ma_shift)); } //+------------------------------------------------------------------+ 我认为参数的一切都很清楚,输入数据并通过改变ma_shift参数得到你需要的移位。请注意,这个方法可以作为模板使用,只要改变指标i...(...)或iCustom(...)的访问方法。 现在你的交易决定块看起来应该是这样的。 //--------------------------------------------------------------- 5 -- // Торговые критерии if (NormalizeDouble(iCCIAverage(Symbol(), 0, PeriodB, PRICE_TYPICAL, AvgB, MODE_SMA, 1),4)<NormalizeDouble(iCCIAverage(Symbol(), 0, PeriodB, PRICE_TYPICAL, AvgB, MODE_SMA, 2),4) && NormalizeDouble(iCCIAverage(Symbol(), 0, PeriodB, PRICE_TYPICAL, AvgB, MODE_SMA, 2),4)>NormalizeDouble(iCCIAverage(Symbol(), 0, PeriodB, PRICE_TYPICAL, AvgB, MODE_SMA, 3),4)) { // Opn_B=true; // Критерий откр. Buy Cls_S=true; // Критерий закр. Sell } if (NormalizeDouble(iCCIAverage(Symbol(), 0, PeriodS, PRICE_TYPICAL, AvgS, MODE_SMA, 1),4)>NormalizeDouble(iCCIAverage(Symbol(), 0, PeriodS, PRICE_TYPICAL, AvgS, MODE_SMA, 2),4) && NormalizeDouble(iCCIAverage(Symbol(), 0, PeriodS, PRICE_TYPICAL, AvgS, MODE_SMA, 2),4)<NormalizeDouble(iCCIAverage(Symbol(), 0, PeriodS, PRICE_TYPICAL, AvgS, MODE_SMA, 3),4)) { // Opn_S=true; // Критерий откр. Sell Cls_B=true; // Критерий закр. Buy } //--------------------------------------------------------------- 6 -- 因此,现在不需要 "旧 "和 "新 "的变体,交易是根据给定的标准(据我所知,你有一个平滑的iCC的顶部/底部的三条杠模式)打开。文件里有一个更正的变体。 附加的文件: 21_2.mq4 14 kb Aliaksei Zeliankou 2010.06.29 13:17 #6556 你好。 你能不能给我一些代码,把订单打开 后的价格写进数组。 如何使每个新的价格被添加到数组中。 Igor Makanu 2010.06.29 14:44 #6557 zelek:你好。你能不能给我一些代码,把订单打开后的价格写进数组。如何使每个新的价格被添加到数组中。 请在你的问题中更加具体 如果你对下单时的当前价格感兴趣,你可以在代码中添加一个调用,负责将当前价格存储在全局数组中,并改变数组索引 计数器,以后你可以从代码中的任何一点查看。 Igor Makanu 2010.06.29 14:47 #6558 如何检查EA的性能 - 我只想以毫秒为单位显示代码执行时间。 MT5的性能比MT4好多少? DDFedor 2010.06.29 15:00 #6559 IgorM: 如何检查EA的性能 - 我只想以毫秒为单位显示代码执行时间。 MT5的性能比MT4好多少? GetTickCount将有助于https://docs.mql4.com/ru/common/GetTickCount Igor Makanu 2010.06.29 15:20 #6560 DDFedor: GetTickCount将帮助https://docs.mql4.com/ru/common/GetTickCount 谢谢 是的,这就是我在寻找的,有人测量过mt4和mt5的同类型代码的速度吗? 1...649650651652653654655656657658659660661662663...1145 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
什么可能导致堆栈溢出?当你用大的取值开仓时(取值由波动率计算并乘以100,大小为41*100),然后堆栈溢出被写进日志,并且.........就拿去吧。在这个仓位关闭之前不会再开仓,而这个仓位当然不会关闭,因为有巨大的TP...而EA根本不能正常工作,因为它应该在达到预定的未结头寸的总利润时关闭所有头寸......。但这并没有发生,尽管这一个位置长期以来一直处于巨大的利润中,大约有两千点......我如何对抗它?人们无法保证在所有未结头寸将溢出堆栈的情况下,一切都会颠倒过来......
堆栈不能只溢出一个超出类型范围的数字--会出现另一个错误。
传入一个函数的数据或对一个函数的递归调用而不退出,会使堆栈溢出。
start()也是一个函数--也许你那里有很多变量。
堆栈是一个存储函数中间值(局部变量)的内存区域;如果你使用动态数组,并且没有正确检查数组的范围,你可能会自己破坏堆栈,也就是说,你写的数据不是在数组中,而是在紧随数组之后的一个内存区域中。
试着把一些数组移到全局变量 上--把它们放在棋盘的顶部
ZS:至少在所有的编程语言中都是一样的,我想在mql中也是一样的。
堆栈不能只溢出一个超出类型范围的数字--会出现另一个错误。
传入一个函数的数据或对一个函数的递归调用而不退出,会使堆栈溢出。
start()也是一个函数--也许你那里有很多变量。
堆栈是一个存储函数中间值(局部变量)的内存区域;如果你使用动态数组,并且没有正确检查数组的范围,你可能会自己破坏堆栈,也就是说,你写的数据不是在数组中,而是在紧随数组之后的一个内存区域中。
试着把一些数组移到全局变量上--把它们放在棋盘的顶部
ZS:至少在所有的编程语言中都是一样的,我想在mql中也是一样的。
伊戈尔,你知道到目前为止我一直在避免使用数组...我的代码中只有几个数组--滴答前的订单数组和滴答后的订单数组。我把它们定义在全局变量区。有趣的是,我把打开这些头寸的代码移到EA的其他地方,错误就消失了。看起来有一个对开单的递归调用,尽管我并没有真正去理会它。我只是决定,在代码中关闭所有头寸后立即放置开仓,以检查是否达到总利润并关闭所有头寸,这是不合适的...我把它弄得一团糟...:)
我做了一个创建EA 的模板--当一个订单被放置时,这种订单的标志会立即被设置,之后,在打开这种类型的新订单之前,我总是检查标志--订单是否存在,但我在写EA时只有一个订单
我很久以前就做了一个创建EA的模板--当我下订单时,我立即设置一个标志(标志),表明存在这样的订单,然后在打开这种类型的新订单之前,我总是检查标志--是否存在这样的订单,但我写的EA只有一个订单。
是的,我得到了 "0",但我应该怎么做呢? 我不能用两种方法(我甚至尝试了相等的周期),我同时尝试了Print("NormalizeDouble(c1b_1..."),但我得到了零(只有c1b[i]显示数值,其他所有的包括c1s[i]都是零),可以帮助我使其中一个达到工作状态或分享一个提示,如果你注意到任何缺陷?
新的。
旧的。
整个。
Yuri,在未来,如果代码至少重复 ,就应该分配给一个方法,你就不需要成堆的数组来扰乱代码了。
这里有一个方法给你。
我认为参数的一切都很清楚,输入数据并通过改变ma_shift参数得到你需要的移位。请注意,这个方法可以作为模板使用,只要改变指标i...(...)或iCustom(...)的访问方法。 现在你的交易决定块看起来应该是这样的。
因此,现在不需要 "旧 "和 "新 "的变体,交易是根据给定的标准(据我所知,你有一个平滑的iCC的顶部/底部的三条杠模式)打开。文件里有一个更正的变体。
你好。
你能不能给我一些代码,把订单打开 后的价格写进数组。
如何使每个新的价格被添加到数组中。
你好。
你能不能给我一些代码,把订单打开后的价格写进数组。
如何使每个新的价格被添加到数组中。
请在你的问题中更加具体
如果你对下单时的当前价格感兴趣,你可以在代码中添加一个调用,负责将当前价格存储在全局数组中,并改变数组索引 计数器,以后你可以从代码中的任何一点查看。
如何检查EA的性能 - 我只想以毫秒为单位显示代码执行时间。
MT5的性能比MT4好多少?
如何检查EA的性能 - 我只想以毫秒为单位显示代码执行时间。
MT5的性能比MT4好多少?
GetTickCount将有助于https://docs.mql4.com/ru/common/GetTickCount
GetTickCount将帮助https://docs.mql4.com/ru/common/GetTickCount
谢谢 是的,这就是我在寻找的,有人测量过mt4和mt5的同类型代码的速度吗?