[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 656

 
artmedia70:
什么可能导致堆栈溢出?当你用大的取值开仓时(取值由波动率计算并乘以100,大小为41*100),然后堆栈溢出被写进日志,并且.........就拿去吧。在这个仓位关闭之前不会再开仓,而这个仓位当然不会关闭,因为有巨大的TP...而EA根本不能正常工作,因为它应该在达到预定的未结头寸的总利润时关闭所有头寸......。但这并没有发生,尽管这一个位置长期以来一直处于巨大的利润中,大约有两千点......我如何对抗它?人们无法保证在所有未结头寸将溢出堆栈的情况下,一切都会颠倒过来......


堆栈不能只溢出一个超出类型范围的数字--会出现另一个错误。

传入一个函数的数据或对一个函数的递归调用而不退出,会使堆栈溢出。

start()也是一个函数--也许你那里有很多变量。

堆栈是一个存储函数中间值(局部变量)的内存区域;如果你使用动态数组,并且没有正确检查数组的范围,你可能会自己破坏堆栈,也就是说,你写的数据不是在数组中,而是在紧随数组之后的一个内存区域中。

试着把一些数组移到全局变量 上--把它们放在棋盘的顶部

ZS:至少在所有的编程语言中都是一样的,我想在mql中也是一样的。

 
IgorM:


堆栈不能只溢出一个超出类型范围的数字--会出现另一个错误。

传入一个函数的数据或对一个函数的递归调用而不退出,会使堆栈溢出。

start()也是一个函数--也许你那里有很多变量。

堆栈是一个存储函数中间值(局部变量)的内存区域;如果你使用动态数组,并且没有正确检查数组的范围,你可能会自己破坏堆栈,也就是说,你写的数据不是在数组中,而是在紧随数组之后的一个内存区域中。

试着把一些数组移到全局变量上--把它们放在棋盘的顶部

ZS:至少在所有的编程语言中都是一样的,我想在mql中也是一样的。

伊戈尔,你知道到目前为止我一直在避免使用数组...我的代码中只有几个数组--滴答前的订单数组和滴答后的订单数组。我把它们定义在全局变量区。有趣的是,我把打开这些头寸的代码移到EA的其他地方,错误就消失了。看起来有一个 开单的递归调用,尽管我并没有真正去理会它。我只是决定,在代码中关闭所有头寸后立即放置开仓,以检查是否达到总利润并关闭所有头寸,这是不合适的...我把它弄得一团糟...:)
 
artmedia70:
伊戈尔,你知道到目前为止我一直在避免使用数组...我的代码中只有几个数组--滴答前的订单数组和滴答后的订单数组。我把它们定义在全局变量区。有趣的是,我把打开这些头寸的代码移到EA的其他地方,错误就消失了。看起来有一个对开单的递归调用,尽管我并没有真正去理会它。我只是决定,在代码中关闭所有头寸后立即放置开仓,以检查是否达到总利润并关闭所有头寸,这是不合适的...我把它弄得一团糟...:)

我做了一个创建EA 的模板--当一个订单被放置时,这种订单的标志会立即被设置,之后,在打开这种类型的新订单之前,我总是检查标志--订单是否存在,但我在写EA时只有一个订单
 
IgorM:

我很久以前就做了一个创建EA的模板--当我下订单时,我立即设置一个标志(标志),表明存在这样的订单,然后在打开这种类型的新订单之前,我总是检查标志--是否存在这样的订单,但我写的EA只有一个订单。
好吧,我和我想其他人都有自己的发展、模板和其他好东西。这不是问题的关键。我仍在纠结于缩水问题,并尝试不同的方法、函数等。如果我严格按照趋势工作,我无法理解,如果在一个较早的TF上,趋势已经变成了平缓,而在较年轻的TF上,趋势仍然存在,但它即将结束,那么如何抓住趋势的衰竭。当在低价位上开仓时,有很大的可能性会造成平仓而不能及时平仓。我现在正试图从4小时图开始工作,在4小时图中,我们定义了方向,并且只在这个方向的所有低点工作。从趋势过渡到平缓的时刻我算是确定了,或多或少,我们会看一下结果。
 
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
 

你好。

你能不能给我一些代码,把订单打开 后的价格写进数组。

如何使每个新的价格被添加到数组中。

 
zelek:

你好。

你能不能给我一些代码,把订单打开后的价格写进数组。

如何使每个新的价格被添加到数组中。


请在你的问题中更加具体

如果你对下单时的当前价格感兴趣,你可以在代码中添加一个调用,负责将当前价格存储在全局数组中,并改变数组索引 计数器,以后你可以从代码中的任何一点查看。

 

如何检查EA的性能 - 我只想以毫秒为单位显示代码执行时间。

MT5的性能比MT4好多少?

 
IgorM:

如何检查EA的性能 - 我只想以毫秒为单位显示代码执行时间。

MT5的性能比MT4好多少?


GetTickCount将有助于https://docs.mql4.com/ru/common/GetTickCount
 
DDFedor:

GetTickCount将帮助https://docs.mql4.com/ru/common/GetTickCount


谢谢 是的,这就是我在寻找的,有人测量过mt4和mt5的同类型代码的速度吗?

原因: