woodies CCI Panel for Amibroker 源码,请高人解一下

Discussion in 'AmiBroker' started by hongludianxu, Aug 15, 2008.

  1. ///////////////////////////////
    // CCI Panel for Amibroker
    // Codded/Added by Dennis, Kris, Wring, Santacs
    // Last Update: 1/02/2008
    ///////////////////////////////
    // Go to www.woodies" onclick="tagshow(event)" class="t_tag">woodiescciclub.com to learn everything about this system.
    // You must be a registered user to see the images and downloads.
    ///////////////////////////////
    // Setup Axes and Grid section (right click on chart panel, click on
    Parameters):
    // Scaling: Custom , Min=-250 Max=250
    // Show Date Axis = Yes , Show Middle Lines = No
    ///////////////////////////////
    // To activate the timer properly, make sure the following is set:
    // click on Tools==>Preferences==>Intraday....
    // make sure "Allign minute bars to market hours" is checked...
    // make sure "Start time of interval" is checked...
    // make sure "Override: Weekly/monthly bars use day of last trade" is checked.
    ///////////////////////////////
    // Tic/PIP values: YM=1.0, ER2=0.10, NQ=0.25, EUR/USD=.0001, USD/JPY=0.01,
    Stocks=0.01
    ///////////////////////////////
    // Rangebar Settings :
    // ER2 1.50
    // YM 25
    // ES 3
    // NQ 3.75
    // DAX 5
    // ZG 1.5
    ///////////////////////////////
    // Discalimer: For educational purposes only. Trade at your own risk.
    ///////////////////////////////

    // Timer
    TTMperiod = 6;
    Low_ma = EMA(L, TTMperiod);
    High_ma = EMA(H, TTMperiod);
    Low_third = (High_ma - Low_ma) / 3 + Low_ma;
    High_third = 2 * (High_ma - Low_ma) / 3 + Low_ma;
    tempnum = Now( 4 ) - TimeNum(); { Now --Returns current date / time in numerous of formats }
    TimeRem = Interval() - ((int(tempnum[BarCount - 1] / 100) * 60) +
    (tempnum[BarCount - 1] - int(tempnum[BarCount - 1] / 100) * 100));
    if (TimeRem[BarCount - 1] < 0) TimeRem = 0;
    MinuteVar = int(TimeRem / 60);
    SecondsVar = int(frac(TimeRem / 60) * 60);
    if (TimeRem[BarCount - 1] > 60)
    {
    TitleTimeRem = EncodeColor(colorWhite) + MinuteVar + ":" + WriteIf(SecondsVar >
    9, "", "0") + SecondsVar;
    }
    else if (TimeRem[BarCount - 1] > 20)
    {
    TitleTimeRem = EncodeColor(colorYellow) + MinuteVar + ":" + WriteIf(SecondsVar
    > 9, "", "0") + SecondsVar;
    }
    else
    {
    TitleTimeRem = EncodeColor(colorRed) + MinuteVar + ":" + WriteIf(SecondsVar >
    9, "", "0") + SecondsVar;
    }

    // Background color

    SetChartBkColor(ParamColor("Panel color ",colorPaleBlue));

    // CCI colors

    zcolor= ParamColor("WCCI color",colorBlack);
    z6color= ParamColor("TCCI color",colorBrown);
    patterncolor= ParamColor("Pattern trace color",colorWhite);

    // CCI periods

    zperiod=Param("WCCI period",14,0,100);
    z = CCI(zperiod);
    z6period=Param("TCCI period",6,0,1000);
    z6 = CCI(z6period);

    // Tic/PIP value

    TicMult= Param("Tic multiplier(ER2=10,YM=1,ES=4,FOREX=1)",1,0,1000000);
    TicDiv= Param("Tic or PIP value(ER2=0.1,YM=1,FOREX=1)",1,0,1000000);

    // Rangebar interval

    rbint= Param("Rangebar
    interval:(YM=25.0,AB=1.5,NQ=3.75,ES=3.0)",1.0,0.25,1000000);

    // Rangebar counter

    rbcounter= round(((rbint-(H-L))) * ticmult);
    rbcounterpercent= round((rbcounter/(rbint * ticmult))*100);

    // Timer/counter title

    timercode= Param("Timer:(minutes=1,rangebar=2)",1,1,2);
    timetitle= WriteIf(timercode==1,TitleTimeRem, EncodeColor(colorWhite) +
    "Countdown " + rbcounter + " (" + rbcounterpercent + "%)");

    // Spread

    spread= Param("Spread (included in stop)",0,0,1000000);

    // Stop value

    stopval= Param("Stop above/below entry bar",2,0,1000000);

    // Plot grids

    PlotTheGrids = ParamToggle("Plot grids","No|Yes",0);
    if (PlotTheGrids ==1)
    {
    PlotGrid(0);
    PlotGrid(-100);
    PlotGrid(100);
    PlotGrid(-200);
    PlotGrid(200);
    }

    // Angle variables

    PI = atan(1.00) * 4;
    periods = 30;
    HighHigh = HHV(H, periods);
    LowLow = LLV(L, periods);
    range = 25 / (HighHigh - LowLow) * LowLow;

    // EMA34 Angle -- 34指数均线的角度

    EMA34 = EMA(C,34);
    x1_EMA34 = 0;
    x2_EMA34 = 1;
    y1_EMA34 = 0;
    y2_EMA34 = (Ref(EMA34, -1) - EMA34) / Avg * range;
    c_EMA34 = sqrt((x2_EMA34 - x1_EMA34)*(x2_EMA34 - x1_EMA34) + (y2_EMA34 -
    y1_EMA34)*(y2_EMA34 - y1_EMA34));
    angle_EMA34 = round(180 * acos((x2_EMA34 - x1_EMA34)/c_EMA34) / PI);
    angle_EMA34 = IIf(y2_EMA34 > 0, - angle_EMA34, angle_EMA34);

    // LSMA25 Angle

    LSMA25 = LinearReg(C, 25 );
    x1_LSMA25 = 0;
    x2_LSMA25 = 1;
    y1_LSMA25 = 0;
    y2_LSMA25 = (Ref(LSMA25, -1) - LSMA25) / Avg * range;
    c_LSMA25 = sqrt((x2_LSMA25 - x1_LSMA25)*(x2_LSMA25 - x1_LSMA25) + (y2_LSMA25 -
    y1_LSMA25)*(y2_LSMA25 - y1_LSMA25));
    angle_LSMA25 = round(180 * acos((x2_LSMA25 - x1_LSMA25)/c_LSMA25) / PI);
    angle_LSMA25 = IIf(y2_LSMA25 > 0, - angle_LSMA25, angle_LSMA25);

    // Color the bars for Woodies Trend Following

    function Consecutive( array )
    {
    return BarsSince( NOT( array ) );
    }
    function Occurrences( array , period )
    {
    return Sum( array, period );
    }
    array = z;
    HighBars = Consecutive( array > 0 );
    LowBars = Consecutive( array < 0 );
    UpCondition = BarsSince( HighBars >= 6 AND Occurrences( array > 100 , 5 ) > 0
    );
    DnCondition = BarsSince( LowBars >= 6 AND Occurrences( array < -100 , 5 ) > 0
    );
    UpTrend = ( array > 0 ) AND ( UpCondition < DnCondition );
    DnTrend = ( array < 0 ) AND ( UpCondition > DnCondition );
    TrTrend = ( HighBars >= 5 AND NOT UpTrend ) OR ( LowBars >= 5 AND NOT DnTrend
    );
    Color = IIf( UpTrend, colorBlue, IIf( DnTrend, colorRed, IIf( TrTrend,
    colorYellow, colorGrey40 ) ) );

    // Plot the Mock CZI on the 100s

    ColorANGLE_EMA = IIf(angle_EMA34 >=5,colorTurquoise,
    IIf(angle_EMA34 <5 AND angle_EMA34 >=3.57,colorDarkGreen,
    IIf(angle_EMA34 <3.57 AND angle_EMA34 >=2.14,colorPaleGreen,
    IIf(angle_EMA34 <2.14 AND angle_EMA34 >=.71,colorLime,
    IIf(angle_EMA34 <=-1*5,colorDarkRed,
    IIf(angle_EMA34 >-1*5 AND angle_EMA34 <=-1*3.57,colorRed,
    IIf(angle_EMA34 >-1*3.57 AND angle_EMA34 <=-1*2.14,colorOrange,
    IIf(angle_EMA34 >-1*2.14 AND angle_EMA34
    <=-1*.71,colorLightOrange,colorYellow))))))));
    Plot(100,"", ColorANGLE_EMA , styleLine | styleThick | styleNoLabel);
    Plot(-100,"", ColorANGLE_EMA , styleLine | styleThick | styleNoLabel);

    // Plot the Mock Sidewinder on the 200s

    SW = IIf((abs(angle_EMA34) >= 15) AND (abs(angle_EMA34 + angle_LSMA25) >= 50),
    IIf(angle_LSMA25 > 0, 2, -2),
    IIf((abs(angle_EMA34) >= 0) AND (((angle_EMA34 >= 0) AND (angle_LSMA25 >= 0))
    OR ((angle_EMA34 <= 0) AND (angle_LSMA25 <= 0))) AND (abs(angle_EMA34 +
    angle_LSMA25) >= 5), IIf(angle_LSMA25 > 0, 1, -1), 0));
    ColorSW = IIf(abs(SW) == 2, colorBrightGreen,
    IIf(abs(SW) == 1, colorYellow, colorRed));
    Plot(200,"", ColorSW, styleLine | styleThick | styleNoLabel);
    Plot(-200,"", ColorSW, styleLine | styleThick | styleNoLabel);

    // Zero line 25lsma

    Plot(0,"", IIf(C > LSMA25,colorBrightGreen,IIf(C < LSMA25,colorRed,colorTeal)),
    styleLine | styleThick | styleNoLabel);

    // CCI Points

    diffCode=ParamToggle("Plot CCI diff ","No|Yes",1);
    CCipointmove= z-Ref(z,-1);
    CCIpointmovetitle= WriteIf(diffcode==1 AND
    abs(CCipointmove)<15,EncodeColor(colorRed) + "\n" + "DIFF " +
    abs(round(CCipointmove)) + "\n",WriteIf(diffcode==1 AND abs(CCipointmove)>=15
    AND abs(CCipointmove)<20,EncodeColor(colorYellow) + "\n" + "DIFF " +
    abs(round(CCipointmove)) + "\n",WriteIf(diffcode==1 AND
    abs(CCIpointmove)>=20,EncodeColor(colorBrightGreen) + "\n" + "DIFF " +
    abs(round(CCipointmove))+ "\n","")));

    // Price Panel

    Lastpricetitlehi= WriteIf(H>Ref(H,-1),EncodeColor(colorBrightGreen) + Ref(H,-1)
    + " " + H , EncodeColor(colorWhite)+ Ref(H,-1) + " " + H);
    Lastpricetitlelo= WriteIf(L<REF(L,-1),ENCODECOLOR(COLORRED) ?
    + L , EncodeColor(colorWhite) + Ref(L,-1) + " " + L);
    Closecolor=WriteIf(C==H AND
    H>Ref(H,-1),EncodeColor(colorBrightGreen),WriteIf(C==L AND
    L<REF(L,-1),ENCODECOLOR(COLORRED),ENCODECOLOR(COLORWHITE)));

    //Pivot Points Calculations

    pivCode=ParamToggle("Plot pivots ","No|Yes",1);
    DayH = TimeFrameGetPrice("H", inDaily, -1);
    DayL = TimeFrameGetPrice("L", inDaily, -1);
    DayC = TimeFrameGetPrice("C", inDaily, -1);
    DayO = TimeFrameGetPrice("O", inDaily);
    HiDay = TimeFrameGetPrice("H", inDaily);
    LoDay = TimeFrameGetPrice("L", inDaily);
    PP = (DayH + DayL + DayO + DayO) / 4 ;
    R1 = (2 * PP) - DayL;
    S1 = (2 * PP) - DayH;
    R2 = PP + R1 - S1;
    S2 = PP + S1 - R1;
    R3 = R2 + (R1 - PP);
    S3 = S2 - (PP - S1);
    ppvalue= round(abs((C-pp)/ticdiv));
    r1value= round(abs((C-r1)/ticdiv));
    s1value= round(abs((C-s1)/ticdiv));
    r2value= round(abs((C-r2)/ticdiv));
    s2value= round(abs((C-s2)/ticdiv));
    r3value= round(abs((C-r3)/ticdiv));
    s3value= round(abs((C-s3)/ticdiv));
    wptitle= WriteIf(pivCode==1 AND C>=R3, "\n" + EncodeColor(colorYellow)+"R3 " +
    "-" + (R3value) + "\n" + "\n",
    WriteIf(pivCode==1 AND C<=R3 AND C>=R2, "\n" + EncodeColor(colorYellow)+"R3 "
    + "+" + (R3value) + "\n" + EncodeColor(colorYellow) + "R2 " + "-" + (R2value)
    + "\n" + "\n",
    WriteIf(pivCode==1 AND C<=R2 AND C>=R1, "\n" + EncodeColor(colorYellow)+"R2 "
    + "+" + (R2value) + "\n" + EncodeColor(colorYellow) + "R1 " + "-" + (R1value)
    + "\n" + "\n",
    WriteIf(pivCode==1 AND C<=R1 AND C>=PP, "\n" + EncodeColor(colorYellow)+"R1 "
    + "+" + (R1value) + "\n" + EncodeColor(colorYellow) + "PP " + "-" + (PPvalue)
    + "\n" + "\n",
    WriteIf(pivCode==1 AND C<=PP AND C>=S1, "\n" + EncodeColor(colorYellow)+"PP "
    + "+" + (PPvalue) + "\n" + EncodeColor(colorYellow) + "S1 " + "-" + (S1value)
    + "\n" + "\n",
    WriteIf(pivCode==1 AND C<=S1 AND C>=S2, "\n" + EncodeColor(colorYellow)+"S1 "
    + "+" + (S1value) + "\n" + EncodeColor(colorYellow) + "S2 " + "-" + (S2value)
    + "\n" + "\n",
    WriteIf(pivCode==1 AND C<=S2 AND C>=S3, "\n" + EncodeColor(colorYellow)+"S2 "
    + "+" + (S2value) + "\n" + EncodeColor(colorYellow) + "S3 " + "-" + (S3value)
    + "\n" + "\n",
    WriteIf(pivCode==1 AND C<=S3, "\n" + EncodeColor(colorYellow)+"S3 " + "+" +
    (S3value) + "\n"+ "\n",""))))))));

    // HOD , LOD, Range

    HiDayTitle = WriteIf(pivCode==1,EncodeColor(colorYellow) + "HOD ","");
    HiDayTitle = WriteIf(pivCode==1,HiDayTitle + EncodeColor(colorYellow) + HiDay +
    " +" + round(abs((HiDay-C)/ticdiv)) + "\n","");
    LoDayTitle = WriteIf(pivCode==1,EncodeColor(colorYellow) + "LOD ","");
    LoDayTitle = WriteIf(pivCode==1,LoDayTitle + EncodeColor(colorYellow) + LoDay +
    " -" + round(abs((C-LoDay)/ticdiv)) + "\n"," ");
    RangeTitle1 =WriteIf(pivCode==1,EncodeColor(colorYellow) + "Day Range " +
    EncodeColor(colorYellow) + StrToNum(NumToStr(round((HiDay - LoDay)/ticdiv),
    4.4)) + "\n","");

    // Pattern codes

    Cziquallong= ((angle_EMA34>=5 OR Ref(angle_EMA34,-1)>=5) AND
    Ref(angle_EMA34,-2)>=5) OR (Ref(angle_EMA34,-1)>=5 AND angle_EMA34>=5);
    Cziqualshort= ((angle_EMA34<=-5 OR Ref(angle_EMA34,-1)<=-5) AND
    Ref(angle_EMA34,-2)<=-5) OR (Ref(angle_EMA34,-1)<=-5 AND angle_EMA34<=-5);

    // ZLR Long

    Linex_long=Ref(z,-1)>100 AND z<100;
    barsfromline_long=BarsSince(Linex_long);
    CCIhook_long=z>Ref(z,-1) AND Ref(z,-1)>-100 AND Ref(z,-1)<REF(Z,-2) AND
    Ref(z,-2)>-100 AND z>0;
    SW_trendinglong= sw==1 OR sw==2;
    zlrlong1= abs(CCipointmove)>=15 AND SW_trendinglong AND z<120 AND
    barsfromline_long<=10 AND CCIhook_long AND UpTrend;
    zlrnextl= z<120 AND barsfromline_long<10 AND CCIhook_long AND UpTrend;
    zlrlong= Cziquallong AND (zlrlong1 OR ( NOT Ref(zlrlong1,-1) AND
    Ref(zlrnextl,-1) AND abs(CCipointmove)>=15 AND z>=Ref(z,-1) AND SW_trendinglong
    AND z<120 AND UpTrend));

    // ZLR Short

    Linex_short=Ref(z,-1)<=-100 AND z>=-100;
    barsfromline_short=BarsSince(Linex_short);
    CCIhook_short=zRef(z,-2) AND
    Ref(z,-2)<100 AND z<0;
    SW_trendingshort= sw==-1 OR sw==-2;
    zlrshort1= abs(CCipointmove)>=15 AND SW_trendingshort AND z>-120 AND
    barsfromline_short<=10 AND CCIhook_short AND DnTrend;
    zlrnexts= z>-120 AND barsfromline_short<10 AND CCIhook_short AND DnTrend;
    zlrshort= Cziqualshort AND (zlrshort1 OR (NOT Ref(zlrshort1,-1) AND
    Ref(zlrnexts,-1) AND abs(CCipointmove)>=15 AND z<=Ref(z,-1) AND
    SW_trendingshort AND z>-120 AND DnTrend));

    // Famir Long

    FamirLinex_long=Ref(z,-1)<=-100 AND z>-100;
    Famir_barsfromline_long=BarsSince(FamirLinex_long);
    Famir_pivotlong= (Ref(z,-2)>Ref(z,-1)AND Ref(z,-1)>=-55 AND Ref(z,-2)>=-55) OR
    (Ref(z,-3)>Ref(z,-1) AND Ref(z,-1)>=-55 AND Ref(z,-2)>=-55 AND
    Ref(z,-3)>=-55)OR (Ref(z,-4)>Ref(z,-1) AND Ref(z,-1)>=-55 AND Ref(z,-2)>=-55
    AND Ref(z,-3)>=-55);
    Famirhook_long=Famir_pivotlong AND z>Ref(HHV(z,Famir_barsfromline_long),-1) AND
    (z>=-55 AND z<=55);
    Famirlong= Famir_barsfromline_long<10 AND Famirhook_long AND ((DnTrend OR
    Ref(Dntrend,-BarsSince(z<0))==1) AND NOT UpTrend) AND C>LSMA25;

    // Famir Short

    FamirLinex_short=Ref(z,-1)>=100 AND z<100;
    Famir_barsfromline_short=BarsSince(FamirLinex_short);
    Famir_pivotshort= (Ref(z,-2)<REF(Z,-1)AND AND OR
    (Ref(z,-3)<REF(Z,-1)AND AND OR
    (Ref(z,-4)<REF(Z,-1) AND Ref(z,-2)<="55" Ref(z,-1)<="55" Ref(z,-3)<="55);"
    Famirhook_short=Famir_pivotshort AND z<REF(LLV(Z,FAMIR_BARSFROMLINE_SHORT),-1)
    AND (z>=-55 AND z<=55);
    Famirshort= Famir_barsfromline_short<10 AND Famirhook_short AND ((UpTrend OR
    Ref(Uptrend,-BarsSince(z>0))==1) AND NOT DnTrend) AND C<LSMA25;

    // HFE

    HFEshort=(Ref(z,-1)>200 AND z<200);
    HFElong=(Ref(z,-1)<-200 AND z>-200);
    HFE= HFEshort OR HFElong;

    // VT Long

    vtLinex_long=Ref(z,-1)<=-200 AND z>-200;
    vt_barsfromline_long=BarsSince(vtLinex_long);
    vtlong_A = z<-200;
    vtlong_B = Ref(z,-1)<=Ref(z,-2) OR
    Ref(z,-2)<=Ref(z,-3) OR
    Ref(z,-3)<=Ref(z,-4) OR
    Ref(z,-4)<=Ref(z,-5) OR
    Ref(z,-5)<=Ref(z,-6) OR
    Ref(z,-6)<=Ref(z,-7) OR
    Ref(z,-7)<=Ref(z,-8);
    vtlong_bs_A = BarsSince(vtlong_A);
    vtlong_bs_B = BarsSince(vtlong_b);
    Vtlong_bars = vtlong_bs_A>=5 AND vtlong_bs_B<=0;
    vt_pivotlong= Vtlong_bars;
    swinghibars=BarsSince(z>Ref(HHV(z,vt_barsfromline_long),-1));
    vthook_long= vt_pivotlong AND z>Ref(HHV(z,vt_barsfromline_long),-1);
    vtlong= z<100 AND vt_barsfromline_long<=11 AND
    (Ref(HHV(z,vt_barsfromline_long),-1)<0 OR HHV(z,vt_barsfromline_long)<=0) AND
    vthook_long AND C>Lsma25 AND Ref(swinghibars>=2,-1) AND z>-100;

    // VT Short

    vtLinex_short=Ref(z,-1)>=200 AND z<200;
    vt_barsfromline_short=BarsSince(vtLinex_short);
    vtshort_A = z>200 ;
    vtshort_B =Ref(z,-1)>=Ref(z,-2) OR
    Ref(z,-2)>=Ref(z,-3) OR
    Ref(z,-3)>=Ref(z,-4) OR
    Ref(z,-4)>=Ref(z,-5) OR
    Ref(z,-5)>=Ref(z,-6) OR
    Ref(z,-6)>=Ref(z,-7) OR
    Ref(z,-7)>=Ref(z,-8);
    vtshort_bs_A = BarsSince(vtshort_A);
    vtshort_bs_B = BarsSince(vtshort_b);
    Vtshort_bars = vtshort_bs_A>=5 AND vtshort_bs_B<=0;
    vt_pivotshort= Vtshort_bars;
    swinglowbars= BarsSince(z<REF(LLV(Z,VT_BARSFROMLINE_SHORT),-1));
    vthook_short= vt_pivotshort AND z<REF(LLV(Z,VT_BARSFROMLINE_SHORT),-1);
    vtshort= z>-100 AND vt_barsfromline_short<=11 AND
    (Ref(LLV(z,vt_barsfromline_short),-1)>0 OR LLV(z,vt_barsfromline_short)>0) AND
    vthook_short AND C=2,-1) AND z<100;

    // GB 100 Long

    Linex_longGB=Ref(z,-1)>100 AND z<100;
    barsfromline_longGB=BarsSince(Linex_longGB);
    CCIhook_longGB= Ref(z,-1)<-100 AND z>-100;
    GB100long= z<100 AND barsfromline_longGB<=12 AND Cziquallong AND CCIhook_longGB
    AND (Ref(UpTrend,-BarsSince(z>0))==1 AND NOT DnTrend);

    // GB100 Short

    Linex_shortGB=Ref(z,-1)<-100 AND z>-100;
    barsfromline_shortGB=BarsSince(Linex_shortGB);
    CCIhook_shortGB=Ref(z,-1)>100 AND z<100;
    Gb100short= z>-100 AND barsfromline_shortGB<=12 AND Cziqualshort AND
    CCIhook_shortGB AND (Ref(DnTrend,-BarsSince(z<0))==1 AND NOT UpTrend);

    // TT Long

    Minuszero=BarsSince(Ref(z,-1)>0) + 1;
    TTCCIhook_long= z>Ref(z,-1) AND z>0;
    TTlong= Cziquallong AND z<100 AND Ref(UpTrend,-Minuszero)==1 AND
    LLV(Ref(z,-1),BarsSince(Ref(z,-1)>=100))>-100 AND
    HHV(Ref(z,-1),BarsSince(Ref(z,-1)< 0))>=100 AND TTCCIhook_long AND
    Ref(LowBars,-1)>=4 AND Ref(LowBars,-1)<=9;

    // TT Short

    Pluszero=BarsSince(Ref(z,-1)<0) + 1;
    TTCCIhook_short=z<REF(Z,-1) AND
    TTshort= Cziqualshort AND z>-100 AND Ref(DnTrend,-Pluszero)==1 AND
    HHV(Ref(z,-1),BarsSince(Ref(z,-1)<=-100))<100 AND
    LLV(Ref(z,-1),BarsSince(Ref(z,-1)>0))<=-100 AND TTCCIhook_short AND
    Ref(HighBars,-1)>=4 AND Ref(HighBars,-1)<=9;

    // PT Long

    Phook_long1= Ref(z,-1)>=Ref(z,-2) AND Ref(z,-2)0;
    Phook_long2= Ref(z,-3)>-100 AND Ref(z,-1)>Ref(z,-2) AND Ref(z,-2)<REF(Z,-3) AND
    Ref(z,-3)0;
    Ptlong= Cziquallong AND (Phook_long1 OR Phook_long2) AND (z>0 AND Ref(z,-1)<0
    AND z<120 AND Ref(z,-1)>-100 AND Ref(z,-2)>-100 AND z>Ref(z,-1) AND UpTrend);

    // PT Short

    Phook_short1= Ref(z,-1)<=Ref(z,-2) AND Ref(z,-2)>Ref(z,-3) AND Ref(z,-3)<0;
    Phook_short2= Ref(z,-3)<100 AND Ref(z,-1)Ref(z,-3) AND
    Ref(z,-3)> Ref(z,-4) AND Ref(z,-4)<0;
    Ptshort= Cziqualshort AND (Phook_short1 OR Phook_short2) AND (z<0 AND
    Ref(z,-1)>0 AND z>-120 AND Ref(z,-1)<100 AND Ref(z,-2)<100 AND z<REF(Z,-1) AND
    DnTrend);

    // Signal Title

    PatCode1=ParamToggle("Plot ZLR (1)","No|Yes",1);
    PatCode2=ParamToggle("Plot FAMIR (2)","No|Yes",1);
    PatCode3=ParamToggle("Plot VT (3)","No|Yes",1);
    PatCode4=ParamToggle("Plot GB100 (4)","No|Yes",1);
    PatCode5=ParamToggle("Plot TT (5)","No|Yes",1);
    PatCode6=ParamToggle("Plot PT (6)","No|Yes",1);
    PatCode7=ParamToggle("Plot HFE","No|Yes",1);

    Signaltitle= WriteIf(PatCode1==1 AND zlrlong,EncodeColor(colorDarkRed) + "\n" +
    "*** ALERT -- ZLR ***" + "\n",
    WriteIf(PatCode1==1 AND zlrshort,EncodeColor(colorDarkRed) + "\n" + "*** ALERT
    -- ZLR ***" + "\n",
    WriteIf(PatCode2==1 AND Famirshort,EncodeColor(colorDarkRed) + "\n" + "***
    ALERT -- FAMIR ***" + "\n",
    WriteIf(PatCode2==1 AND Famirlong,EncodeColor(colorDarkRed) + "\n" + "***
    ALERT -- FAMIR ***" + "\n",
    WriteIf(PatCode3==1 AND VTlong AND NOT famirlong,EncodeColor(colorDarkRed) +
    "\n" + "*** ALERT -- VT ***" + "\n",
    WriteIf(PatCode3==1 AND VTshort AND NOT famirshort,EncodeColor(colorDarkRed) +
    "\n" + "*** ALERT -- VT ***" + "\n",
    WriteIf(PatCode4==1 AND GB100long,EncodeColor(colorDarkRed) + "\n" + "***
    ALERT -- GB100 ***" + "\n",
    WriteIf(PatCode4==1 AND Gb100short,EncodeColor(colorDarkRed) + "\n" + "***
    ALERT -- GB100 ***" + "\n",
    WriteIf(PatCode5==1 AND TTLong,EncodeColor(colorDarkRed) + "\n" + "*** ALERT
    -- TT ***" + "\n",
    WriteIf(PatCode5==1 AND TTShort,EncodeColor(colorDarkRed) + "\n" + "*** ALERT
    -- TT ***" + "\n",
    WriteIf(PatCode6==1 AND PTLong,EncodeColor(colorDarkRed) + "\n" + "*** ALERT
    -- PT ***" + "\n",
    WriteIf(PatCode6==1 AND PTShort,EncodeColor(colorDarkRed) + "\n" + "*** ALERT
    -- PT ***" + "\n",
    WriteIf(PatCode7==1 AND HFE,EncodeColor(colorDarkRed) + "\n" + "*** ALERT --
    HFE ***" + "\n","")))))))))))));

    // Pattern signal codes

    PlotShapes(IIf(PatCode1==1 AND
    zlrlong,shapeDigit1,shapeNone),colorBlue,0,Min(z,0),-15);
    PlotShapes(IIf(PatCode1==1 AND zlrshort,shapeDigit1+
    shapePositionAbove,shapeNone),colorRed,0,Max(z,0),-15);
    PlotShapes(IIf(PatCode2==1 AND
    famirlong,shapeDigit2,shapeNone),colorBlue,0,Min(z,0),-15);
    PlotShapes(IIf(PatCode2==1 AND famirShort ,shapeDigit2+
    shapePositionAbove,shapeNone),colorRed,0,Max(z,0),-15) ;
    PlotShapes(IIf(PatCode3==1 AND vtlong AND NOT
    famirlong,shapeDigit3,shapeNone),colorBlue,0,Min(z,0),-47);
    PlotShapes(IIf(PatCode3==1 AND vtshort AND NOT famirshort,shapeDigit3+
    shapePositionAbove,shapeNone),colorRed,0,Max(z,0),-47);
    PlotShapes(IIf(PatCode4==1 AND
    GB100long,shapeDigit4,shapeNone),colorBlue,0,Min(z,0),-60);
    PlotShapes(IIf(PatCode4==1 AND GB100short,shapeDigit4+
    shapePositionAbove,shapeNone),colorRed,0,Max(z,0),-60);
    PlotShapes(IIf(PatCode5==1 AND
    ttlong,shapeDigit5,shapeNone),colorBlue,0,Min(z,0),-50);
    PlotShapes(IIf(PatCode5==1 AND ttshort,shapeDigit5+
    shapePositionAbove,shapeNone),colorRed,0,Max(z,0),-50);
    PlotShapes(IIf(PatCode6==1 AND
    ptlong,shapeDigit6,shapeNone),colorBlue,0,Min(z,0),-50);
    PlotShapes(IIf(PatCode6==1 AND ptshort,shapeDigit6+
    shapePositionAbove,shapeNone),colorRed,0,Max(z,0),-50);
    PlotShapes(IIf(PatCode7==1 AND HFEshort,shapeCircle,shapeNone),IIf(PatCode7==1
    AND HFEshort,colorYellow,shapeNone),0,200,10);
    PlotShapes(IIf(PatCode7==1 AND HFElong,shapeCircle,shapeNone),IIf(PatCode7==1
    AND HFElong,colorYellow,shapeNone),0,-200,-10) ;

    // CCI hook Exit
    HookExitLong= z<=Ref(z,-1);
    HookExitShort= z>=Ref(z,-1);

    // 100 Line Cross Exit Conservative
    Cross100longC= z<=Ref(z,-1) AND z<100;
    Cross100shortC= z>=Ref(z,-1) AND z>-100;

    // 100 Line Cross Exit Aggressive
    Cross100longA= Ref(z,-1)>100 AND z<100;
    Cross100shortA= Ref(z,-1)<-100 AND z>-100;

    // Mplay Exit

    MplayExitLong= z<REF(Z,-1) AND
    MplayExitShort= z>Ref(z,-1) AND Ref(z,-1)>Ref(z,-2) AND C>O;

    // Heikin-Ashi Exit

    HaClose =EMA((O+H+L+C)/4,3);
    HaOpen = AMA( Ref( HaClose, -1 ), 0.5 );
    HaHigh = Max( H, Max( HaClose, HaOpen ) );
    HaLow = Min( L, Min( HaClose, HaOpen ) );
    HExitConLong= HaLow < HaOpen;
    HExitConShort= HaHigh > HaOpen;

    // Exit code
    ExitCode=
    Param("Exits:Hook=1,100xConservative=2,100xAggressive=3,Mplay=4,H-Ashi=5",1,1,5);
    ExitCodeTitleLong=
    IIf(ExitCode==1,HookExitLong,IIf(Exitcode==2,Cross100longC,IIf(Exitcode==3,Cross100longA,IIf(Exitcode==4,MplayExitLong,IIf(Exitcode==5,HExitConLong,0)))));
    ExitCodeTitleShort=
    IIf(ExitCode==1,HookExitShort,IIf(Exitcode==2,Cross100shortC,IIf(Exitcode==3,Cross100shortA,IIf(Exitcode==4,MplayExitShort,IIf(Exitcode==5,HExitConShort,0)))));
    AllPatterns =(zlrlong AND patcode1==1) OR (famirlong AND patcode2==1) OR
    (Vtlong AND patcode3==1) OR (gb100long AND patcode4==1) OR (ttlong AND
    patcode5==1) OR (ptlong AND patcode6==1) OR (Hfelong AND patcode7==1)
    OR (zlrshort AND patcode1==1) OR (famirshort AND patcode2==1) OR (Vtshort AND
    patcode3==1) OR (gb100short AND patcode4==1) OR (ttshort AND patcode5==1) OR
    (ptshort AND patcode6==1) OR (Hfeshort AND patcode7==1);
    BuyPattern = (zlrlong AND patcode1==1) OR (famirlong AND patcode2==1) OR
    (Vtlong AND patcode3==1) OR (gb100long AND patcode4==1) OR (ttlong AND
    patcode5==1) OR (ptlong AND patcode6==1) OR (Hfelong AND patcode7==1);
    SellPattern= ExitCodeTitleLong;
    ShortPattern = (zlrshort AND patcode1==1) OR (famirshort AND patcode2==1) OR
    (Vtshort AND patcode3==1) OR (gb100short AND patcode4==1) OR (ttshort AND
    patcode5==1) OR (ptshort AND patcode6==1) OR (Hfeshort AND patcode7==1);
    CoverPattern = ExitCodeTitleShort;

    //Plot Sell/Cover Arrows

    Sell1=ExRem(SellPattern,BuyPattern);
    Cover1=ExRem(CoverPattern,ShortPattern);
    SellCode=ParamToggle("Plot sell/cover arrows ","No|Yes",0);
    PlotShapes(IIf(Sell1 AND
    SellCode==1,shapeHollowDownArrow,shapeNone),colorBlue,0,200,10);
    PlotShapes(IIf(Cover1 AND
    SellCode==1,shapeHollowDownArrow,shapeNone),colorRed,0,200,10);

    // Calculate pattern hilites

    // Long

    AsellL= BuyPattern;
    BsellL= Sell1;
    bs_AsellL= BarsSince(AsellL);
    bs_BsellL= BarsSince(BsellL);
    bars_sellL= IIf(bs_ASellL<= bs_BsellL,bs_AsellL,0);

    //Short
    AsellS= ShortPattern;
    BsellS= Cover1;
    bs_AsellS= BarsSince(AsellS);
    bs_BsellS= BarsSince(BsellS);
    bars_sellS= IIf(bs_ASellS<= bs_BsellS,bs_AsellS,0);
    hilitecode=ParamToggle("Hi-lite patterns","No|Yes",0);

    // CCI Line

    CCIcolor= IIf(((bars_sellL OR bars_sellS) OR AllPAtterns) AND
    hilitecode==1,patterncolor,zcolor);
    Plot(round(z),"WCCI", CCIcolor , styleLine | styleThick);

    // Turbo CCI

    Plot(round(z6),"TCCI", z6color, styleLine);

    // CCI Histogram

    Plot( array, "", colorDefault, styleLine | styleThick | styleNoLabel);
    Plot( array, "", Color, styleHistogram | styleThick| styleNoLabel);

    // BackTest Long

    LastPatLong= BuyPattern;
    LastPatBarLong= BarsSince(LastPatLong);
    DDL=IIf((((LLV(L,LastPatBarLong)-Ref(C,-LastPatBarLong))))/ticdiv>=0,0,(((LLV(L,LastPatBarLong)-Ref(C,-LastPatBarLong))))/ticdiv);
    BTExitLong= (((C-Ref(C,-LastPatBarLong))))/ticdiv;
    PeakLong=IIf((((HHV(H,LastPatBarLong)-Ref(C,-LastPatBarLong))))/ticdiv<=0,0,(((HHV(H,LastPatBarLong)-Ref(C,-LastPatBarLong))))/ticdiv);
    StopLong1= Ref(C,-LastPatBarLong) - (Ref(L,-LastPatBarLong) - (stopval*ticdiv)
    - (spread*ticdiv));
    stoplong= (((StopLong1)))/ticdiv;
    BackTestLongTitle= WriteIf(Sell1,EncodeColor(colorBlue) + "\n" +
    "Stop " + (Ref(C,-LastPatBarLong) - (round(stoplong)*ticdiv)) + " " +
    round(stoplong) + "\n" +
    "DD " + (Ref(C,-LastPatBarLong) + (round(DDL)*ticdiv)) + " " +
    round(DDL) + "\n" +
    "Exit " + (Ref(C,-LastPatBarLong) + (round(BTExitLong)*ticdiv)) + " " +
    round(BTExitLong) + "\n" +
    "Peak " + (Ref(C,-LastPatBarLong) + (round(PeakLong)*ticdiv)) + " " +
    round(PeakLong) + "\n",EncodeColor(colorBlue) + "\n" +
    "Stop " + (Ref(C,-LastPatBarLong) - (round(stoplong)*ticdiv)) + " " +
    round(stoplong) + "\n" +
    "DD " + (Ref(C,-LastPatBarLong) + (round(DDL)*ticdiv)) + " " +
    round(DDL) + "\n" +
    "Exit " + (Ref(C,-LastPatBarLong) + (round(BTExitLong)*ticdiv)) + " " +
    round(BTExitLong) + "\n" +
    "Peak " + (Ref(C,-LastPatBarLong) + (round(PeakLong)*ticdiv)) + " " +
    round(PeakLong) + "\n");

    // BackTest Short

    LastPatShort= ShortPattern;
    LastPatBarShort= BarsSince(LastPatShort);
    DDS=
    IIf((((Ref(C,-LastPatBarShort)-HHV(H,LastPatBarShort))))/ticdiv>=0,0,(((Ref(C,-LastPatBarShort)-HHV(H,LastPatBarShort))))/ticdiv);
    BTExitShort= (((Ref(C,-LastPatBarShort)-C)))/ticdiv;
    PeakShort=
    IIf((((Ref(C,-LastPatBarShort)-LLV(L,LastPatBarShort))))/ticdiv<=0,0,(((Ref(C,-LastPatBarShort)-LLV(L,LastPatBarShort))))/ticdiv);
    StopShort1= (Ref(H,-LastPatBarShort) + (Stopval*ticdiv) + (spread*ticdiv)) -
    Ref(C,-LastPatBarShort);
    StopShort= (((StopShort1)))/ticdiv;
    BackTestShortTitle= WriteIf(Cover1,EncodeColor(colorRed) + "\n" +
    "Stop " + (Ref(C,-LastPatBarShort) + (round(stopshort)*ticdiv)) + " " +
    round(stopshort) + "\n" +
    "DD " + (Ref(C,-LastPatBarShort) + abs(round(DDS)*ticdiv)) + " " +
    round(DDS) + "\n" +
    "Exit " + (Ref(C,-LastPatBarShort) - (round(BTExitShort)*ticdiv)) + " "
    + round(BTExitShort) + "\n" +
    "Peak " + (Ref(C,-LastPatBarShort) - (round(PeakShort)*ticdiv)) + " " +
    round(PeakShort) + "\n",EncodeColor(colorRed)+ "\n" +
    "Stop " + (Ref(C,-LastPatBarShort) + (round(stopshort)*ticdiv)) + " " +
    round(stopshort) + "\n" +
    "DD " + (Ref(C,-LastPatBarShort) + abs(round(DDS)*ticdiv)) + " " +
    round(DDS) + "\n" +
    "Exit " + (Ref(C,-LastPatBarShort) - (round(BTExitShort)*ticdiv)) + " "
    + round(BTExitShort) + "\n" +
    "Peak " + (Ref(C,-LastPatBarShort) - (round(PeakShort)*ticdiv)) + " " +
    round(PeakShort) + "\n");

    // Backtest title

    BackTestCode= ParamToggle("Display Stop,DD,Peak,Exit stats","No|Yes",0);
    BackTestTitle= WriteIf((bars_sellL>0 OR Sell1) AND
    BackTestCode==1,BackTestLongTitle ,WriteIf((bars_sellS>0 OR Cover1 )AND
    BackTestCode==1,BackTestShortTitle ,""));

    // Stop in

    Longbar= L+rbint;
    Shortbar= H-rbint;
    sstoptitle=WriteIf(timercode==2, EncodeColor(colorBlue) + "\n" + "Stop In Long
    " + Longbar + EncodeColor(colorRed) + "\n" + "Stop In Short " + Shortbar +
    "\n","");

    // Stop out

    stopCode=ParamToggle("Display stop-out ","No|Yes",0);
    StopLong1= C -(L - (stopval*ticdiv) - (spread*ticdiv));
    stoplong1c=C-stoplong1;
    stoplong= round(StopLong1/ticdiv);
    StopShort1= (H + (stopval*ticdiv) + (spread*ticdiv)) - C;
    stopshortc= C+StopShort1;
    StopShort= round(StopShort1/ticdiv);
    stoptitle= WriteIf(stopcode==1,EncodeColor(colorBlue) + "\n" + "Stop Out Long
    " + stoplong1c + " " +stoplong + "\n" +
    EncodeColor(colorRed) + "Stop Out Short " + stopshortc + " " + stopshort +
    "\n","");

    // Title

    Title = "\n" + "" + EncodeColor(colorWhite) + Date() + "\n" + "\n" +
    timetitle + "\n" + "\n" + Lastpricetitlehi + "\n" + Closecolor + C + "\n" +
    Lastpricetitlelo + "\n" + CCIpointmovetitle + wptitle + HiDayTitle + LoDayTitle
    + RangeTitle1 + BackTestTitle + Signaltitle + sstoptitle + stoptitle;
     
  2. 其中计算角度那段:
    // EMA34 Angle

    EMA34 = EMA(C,34);
    x1_EMA34 = 0;
    x2_EMA34 = 1;
    y1_EMA34 = 0;
    y2_EMA34 = (Ref(EMA34, -1) - EMA34) / Avg * range;
    c_EMA34 = sqrt((x2_EMA34 - x1_EMA34)*(x2_EMA34 - x1_EMA34) + (y2_EMA34 -
    y1_EMA34)*(y2_EMA34 - y1_EMA34));
    angle_EMA34 = round(180 * acos((x2_EMA34 - x1_EMA34)/c_EMA34) / PI);
    angle_EMA34 = IIf(y2_EMA34 > 0, - angle_EMA34, angle_EMA34);

    Avg 没有说明
    但是哪位高人说能说这个计算原理?
     
  3. 这个东西好在哪里?
     
  4. woodie CCI 有个专门的网站,其中有提供课程
     
  5. 你好,这个指标不能被编辑使用,希望ami高手帮助给看看是为什么?方便给写个可以直接导入编辑的,非常感谢