如何将ML.Net与算法交易相结合

439 阅读10分钟

您对客座发帖感兴趣吗?通过你的RStudio编辑器在DataScience+发布。

类别

标签

当你在谷歌上搜索ML.Net时,你会发现很多关于使用它的内容;但几乎都是在模型生成器上做相同的机器学习任务。所以,我想,为什么不利用它做一些更复杂的事情呢?

在这篇文章中,我想分享我使用模型生成器工具设计一个简单交易策略的主要想法。我花时间建立了一个基本的工作逻辑。请注意,这种背景下的首要任务是通过MS机器学习与算法交易走一遍,下面的策略是否盈利并不重要。(如果有一个准确的、有利可图的算法交易策略,它就不会是免费的了!)

你会得到一个鼓舞人心的前景,我希望。请继续和我一起探索。

你将读到的内容。

为什么我认为这个项目值得考虑?

一个分步骤的路线图,以使球滚动:
第一步:选择一种编程语言。
第二步:确定你的机器人将在什么领域/金融市场上工作。
第三步:选择一个服务器。
第四步:确定你的交易策略。
第五步:将你的策略部署到你的程序中。
回溯测试你的策略

为什么我认为将ML.Net与算法交易相结合是值得考虑的?

机器学习是编程的一个领域,它非常有能力进行发明和创造。但是,你是否局限于任何特定的语言,如Python或R来开发AI或ML项目?谁说的?

现在,许多开发人员已经开始学习用C#编程。但是,如果你是其中之一,你可能听说过C#不是开始编程的最佳选择,或者它只是对windows应用程序有用,这是一个错误的想法。
那么,为什么我选择机器学习,为什么选择交易员机器人项目?我有两个主要原因。

1.交易几乎是每个人生活中的日常活动;每个人都会买和卖东西。区别就在于这些东西,有人买卖股票,有人买卖汽车,或者其他什么东西。我明白,编码一个高级交易员机器人需要技术分析知识和其他相关技能,但在这个阶段,我说的是交易。

交易是几乎每个人都能理解的事情。所以我不希望初级机器人太复杂,它应该是买入低价资产,并在最高价时卖出。就这么简单!

2.当你创建一个机器人时,教该交易机器人如何做功能是至关重要的。我想在这个层面上利用ML.Net。我不会使用任何奇怪的机器学习任务,但要表明,即使是这样一个简单的水平,也有可能做一些比预测纽约出租车价格更有益的事情!

此外,这是一个具有巨大发展潜力的项目,可以增加新的功能,挑战你的创造力。

在以下几个部分中,有一个关于如何解决这个难题的分步指南。

第1步:选择一种编程语言

尽管这一步在这篇文章中似乎是例行公事,甚至有点自相矛盾,但它的重要性足以被提及。什么编程语言对你来说更舒服,这取决于你。当涉及到机器学习和人工智能时,几乎每个人都认为Python是最好的选择。

但由于ML.Net是为.NET开发者设计的,支持C#和F#,我用C#写了我的代码片段。然而,你可以通过NimbusML将ML.Net的功能纳入Python中。

第二步:确定你的机器人将在哪个领域/金融市场工作

这一部分在许多机器人制作教程中经常被跳过,而它和所需的编程知识一样关键!你必须决定你的机器人将在什么领域/金融市场工作。你必须决定你要交易的资产是什么。(例如,股票、货币和加密货币)。

如果你问我的意见,我强烈推荐法定货币,因为它们遵循逻辑趋势,更容易预测其行为。这种方法将减少你的风险,因为与其他类型的资产相比,波动较小。
,让我们在本文后面尝试建立一个基于欧元/美元图表的策略。

第3步:选择一个服务器

你需要一个可靠的服务器来调用和发送你想要的交易所/经纪商API请求。
当然,在建立机器人的阶段,你可以利用你的电脑作为服务器(或使用免费的主机)。但在机器人运行的主要阶段,即必须在24小时的基础上,你的本地服务器将不再是一个合适的选择。因此,我有两个建议给你:
1.利用Raspberry Pi作为服务器。
2.使用云主机。

通过Raspberry Pi执行机器人似乎是一个特殊的想法。如果你有兴趣,可以试试。虽然,大多数人使用云主机服务,如AzureAWS。你也可以使用MetaTrader 5 VPS。这是一个高效的分布式计算服务,我已经在一些类似的项目中使用过了。

第四步:确定你的交易策略。

在开始时,让我们尝试建立一个简单的策略,让它发挥作用。在这里,我选择了回归分析。这很简单;选取资产图表数据,在特定时期内画一条趋势线。在这个阶段,模型生成器工具进入游戏,帮助你创建一条高精度的趋势线(同一条回归线)。当然,你可能对线性回归很熟悉。

Linear Regression Graph

一个线性回归图就像这个样本图一样。(对不起,我不太擅长绘画。)虽然价格有很多波动,但总的趋势通常与这条画出来的趋势线相匹配。我们的策略是基于这一点的。我们的机器人会在价格会明显偏离回归线的地方下买/卖单。机器人怎么能理解什么时候该下单呢?

我的想法是通过交易所或经纪人的API获得实时市场价格,然后与回归预测模型的输出进行比较。另外,利用RSI指标来确认我们的交易信号也是一个好主意。

第5步:将你的策略部署到你的程序上

由于我不期待重建车轮,我没有为我的机器人从头定义任何类或方法。我建议你利用交易软件DLL库来代替。同样,也有几种解决方案,每一种都有其好处。我喜欢使用的一个选择是MetaTrader 5,因为它支持面向对象的编程。在进入代码示例之前,让我们回到交易功能的模型构建器和类库。

创建一个.Net核心控制台应用程序。在你项目的解决方案上点击右键,管理NuGet包,并安装这两个包。Microsoft.ML和MQL4CSharp。让我们从相对简单的任务开始,利用欧元/美元的过去价格数据创建一个回归模型。你可以使用一些已知的在线数据源,如Kaggle Datasets,但我以不同的方式操作来获取历史市场数据。如果你想了解这方面的情况,请点击这里

使用ML.Net Model Builder就像小菜一碟,同时完全在微软的文档中解释。它根据模型输入自动生成一个管道来预测下一个价格。我把日期和时间设置为特征(模型的输入),把相应日期的收盘价(或最近一次)设置为标签(模型的输出)。然后,在预先数据选项中,将其他列的目的改为忽略。

Sample Model Config 1

Sample Model Config 2

现在,让我们看看MQL4CSharpclass 库为你的项目提供什么样的用途。它包含了所有MQL5语言(MetaTrader 5的特定语言,类似于C++)的功能,并转换为C#。我从DLL类库中为这个测试项目选择了一些方法。准备好进入代码模板了吗?

首先,在项目中添加一个新的类,并从MQLBase class 。 然后在OnTick() 方法的块中,加载并执行模型。

public override void OnTick()
 {
 //Load and use the model to make predictions.
     var sampleData = new BOtModel.ModelInput()
    {
       Col0 = @"" ,
       Col1 = @"" ,
    };
     var result = BOtModel.Predict(sampleData);
 }


现在像这样执行机器人的逻辑。

public override void OnTick()
 {
   var sampleData = new BOtModel.ModelInput()
 {
    Col0 = @"" ,
    Col1 = @"" ,
  };
    var result = BOtModel.Predict(sampleData);
 }
            
//Define these two variables based on your customized parameters. 

double rsi = iRSI(string symbol, int timeframe, int period, int applied_price, int shift);
double closeprice = iClose(string symbol, int timeframe, int shift);
       
//Define conditional statements to place buy/sell orders. 
     if (rsi > 80 && Convert.ToDouble(result) < closeprice)
  {

//Sell order
OrderSend(string symbol, int cmd, double volume, double price, int slippage, 
double stoploss, double takeprofit, string comment, int magic, DateTime expiration, MQL4CSharp.Base.Enums.COLOR arrow color);
   }
      else if (rsi  closeprice)
   {

//Buy order
OrderSend(string symbol, int cmd, double volume, double price, int slippage, 
double stoploss, double takeprofit,string comment, int magic, DateTime expiration, MQL4CSharp.Base.Enums.COLOR arrow color);
   }
  }


方法所需的参数在下面的链接中做了简单的解释:
1.iRsi()
2.iClose()
3.OrderSend()

如果你对金融市场不熟悉,你可能会问RSI指标是什么?彻底地说,它是一个技术指标,让你知道一项资产是超买还是超卖,这样你就能意识到价格何时打算回调或上涨。

这是创建你的交易机器人后最关键的行动之一。正如我在过去的段落中提到的,访问历史数据是。我不打算在这篇文章中深入探讨这个问题,我将在今后的文章中彻底解释回测。

同时,有件事我更愿意在这里提及。在获得回测的时候,必须进行准确的计算,这需要花费大量的时间和精力进行手动计算。

算法交易平台在这个层面上也可以为你的努力提供便利。与此问题相关的我最喜欢的一项服务是MQL5云计算网络,它可以让你利用网络上可用的太多本地PC的CPU力量来提高你的计算速度或准确性。

总结

到目前为止,我已经根据欧元/美元过去的价格数据建立了一个回归模型,然后将机器人的功能逻辑编码为该模型。尽管如此,仍有一些要点可以补充,比如与数据库的连接,保存机器人的交易功能记录,设计一个用户友好的仪表盘,等等。

在我未来的文章中,我将扩展这些内容,并进一步解释开发和增加机器人的补充功能的细节。

谢谢你阅读这篇文章,我希望它对你有帮助。

**

相关文章

**