Classic Darvas Box Formulas For Metastock

Discussion in 'MetaStock' started by Traderji, Nov 2, 2006.

  1. Traderji

    Traderji Super Moderator

    Joined:
    Jun 14, 2004
    Messages:
    1,825
    Likes Received:
    871
    Trophy Points:
    113
    CLASSIC DARVAS BOX FORMULAS FOR METASTOCK

    The first formula is "Darvas High" which identifies new period highs followed by three lower highs.

    Name of Indicator: Darvas High

    Formula:

    Periods:=100; { this is the only place the number of periods is set}

    If((Ref(H,-3) >= Ref(HHV(H,Periods),-4))

    AND Ref(H,-3) > Ref(H,-2)

    AND Ref(H,-3) > Ref(H,-1)

    AND Ref(H,-3) > H,

    Ref(H,-3), PREVIOUS );

    Name of Indicator: New Darvas High

    Formula:

    dh:= Fml("Darvas High");

    def:=IsDefined(dh) AND IsDefined(Ref(dh,-2));

    (def AND Ref(def,-1)=0) + (dh AND Ref(dh,-1)<>dh);

    Name of Indicator: New Darvas Low

    Formula:

    dh:= Fml("Darvas High");

    ndl:=(Ref(L,-3) < Ref(L,-2) AND Ref(L,-3) < Ref(L,-1)

    AND Ref(L,-3) < L AND Ref(H,-2) < dh

    AND Ref(H,-1) < dh AND H < dh);

    def:=IsDefined(dh) AND IsDefined(Ref(dh,-1));

    (def AND Ref(def,-1)=0)+ (ndl AND (Ref(ndl,-1) < 1))



    Name of Indicator: Darvas Low

    Formula:

    If( Fml("New Darvas Low") , Ref(L,-3), PREVIOUS);

    Name of Indicator: Darvas Box End

    Formula:

    end:=BarsSince(Fml("New Darvas High")) <

    BarsSince(Ref(Fml("New Darvas Low"),-1));

    def:=IsDefined(end) AND IsUndefined(Ref(end,-1));

    (def AND Ref(def,-1)=0)+ (end AND Fml("New Darvas Low"))

    We are now in a position to plot the High and Low of the Darvas box.

    Name of Indicator: Darvas Box High

    Formula:

    dbe:=Fml("Darvas Box End");

    dbhi:=If(dbe AND IsDefined(Ref(dbe,-1)), Fml("Darvas High"), PREVIOUS);

    If(dbhi=0,H+0.0000001,dbhi)

    Name of Indicator: Darvas Box Low

    Formula:

    dbe:=Fml("Darvas Box End");

    bl:=If(dbe AND IsDefined(Ref(dbe,-1)), Fml("Darvas Low"), PREVIOUS);

    If(bl=0,L-0.0000001,bl)

    Next we need to develop the Sell Indicator. First we look for possible sell signals.

    Name of Indicator: Darvas Poss Sell

    Formula:

    dsl:=L < Fml("Darvas Box Low");

    def:=IsDefined(dsl) AND IsDefined(Ref(dsl,-1));

    (def AND Ref(def,-1)=0)+(dsl AND (Ref(dsl,-1)<dsl))

    Name of Indicator: Darvas Sell

    Formula:

    sell:=BarsSince(Fml("Darvas Box End")) <

    BarsSince(Fml("Darvas Poss Sell"));

    def:=IsDefined(sell) AND IsDefined(Ref(sell,-1));

    ((def AND Ref(def,-1)=0) + (sell = 0 AND Ref(sell,-1)=1))

    Name of Indicator: Darvas Buy

    Formula:

    dc:= Fml("darvas sell");

    { change the following line to H>Fml("Darvas Box Hi") .. for Classic Darvas}

    db:= C>Fml("Darvas Box Hi") AND

    (BarsSince(Fml("darvas box end")) < BarsSince(Fml("darvas sell")));

    dto:=If(db AND PREVIOUS=0,1,If(dc,0,PREVIOUS));

    dto AND (Ref(dto,-1) =0)

    Using these formulas it is simple to create a new Metastock Expert Advisor for Darvas. Create a New advisor, call it Darvas and fill in the following tabs

    For the Trends tab I used the somewhat arbitrary

    Bullish C >= Fml("Darvas Box Low");

    Bearish C < Fml("Darvas Box Low");

    For Symbols tab use

    Buy: up arrow graphic, formula Fml("Darvas Buy")

    Sell: down arrow graphic, formula Fml("Darvas Sell")

    For Alerts tab use

    Buy: formula Fml("Darvas Buy") and some suitable text message such as "buy on next open"

    Sell: formula Fml("Darvas Sell") and some suitable text message such as "sell on next open"
     
    tjadmin likes this.
  2. Blaiserboy

    Blaiserboy Member

    Joined:
    Oct 28, 2006
    Messages:
    140
    Likes Received:
    22
    Trophy Points:
    18
    Here is a doc file with a flow chart. it may not be exactly accurate but is a start

    as well there is some additional code in the pdf file
     
  3. trader21

    trader21 Active Member

    Joined:
    Jul 1, 2006
    Messages:
    222
    Likes Received:
    96
    Trophy Points:
    28
    A wonderful post Traderi, thanks:)
     
  4. jalanp

    jalanp New Member

    Joined:
    Nov 11, 2005
    Messages:
    13
    Likes Received:
    0
    Trophy Points:
    1
    The super moderator should have posted a screen shot alongwith this metastock code, because nothing is basically clear from it, except that you create 7/8 indicators and create an expert.The super moderator should have tried to find out if it works or not. As far as I know it will not give the desired result. Ask Guppy.
     
  5. Blaiserboy

    Blaiserboy Member

    Joined:
    Oct 28, 2006
    Messages:
    140
    Likes Received:
    22
    Trophy Points:
    18
    Probably he was just trying to help people get started. and as you know, very little in life is an exact precise science, rather we start into something and then have to learn and refine a lot......

    Perhaps you would be able to post what you know to be the correct parameters and thereby save people some work.......
     
  6. SGM

    SGM Active Member

    Joined:
    Aug 26, 2005
    Messages:
    461
    Likes Received:
    76
    Trophy Points:
    28
    Location:
    PUNE

    Darvas Box Code for AmiBroker

    _SECTION_BEGIN("Darvas Box");

    box1=0;
    box2=0;
    SetBarsRequired(10000,10000);
    procedure fillDarvas(start,end,swap,top, bottom )
    {
    for ( j = start; j < end; j++)
    {
    if( box1[j] == swap)
    box1[j]= top ;
    else
    box1[j]= bottom;

    if(box2[j] == swap)
    box2[j]= bottom ;
    else
    box2[j]= top;
    }
    }

    BoxArr1 = 0;
    BoxArr2 = 0;
    StateArray = 0;
    DBuy = 0;
    DSell = 0;
    TopArray = 0;
    BotArray = 0;
    tick=0;

    BoxTop = High[0];
    BoxBot = Low[0];
    swap=0;
    state = 0;
    BoxStart = 0;

    for (i=0; i<BarCount; i++)
    {
    if (state==5)
    {
    TopArray=BoxTop;
    BotArray=BoxBot;
    if (Low<(BoxBot*(1-tick/100)) || High>(BoxTop*(1+tick/100)))
    {
    fillDarvas(BoxStart,i,swap,BoxTop,BoxBot);

    state = 1;
    swap = !swap;
    BoxTop = High;
    BoxStart = i;
    }
    }
    else
    {
    if (High<BoxTop)
    {
    if ((state<3) || (Low>BoxBot))
    {
    state++;
    }
    else
    {
    state=3;
    }
    if (state==3)
    BoxBot=Low;
    }
    else
    {
    state=1;
    BoxTop=High;
    }
    }
    StateArray = state;
    }

    fillDarvas(BoxStart,BarCount,swap,BoxTop,BoxBot);

    Plot( box1, "" , 1 + statearray, styleThick);
    Plot( box2, "" , 1 + statearray , styleThick);
    _SECTION_END();


    The above code will plot the 2 sides (High /Low) of the Box on the chart. The idea is to trade the breakout on either side.


    Regards
    Sanjay
     

  7. Traderji

    Traderji Super Moderator

    Joined:
    Jun 14, 2004
    Messages:
    1,825
    Likes Received:
    871
    Trophy Points:
    113

    I have tried out all the indicators before posting them here. They all work.

    For those of you who may be interested in reading his book check out http://www.nicolasdarvas.org/
     
  8. rpc

    rpc Active Member

    Joined:
    Aug 19, 2005
    Messages:
    488
    Likes Received:
    38
    Trophy Points:
    28
    hi sanjay
    I tried your darvas box afl.It shows horizontal lines only not boxes . Is it ok ?
    rpc
     
  9. jalanp

    jalanp New Member

    Joined:
    Nov 11, 2005
    Messages:
    13
    Likes Received:
    0
    Trophy Points:
    1
    Sethi Darvas is a proprietory darvas formula. Here the boxes are clear cut. Sanjay's Afl for amibroker is also good. If anyone has plotted the Darvas in Metastock using the code given in this forum earlier, pl submit.
    The png file is sethi darvas and jpg file is from amibroker.
    jalanp
     

    Attached Files:

  10. rpc

    rpc Active Member

    Joined:
    Aug 19, 2005
    Messages:
    488
    Likes Received:
    38
    Trophy Points:
    28
    hi jalanp
    Thanks for the clarification .I am still unable to get the box.Not that it matters because I think what matters is the horizontal lines and not the vertical ones.
    rpc
     
Loading...

Share This Page