Formula Turtle Strategy

La definizione delle tartarughe implica nel trading system anche il money managemant (quanto rischiare in ogni operazione), quindi ho la necessita di conoscere quanto capitale ho disponibile e quante posizioni contemporanee posso aprire (piramidare in gergo). 
Siccome da Easy Language non ho variabili di sistema per leggere i valori impostati nella sezione "Costi" e nella sezione "Proprietà" del pannello di formattazione, sono stato costretto a prevedere gli stessi dati come Input della strategy. 
Descrizione variabili di Input: 
*DistHnumero min di barre per rilevare un high break default (4) 
*DistLnumero min di barre per rilevare un low break default (4) 
*Accountcapitale iniziale utilizzabile default (10000)
*MaxPercRiskdefinisce in percentuale il rischio relativo alla volatilità "N in gergo tartarughe" lo stop-loss è 2 volte questo parametro, di default (1)
*MaxOpenEntrynumero massimo di posizioni aperte consecutive default (4)
Per capire meglio come inserire le variabili di Input guardare l'esempio nel workspace allegato. 
*Associazione colori break out:
• la linea blu sottile indica break high 20 barre.• la linea blu spessa indica break high 55 barre.• la linea ciano spessa indica break high entrate in piramide.• la linea rossa sottile indica break low 20 barre.• la linea rossa spessa indica break low 55 barre.• la linea magenta spessa indica break low entrate in piramide. 
*Update Ver 0.1.0
La versione aggiornata gestisce i nuovi ticks MTS in vigore da Feb. 2005 ed è stata divisa in due sotto release. La #1 tiene un ordine attivo solo il giorno successivo il BreakOut, mentre la #2 tiene L'ordine attivo per DistH -1 per i Buy Orders e DistL -1 per i Sell Orders. 
Mediamente va meglio la #2, ma su alcuni titoli è meglio la #1. 
== PositionMoneyMng ==
PositionMoneyMng(Account,PercRisk,Price,Loss) Ritorna il numero share per la posione da prendere a Price con massima perdita Loss garantendo una massima perdita PercRisk sul Account. 
INIZIO FORMULAInputs:Account(NumericSimple),PercRisk(NumericSimple),Price(NumericSimple),Loss(NumericSimple); 
PositionMoneyMng = Floor(Minlist(Account / Price,((Account * PercRisk) / 100) / Loss)); 
FINE FORMULA
== TicksMTS ==
Provided By: Carlo Bastelli nov. 2004 
INIZIO FORMULA 
Inputs: Price(NumericSimple); 
if Price <= 0.2500 then TicksMTS = 0.0001 else if Price <= 1.0 then {0.2501 to 1.0 } TicksMTS = 0.0005 else if Price <= 2.0 then {1.0001 to 2.0 } TicksMTS = 0.0010 else if Price <= 5.0 then {2.0001 to 5.0 } TicksMTS = 0.0025 else if Price <= 10.0 then {5.0001 to 10 } TicksMTS = 0.0050 else TicksMTS = 0.0100; 
FINE FORMULA 
== TicksRound ==
Provided By: Carlo Bastelli feb. 2005 
INIZIO FORMULA Inputs: Price(NumericSimple); Vars:Tick(0),Remaind(0); 
Tick=TicksMTS(Price); Remaind=Mod(Price,Tick); if (Remaind=0) then TicksRound=Price else if (Remaind>=Tick/2) then TicksRound=Price-Remaind+Tick else TicksRound=Price-Remaind; FINE FORMULA
== Tourtle Soup #1 ==
Provided By: Carlo Bastelli 2005 carlo_bastelli@yahoo.it
INIZIO FORMULA 
{ Turtle mode #1 Ver.0.1.0 03.02.2005 Ordine Buy/Sell solo la barra dopo break out }{ Turtle mode #1 Ver.0.1.1 12.10.2005 Aggiunto Expert Commentary } 
Input:DistH(4),DistL(4),Account(10000),MaxPercRisk(2),MaxOpenEntry(4);Var:TradeAccount(-1),PosSize(0),TrailBars(10),Eq(0),T1(0);Var:cCurrentEntries(0),cAvgEntryPrice(0),cEntryPrice(0),cCurrentContracts(0);Var:BuyStop(-1),BuyLimit(-1),LExitStop(-1),SellStop(-1),SellLimit(-1),SExitStop(-1);Var:NextHigh(-1),NextLow(-1);Var:BreakType(0),BreakStop(-1),BreakBars(0),BreakIsLoss(false),Break20Found(false),Break20SkipCnt(0); 
if Barnumber=1 then beginVALUE29=-1;VALUE38=-1;end; 
cCurrentEntries=CurrentEntries;cAvgEntryPrice=AvgEntryPrice;cCurrentContracts=CurrentContracts;if (cCurrentEntries>cCurrentEntries[1]) then begincEntryPrice=(CurrentContracts*AvgEntryPrice-cCurrentContracts[1]*cAvgEntryPrice[1])/(CurrentContracts-cCurrentContracts[1]);if MarketPosition=1 then beginLExitStop=TicksRound(cEntryPrice-2*XAverage(TrueRange,20));NextHigh=cEntryPrice+0.5*XAverage(TrueRange,20);NextHigh=TicksRound(NextHigh+TicksMTS(NextHigh));VALUE29=-1;endelse beginSExitStop=TicksRound(cEntryPrice+2*XAverage(TrueRange,20));NextLow=cEntryPrice-0.5*XAverage(TrueRange,20);NextLow=TicksRound(NextLow-TicksMTS(NextLow));VALUE38=-1;end;{print(cEntryPrice," ",cCurrentEntries," ",CurrentContracts-cCurrentContracts[1]," ",date);}value99=date; { Date & Time per linea entry multiple Buy/Sell }value98=time;end;if (cCurrentEntries=0 and cCurrentEntries[1]<>0) then beginNextHigh=-1;NextLow=-1;LExitStop=-1;SExitStop=-1;if VALUE29>=0 thenTL_Delete(VALUE29);VALUE29=-1;if VALUE38>=0 thenTL_Delete(VALUE38);VALUE38=-1;end; 
{ Gestione Exit Stop & Trailing }if MarketPosition=1 then beginExitLong ("LES") next bar at LExitStop stop;if BarsSinceEntry>TrailBars thenExitLong ("LET") next bar at TicksRound(Lowest(Low,TrailBars)) stop;endelse if MarketPosition=-1 then beginExitShort ("SES") next bar at SExitStop stop;if BarsSinceEntry>TrailBars thenExitShort ("SET") next bar at TicksRound(Highest(High,TrailBars)) stop;end; 
Break20Found=false;{ Genera segnali Buy Break High 20 bars }if H>=Highest(H,20)[1] then beginvalue1=H;value2=BarNumber;value3=value2[0]-value2[1]; 
if value3>DistH and value1[0]>=value1[1] and value1[1]<>0 and NextHigh=-1 then begin{BuyStop=value1[1]-TicksMTS(value1[1])-XAverage(TrueRange,20);BuyLimit=value1[1]+XAverage(TrueRange,20);}if BreakIsLoss or Break20SkipCnt>0 then beginBuyStop=TicksRound(value1[1]+TicksMTS(value1[1]));BuyLimit=TicksRound(value1[0]-XAverage(TrueRange,20));Break20SkipCnt=0;Break20Found=true;endelseBreak20SkipCnt=Break20SkipCnt+1;VALUE9=TL_New(date[value3+1],time[value3+1],high[value3],date,time,high[value3]);TL_SetSize(VALUE9, 1);TL_SetColor(VALUE9, Blue);if BreakType=0 then beginBreakBars=0;BreakType=1;{BreakIsLoss=false;}end;end;end;{ Genera segnali Buy Break High 55 bars }if H>=Highest(H,55)[1] then beginvalue4=H;value5=BarNumber;value6=value5[0]-value5[1]; 
if value6>DistH and value4[0]>=value4[1] and value4[1]<>0 and Break20Found<>true and NextHigh=-1 then beginBuyStop=TicksRound(value4[1]+TicksMTS(value4[1]));BuyLimit=TicksRound(value4[0]-XAverage(TrueRange,20));Break20SkipCnt=0;VALUE9=TL_New(date[value6+1],time[value6+1],high[value6],date,time,high[value6]);TL_SetSize(VALUE9, 3);TL_SetColor(VALUE9, blue);if BreakType=0 then beginBreakBars=0;BreakType=1;{BreakIsLoss=false;}end;end;end; 
Break20Found=false;{ Genera segnali Sell Break Low 20 bars }if L<=Lowest(L,20)[1] then beginvalue10=L;value11=BarNumber;value12=value11[0]-value11[1]; 
if value12>DistL and value10[0]<=value10[1] and value10[1]<>0 and NextLow=-1 then beginif BreakIsLoss or Break20SkipCnt>0 then beginSellStop=TicksRound(value10[1]-TicksMTS(value10[1]));SellLimit=TicksRound(value10[0]+XAverage(TrueRange,20));Break20SkipCnt=0;Break20Found=true;endelseBreak20SkipCnt=Break20SkipCnt+1;VALUE19=TL_New(date[value12+1],time[value12+1],Low[value12],date,time,Low[value12]);TL_SetSize(VALUE19, 1);TL_SetColor(VALUE19, Red);if BreakType=0 then beginBreakBars=0;BreakType=-1;{BreakIsLoss=false;}end;end; 
end;{ Genera segnali Sell Break Low 55 bars }if L<=Lowest(L,55)[1] then beginvalue13=L;value14=BarNumber;value15=value14[0]-value14[1]; 
if value15>DistL and value13[0]<=value13[1] and value13[1]<>0 and Break20Found<>true and NextLow=-1 then beginSellStop=TicksRound(value13[1]-TicksMTS(value13[1]));SellLimit=TicksRound(value13[0]+XAverage(TrueRange,20));Break20SkipCnt=0;VALUE19=TL_New(date[value15+1],time[value15+1],Low[value15],date,time,Low[value15]);TL_SetSize(VALUE19, 3);TL_SetColor(VALUE19, Red);if BreakType=0 then beginBreakBars=0;BreakType=-1;{BreakIsLoss=false;}end;end;end; 
{ Gestione entry multiple high }if NextHigh<>-1 and cCurrentEntries<MaxOpenEntry and TradeAccount>0 then beginif H>=Nexthigh then begin{print("BuyStop :",BuyStop," ",NextHigh," ",date);}BuyStop=NextHigh;BuyLimit=NextHigh;end;if VALUE29>=0 thenTL_Delete(VALUE29);VALUE29=TL_New(value99,value98,NextHigh,date+1,time,NextHigh);TL_SetSize(VALUE29, 3);TL_SetColor(VALUE29, Cyan);end; 
{ Gestione entry multiple low }if NextLow<>-1 and cCurrentEntries<MaxOpenEntry and TradeAccount>0 then beginif L<=NextLow then beginSellStop=NextLow;SellLimit=NextLow;end;if VALUE38>=0 thenTL_Delete(VALUE38);value38=TL_New(value99,value98,NextLow,date+1,time,NextLow);TL_SetSize(value38, 3);TL_SetColor(value38, Magenta);end; 
{ Verifica ultimo break in loss }if BreakType<>0 then beginif BreakBars<=11 then beginif BreakType=1 thenBreakIsLoss=BreakIsLoss or (BreakStop<=Lowest(Low,BreakBars-1))elseBreakIsLoss=BreakIsLoss or (BreakStop>=Highest(High,BreakBars-1));BreakBars=BreakBars+1;endelse beginBreakType=0;BreakIsLoss=false;end;end; 
if MarketPosition<>-1 and BuyStop<>-1 then begin { Genera ordini Buy }TradeAccount=Account-(CurrentContracts*AvgEntryPrice)+NetProfit;{print("BuyStop :",BuyStop," ",TradeAccount," ",date);}if TradeAccount>2*maxlist(BuyStop,BuyLimit) then beginPosSize=PositionMoneyMng(TradeAccount,MaxPercRisk,BuyLimit,2*XAverage(TrueRange,20));Buy ("TLE") PosSize shares next bar at BuyStop stop;endelseTradeAccount=-1;BuyStop=-1;BuyLimit=-1;endelse if MarketPosition<>1 and SellStop<>-1 then begin { Genera ordini Sell }TradeAccount=Account-(CurrentContracts*AvgEntryPrice)+NetProfit;if TradeAccount>2*minlist(SellStop,SellLimit)then beginPosSize=PositionMoneyMng(TradeAccount,MaxPercRisk,SellLimit,2*XAverage(TrueRange,20));Sell ("TSE") PosSize shares next bar at SellStop stop;endelseTradeAccount=-1;SellStop=-1;SellLimit=-1;end; 
{ Expert Commentary Report }If AtCommentaryBar then beginEq=Account-(CurrentContracts*AvgEntryPrice)+NetProfit;Vars:Str("");Str=Str+"*************** System inputs **************************"+NewLine;Str=Str+"Starting Capital : "+NumToStr(Account,2)+NewLine;Str=Str+"Percentage of Equity to risk : "+NumToStr(MaxPercRisk,2)+" % "+NewLine;Str=Str+"*************** Current statistics ************************"+NewLine;Str=Str+"Market position : "+NumToStr(MarketPosition,0)+NewLine;Str=Str+"Current Shares held : "+NumToStr(cCurrentContracts,0)+NewLine;Str=Str+"Current Equity : "+NumToStr(Eq,2)+NewLine;if BuyStop<>-1 or SellStop<>-1 thenStr=Str+"Percentage of current Equity to risk : "+NumToStr(MaxPercRisk,2)+" % equals "+NumToStr(-Eq*MaxPercRisk/100,2)+" dollars "+NewLine;If BuyStop<>-1 then beginStr=Str+"Entry Long : "+NumToStr(BuyStop,4)+NewLine;Str=Str+"Exit Long : " +NumToStr(TicksRound(BuyStop-2*XAverage(TrueRange,20)),4)+NewLine;Str=Str+"Difference between Entry Long and Exit Long in Dollars : "+NumToStr(TicksRound(2*XAverage(TrueRange,20)),4)+NewLine;Str=Str+"Number of shares to buy to risk "+NumToStr(MaxPercRisk,2)+" % of capital : "+NumToStr(PosSize,0)+NewLine;endelse If MarketPosition=1 then beginEq=Account+NetProfit;T1=-cCurrentContracts*(cAvgEntryPrice-LExitStop);Str=Str+"Percentage of current Equity to risk : "+NumToStr(AbsValue(100*T1/Eq),2)+" % equals "+NumToStr(T1,2)+" dollars "+NewLine;Str=Str+"Entry Long : "+NumToStr(cEntryPrice,4)+NewLine;Str=Str+"Exit Long : " +NumToStr(LExitStop,4)+NewLine;Str=Str+"Difference between Entry Long and Exit Long in Dollars : "+NumToStr(cEntryPrice-LExitStop,4)+NewLine;Str=Str+"Open Position Profit in Dollars : "+NumToStr(OpenPositionProfit,2)+NewLine;end;If SellStop<>-1 then beginStr=Str+"Entry Short : "+NumToStr(SellStop,4)+NewLine;Str=Str+"Exit Short : " +NumToStr(TicksRound(SellStop+2*XAverage(TrueRange,20)),4)+NewLine;Str=Str+"Difference between Entry Short and Exit Short in Dollars : "+NumToStr(TicksRound(2*XAverage(TrueRange,20)),4)+NewLine;Str=Str+"Number of shares to Sell to risk "+NumToStr(MaxPercRisk,2)+" % of capital : "+NumToStr(PosSize,0)+NewLine;endelse If MarketPosition=-1 then beginEq=Account+NetProfit;T1=-cCurrentContracts*(SExitStop-cAvgEntryPrice);Str=Str+"Percentage of current Equity to risk : "+NumToStr(AbsValue(100*T1/Eq),2)+" % equals "+NumToStr(T1,2)+" dollars "+NewLine;Str=Str+"Entry Short : "+NumToStr(cEntryPrice,4)+NewLine;Str=Str+"Exit Short : " +NumToStr(SExitStop,4)+NewLine;Str=Str+"Difference between Entry Short and Exit Short in Dollars : "+NumToStr(SExitStop-cEntryPrice,4)+NewLine;Str=Str+"Open Position Profit in Dollars : "+NumToStr(OpenPositionProfit,2)+NewLine;end;Commentary(Str);end; 
FINE FORMULA
== Tourtle Soup #2 ==
Provided By: Carlo Bastelli 2005 carlo_bastelli@yahoo.it
Turtle mode #2 Ver.0.1.0 03.02.2005 Ordini ripetuti piu' barre }{ Turtle mode #2 Ver.0.1.1 12.10.2005 Aggiunto Expert Commentary
INIZIO FORMULA 
Input:DistH(4),DistL(4),Account(10000),MaxPercRisk(2),MaxOpenEntry(4);Var:TradeAccount(-1),PosSize(0),TrailBars(10),Eq(0),T1(0);Var:cCurrentEntries(0),cAvgEntryPrice(0),cEntryPrice(0),cCurrentContracts(0);Var:BuyStop(-1),BuyLimit(-1),LExitStop(-1),SellStop(-1),SellLimit(-1),SExitStop(-1);Var:NextHigh(-1),NextLow(-1),BarUntil(-1);Var:BreakType(0),BreakStop(-1),BreakBars(0),BreakIsLoss(false),Break20Found(false),Break20SkipCnt(0);
if Barnumber=1 then beginVALUE29=-1;VALUE38=-1;end;
cCurrentEntries=CurrentEntries;cAvgEntryPrice=AvgEntryPrice;cCurrentContracts=CurrentContracts;if (cCurrentEntries>cCurrentEntries[1]) then begincEntryPrice=(CurrentContracts*AvgEntryPrice-cCurrentContracts[1]*cAvgEntryPrice[1])/(CurrentContracts-cCurrentContracts[1]);if MarketPosition=1 then beginLExitStop=TicksRound(cEntryPrice-2*XAverage(TrueRange,20));NextHigh=cEntryPrice+0.5*XAverage(TrueRange,20);NextHigh=TicksRound(NextHigh+TicksMTS(NextHigh));BuyStop=-1;BuyLimit=-1;BarUntil=-1;VALUE29=-1;endelse beginSExitStop=TicksRound(cEntryPrice+2*XAverage(TrueRange,20));NextLow=cEntryPrice-0.5*XAverage(TrueRange,20);NextLow=TicksRound(NextLow-TicksMTS(NextLow));SellStop=-1;SellLimit=-1;BarUntil=-1;VALUE38=-1;end;value99=date; { Date & Time per linea entry multiple Buy/Sell }value98=time;end;if (cCurrentEntries=0 and cCurrentEntries[1]<>0) then beginNextHigh=-1;NextLow=-1;LExitStop=-1;SExitStop=-1;BuyStop=-1;BuyLimit=-1;SellStop=-1;SellLimit=-1;BarUntil=-1;if VALUE29>=0 thenTL_Delete(VALUE29);VALUE29=-1;if VALUE38>=0 thenTL_Delete(VALUE38);VALUE38=-1;end;
{ Gestione Exit Stop & Trailing }if MarketPosition=1 then beginExitLong ("LES") next bar at LExitStop stop;if BarsSinceEntry>TrailBars thenExitLong ("LET") next bar at TicksRound(Lowest(Low,TrailBars)) stop;endelse if MarketPosition=-1 then beginExitShort ("SES") next bar at SExitStop stop;if BarsSinceEntry>TrailBars thenExitShort ("SET") next bar at TicksRound(Highest(High,TrailBars)) stop;end;
Break20Found=false;{ Genera segnali Buy Break High 20 bars }if H>=Highest(H,20)[1] then beginvalue1=H;value2=BarNumber;value3=value2[0]-value2[1];
if value3>DistH and value1[0]>=value1[1] and value1[1]<>0 and NextHigh=-1 then begin{BuyStop=value1[1]-TicksMTS(value1[1])-XAverage(TrueRange,20);BuyLimit=value1[1]+XAverage(TrueRange,20);}if BreakIsLoss or Break20SkipCnt>0 then beginBuyStop=TicksRound(value1[1]+TicksMTS(value1[1]));BuyLimit=TicksRound(value1[0]-XAverage(TrueRange,20));Break20SkipCnt=0;Break20Found=true;endelseBreak20SkipCnt=Break20SkipCnt+1;VALUE9=TL_New(date[value3+1],time[value3+1],high[value3],date,time,high[value3]);TL_SetSize(VALUE9, 1);TL_SetColor(VALUE9, Blue);if BreakType=0 then beginBreakBars=0;BreakType=1;{BreakIsLoss=false;}end;end;end;{ Genera segnali Buy Break High 55 bars }if H>=Highest(H,55)[1] then beginvalue4=H;value5=BarNumber;value6=value5[0]-value5[1];
if value6>DistH and value4[0]>=value4[1] and value4[1]<>0 and Break20Found<>true and NextHigh=-1 then beginBuyStop=TicksRound(value4[1]+TicksMTS(value4[1]));BuyLimit=TicksRound(value4[0]-XAverage(TrueRange,20));Break20SkipCnt=0;VALUE9=TL_New(date[value6+1],time[value6+1],high[value6],date,time,high[value6]);TL_SetSize(VALUE9, 3);TL_SetColor(VALUE9, blue);if BreakType=0 then beginBreakBars=0;BreakType=1;{BreakIsLoss=false;}end;end;end;
Break20Found=false;{ Genera segnali Sell Break Low 20 bars }if L<=Lowest(L,20)[1] then beginvalue10=L;value11=BarNumber;value12=value11[0]-value11[1];
if value12>DistL and value10[0]<=value10[1] and value10[1]<>0 and NextLow=-1 then beginif BreakIsLoss or Break20SkipCnt>0 then beginSellStop=TicksRound(value10[1]-TicksMTS(value10[1]));SellLimit=TicksRound(value10[0]+XAverage(TrueRange,20));Break20SkipCnt=0;Break20Found=true;endelseBreak20SkipCnt=Break20SkipCnt+1;VALUE19=TL_New(date[value12+1],time[value12+1],Low[value12],date,time,Low[value12]);TL_SetSize(VALUE19, 1);TL_SetColor(VALUE19, Red);if BreakType=0 then beginBreakBars=0;BreakType=-1;{BreakIsLoss=false;}end;end;
end;{ Genera segnali Sell Break Low 55 bars }if L<=Lowest(L,55)[1] then beginvalue13=L;value14=BarNumber;value15=value14[0]-value14[1];
if value15>DistL and value13[0]<=value13[1] and value13[1]<>0 and Break20Found<>true and NextLow=-1 then beginSellStop=TicksRound(value13[1]-TicksMTS(value13[1]));SellLimit=TicksRound(value13[0]+XAverage(TrueRange,20));Break20SkipCnt=0;VALUE19=TL_New(date[value15+1],time[value15+1],Low[value15],date,time,Low[value15]);TL_SetSize(VALUE19, 3);TL_SetColor(VALUE19, Red);if BreakType=0 then beginBreakBars=0;BreakType=-1;{BreakIsLoss=false;}end;end;end;
{ Gestione entry multiple high }if NextHigh<>-1 and cCurrentEntries<MaxOpenEntry and TradeAccount>0 then beginif H>=Nexthigh then beginBuyStop=NextHigh;BuyLimit=NextHigh;end;if VALUE29>=0 thenTL_Delete(VALUE29);VALUE29=TL_New(value99,value98,NextHigh,date+1,time,NextHigh);TL_SetSize(VALUE29, 3);TL_SetColor(VALUE29, Cyan);end;
{ Gestione entry multiple low }if NextLow<>-1 and cCurrentEntries<MaxOpenEntry and TradeAccount>0 then beginif L<=NextLow then beginSellStop=NextLow;SellLimit=NextLow;end;if VALUE38>=0 thenTL_Delete(VALUE38);value38=TL_New(value99,value98,NextLow,date+1,time,NextLow);TL_SetSize(value38, 3);TL_SetColor(value38, Magenta);end;
{ Verifica ultimo break in loss }if BreakType<>0 then beginif BreakBars<=11 then beginif BreakType=1 thenBreakIsLoss=BreakIsLoss or (BreakStop<=Lowest(Low,BreakBars-1))elseBreakIsLoss=BreakIsLoss or (BreakStop>=Highest(High,BreakBars-1));BreakBars=BreakBars+1;endelse beginBreakType=0;BreakIsLoss=false;end;end;
if MarketPosition<>-1 and BuyStop<>-1 then begin { Genera ordini Buy }TradeAccount=Account-(CurrentContracts*AvgEntryPrice)+NetProfit;if TradeAccount>2*maxlist(BuyStop,BuyLimit) then beginif BarUntil=-1 then beginPosSize=PositionMoneyMng(TradeAccount,MaxPercRisk,BuyLimit,2*XAverage(TrueRange,20));BarUntil=BarNumber+DistH;end;endelse beginBuyStop=-1;BuyLimit=-1;TradeAccount=-1;end;if BarNumber<BarUntil thenBuy ("TLE") PosSize shares next bar at BuyStop stopelse beginBuyStop=-1;BuyLimit=-1;BarUntil=-1;end;endelse if MarketPosition<>1 and SellStop<>-1 then begin { Genera ordini Sell }TradeAccount=Account-(CurrentContracts*AvgEntryPrice)+NetProfit;if TradeAccount>2*minlist(SellStop,SellLimit)then beginif BarUntil=-1 then beginPosSize=PositionMoneyMng(TradeAccount,MaxPercRisk,SellLimit,2*XAverage(TrueRange,20));BarUntil=BarNumber+DistL;end;endelse beginSellStop=-1;SellLimit=-1;TradeAccount=-1;end;if BarNumber<BarUntil thenSell ("TSE") PosSize shares next bar at SellStop stopelse beginSellStop=-1;SellLimit=-1;BarUntil=-1;end;end;
{ Expert Commentary Report }If AtCommentaryBar then beginEq=Account-(CurrentContracts*AvgEntryPrice)+NetProfit;Vars:Str("");Str=Str+"*************** System inputs **************************"+NewLine;Str=Str+"Starting Capital : "+NumToStr(Account,2)+NewLine;Str=Str+"Percentage of Equity to risk : "+NumToStr(MaxPercRisk,2)+" % "+NewLine;Str=Str+"*************** Current statistics ************************"+NewLine;Str=Str+"Market position : "+NumToStr(MarketPosition,0)+NewLine;Str=Str+"Current Shares held : "+NumToStr(cCurrentContracts,0)+NewLine;Str=Str+"Current Equity : "+NumToStr(Eq,2)+NewLine;if BuyStop<>-1 or SellStop<>-1 thenStr=Str+"Percentage of current Equity to risk : "+NumToStr(MaxPercRisk,2)+" % equals "+NumToStr(-Eq*MaxPercRisk/100,2)+" dollars "+NewLine;If BuyStop<>-1 then beginStr=Str+"Entry Long : "+NumToStr(BuyStop,4)+NewLine;Str=Str+"Exit Long : " +NumToStr(TicksRound(BuyStop-2*XAverage(TrueRange,20)),4)+NewLine;Str=Str+"Difference between Entry Long and Exit Long in Dollars : "+NumToStr(TicksRound(2*XAverage(TrueRange,20)),4)+NewLine;Str=Str+"Number of shares to buy to risk "+NumToStr(MaxPercRisk,2)+" % of capital : "+NumToStr(PosSize,0)+NewLine;endelse If MarketPosition=1 then beginEq=Account+NetProfit;T1=-cCurrentContracts*(cAvgEntryPrice-LExitStop);Str=Str+"Percentage of current Equity to risk : "+NumToStr(AbsValue(100*T1/Eq),2)+" % equals "+NumToStr(T1,2)+" dollars "+NewLine;Str=Str+"Entry Long : "+NumToStr(cEntryPrice,4)+NewLine;Str=Str+"Exit Long : " +NumToStr(LExitStop,4)+NewLine;Str=Str+"Difference between Entry Long and Exit Long in Dollars : "+NumToStr(cEntryPrice-LExitStop,4)+NewLine;Str=Str+"Open Position Profit in Dollars : "+NumToStr(OpenPositionProfit,2)+NewLine;end;If SellStop<>-1 then beginStr=Str+"Entry Short : "+NumToStr(SellStop,4)+NewLine;Str=Str+"Exit Short : " +NumToStr(TicksRound(SellStop+2*XAverage(TrueRange,20)),4)+NewLine;Str=Str+"Difference between Entry Short and Exit Short in Dollars : "+NumToStr(TicksRound(2*XAverage(TrueRange,20)),4)+NewLine;Str=Str+"Number of shares to Sell to risk "+NumToStr(MaxPercRisk,2)+" % of capital : "+NumToStr(PosSize,0)+NewLine;endelse If MarketPosition=-1 then beginEq=Account+NetProfit;T1=-cCurrentContracts*(SExitStop-cAvgEntryPrice);Str=Str+"Percentage of current Equity to risk : "+NumToStr(AbsValue(100*T1/Eq),2)+" % equals "+NumToStr(T1,2)+" dollars "+NewLine;Str=Str+"Entry Short : "+NumToStr(cEntryPrice,4)+NewLine;Str=Str+"Exit Short : " +NumToStr(SExitStop,4)+NewLine;Str=Str+"Difference between Entry Short and Exit Short in Dollars : "+NumToStr(SExitStop-cEntryPrice,4)+NewLine;Str=Str+"Open Position Profit in Dollars : "+NumToStr(OpenPositionProfit,2)+NewLine;end;Commentary(Str);end;FINE FORMULA
== Vedi anche: ==
*Indice sequenziale Formule
Category:Formule