Re:

  •  07-26-2005, 7:42

    Re:

    wabbit:
    ...the BarsSince problem.
    ...Same day signals.


    The MS indicator code below takes care of both issues raised above:

    MetaStock -> Tools -> Indicator Builder -> New ->
    -> Copy and paste complete formulae between "---8<---" lines.


    Code:

    ====================
    System trade signals
    ====================
    ---8<--------------------------

    { System trade (latch) signals v2.5 }
    { Copyright (c)2005 Jose Silva }
    { For personal use only }
    { http://www.metastocktools.com }

    { Note on simultaneous entry/exit on same bar:
    #1 Ignore:
    entry/exit signals cancel each other;
    #2 Preference given to:
    new entry if currently Short,
    new exit if currently Long.}

    { Signals reference example }
    entry:=C>Mov(C,21,E);
    exit:=C<Mov(C,10,E);

    { User inputs }
    plot:=Input("Signals: [1]Clean, [2]All, [3]Trade binary",1,3,1);
    choose:=Input("Simultaneous entry/exit: [1]Ignore, [2]Preference",1,2,2);
    delay:=Input("Entry and Exit delay",-1,5,0);

    { Initialize }
    Init:=Cum(IsDefined(entry+exit))=1;

    { #1 - Ignore entry/exit on same bar }
    bin1:=ValueWhen(1,entry-exit<>0 OR Init,
    entry-exit);
    long:=bin1=1 AND (Alert(bin1<>1,2) OR Init);
    short:=bin1=-1 AND (Alert(bin1<>-1,2) OR Init);
    signals1:=long-short;

    { #2 - Preference to first entry/exit }
    long:=entry AND (Alert(entry=0,2) OR Init);
    short:=exit AND (Alert(exit=0,2) OR Init);
    bin2:=ValueWhen(1,long-short<>0 OR Init,
    long-short);
    long:=bin2=1 AND (Alert(bin2<1,2) OR Init);
    short:=bin2=-1 AND (Alert(bin2>-1,2) OR Init);
    signals2:=long-short;

    { Select #1 or #2 }
    binary:=If(choose=1,bin1,bin2);
    signals:=If(choose=1,signals1,signals2);

    { Plot in own window }
    Ref(If(plot=2,entry,0),-delay);
    Ref(If(plot=1,signals,
    If(plot=2,-exit,binary)),-delay)

    ---8<--------------------------



    ===============================
    System trade signals - original
    ===============================
    ---8<--------------------------

    { Original trade signals code }
    { BarsSince() function prevents first exit plot}
    { With thanks to Roy Larsen at
    http://www.metastocktips.co.nz }

    { Signals reference example }
    entry:=C>Mov(C,21,E);
    exit:=C<Mov(C,10,E);

    { User inputs }
    plot:=Input("Signals: [1]Clean, [2]All, [3]Trade binary",1,3,1);
    delay:=Input("Entry and Exit delay",-1,5,0);

    { Clean signals }
    Init:=Cum(entry+exit>-1)=1;
    entryInit:=Cum(entry)=1;
    flag:=BarsSince(Init OR entry)
    <BarsSince(Init OR exit)+entryInit;
    signals:=(entryInit AND Alert(entryInit=0,2)
    OR flag AND Alert(flag=0,2))
    -(flag=0 AND Alert(flag,2));
    binary:=ValueWhen(1,signals<>0,signals);

    { Plot in own window }
    Ref(If(plot=1,signals,
    If(plot=2,entry-exit,binary)),-delay)

    ---8<--------------------------



    jose '-)
    http://www.metastocktools.com
    MetaStockTools.com
View Complete Thread