挤牌指标代码,TTM Squeeze

Discussion in 'General Topics on Software and Data' started by wj2000, Oct 8, 2013.

  1. 挤牌指标(TTM Squeeze),来自约翰.F.卡特《驾驭交易》,即两个通道:布林通道和肯特纳通道(Keltner Channel),当K线在肯特纳通道里运行时可看作盘整行情,当K线站上肯特纳通道之上时可看作多头行情,当K线在肯特纳通道之下时可看作空头行情。
      
      当布林通道横盘时,当布林通道的上轨上穿肯特纳的上轨可看作挤牌预警,当K线站上肯特纳时做多,等着行情加速上涨。 反之,当布林通道下轨下穿肯特纳通道下轨可看作挤牌下跌预警,当K线站在肯特纳通道下,做空,等着行情加速下跌。

    交易方向好像是按照动量摆动指标。

    贴的代码是根据Amibroker的代码修改在操盘手免费版里实现的,应该稍微修改后也可以用在国内其他软件中(比如分析家,大智慧,通达信,飞狐等),反正给代码了,可以根据需要自行修改。
     
  2. Amibroker的代码:
    DISCLAIMER: Most formulas present in AFL on-line library are submitted by the users and are provided here on an "as is" and "as available" basis. AmiBroker.com makes no representations or warranties of any kind to the contents or the operation of material presented here. We do not maintain nor provide technical support for 3rd party formulas.
    Description:

    Bollinger Bands AND Keltner Channel define the market
    conditions, i.e. when BB is narrower than KC then we have
    a market squeeze. When BB break Outside the KC then trade
    in the direction of the smoothed Momentum(12).


    Formula:

    //~~~~~~~~~~~~~~~~~~~~~ John Carter's TTM Squeeze
    Indicator~~~~~~~~~~~~~~~~~~~~~
    // Description: Bollinger Bands AND Keltner Channel define the market
    // conditions, i.e. when BB is narrower than KC then we have
    // a market squeeze. When BB break Outside the KC then trade
    // in the direction of the smoothed Momentum(12).
    // Parameters:
    // * chanPeriod - Bollinger Bands AND Keltner Channel length
    // * bolBandStdDev - width of the Bollinger Bands
    // * keltStdDev - width of the Keltner Bands
    // * momPeriod - # of bars for Momentum indicator
    // * momEMA - EMA of the Momentum indicator
    //
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // Source : John Carter, www.TradeTheMarkets.com
    // Interpretation : Kris Tokarzewski, Johannesburg, 15-Dec-2006
    // AmiBroker Conversion: Levent Pancuk, 22 Feb-2008
    // lpancuk@yahoo.com
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    _SECTION_BEGIN("TTM Squeeze");

    function Momentum( array, period )
    {
    return array - Ref( array, -period );
    }



    chanPeriod = Param("Channel Period", 20);
    bolBandStdDev = Param("Bollinger Band StdDev",2);
    keltStdDev = Param("Keltner Band StdDev",1.5);
    momPeriod = Param("Momemtum Period", 12 );
    momEMA = Param("Momentum EMA Period", 5);

    highBBChl = BBandTop( C, chanPeriod, bolBandStdDev);
    lowBBChl = BBandBot( C, chanPeriod, bolBandStdDev);

    centerLine = MA( C, chanPeriod );
    highKeltn = centerLine + keltStdDev * ATR(chanPeriod);
    lowKeltn = centerLine - keltStdDev * ATR(chanPeriod);

    momHist = EMA(Momentum(C, momPeriod),momEMA);

    BBUp = IIf(highBBChl > highKeltn AND momHist > 0, momHist, 0);
    BBDo = IIf(lowBBChl < lowKeltn AND momHist < 0, momHist, 0);
    BBMid = IIf(BBUp == 0 AND BBDo == 0, momHist, 0);


    Buy = BBUp;
    Sell = BBDo;

    Buy = ExRem(Buy,Sell);
    Sell = ExRem(Sell,Buy);

    Plot(BBUp, "TTM Squeeze - Momentum Up", colorBlue,styleHistogram |
    styleThick);
    Plot(BBDo, "Momentum Down", colorOrange, styleHistogram | styleThick);
    Plot(BBMid, "Momentum Mid", IIf(BBMid > 0, colorLightBlue, colorBrown),
    styleHistogram | styleThick);

    PlotShapes( shapeSmallCircle*Buy, colorGreen,0, 0, 0);
    PlotShapes( shapeSmallCircle*Sell, colorRed,0, 0, 0);

    _SECTION_END();
     
  3. 操盘手里的代码:
    主图代码:
    N(1,300,20);
    keltStdDev(0,10,1.5);
    bolBandStdDev(0,10,2);

    TR := MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
    ATR := MA(TR,N);

    highBBChl : MA(C,N) + bolBandStdDev*STD(C,N),coloryellow;
    lowBBChl : MA(C,N) - bolBandStdDev*STD(C,N),coloryellow;

    centerLine : MA( C, N );

    highKeltn : centerLine + keltStdDev * ATR,colorblue;
    lowKeltn : centerLine - keltStdDev * ATR,colorblue;

    副图代码:
    N(1,300,20);
    keltStdDev(0,10,1.5);
    bolBandStdDev(0,10,2);

    momP(1,100,12);
    momEMA(1,100,5);

    TR := MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
    ATR := MA(TR,N);

    highBBChl := MA(C,N) + bolBandStdDev*STD(C,N),coloryellow;
    lowBBChl := MA(C,N) - bolBandStdDev*STD(C,N),coloryellow;

    centerLine := MA( C, N );

    highKeltn := centerLine + keltStdDev * ATR,colorblue;
    lowKeltn := centerLine - keltStdDev * ATR,colorblue;

    AA:=highBBChl - highKeltn;
    BB:0,circledot;
    DRAWCIRCLE(AA==0,BB),COLORWHITE;
    DRAWCIRCLE(AA>0,BB),COLORRED;
    DRAWCIRCLE(AA<0,BB),COLORGREEN;

    Mom := CLOSE-REF(CLOSE,momP);
    MTM : MA(Mom, momEMA),COLORSTICK;
     
  4. 动量摆动指标我选的是最简单的12单位均线的5单位差,也可以选其他的指标代替,比如macd等应该都可以的。

    这些指标也就是用来做个过滤筛选的:D:p
     
  5. 回测的效果如何?收益率N年向上吗?
     
  6. 没做回測,玩玩的,筛选用的,我是懒人
     
  7. 随便测了测,似乎有一定琢磨的价值。 谢谢楼主。
     
  8. 谢谢LZ, 我自己整合的FXJ 图里面就是用了布林和肯特那, 但是不知道这样的用法, 只是当时觉得两个通道有点用处, 看来得再琢磨一下。
     
  9. 原来理解KC通道也是一个区间, 跟布林差不多, 刚搜了一下,看到这个描述:“当价格报收在顶部环带之上时,通常意味着向上动能的突破” 看来这个是说动能, 突破的,

    布林是讲波动可能范围的,
     
  10. 理解对,用2种通道(布林线和肯特纳通道)的波动特性来筛选品种(强波动性),然后用动能或类似的来指引方向。

    参看约翰.F.卡特《驾驭交易》
     
  11. 布林通道和肯特纳通道(Keltner Channel)构造的Squeeze最大的价值是可以将传统的二元反转系统(只有涨、跌)扩展为三元系统(涨、跌和震荡)。:D:p
    Squeeze可能是构造趋势-震荡状态最易量化的方法。

    至于指向性指标其实也可以将动量指标更换成比如SAR这样的趋势性指标(也就将单纯的SAR趋势指标(涨跌二元系统扩展成涨跌震荡三元系统)。:D:p

    甚至可以利用Squeeze的三元特性,构造趋势——震荡系统,在趋势阶段用趋势特性指标来指向,而在震荡阶段用震荡性指标来指向。:D:p

    =============================
    下面会利用这个帖将一些觉得有价值的指标,想法编成指标贴在这里,当然都是玩玩的,别当真,都没测试过,只是凭直觉:D:p如果有参考来源会尽量提供方法的参考来源。
     
  12. 期待中。。。。
     
  13. 其实ZIG指标可以说是最好的指标之一,但不少人都说ZIG指标使用了“未来函数”,那主要是国内分析软件的问题,无法揭示产生转折点的位置(不是ZIG图形转折位,而是指满足产生图形转折位的那根k线位置),所以导致测试的“混乱”。在考虑搞个类似的可以提示转折位的接近ZIG特性的指标。

    和布林线有关的几个指标代码(益盟操盘手下的,修改下应该可以在国内其他软件下用),布林线相关指标主要是为了以后一些指标的“归一化”处理。

    所有指标等都是玩玩的,别太认真。:D:p


    参考自《布林线》
    ===================
    主图指标
    WJBOLL
    双布林线
    N1 (1, 100, 20);
    P1 (0, 10, 2);
    N2 (1, 1000, 100);
    P2 (1, 10, 2);

    MID1 : MA(CLOSE,N1),colorwhite;
    UPPER1:MID1 + P1*STD(CLOSE,N1),coloryellow;
    LOWER1:MID1 - P1*STD(CLOSE,N1),coloryellow;
    MID2 : MA(CLOSE,N2),colorgreen;
    UPPER2:MID2 + P2*STD(CLOSE,N2),colorblue;
    LOWER2:MID2 - P2*STD(CLOSE,N2),colorblue;

    =================
    副图指标
    WJBB

    N(0,500,20);
    P(0,10,2);
    UP(0,20,10);
    DOWN(0,20,0);

    MID := MA(CLOSE,N);
    UPPER:= MID + P*std(c,n);
    LOWER:= MID - P*std(c,n);
    bb : (c-lower)/(upper-lower),colorwhite;
    hh : (h-lower)/(upper-lower),colorblue;
    ll : (l-lower)/(upper-lower),colorgreen;

    upline : up/10,coloryellow;
    downline : down/10,coloryellow;

    ======================
    副图指标
    WJBW
    布林线带宽

    N(1,500,20);
    P(0,10,2);
    S(0,100,5);

    MID := MA(CLOSE,N);
    UPPER:= MID + P*std(c,n);
    LOWER:= MID - P*std(c,n);
    bwidth : (upper-lower)/mid,colorwhite;

    sline := s/100,coloryellow;
     
    Last edited by a moderator: Oct 13, 2013
  14. 最好用code标签发...
     
  15. :p嘿嘿,没注意代码正好和表情冲突了,加了空格就正常了:D
     
  16. 比如我有个简单的均线指标MA(x,n),参数设置里x有下面几个值:1、表示用close,2、表示用(high+low)/2,3、表示用(high+low+close)/3,4、表示用(high+low+close+open)/4。如何在指标里实现选择不同的参数x就只显示上面4种情况之一(而不需要编写成4个指标或同时显示4种情况?!不知道能不能实现?如何实现?

    后来想起来好像可以这样实现?!留案备用,这样方便些,可以将一些指标整合到一个指标里,通过参数选择来实现不同的显示,方便使用,省得散落到好几个指标里.
    X(1,4,1);
    N(1,500,20);

    xx1 := c;
    xx2 := (h+l)/2;
    xx3 := (h+L+c)/3;
    xx4 := (h+L+c+o)/4;

    ma1 := ma(xx1,n);
    ma2 := ma(xx2,n);
    ma3 := ma(xx3,n);
    ma4 := ma(xx4,n);

    POLYLINE(x==1,ma1);
    POLYLINE(x==2,ma2);
    POLYLINE(x==3,ma3);
    POLYLINE(x==4,Ma4);

    这个实现好像有点缺陷,就是只能划线出来,而不是同时显示指标的值,不知道有什么方法既可以划线也可以显示指标的值?
     

  17. myclose := if(x=1, c, if(x=2, (h+l)/2, if (x=3, (h+l+c)/3, (h+l+c+o)/4)));
    myma := ma(myclose, n);
     
  18. 嘿嘿,还是你厉害,没注意if函数还可以这样嵌套使用。完美解决了我的需求:p:D
     
  19. 我猜测这里的布林和肯特那通道的周期参数一样的, 因为我用的参数不一样, 肯特那周期短一些, 所以肯特那通道都是在布林通道内部的第二个通道, 我本意是, 布林通道,我理解是回归, 置信区间,提供的是股价波动的极限值, 肯特那通道我理解是短期波动能量, 动能指标? 看是否加速突破之类的
     
  20. 我倒是认为两个周期的参数是否相同不大要紧, 但是倍数(即楼主代码中的bolBandStdDev和keltStdDev) 的选择比较重要。
    对于不同的品种,这两个倍数的选择,应该使得boll通道在多数时候处于kelt通道内部, 只有较大的波动形成时才突破kelt通道。