文章 "开发跨平台网格 EA(最后部分):多元化是提高盈利能力的一种途径"

 

新文章 开发跨平台网格 EA(最后部分):多元化是提高盈利能力的一种途径已发布:

在本系列的前几篇文章中,我们尝试了各种方法来创建或多或少能够盈利的网格智能交易系统。 现在,我们将会尝试通过多元化来提高 EA 的盈利能力。 我们的终极目标是每年赚取 100% 的利润,而最大回撤不超过 20%。

一次交易 5 个品种时的最终余额图:

交易 5 个品种时的余额图:

回报率提高到 17.11。 此即,通过多元化策略,我们的盈利能力提高了近 2.25 倍。 这是由于所有金融产品都使用固定手数从而实现的。 从上表可以看出,所交易品种的最大回撤有所不同。 因此,我们可以给最大回撤较小的金融产品增加一些持仓量。 这种方式可以进一步增加利润。

作者:Roman Klymenko

 

网格的问题在于,优化器在选择设置时,会以最小的手数达到不利的图表。生活中并非如此。起初,头寸是在中间市场积累起来的,然后在短时间内出现一个非常不利的图表,"你好,追加保证金"。

事实已经多次证明,如果没有盈利的交易系统,网络和马丁斯不会提高交易业绩。

 
我试着在欧元兑美元 上运行,在测试仪的两年历史中,我没有在 M15 上进行过一次交易。日志中没有错误和警告。有很多设置。第一次使用时很难理解哪些设置负责什么,以及为什么没有任何效果。
 
智能交易系统无法启动,只能微笑,但无法打开交易。您能告诉我如何启动它,或者提供设置说明吗?
 
优化一年的交易数量,使其达到 50 多笔,是符合历史规律的。
 
itanprom:
智能交易系统无法启动,只能微笑,但无法打开交易。您能告诉我如何启动它,或者提供设置说明吗?

您需要输入一个货币对才能微笑和开仓。

快照

设置中有 11 个货币对。

 

有人能提供 setting set ? 我跑這個EA 都無發開啟正常的交易... 真的想試試看這個


謝謝

 
Liu Jeff:

有人能提供 setting set ? 我跑這個EA 都無發開啟正常的交易... 真的想試試看這個


謝謝

感觉无法设置参数,总显示 timer not set  哪位大神能提供帮助

 

感谢您的文章,我仔细研究了您的代码,并借鉴了一些想法用于我的机器人。我希望您能更认真地对待您的代码,至少为变量取一个清晰、合理的名字,这样人们就能立刻明白为什么需要一个变量。尤其是当你把代码公布于众的时候。你还应该对代码多加注释。

他们在文章中提到了交易次数少和与历史相匹配的问题--我在M1时间框架上对您的机器人进行了优化,结果显示,3年中有4000次交易,最好的实例给出了相当稳定的结果。

以绝对金额作为智能交易系统的目标是绝对不方便的,如果您选择将点数设为目标,除了静态手数,还可以选择最大允许手数的百分比,那就会好上千倍。否则,即使只是从测试器中的一个预算转移到另一个预算,也会出现很大问题,您必须重新开始优化

顺便说一句,有地方写到逐渐增加手数,但我在代码中没有找到,可能不是最新版本。

通过 MA 进入的策略也让我很困惑,它通常会考虑 MA 值的增加或减少。在代码中是这样的:

if (buf0[0] > buf0[6]) {
   //--- MA 增长
} else if (buf0[0] < buf0[6]) {
   //--- MA 下降
}

为什么要将第七条的值与当前条进行比较?逻辑在哪里?如果它是一个平值,而在第 1 和第 7 个条形图之间,MA 一直在上升和下降呢?看来您并不太关心这一点,也许您是想快点写完这篇文章。在我看来,有必要考虑连续几个柱状图的稳定增长来确认它。我写了一段代码,用于捕捉确认的反转或数组值连续几条线的稳定增长/下降,现在与大家分享:

//+------------------------------------------------------------------+
//| 捕捉指标反转|
//+------------------------------------------------------------------+
bool getReverse(double & object [], string direction, int repeatsIn, int repeatsOut) {
   bool reverseCorrect = true;
   
   if (direction == "up") {
      if (repeatsOut > 0) {
         for(int i = 0; i <= (repeatsOut - 1); i++) {
            if (!(object[i] > object[i+1])) reverseCorrect = false;
         }
      }
      
      if (repeatsIn > 0) {
         for(int i = repeatsIn; i <= (repeatsIn + repeatsOut - 1); i++) {
            if (!(object[i] < object[i+1])) reverseCorrect = false;
         }
      }   
   } else {
      if (repeatsOut > 0) {
         for(int i = 0; i <= (repeatsOut - 1); i++) {
            if (!(object[i] < object[i+1])) reverseCorrect = false;
         }
      }
      
      if (repeatsIn > 0) {
         for(int i = repeatsIn; i <= (repeatsIn + repeatsOut - 1); i++) {
            if (!(object[i] > object[i+1])) reverseCorrect = false;
         }
      }
   }
      
   return reverseCorrect;
}

使用方法如下:

getReverse(MA1Val, "up", 0, 7);

在此示例中,如果 MA1 值连续 7 个交易日上涨,函数将返回 true。如果将 0 替换为 3,它将寻找 MA 先连续下跌 3 个交易日,然后连续上涨 7 个交易日的模式。

其他指标我就不多说了,但也有需要考虑的地方。即使使用标准指标,您也可以添加更多逻辑。

祝您好运

 
代码里没有开单程序,只有平单程序,大量重复的参数和程序,毫无用处的错误判断和创建物件,这是我见过的最垃圾的代码
 

gsc:
代码里没有开单程序,只有平单程序,大量重复的参数和程序,毫无用处的错误判断和创建物件,这是我见过的最垃圾的


能不能帮忙写个ea谢谢