• Breaking News

    Wednesday, 3 June 2015

    Chỉ báo Super Trend for Amibroker (amibroker code)

    amibroker code - Chỉ báo Super Trend trong phân tích kỹ thuật :
    Chỉ báo SuperTrend là công cụ rất hữu hiệu để xác định xu hướng của thị trường ( hoặc cổ phiếu ).

     Trong chart này, chúng ta có thể trade với hai cách khác nhau : 

    Trade với các tín hiệu mua bán : 

              - Mua nếu giá vượt lên trên trên đường xu hướng 

             - Bán nếu giá xuống phía dưới đường xu hướng 

    Cài đặt :

    * Chép code sau ( trong khung cuối bài ) . 

    * Copy và dán vào Formular editor và lưu lại - Chương trình sẽ lưu theo mặc định :Program files\Amibroker\formulas\ Super Trend for Amibroker 

    Code sử dụng : 
    Chúc các Bạn thành công !

    http://www.v2htrader.com/search/label/amibroker%20code


    --------------------------------------------------------------------------------------------------------------------------
    _SECTION_BEGIN("SuperTrend");
    SetChartOptions(0,chartShowArrows|chartShowDates);
    SetChartBkColor(ParamColor("bkcolor",ColorRGB(0,0, 0)));
    GfxSetBkMode(0);
    GfxSetOverlayMode(1);
    Clr=IIf(C>O,colorGreen,colorRed);
    Plot( C, "Close", Clr, styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
    SetTradeDelays(1,1,1,1);
    _N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
    Factor=Param("Factor",2,1,10,0.1);
    Pd=Param("ATR Periods",11,1,100,1);
    Up=(H+L)/2+(Factor*ATR(Pd));
    Dn=(H+L)/2-(Factor*ATR(Pd));
    iATR=ATR(Pd);
    TrendUp=TrendDown=Null;
    trend[0]=1;
    changeOfTrend=0;
    flag=flagh=0;
    
    for (i = 1; i <BarCount-1; i++) {
    TrendUp[i] = Null;
    TrendDown[i] = Null;
    
    trend[i]=1;
    if (Close[i]>Up[i-1]) {
    trend[i]=1;
    if (trend[i-1] == -1) changeOfTrend = 1;
    
    }
    else if (Close[i]<Dn[i-1]) {
    trend[i]=-1;
    if (trend[i-1] == 1) changeOfTrend = 1;
    }
    else if (trend[i-1]==1) {
    trend[i]=1;
    changeOfTrend = 0;
    }
    else if (trend[i-1]==-1) {
    trend[i]=-1;
    changeOfTrend = 0;
    }
    
    if (trend[i]<0 && trend[i-1]>0) {
    flag=1;
    }
    else {
    flag=0;
    }
    
    if (trend[i]>0 && trend[i-1]<0) {
    flagh=1;
    }
    else {
    flagh=0;
    }
    
    if (trend[i]>0 && Dn[i]<Dn[i-1]){
    Dn[i]=Dn[i-1];
    }
    
    if (trend[i]<0 && Up[i]>Up[i-1])
    { Up[i]=Up[i-1];
    }
    
    if (flag==1)
    { Up[i]=(H[i]+L[i])/2+(Factor*iATR[i]);;
    }
    if (flagh==1)
    { Dn[i]=(H[i]+L[i])/2-(Factor*iATR[i]);;
    }
    if (trend[i]==1) {
    TrendUp[i]=Dn[i];
    if (changeOfTrend == 1) {
    TrendUp[i-1] = TrendDown[i-1];
    changeOfTrend = 0;
    }
    }
    else if (trend[i]==-1) {
    TrendDown[i]=Up[i];
    if (changeOfTrend == 1) {
    TrendDown[i-1] = TrendUp[i-1];
    changeOfTrend = 0;
    }
    }
    }
    
    Buy = trend==1;
    Sell=trend==-1;
    
    Buy=ExRem(Buy,Sell);
    Sell=ExRem(Sell,Buy);
    Short=Sell;
    Cover=Buy;
    
    BuyPrice=ValueWhen(Buy,C);
    SellPrice=ValueWhen(Sell,C);
    ShortPrice=ValueWhen(Short,C);
    CoverPrice=ValueWhen(Cover,C);
    
    Title = EncodeColor(colorWhite)+ "Trending Signal " + " - " + Name() + " - " + EncodeColor(colorRed)+ Interval(2) + EncodeColor(colorWhite) +
    " - " + Date() +" - "+"\n" +EncodeColor(colorRed) +"Op-"+O+" "+"Hi-"+H+" "+"Lo-"+L+" "+
    "Cl-"+C+" "+ "Vol= "+ WriteVal(V)+"\n"+
    EncodeColor(colorLime)+
    WriteIf (Buy , " GO LONG / Reverse Signal at "+C+" ","")+
    WriteIf (Sell , " EXIT LONG / Reverse Signal at "+C+" ","")+"\n"+EncodeColor(colorYellow)+
    WriteIf(Sell , "Total Profit/Loss for the Last Trade Rs."+(C-BuyPrice)+"","")+
    WriteIf(Buy , "Total Profit/Loss for the Last trade Rs."+(SellPrice-C)+"","");
    
    
    TrendSL=IIf(trend==1,TrendUp,TrendDown);
    
    for(i=BarCount-1;i>1;i--)
    {
    if(Buy[i] == 1)
    {
    entry = C[i];
    sig = "BUY";
    sl = TrendSL[i];
    tar1 = entry + (entry * .0050);
    tar2 = entry + (entry * .0092);
    tar3 = entry + (entry * .0179);
    
    bars = i;
    i = 0;
    }
    if(Sell[i] == 1)
    {
    sig = "SELL";
    entry = C[i];
    sl = TrendSL[i];
    tar1 = entry - (entry * .0050);
    tar2 = entry - (entry * .0112);
    tar3 = entry - (entry * .0212);
    
    
    bars = i;
    i = 0;
    }
    }
    Offset = 20;
    Clr = IIf(sig == "BUY", colorLime, colorRed);
    ssl = IIf(bars == BarCount-1, TrendSL[BarCount-1], Ref(TrendSL, -1));
    sl = ssl[BarCount-1];
    
    
    messageboard = ParamToggle("Message Board","Show|Hide",1);
    if (messageboard == 1 )
    {
    GfxSelectFont( "Tahoma", 13, 100 );
    GfxSetBkMode( 1 );
    GfxSetTextColor( colorWhite );
    
    if ( sig =="BUY")
    {
    GfxSelectSolidBrush( colorBlue ); // this is the box background color
    }
    else
    {
    GfxSelectSolidBrush( colorRed ); // this is the box background color
    }
    pxHeight = Status( "pxchartheight" ) ;
    xx = Status( "pxchartwidth");
    Left = 1100;
    width = 310;
    x = 5;
    x2 = 290;
    
    y = pxHeight;
    
    GfxSelectPen( colorGreen, 1); // broader color
    GfxRoundRect( x, y - 98, x2, y , 7, 7 ) ;
    GfxTextOut( ( "Trend Calls"),13,y-100);
    GfxTextOut( (" "),27,y-100);
    GfxTextOut( ("Last " + sig + " Signal came " + (BarCount-bars-1) * Interval()/60 + " mins ago"), 13, y-80) ; // The text format location
    GfxTextOut( ("" + WriteIf(sig =="BUY",sig + " @ ",sig + " @") + " : " + entry + " | Price : " + C), 13, y-60);
    GfxTextOut( ("Trailing SL : " + Ref(TrendSL,-1) + " (" + WriteVal(IIf(sig == "SELL",entry-sl,sl-entry), 2.2) + ")"), 13, y-40);
    GfxTextOut( ("Current P/L : " + WriteVal(IIf(sig == "BUY",(C-entry),(entry-C)),2.2)), 13, y-22);;
    }
    
    function GetSecondNum()
    {
    Time = Now( 4 );
    Seconds = int( Time % 100 );
    Minutes = int( Time / 100 % 100 );
    Hours = int( Time / 10000 % 100 );
    SecondNum = int( Hours * 60 * 60 + Minutes * 60 + Seconds );
    return SecondNum;
    }
    RequestTimedRefresh( 1 );
    TimeFrame = Interval();
    SecNumber = GetSecondNum();
    Newperiod = SecNumber % TimeFrame == 0;
    SecsLeft = SecNumber - int( SecNumber / TimeFrame ) * TimeFrame;
    SecsToGo = TimeFrame - SecsLeft;
    
    x=Param("xposn",50,0,1000,1);
    y=Param("yposn",380,0,1000,1);
    
    GfxSelectSolidBrush( ColorRGB( 230, 230, 230 ) );
    GfxSelectPen( ColorRGB( 230, 230, 230 ), 2 );
    if ( NewPeriod )
    {
    GfxSelectSolidBrush( colorYellow );
    GfxSelectPen( colorYellow, 2 );
    }
    //GfxRoundRect( x+45, y+40, x-3, y-2, 0, 0 );
    //GfxSetBkMode(1);
    GfxSelectFont( "Arial", 14, 700, False );
    GfxSetTextColor( colorRed );
    //GfxTextOut( "Time Left :"+SecsToGo+"", x, y );
    
    //Generating Signals
    PlotShapes(IIf(Buy, shapeUpArrow, shapeNone),colorBlue, 0,L, Offset=-20);
    PlotShapes(IIf(Short, shapeDownArrow, shapeNone),colorRed, 0,H, Offset=-20);
    
    _SECTION_END();
    
    
    _SECTION_BEGIN("AlertsMsg");
    AlertIf( Buy, "", "Buy @ " + C ,1, 1+2+4+8 ,1);
    AlertIf( Sell, "", "Sell @ " + C ,2, 1+2+4+8 ,1);
    _SECTION_END();
    _SECTION_BEGIN("Oz trail");
    // E.M.Pottasch, Jan 2014
    
    PersistentPath="C:\\Program Files\\AmiBroker64\\PersistentVariables\\";  // **** You need to create a directory to store the persistent variable ****
    
    selectDate=ParamDate("Start date","08/01/2011",0);
    per1=Param("Length ATR",20,1,150,1); // ATR length
    fac1=Param("Chandelier Factor",2,1,10,0.1); // chandelier factor
    tog1=ParamToggle("Trail value","Close|High&Low",1);
    tog2=ParamToggle("Trail method","Chandelier|VSTOP",0);
    trg1=ParamTrigger("Remove All Persistent Variables", "Click Here"); 
    
    //persistant variables by Herman van Bergen
    function PersistentVarSet( VarName, Number )
    {
    VarName=VarName+Name()+GetChartID();
    global PersistentPath;
    String = NumToStr(Number);
    fh = fopen( PersistentPath+VarName+".pva","w" );
    if( fh )
    {
    fputs( String, fh );
    fclose( fh );
    }
    return fh;
    }
    function PersistentVarGet( VarName )
    {
    VarName=VarName+Name()+GetChartID();
    global PersistentPath;
    fh = fopen( PersistentPath+VarName+".pva","r" );
    if( fh )
    {
    String = fgets( fh );
    fclose( fh );
    Number = StrToNum(String);
    }
    else Number = Null;
    return Number;
    }
    function PersistentVarRemove( VarName )
    {
    VarName=VarName+Name()+GetChartID();
    global PersistentPath;
    Fn=PersistentPath + VarName + ".pva";
    fh=fdelete( Fn ) ;
    return fh;
    }
    function PersistentVarRemoveAll( VarName )
    {
    global PersistentPath;
    Fn=PersistentPath + VarName + "*.*";
    fh=fdelete( Fn ) ;
    return fh;
    }
    if(trg1)
    {
     PersistentVarRemoveAll( "ss" );
     //PersistentVarRemove( "ss" );
    }
    
    sdate=StaticVarGet("sdate");
    sdatep=PersistentVarGet("ss");
    "selectDate: " + WriteVal(selectdate);
    "sdatep: " + WriteVal(sdatep); 
    "sdate: " + WriteVal(sdate);
    
    if(IsEmpty(sdatep) AND IsEmpty(sdate))
    {
     StaticVarSet("sdate",selectdate);
     PersistentVarSet("ss",selectDate);
    }
    else if(!IsEmpty(sdatep) AND IsEmpty(sdate))
    {
     StaticVarSet("sdate",selectdate);
    }
    else if(IsEmpty(sdatep) AND !IsEmpty(sdate))
    {
     PersistentVarSet("ss",selectDate);
    }
    else if(sdate!=selectDate AND !IsEmpty(sdatep) AND !IsEmpty(sdate))
    {
     StaticVarSet("sdate",selectdate);
     PersistentVarSet("ss",selectDate);
    }
    
    ///////////// Chandelier code by E.M.Pottasch, adapted from Chuck Lebeau's code
    function vstop_func(trBull,trBear,hl,per)
    {
     trailArray=0;
     if(hl)
     {
      hh=H;
      ll=L;
     }
     else
     {
      hh=C;
      ll=C; 
     }
     for(i=per+1;i<BarCount;i++)
     {
      prev=trailArray[i-1];
     
      if (C[i]>=prev AND C[i-1]>=prev)//long continuation
      {
       trailArray[i]=Max(prev,hh[i]-trBull[i]);
      }
      else if (C[i]<=prev AND C[i-1]<=prev)//short continuation
      {
       trailArray[i]=Min(prev,ll[i]+trBear[i]);
      } 
      else if (C[i]>prev AND C[i-1]<=prev)//long trigger 
      {
       trailArray[i]=hh[i]-trBull[i];
      }
      else if (C[i]<prev AND C[i-1]>=prev)//short trigger
      {
       trailArray[i]=ll[i]+trBear[i]; 
      }
     }
     return trailArray;
    }
    ///////////// end Chandelier code by E.M.Pottasch, adapted from Chuck Lebeau's code
    ///////////// Chandelier code by Geoff Mulhall
    function aChandelierCl(AtrARRAY, AtrMult) {
    // Skip empty values
    i = 0;
    do {result[i] = Null;
     i++;
     } 
    while( i < BarCount AND (IsNull(O[i]) OR IsNull(H[i]) OR IsNull(L[i]) OR
    IsNull(C[i]) ) ); 
    First = i;
    
    if (i < BarCount - 1) {
     HHC[First]    = C[First];
     LLC[First]    = C[First];
    
     if (C[First + 1] > HHC[First]) {
      HHC[First + 1] = C[First + 1];
      LLC[First + 1] = LLC[First];
      result[First] = C[First] - AtrMult * AtrARRAY[First];
      iTrade = "LT";
     }
     else {
      if (C[First + 1] < LLC[First]) {
       HHC[First = 1] = HHC[First];
       LLC[First + 1] = LLC[First + 1];
       result[First] = C[First] + AtrMult * AtrARRAY[First];
       iTrade = "ST";
      }
      else {
       HHC[First + 1] = C[First + 1];
       LLC[First + 1] = C[First + 1];
       result[First] = C[First] - AtrMult * AtrARRAY[First];
       iTrade = "LT";
      }
     }
    
     for( i = First; i < BarCount; i++ ) {
      if (iTrade == "LT") {
       if (C[i] >= result[i-1]) {        // Long Trade is continuing
        if (C[i] > C[i-1]) {
         HHC[i] = C[i];
        }
        else { 
         HHC[i] = HHC[i-1];
        }
        result[i] = HHC[i] - AtrMult * AtrARRAY[i];
        if (result[i] < result[i-1]) {
         result[i] = result[i-1];
        }
       }
       else {                            // Long trade Exit triggered
        iTrade = "ST";
        LLC[i] = C[i];
        result[i] = C[i] + AtrMult * AtrARRAY[i];
       }
      }
      else {                               // Short trade
       if (C[i] <= result[i-1]) {
        if (C[i] <= C[i-1]) {        // Short Trade is continuing
         LLC[i] = C[i];
        }
        else {
         LLC[i] = LLC[i-1];
        }
        result[i] = LLC[i] + AtrMult * AtrARRAY[i];
        if (result[i] > result[i-1]) {
         result[i] = result[i-1];
        }
       }
       else {                           //Short Trade Exit is triggered
        iTrade = "LT";
        HHC[i]  = C[i];
        result[i] = C[i] - AtrMult * AtrARRAY[i];
       }
      }
     }
    }
    return result;
    }
    function aChandelierHL(AtrARRAY, AtrMult) {
    // Skip empty values
    i = 0;
    do {result[i] = Null;
     i++;
     } 
    while( i < BarCount AND (IsNull(O[i]) OR IsNull(H[i]) OR IsNull(L[i]) OR
    IsNull(C[i]) ) ); 
    First = i;
    
    if (i < BarCount - 1) {
     HHC[First]    = H[First];
     LLC[First]    = L[First];
    
     if (H[First + 1] > HHC[First]) {
      HHC[First + 1] = H[First + 1];
      LLC[First + 1] = LLC[First];
      result[First] = H[First] - AtrMult * AtrARRAY[First];
      iTrade = "LT";
     }
     else {
      if (L[First + 1] < LLC[First]) {
       HHC[First = 1] = HHC[First];
       LLC[First + 1] = LLC[First + 1];
       result[First] = L[First] + AtrMult * AtrARRAY[First];
       iTrade = "ST";
      }
      else {
       HHC[First + 1] = C[First + 1];
       LLC[First + 1] = C[First + 1];
       result[First] = H[First] - AtrMult * AtrARRAY[First];
       iTrade = "LT";
      }
     }
    
     for( i = First; i < BarCount; i++ ) {
      if (iTrade == "LT") {
       if (C[i] >= result[i-1]) {        // Long Trade is continuing
        if (H[i] > H[i-1]) {
         HHC[i] = H[i];
        }
        else { 
         HHC[i] = HHC[i-1];
        }
        result[i] = HHC[i] - AtrMult * AtrARRAY[i];
        if (result[i] < result[i-1]) {
         result[i] = result[i-1];
        }
       }
       else {                            // Long trade Exit triggered
        iTrade = "ST";
        LLC[i] = L[i];
        result[i] = L[i] + AtrMult * AtrARRAY[i];
       }
      }
      else {                               // Short trade
       if (C[i] <= result[i-1]) {
        if (L[i] <= L[i-1]) {        // Short Trade is continuing
         LLC[i] = L[i];
        }
        else {
         LLC[i] = LLC[i-1];
        }
        result[i] = LLC[i] + AtrMult * AtrARRAY[i];
        if (result[i] > result[i-1]) {
         result[i] = result[i-1];
        }
       }
       else {                           //Short Trade Exit is triggered
        iTrade = "LT";
        HHC[i]  = H[i];
        result[i] = H[i] - AtrMult * AtrARRAY[i];
       }
      }
     }
    }
    return result;
    }
    ///////////// end Chandelier code by Geoff Mulhall
    
    if(!tog2)
    {
     if(tog1) trailArray=aChandelierHL(ATR(per1),fac1);
     else trailArray=aChandelierCl(ATR(per1),fac1);
    }
    else
    {
     trBull=fac1*ATR(per1);
     trBear=fac1*ATR(per1);
     trailArray=vstop_func(trBull,trBear,tog1,per1);trailarray=IIf(trailarray==0,Null,trailarray);
    }
    
    tt=IIf(DateNum()>=sdatep,1,0);
    trailArray=IIf(tt,trailArray,Null);
    
    Plot(IIf(trailArray>C,trailArray,Null),"\ntrailShort",ParamColor("ColorTrailShort",ColorRGB(255,0,0)),styleStaircase);
    Plot(IIf(trailArray<C,trailArray,Null),"\ntrailLong",ParamColor("ColorTrailLong",ColorRGB(0,255,0)),styleStaircase);
    Plot(TSF(Low,100),"",colorWhite,styleThick);
    _SECTION_END();
    
    

    No comments:

    Tin chứng khoán

    Tìm hiểu Quỹ đầu tư