文章 "基于暴力算法的 CatBoost 模型高级重采样与选择" - 页 15

 

你好、

感谢您的文章。我试过了,但在 MT5 的回溯测试中,我没有得到在 python 中显示的漂亮的权益曲线(即使是在培训期间)(见下文)。 当我用您文章中的欧元兑美元 EA 进行回溯测试时,它正常工作。我该如何解决这个错误?


 
konorti:

你好、

感谢您的文章。我试过了,但在 MT5 的回溯测试中,我没有得到在 python 中显示的漂亮的权益曲线(即使是在培训期间)(见下文)。 当我用您文章中的欧元兑美元 EA 进行回溯测试时,它正常工作。我该如何解决这个错误?

嗨,可能是USDJPY 自定义测试器的 MARKUP 出了问题,所以结果不同。

 

添加了搜索极值(图表标记)的新方法,如 "之 "字形模式

from scipy.signal import argrelextrema

def add_peaks(dataset, order, plot=False):
    ilocs_min = argrelextrema(dataset.close.values,
                              np.less_equal, order=order)[0]
    ilocs_max = argrelextrema(dataset.close.values,
                              np.greater_equal, order=order)[0]
    dataset['low_lbl'] = False
    dataset['high_lbl'] = False
    dataset.loc[dataset.iloc[ilocs_min].index, 'low_lbl'] = True
    dataset.loc[dataset.iloc[ilocs_max].index, 'high_lbl'] = True

    if(plot):
        dataset.close.plot(figsize=(15, 5), alpha=.3)
        dataset[dataset['high_lbl']].close.plot(
            style='.', lw=10, color='red', marker="v")
        dataset[dataset['low_lbl']].close.plot(
            style='.', lw=10, color='green', marker="^")
        plt.show()

    conditions = [
        (dataset['low_lbl'] == False) & (dataset['high_lbl'] == False),
        dataset['low_lbl'] == True,
        dataset['high_lbl'] == True
    ]
    choices = [np.nan, 0, 1]
    dataset['labels'] = np.select(conditions, choices)
    dataset = dataset.drop(['low_lbl', 'high_lbl'], axis = 1)
    dataset = dataset.fillna(method='ffill')
    return dataset.dropna()

pr = add_peaks(pr, 15, plot=True)

通过使用参数,您可以调整交易频率。测试表明,通过极值标记并非最佳选择。文章中的方法效果更好。

 
Maxim Dmitrievsky:

嗨,可能是 USDJPY 自定义测试仪的 MARKUP 出了问题,所以结果有所不同

谢谢。我尝试了不同的 MARKUP(高和低)以及不同的时间框架,但都不太成功。我在 4H 时间框架/美元兑日元上看到了一些好的结果,但在其他外汇货币对上却没有。有没有可能以某种方式过滤交易,这样 EA 就不会总是在市场中,而只是发出强烈的信号?
 

马克西姆,你好、

目前的文章还不错,但有限的计算能力和曲线拟合是这类传统方法最大的问题,因此,我通常都不测试这类方法。

你是否有兴趣写一篇文章,介绍 DeepMind 的 "MuZero "在外汇中的应用?

https://deepmind.com/blog/article/muzero-mastering-go-chess-shogi-and-atari-without-rules

https://medium.com/applied-data-science/how-to-build-your-own-muzero-in-python-f77d5718061a

我向您提出这样的请求,是因为我是一名初级MQL5 程序员,从头开始写可能需要很长时间,而您可能很容易就能完成。

请告诉我您的想法。


我将在外汇编码中定义以下内容,您能否将其转换为 MQL5 代码:

  • 价值: 当前位置 有多好
  • 策略: 采取 哪种 行动最好?
  • 回报: 上次行动的效果 如何

谢谢。

MuZero: Mastering Go, chess, shogi and Atari without rules
MuZero: Mastering Go, chess, shogi and Atari without rules
  • deepmind.com
In 2016, we introduced AlphaGo, the first artificial intelligence (AI) program to defeat humans at the ancient game of Go. Two years later, its successor - AlphaZero - learned from scratch to master Go, chess and shogi. Now, in a paper in the journal Nature, we describe MuZero, a significant step forward in the pursuit of general-purpose...
 
马克西姆,如果能对这篇文章做一个信号就好了,看起来效果不错。
 
elibrarius:
马克西姆,如果能就这篇文章发出信号就好了,似乎效果不错。

在数据准备方面,已经有了更先进的方法,我正在研究。

监测每篇文章并不是一种选择。

这更多是为了科学和认知目的。

 
when I change the train start and stop datetime, the model backtests result is bad, what can I do to improve model performance?
 
因为 ml 算法的标签是不平衡的,您可以使用高斯混合物模型(GaussMixtureModel)来模拟价格的变化,然后从模型中采样,这样就可以训练出更好的 ml 算法。
 
对于该文章,虽然我没看懂,但是觉得很强大。因此我决定花点时间给点建议。首先,这个市场上的数据源仅仅是市场上的部分筹码,或者说是少部分筹码,能决定行情走向的是交易者手头上的大部分筹码,所以从数据采集上,依靠何种方法和途径优化可能只是对过去行情的贴合,很难达到我们预期的效果。其次,这个市场短时间内它不是随机,举个例子,当只有2个多方交易者和2个空方交易者,一空方N价挂牌出售,另一空方N-1价出售。一多方N-1买入,当前价格为N,假设另一多方N价买入,理论上上价格应该为N,实际上空N没有单子,撮合机制会到N-1寻找成交,所以当前价格为N-1,大概就是这么个意思。所以N和N-1,N+1等等都是有关系的,并不能达到完全随机,因此数据优化可以从动量出发比较好。最后,不管是EA还是人工交易,很难从市场上稳定赚钱,因为如果稳定那财富必然转移到某个市场的参与者身上,这个市场也就不复存在。所以投资就是投资风险,收获风险的过程,太在意稳定可能得不偿失,我不反对有些人在市场的交易中发现了某个规律,相当于市场的BUG实现了财富只有,事实上市场本身也在因为参与者的复杂性不断的自我完善的过程,但是金无足赤人无完人。智能交易的方向理论上就是不断寻找市场BUG的过程,此BUG仅供少部分人使用,用的人多了就失效了。希望我的评论对大家能有所参考。VX Tiger54088路过