资源加载中... loading...

程序化交易突破策略 如何让参数动起来

Author: 发明者量化-小小梦, Created: 2017-12-28 09:29:31, Updated:

程序化交易突破策略 如何让参数动起来

很多人在最初接触程序化交易时,都会选择最佳化参数的方式来挑选参数。逐渐随着交易环境发生变化,交易者往往都会开始自主的一直调整参数。虽然不是所有的参数都需要我们一直做调整,但是如果随着环境改变去调整我们程式中的参数,这样的做法可能会让程式变得更加有弹性。

  • 这里我们举一个简单的例子:N天的区间突破策略,或者换句话说是N根K棒的突破策略。

    那么在什么市场中,这种顺势突破策略更容易赚钱呢?那自然是在趋势明显走一段的大空头或大多头市场更容易赚钱。但是如果我们一旦遇到盘整格局的走势,就有可能会有多空讯号反覆的问题出现。不过我们都知道盘整是所有顺势策略的死穴,不仅仅是这个策略的问题。N是N天区间突破策略问题的关键所在。

    那么在程序化交易领域中,这个N究竟会有什么问题出现呢?我们不妨将N设定为5,如果现在趋势明显,那么我们会进场进的比较快。但是如果趋势不明显,忽上忽下,这时就非常麻烦了。所以当趋势明显,我们就可以让N小一点。当处在整盘的时候让N变大一点,这样就增加了弹性。那么接下来关键的问题是,如何让N自动变化呢?

    首先,趋势是不是非常明显者决定了N的大小。如果趋势明显,则代表指数会波动的比较大。反之如果趋势是盘整,就代表指数会在某个区间内整理,也就是说波动会比较小。所以,波动是决定N大小的关键。

    假如,我们一开始将N设定为20,就可以算出20根K棒的标准差,可以在这里称其为V20.如果我们想用短一点的时间来衡量,那就假设用10根K棒,计算出10根K棒的标准差,假设为V10。我们根据以下的策略源码来具体了解一下,如何运用波动率的变化来改变N?

  • N天区间的突破策略原理:

    假设今天的价格的高点突破过去N天的最高点时买入,以今天的低点跌破过去的N天的最低点时卖出。 此策略更适用于趋势明显的商品,特别是单边商品。

    测试商品股指IF,使用两图表,子图1周期为1 hour,子图2周期为1 day。源码如下:

    inputs: x(20),y(10) ;
    //定义波动率参数
    Vars: V20(10),V10(10),N2(10),N1(10),N(10);
    //定义变量
    
    V20=Volatility(x)of data2;
    V10=Volatility(y)of data2;
    //定义波动率取日线数据,取子图2的日线线数。这个Volatility函数是分别取20日跟10日ATR的移动平均数值
    if V10<>0 and N2<>0 then begin
    N1=(N*V20)/V10;
    //定义N1的值,前提让分母不为0时执行,
    //这N1=(N*V20)/V10是此参数自动化的核心, 代表你将原本固定N天的参考值改成会/根据V20和V10而变动的N1值, V20是较长期的,而V10是近期,大家看到这个公式应该可以发现,当你近期的波动率变大时,表示趋势出现,你的N1就会变小,而近期的波动率变得越小时,表示在盘整,N1就会变大,这样新的N变化似乎比较合理一点。
    
    N2=IntPortion(N1);
    //给N1取整赋值给N2
    end;
    
    value1=Average(high of data2,N2)of data2;
    value2=Average(low of data2,N2)of data2;
    //定义前N2天的高点跟低点的值给value1和value2
    
    if close crosses above value1  then begin
    buy next bar at market;
    end;
    //当价格上穿高点时买入或者反向
    
    if close crosses below value2  then begin
    sellshort next bar at market;
    end;
    //当价格下穿低点时开空或者反向
    
  • 策略加载展示图:

img img img

以上是为您介绍的关于突破策略参数自动化的内容,希望大家与我们一起共同学习和讨论!


More

ruirui N1=(N*V20)/V10; N是怎么定义的