区块链研究实验室 | 如何用Python创建交易策略

交易策略是在市场上买卖的本质。许多交易者都有参加的理由。策略始于一个想法,然后将其转变为可行性研究,然后进行回测,最后进行实时实施和实时评估。在本文中,我们将从基本概念开始,即仅使用基本财务数据来得出交易信号,然后再进行回测和判断其性能之前,看看它是否可行。

集思广益

开盘价,最高价,最低价和收盘价形式的财务信息对于了解交易的证券的历史属性极为重要。在考虑到与收盘价之间的差异的同时测量高点和低点之间的范围,可以为我们提供具有弱预测能力的历史模式,这对于我们希望类似随机的环境是最好的。

EURUSD每小时数据收盘价为黑色,红色为高点,蓝色为低点。

如此说来,在下一部分中,我们将讨论考虑到这三项信息的指标的概念。因此,接下来的步骤是可行性研究和回测。

实现指标

想要合并至少三个OHLC信息时想到的一个指标是资金流量乘数。话虽如此,随机震荡指标也考虑了高,低和收盘数据,但是由于我们已经在之前的文章中进行了讨论,因此该是时候看看一些新内容了。

资金流量乘数是称为Chaikin振荡器的更为复杂的技术指标的组成部分之一。我们将坚持使用资金流量乘数,看看它本身能否给我们带来有趣的信号。资金流量乘数的公式为:

看起来很容易,并且仅使用每个代理提供的HLC数据。将其应用于图表会在EURUSD上产生类似以下的内容。

第一个面板中的EURUSD每小时数据,第二个面板中的资金流量乘数。

注意它的平稳性,这可能会给我们带来均值回复信号。我们可以在Python中以这种方式编写指标:

def money_flow_multiplier(Data, what, high, low, where): # Numerator  Data[:, where] = Data[:, what] - Data[:, low] Data[:, where + 1] = Data[:, high] - Data[:, what] # Denominator  Data[:, where + 2] = Data[:, where] - Data[:, where + 1] Data[:, where + 3] = Data[:, high] - Data[:, low]  # Avoiding NaN values (Division by zero in case the High equals the Low) for i in range(len(Data)): if Data[i, where + 3] == 0: Data[i, where + 3] = 0.0001 # Money Flow Multiplier Formula Data[:, where + 4] = (Data[:, where + 2] / Data[:, where + 3]) * 100  return Data

我更喜欢使用这种递归方法,因为我发现它更易于解释和调试。实际上,我们可以仅用几行代码来编写该指标。

第一个面板中的USDCHF每小时数据,第二个面板中的资金流量乘数。

创建和回测策略

现在,我们可以在每小时的时间范围内对某些货币对的资金流量乘数策略进行回测。因此,交易条件为:

每当资金流量乘数在-90.00处且下两个值均在-90.00之上时触及下障碍,则做多(买入)。

每当资金流量乘数在90.00处的前两个值均低于90.00时触及上限价位时,做空(卖出)。

遵循资金流量乘数策略的GBPUSD每小时数据的信号图。

我们可以使用以下函数编写上述条件的代码:

def signal(Data, what, buy, sell):  for i in range(len(Data)):  if Data[i, what] < lower_barrier and Data[i - 1, what] > lower_barrier and Data[i - 2, what] > lower_barrier : Data[i, buy] = 1  if Data[i, what] > upper_barrier and Data[i - 1, what] < upper_barrier and Data[i - 2, what] < upper_barrier : Data[i, sell] = -1

信号功能考虑了4个变量:

数据变量是在阵列中,优选numpy的阵列的形式的OHLC的时间序列。

该什么变量指标。在我们的例子中,这是资金流量乘数的列。

在买入和卖出变量是在购买和出售订单被放在列。值为1表示购买触发,而值为-1表示销售触发。

注意:我们可以将资金流量乘数缩写为MFM,以促进沟通。

我们告诉该函数遍历时间序列的长度,如果它以自己的方式找到的MFM值低于较低的MFM障碍,而先前的值高于相同的先前的MFM值,则先前的值高于相同的先前的MFM障碍在这种情况下,它必须启动多头(买入)订单。同时,如果在相同情况下以自己的方式找到的MFM值高于上限MFM障碍,而先前值低于具有先前值的先前MFM上限,则必须启动卖空订单。

让我们来看看以下自2010年1月以来的数据性能指标:

效果摘要表。

遵循资金流量乘数策略的权益曲线。

澄清风险管理制度

当我说我使用基于ATR的风险管理系统(平均真实范围)时,这意味着该算法将针对其所处的位置执行以下步骤。

多头(买入)头寸:

在遵循某种策略生成信号之后,该算法会启动一个买单。

然后,该算法将监视价格变动,并且在交易开始时每当高价等于某个常数乘以ATR值时,就会启动一个退出(获利)定单。同时,如果在交易开始时看到低价等于某个常数乘以ATR值,则会启动退出(亏损)。首先遇到的出口自然是采取的事件。

空头(卖出)头寸:

在遵循某种策略生成信号之后,该算法会启动卖空订单。

然后,该算法将监视价格变动,并且在交易开始时每当低点等于某个常数乘以ATR值时,就会启动一个退出(获利)订单。同时,如果在交易开始时看到高价等于某个常数乘以ATR值,则会启动退出(亏损)。首先遇到的出口自然是采取的事件。

EURUSD每小时数据,具有50个周期的指数平均真实范围。

上图显示了我通常使用的平均真实范围。它基于指数移动平均线,而不是原始的平滑移动平均线。

看一下ATR的最新值。大约是0.0014(14点)。如果我们按照简单的2.00风险回报率(是预期收益的一半)启动买单,则可以通过以下方式下订单:

以当前市场价格购买。

以当前市场价格+(2 x 14点)获利。

以当前市场价格平仓-(1 x 14点)。

简化全权委托交易指标

因为我们并非全部都是算法交易者,所以这部分内容适合那些偏爱使用更自由(手动)交易方法的人。原始形式的MFM杂乱无章。在处理手动平仓交易时,不太容易解释。因此,我建议使用10周期指数移动平均线来增加平滑效果。

在平滑的MFM之后,检查USDCHF对上的以下信号。买卖条件如下:

每当平滑货币流量乘数在-35.00处触及较低的障碍时,做多(买入)。

每当“平滑货币流量乘数”触及35.00的上限时,做空(卖出)。

USDCHF信号图显示10周期EMA资金流量乘数上的交易触发条件。

我们可以使用平滑的MFM的另一种方法是查看如下图所示的差异。

我们知道:

当价格创出更高的高点而指标创出更低的高点时,这被称为看跌背离,市场可能会停滞。

当价格处于较低的低点而指标处于较高的低点时,这被称为看涨背离,市场可能显示出一定的上涨潜力。

定期测试

记住要经常做测试。即使我提供了指标的功能(而不是仅仅夸张地说它是圣杯,并且它的功能是秘密),你也应该始终相信其他人是错误的。我的指标和交易风格对我有用,但可能并非对每个人都适用。我依靠以下规则:

市场价格在超过50%的时间内无法预测或很难预测。但是市场反应可以完全预测。

以上报价的意思是,我们可以在一个区域周围形成一个小区域,并可以有把握地说市场价格将对该区域周围的区域产生反应。但是我们不能真正说它会从那里下降4%,然后再次测试,并在第三次尝试时突破。由于我们预测过度,因此误差项呈指数级增长。

在讨论此主题时,我应该指出一些有关回测和文章的内容:

我使用的点差基于小点子的机构报价。通常,零售贸易商每笔交易的点差高达1-2个点。这是巨大的。我使用0.2点差。但是,大多数使用小时时间框架的策略仍然可以以1个点差传播。对于使用M15或M5时间范围的货币,它们无法以1点的点差获利。

尽管我不建议仅根据一项指标进行交易,但数字并不真实。我要介绍的是考虑到低点差时可能发生的情况,这应该使你对机构交易者的优势有所了解。

我提供的一些回测失败了,它们被发布以揭开交易神话的神秘面纱或提出有趣的功能以供读者编码。

最后,我坚决不给学习者喂汤。我是通过实践而不是通过复制来学习的。你应该了解策略的概念,功能,直觉,条件,然后自己详细阐述(甚至更好)一个策略,以便你回测它并加以改进,然后再决定付诸实践或消除它。

以下是相同的MFM策略,但每笔交易的零售价差为2.5点,作为我们在上述回溯测试中使用0.2价差时的比较基准。

综上所述,这策略是否切合实际?需要能通过优化环境(算法、风险管理等)来实现。这是为了激发头脑风暴,并获得更多的交易思路,有任何想法可以在下方评论区告诉我们。

作者:链三丰,来源:区块链研究实验室

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

留言与评论(共有 0 条评论)
   
验证码:
微信号已复制,请打开微信添加咨询详情!