Trade Equity GV SC Files. The GV.DLL and CALC.DLL files are required for the Trade Equity indicator in this document. INDICATORS - Install in the listed order. -------8<---------------------------------- {Date Filter} {2004 Roy Larsen, rlarsen@man.quik.co.nz} Sd:=Input("Start day" ,1,31,1); Sm:=Input("Start month",1,12,1); Sy:=Input("Start year" ,1980,2010,2002); Ed:=Input("End day" ,1,31,31); Em:=Input("End month" ,1,12,12); Ey:=Input("End year" ,1980,2010,2004); Start:=(DayOfMonth()>=Sd AND Month()=Sm AND Year()=Sy) OR Year()>Sy OR (Year()=Sy AND Month()>Sm); End:=(DayOfMonth()<=Ed AND Month()=Em AND Year()=Ey) OR Year()Ref(L,-2) AND Ref(L,-1)>Ref(L,-2) AND Ref(L,-3)>Ref(L,-2) AND Ref(L,-4)>Ref(L,-2)),Ref(L,-2)); Cross(F2,L)*Fml("Date Filter"); -------8<---------------------------------- {Entry Price} {CLOSE} F1:=ValueWhen(1,Cum(1)=5 OR HRef(L,-2) AND Ref(L,-1)>Ref(L,-2) AND Ref(L,-3)>Ref(L,-2) AND Ref(L,-4)>Ref(L,-2),Ref(L,-2)); Cross(F2,L)*C*Fml("Date Filter"); -------8<---------------------------------- {Trade Equity GV SE} {5.1} {2004 Roy Larsen, rlarsen@man.quik.co.nz} B:=Input("Sell 1=O 2=C 3=H 4=L 5=Stop" ,1,5,2); Z:=Input("Cover 1=O 2=C 3=H 4=L 5=Stop",1,5,2); Nd:=Input("Sell Delay" ,0,5,0); Xd:=Input("Cover Delay",0,5,1); Cn:=Input("Sell / Cover Costs",0,9999,2525); I:=Input("Display Options 0-12",0,12,0); Cp:=5000; {* initial trade capital} N:= Fml("Exit Binary"); {Sell Short} Ns:=0; X:= Fml("Entry Binary"); {Buy to Cover} Xs:=0; {* end user area *} I:=ExtFml("GV.SetVar","Sc",I); Ns:=(B=5)*Ns; Cx:=Cn-100*Int(Cn/100);Cn:=Int(Cn/100); M:=If(Ns>0,Min(H,Max(L,Ns)),If(B=1,O,If(B=3,H,If(B=4,L,C)))); N:=N AND Alert(N=0,2)+(Cum(N>-1)=1); X:=X AND (Z<5)*(Alert(X=0,2)+(Cum(N>-1)=1)); N:=ValueWhen(1+Nd,1,N);N:=If(B<5,N,Ns>0); Y:=If(Xs>0,Min(H,Max(L,Xs)),If(Z=1,O,If(Z=3,H,If(Z=4,L,C)))); X:=ValueWhen(1+Xd,1,X);X:=X+Xs>0; Y:=If((Z<5)*(X=0),C,Y);Y:=If((Xs>0)*N*X,Xs,Y); I:=Cum(N+X>-1)=1;N:=(I>-1)*N;Y:=If(Y=0,1,Y); K:=If(I,Y,ValueWhen(2,1,Y)); Y:=If((N+X=0)*Alert(N*X,2),K,Y); Tr:=BarsSince(I+N)<(BarsSince(I+X)+(Cum(N)=1 AND Cum(I+X)=1)); Tr:=If((N+X>1)*(Alert(Tr,2)+((Nd+Xd<1)*(B<>2) *(Z>1)*(Max(B,Z)>4 OR B<>Z))),1,Tr); En:=(Tr+Alert(Tr=0,2)=2)+I; Ex:=(Tr=0)*Alert(Tr,2); M:=If(I*(N=0),C,M); Lb:=Alert(Tr,2)*(LastValue(Cum(1))=Cum(1)); A:=ValueWhen(1,En,If(M=0,1,M)); En:=Tr+(Alert(Tr=0,2)+I>0)=2; N:=Cum(I*Cp-En*Cn-Ex*Cx); Ns:=Cum(If(Alert(Tr,2)*If(B=5,1,En=0), (ValueWhen(1,En+I,PREV)+If(B+En=6,N,If(I,N+Cn,ValueWhen(2,1,N))))* If((B+En=6)+((B<5)*(En=0)*Alert(En,2)),(A-Y)/A,(K-Y)/A),0)); M:=N+Ns; X:=If(Alert(Tr,2),2*A-Y,A);X:=A*(M+(Ex*Cx))/X; Xs:=(Ex+Lb>0)*(M>X+Cx)*(M-X-Cn); Xd:=(Ex+Lb>0)*(M<=X+Cx)*(M-X-Cn); Nd:=Alert(Tr,2)*(M-If(I,M,ValueWhen(2,1,ValueWhen(1,I+(Tr=0),M)))); I:=ExtFml("GV.SetVar","I",I);I:=ExtFml("GV.SetVar","N",N); I:=ExtFml("GV.SetVar","X",X);I:=ExtFml("GV.SetVar","Cn",Cn); I:=ExtFml("GV.SetVar","Cp",Cp);I:=ExtFml("GV.SetVar","Cx",Cx); I:=ExtFml("GV.SetVar","En",En);I:=ExtFml("GV.SetVar","Ex",Ex); I:=ExtFml("GV.SetVar","Lb",Lb);I:=ExtFml("GV.SetVar","Nd",Nd); I:=ExtFml("GV.SetVar","Ns",Ns);I:=ExtFml("GV.SetVar","Tr",Tr); I:=ExtFml("GV.SetVar","Xd",Xd);I:=ExtFml("GV.SetVar","Xs",Xs); I:=ExtFml("GV.SetVar","Eq",M); {Fml("Trade Equity SC Display");}M; -------8<---------------------------------- {Trade Equity SC Display} {V5.1} {2004 Roy Larsen, rlarsen@man.quik.co.nz} {use with 'Trade Equity GV SC'} { Display options: 0, total dollar equity 1, total percent equity 2, dollar equity per trade 3, percent equity per trade 4, amount of winning trades 5, amount of losing trades 6, number of winning trades 7, number of losing trades 8, trade in progress 9, bars in a trade 10, total bars in all trades 11, Maximum Favourable Excursion 12, Maximum Adverse Excursion } M:=ExtFml("GV.GetVar","Eq"); Z:=ExtFml("GV.GetVar","Sc"); I:=ExtFml("GV.GetVar","I"); N:=ExtFml("GV.GetVar","N"); X:=ExtFml("GV.GetVar","X"); Cn:=ExtFml("GV.GetVar","Cn"); Cp:=ExtFml("GV.GetVar","Cp"); Cx:=ExtFml("GV.GetVar","Cx"); En:=ExtFml("GV.GetVar","En"); Ex:=ExtFml("GV.GetVar","Ex"); Lb:=ExtFml("GV.GetVar","Lb"); Nd:=ExtFml("GV.GetVar","Nd"); Ns:=ExtFml("GV.GetVar","Ns"); Tr:=ExtFml("GV.GetVar","Tr"); Xd:=ExtFml("GV.GetVar","Xd"); Xs:=ExtFml("GV.GetVar","Xs"); If(Z=0,M, If(Z=1,100*(M-Cp)/Cp, If(Z=2,Nd, If(Z=3,100*Nd/ValueWhen(1,I OR Alert(Tr,2)=0,M), If(Z=4,Cum(Xs), If(Z=5,Cum(Xd), If(Z=6,Cum(Xs>0), If(Z=7,Cum(Ex+Lb>0 AND Xs=0), If(Z=8,Tr, If(Z=9,BarsSince(I OR Alert(Tr,2)=0)*Alert(Tr,2), If(Z=10,Cum(Alert(Tr,2)), If(Z=11,HighestSince(1,I,Nd), LowestSince(1,I,Nd))))))))))))); -------8<---------------------------------- {Alternative code for "Trade Equity GV SE". Does not give 100% accurate results when used with stop entry prices that are different from CLOSE. However The PREV function has been replaced by CALC.DLL and the code executes much faster.} {Trade Equity GV SE} (Alternative) {5.1} {2004 Roy Larsen, rlarsen@man.quik.co.nz} B:=Input("Sell 1=O 2=C 3=H 4=L 5=Stop" ,1,5,5); Z:=Input("Cover 1=O 2=C 3=H 4=L 5=Stop",1,5,1); Nd:=Input("Sell Delay" ,0,5,1); Xd:=Input("Cover Delay",0,5,1); Cn:=Input("Sell / Cover Costs",0,9999,2525); I:=Input("Display Options 0-12",0,12,0); Cp:=5000; {* initial trade capital} N:=Fml("Exit Binary"); {Sell Short} Ns:=Fml("Exit Price"); X:=Fml("Entry Binary"); {Buy to Cover} Xs:=0; {* end user area *} I:=ExtFml("GV.SetVar","Sc",I); Ns:=(B=5)*Ns; Cx:=Cn-100*Int(Cn/100);Cn:=Int(Cn/100); M:=If(Ns>0,Min(H,Max(L,Ns)),If(B=1,O,If(B=3,H,If(B=4,L,C)))); N:=N AND Alert(N=0,2)+(Cum(N>-1)=1); X:=X AND (Z<5)*(Alert(X=0,2)+(Cum(N>-1)=1)); N:=ValueWhen(1+Nd,1,N);N:=If(B<5,N,Ns>0); Y:=If(Xs>0,Min(H,Max(L,Xs)),If(Z=1,O,If(Z=3,H,If(Z=4,L,C)))); X:=ValueWhen(1+Xd,1,X);X:=X+Xs>0; Y:=If((Z<5)*(X=0),C,Y);Y:=If((Xs>0)*N*X,Xs,Y); I:=Cum(N+X>-1)=1;N:=(I>-1)*N;Y:=If(Y=0,1,Y); K:=If(I,Y,ValueWhen(2,1,Y)); Y:=If((N+X=0)*Alert(N*X,2),K,Y); Tr:=BarsSince(I+N)<(BarsSince(I+X)+(Cum(N)=1 AND Cum(I+X)=1)); Tr:=If((N+X>1)*(Alert(Tr,2)+((Nd+Xd<1)*(B<>2) *(Z>1)*(Max(B,Z)>4 OR B<>Z))),1,Tr); En:=(Tr+Alert(Tr=0,2)=2)+I; Ex:=(Tr=0)*Alert(Tr,2); M:=If(I*(N=0),C,M); Lb:=Alert(Tr,2)*(LastValue(Cum(1))=Cum(1)); A:=ValueWhen(1,En,If(M=0,1,M)); En:=Tr+(Alert(Tr=0,2)+I>0)=2; N:=Cum(I*Cp-En*Cn-Ex*Cx); Ns:= ExtFml("Calc.ProfitShort",Alert(Tr,2) *If(B=5,1,En=0),En, If((B=5)*En,N,ValueWhen(2,1,N)), If((B=5)*En+(B<5)*Alert(En,2)*(En=0), (A-Y)/A,(K-Y)/A)); M:=N+Ns; X:=If(Alert(Tr,2),2*A-Y,A);X:=A*(M+(Ex*Cx))/X; Xs:=(Ex+Lb>0)*(M>X+Cx)*(M-X-Cn); Xd:=(Ex+Lb>0)*(M<=X+Cx)*(M-X-Cn); Nd:=Alert(Tr,2)*(M-If(I,M,ValueWhen(2,1,ValueWhen(1,I+(Tr=0),M)))); I:=ExtFml("GV.SetVar","I",I);I:=ExtFml("GV.SetVar","N",N); I:=ExtFml("GV.SetVar","X",X);I:=ExtFml("GV.SetVar","Cn",Cn); I:=ExtFml("GV.SetVar","Cp",Cp);I:=ExtFml("GV.SetVar","Cx",Cx); I:=ExtFml("GV.SetVar","En",En);I:=ExtFml("GV.SetVar","Ex",Ex); I:=ExtFml("GV.SetVar","Lb",Lb);I:=ExtFml("GV.SetVar","Nd",Nd); I:=ExtFml("GV.SetVar","Ns",Ns);I:=ExtFml("GV.SetVar","Tr",Tr); I:=ExtFml("GV.SetVar","Xd",Xd);I:=ExtFml("GV.SetVar","Xs",Xs); I:=ExtFml("GV.SetVar","Eq",M); {Fml("Trade Equity SC Display");}M; -------8<---------------------------------- Exploration notes{Trade Equity GV SC 1 Daily} {2004 Roy Larsen, rlarsen@man.quik.co.nz} {This is the first exploration in a family of four that create trading system statistical reports using "Trade Equity GV SC" with daily data. These reports can be copied to Excel for summary or further analysis. Each exploration can be run alone or with others in the set. Make sure that the "Trade Equity GV SC" indicator parameters are set up correctly before proceeding.} Col A: $ Profit {Net profit} Eq:=Fml("Trade Equity GV SC"); Cp:=ExtFml("GV.GetVar","Cp"); Eq-Cp; Col B: $ Win {Amount of winning trades} Cum(ExtFml("GV.GetVar","Xs")); Col C: $ Loss {Amount of losing trades} Cum(ExtFml("GV.GetVar","Xd")); Col D: # Win {Number of winning long trades} Xs:=ExtFml("GV.GetVar","Xs"); Cum(If(Xs>0,1,0)); Col E: # Loss {Number of losing long trades} Ex:=ExtFml("GV.GetVar","Ex"); Lb:=ExtFml("GV.GetVar","Lb"); Xs:=ExtFml("GV.GetVar","Xs"); Cum(If(Xs=0 AND (Ex OR Lb),1,0)); Col F: # BarsIn {Total bars in all trades} Tr:=ExtFml("GV.GetVar","Tr"); Cum(If(Alert(Tr<>0,2),1,0)); Filter {Filter} Cum(Alert(ExtFml("GV.GetVar","Tr")<>0,2))>0; Filter enabled Yes Periodicity Daily Records required XXX -------8<---------------------------------- Exploration notes{Trade Equity GV SC 2 Daily} {2004 Roy Larsen, rlarsen@man.quik.co.nz} {This is the second exploration in a family of four that create trading system statistical reports using "Trade Equity GV SC" with daily data. These reports can be copied to Excel for summary or further analysis. Each exploration can be run alone or with others in the set. Make sure that the "Trade Equity GV SC" indicator parameters are set up correctly before proceeding.} Col A: #BarsOut {Bars out} Eq:=Fml("Trade Equity GV SC"); Tr:=ExtFml("GV.GetVar","Tr"); Cum(Tr>-1)-Cum(Alert(Tr,2)); Col B: #TotBars {Explored bars total} I:=ExtFml("GV.GetVar","I"); Cum(If(I>-1,1,0)); Col C: $ Costs {Commissions paid} Cn:=ExtFml("GV.GetVar","Cn"); Cx:=ExtFml("GV.GetVar","Cx"); En:=ExtFml("GV.GetVar","En"); Ex:=ExtFml("GV.GetVar","Ex"); Cum(If(En,Cn,If(Ex,Cx,0))); Col D: Buy/Hold {Buy & hold profit/loss, first bar or signal} Cn:=ExtFml("GV.GetVar","Cn"); Cp:=ExtFml("GV.GetVar","Cp"); Tr:=ExtFml("GV.GetVar","Tr"); Ea:=ValueWhen(1,Cum(1)=1 {OR Cum(Tr)=1} ,C); Ea:=LastValue(Ea); Xp:=LastValue(C); ((Cp-Cn)*(Xp/Ea))-Cp; Col E: P Index {Profit index} Xs:=Cum(ExtFml("GV.GetVar","Xs")); Xd:=Cum(ExtFml("GV.GetVar","Xd")); Xs:=If(Xs=0,-1,Xs); If(Xs=-1,0,PREC(100*(Xs+Xd)/Xs,1)); Col F: In Trade {Currently in a trade} ExtFml("GV.GetVar","Tr"); Filter {Filter} Cum(Alert(ExtFml("GV.GetVar","Tr")<>0,2))>0; Filter enabled Yes Periodicity Daily Records required XXX -------8<---------------------------------- Exploration notes{Trade Equity GV SC 3 Daily} {2004 Roy Larsen, rlarsen@man.quik.co.nz} {This is the third exploration in a family of four that create trading system statistical reports using "Trade Equity GV SC" with daily data. These reports can be copied to Excel for summary or further analysis. Each exploration can be run alone or with others in the set. Make sure that the "Trade Equity GV SC" indicator parameters are set up correctly before proceeding.} Col A: $Max DD {Maximum open trade drawdown} Eq:=Fml("Trade Equity GV SC"); Nd:=ExtFml("GV.GetVar","Nd"); LowestSince(1,Cum(Abs(Nd)>-1)=1,Nd); Col B: $MaxProf {Maximum open trade profit} Nd:=ExtFml("GV.GetVar","Nd"); HighestSince(1,Cum(Abs(Nd)>-1)=1,Nd); Col C: Win Bars {Total bars in winning trades} En:=ExtFml("GV.GetVar","En"); Xs:=ExtFml("GV.GetVar","Xs"); I:=Cum(En>-1)=2; Cum(If(Xs>0,BarsSince(I OR En)+1,0)); Col D: LoseBars {Total bars in losing trades} En:=ExtFml("GV.GetVar","En"); Ex:=ExtFml("GV.GetVar","Ex"); Lb:=ExtFml("GV.GetVar","Lb"); Xs:=ExtFml("GV.GetVar","Xs"); I:=Cum(En>-1)=2; Cum(If(Xs<=0 AND (Ex OR Lb),BarsSince(I OR En)+1,0)); Col E: CnscWin {Maximum consecutive winning trades} Ex:=ExtFml("GV.GetVar","Ex"); Lb:=ExtFml("GV.GetVar","Lb"); Xs:=ExtFml("GV.GetVar","Xs"); I:=Cum(Ex>-1)=2; Up:=Xs>0; Dn:=Xs<=0 AND (Ex OR Lb); Ca:=If(BarsSince(I OR Up)>=BarsSince(I OR Dn),0,1); Ct:=Cum(Cross(Up,0.5))-ValueWhen(1,I OR (Ca AND Alert(Ca=0,2)) OR (Ca=0 AND Alert(Ca,2)),Cum(Cross(Up,0.5))); Cup:=If(Ca,Ct+1,Ct); HighestSince(1,I,Cup); Col F: CnscLose {Maximum consecutive losing trades} Ex:=ExtFml("GV.GetVar","Ex"); Lb:=ExtFml("GV.GetVar","Lb"); Xs:=ExtFml("GV.GetVar","Xs"); I:=Cum(Ex>-1)=2; Up:=Xs>0; Dn:=Xs<=0 AND (Ex OR Lb); Ca:=If(BarsSince(I OR Dn)>=BarsSince(I OR Up),0,1); Ct:=Cum(Cross(Dn,0.5))-ValueWhen(1,I OR (Ca AND Alert(Ca=0,2)) OR (Ca=0 AND Alert(Ca,2)),Cum(Cross(Dn,0.5))); Cdn:=If(Ca,Ct+1,Ct); HighestSince(1,I,Cdn); Filter {Filter} Cum(Alert(ExtFml("GV.GetVar","Tr")<>0,2))>0; Filter enabled Yes Periodicity Daily Records required XXX -------8<---------------------------------- Exploration notes{Trade Equity GV SC 4 Daily} {2004 Roy Larsen, rlarsen@man.quik.co.nz} {This is the fourth exploration in a family of four that create trading system statistical reports using "Trade Equity GV SC" with daily data. These reports can be copied to Excel for summary or further analysis. Each exploration can be run alone or with others in the set. Make sure that the "Trade Equity GV SC" indicator parameters are set up correctly before proceeding.} Col A: B/H DwDn {Maximum buy and hold drawdown} Eq:=Fml("Trade Equity GV SC"); Cn:=ExtFml("GV.GetVar","Cn"); Cp:=ExtFml("GV.GetVar","Cp"); Tr:=ExtFml("GV.GetVar","Tr"); Ea:=ValueWhen(1,Cum(1)=1 {OR Cum(Tr)=1} ,C); I :=Cum(Ea>0)=1; Ea:=LastValue(Ea); Gl:=((Cp-Cn)*(C/Ea))-Cp; LowestSince(1,I,Gl); Col B: B/H +Exc {Maximum buy and hold positive excursion} Cn:=ExtFml("GV.GetVar","Cn"); Cp:=ExtFml("GV.GetVar","Cp"); Tr:=ExtFml("GV.GetVar","Tr"); Ea:=ValueWhen(1,Cum(1)=1 {OR Cum(Tr)=1} ,C); I :=Cum(Ea>0)=1; Ea:=LastValue(Ea); Gl:=((Cp-Cn)*(C/Ea))-Cp; HighestSince(1,I,Gl); Col C: AvgeWin {Average win} Xs:=ExtFml("GV.GetVar","Xs"); Gn:=Cum(If(Xs>0,Xs,0)); Up:=Cum(If(Xs>0,1,0)); Up:=If(Up=0,-1,Up); Gn:=If(Up=0,1,Gn); If(Gn/Up=-1,0,Gn/Up); Col D: AvgeLoss {Average loss} Ex:=ExtFml("GV.GetVar","Ex"); Lb:=ExtFml("GV.GetVar","Lb"); Xd:=ExtFml("GV.GetVar","Xd"); Ls:=Cum(If(Xd<0,Xd,0)); Dn:=Cum(If(Xd<=0 AND (Ex OR Lb),1,0)); Dn:=If(Dn=0,-1,Dn); Ls:=If(Dn=0,-1,Ls); If(Ls/Dn>0,0,Ls/Dn); Col E: GL Ratio {Average gain/loss ratio} Ex:=ExtFml("GV.GetVar","Ex"); Lb:=ExtFml("GV.GetVar","Lb"); Xs:=ExtFml("GV.GetVar","Xs"); Xd:=ExtFml("GV.GetVar","Xd"); Gn:=Cum(If(Xs>0,Xs,0)); Up:=Cum(If(Xs>0,1,0)); Ls:=Cum(If(Xd<0,Xd,0)); Ok:=Gn>0 AND Ls<0; Dn:=Cum(Xd<=0 AND (Ex OR Lb)); Gn:=If(Ok,Gn,-1); Ls:=If(Ok,Ls,1); Up:=If(Ok,Up,1); Dn:=If(Ok,Dn,1); Op:=(Gn/Up)/Abs(Ls/Dn); If(Op<0,0,PREC(Op,2)); Col F: PkTrough {Maximum $ peak-to-trough range} I :=ExtFml("GV.GetVar","I"); Nd:=ExtFml("GV.GetVar","Nd"); Tr:=ExtFml("GV.GetVar","Tr"); A :=If(Tr,HighestSince(1,Tr=0,Nd),0); B :=If(Tr,LowestSince(1,Tr=0,Nd),0); HighestSince(1,I,If(Tr,A-B,0)); Filter {Filter} Cum(Alert(ExtFml("GV.GetVar","Tr")<>0,2))>0; Filter enabled Yes Periodicity Daily Records required XXX -------8<----------------------------------