Här kommer ett "skal" där man kan stoppa in sina egna entry-script och backtesta dessa ihop med en enkel flytande stoploss. Vi börjar med enklaste modellen, nämligen köp följt av flytande stoploss.
När de som är intresserade har fått det att fungera kan vi bygga vidare med motsvarande flytande stopp för blankade positioner. Slutligen kan vi svetsa ihop allt till ett komplett system för backtestning av köp - blankning bevakat av flytande stoploss åt båda hållen. Då kan vi se exakt hur en modell beter sig även med effekterna av motsatt entry/flytande stoploss åt båda hållen.
Så här gör man:
Vi antar att vi har ett väldigt enkelt köpscript som tar position när ett kort medelvärde korsar ett längre. Det är enklaste tänkbara entry. Det är dessutom enkelt att klicka fram de båda medelvärdena i diagrammet så man ser var det korsar. Köpscriptet kan ju dessutom rita tex gröna flaggor där det larmar.
sl) Ditt köpscript
m1:=mov(c,5,s)
m2:=Mov(c,100,e)
stigande:=gt(m1,aref(m1,3))
köpentry:=and(cross(m1,m2),stigande)
Mult(köpentry,20)
Nästa steg är själva stoppscriptet. Notera att exakt samma köpscript finns inbakat överst i stoppen också, så att stoplossen vet var signalerna kommer i backtesten. Den enda parametern i stoppen är egentligen flytnivån, i det här fallet 0.98 som motsvarar 2% under högsta kurs hittills efter köp.
Koden efter på samma rad är förberedelse för optimeringskörning i Optimeringsbänken. För att testa fram vilken flytnivå som är mest lönsam under en viss period kan man aktivera det genom att skriva ett dollartecken framför "opt", så körs alla kombinationer igenom i Analysbänken enligt parametrarna efter, i det här fallet 0.92 tom 0.99 i steg om 0.01. Resultatet presenteras som en graf/värde för dn ackumulerade avkastningen över tiden. Mycket effektivt! Vi kan gå vidare senare och titta på hur man fixar det.
Viktigt att tänka på är att om man ändrar något i sitt köpscript ovan måste exakt samma ändring göras även i köpscriptsdelen i stoppen nedan.
sl) Flytande köpstopp inkl entry
m1:=mov(c,5,s)
m2:=Mov(c,100,e)
stigande:=gt(m1,aref(m1,3))
köpentry:=and(cross(m1,m2),stigande)
{ STOPLOSS }
flytnivå:=0.98 {opt(0.92,0.99,0.01)}
bakåt1:=480
lasttradek=Retval(if(And(köpentry,or(ge(getval(4),getval(3)),eqv(getval(4),0))),D,Getval(3)),3)
efterinköp=if(ge(d,getval(3)),h,0)
highlevelb=hhv(efterinköp,bakåt1)
stoppok=gt(getval(3),getval(4))
köppris=find(And(ge(d,getval(3)),lt(ref(d,1),getval(3))),bakåt1,c,1)
stoppkurva=mult(highlevelb,flytnivå)
stoppsälj=and(stoppok,le(l,stoppkurva))
lasttrades=Retval(if(And(stoppsälj,gt(getval(3),getval(4))),D,Getval(4)),4)
draw(if(stoppok,stoppkurva,0),2,rqb)
mult(stoppsälj,25)
För att prova ovanstående, stoppa in det i Analysbänken, klicka på Inställningar, kryssa för "Animering per minut = Aktiv".
Kör simuleringen så kan du se var affärerna skulle skett och vad resultatet skulle blivit.
När de som är intresserade har fått det att fungera kan vi bygga vidare med motsvarande flytande stopp för blankade positioner. Slutligen kan vi svetsa ihop allt till ett komplett system för backtestning av köp - blankning bevakat av flytande stoploss åt båda hållen. Då kan vi se exakt hur en modell beter sig även med effekterna av motsatt entry/flytande stoploss åt båda hållen.
Så här gör man:
Vi antar att vi har ett väldigt enkelt köpscript som tar position när ett kort medelvärde korsar ett längre. Det är enklaste tänkbara entry. Det är dessutom enkelt att klicka fram de båda medelvärdena i diagrammet så man ser var det korsar. Köpscriptet kan ju dessutom rita tex gröna flaggor där det larmar.
sl) Ditt köpscript
m1:=mov(c,5,s)
m2:=Mov(c,100,e)
stigande:=gt(m1,aref(m1,3))
köpentry:=and(cross(m1,m2),stigande)
Mult(köpentry,20)
Nästa steg är själva stoppscriptet. Notera att exakt samma köpscript finns inbakat överst i stoppen också, så att stoplossen vet var signalerna kommer i backtesten. Den enda parametern i stoppen är egentligen flytnivån, i det här fallet 0.98 som motsvarar 2% under högsta kurs hittills efter köp.
Koden efter på samma rad är förberedelse för optimeringskörning i Optimeringsbänken. För att testa fram vilken flytnivå som är mest lönsam under en viss period kan man aktivera det genom att skriva ett dollartecken framför "opt", så körs alla kombinationer igenom i Analysbänken enligt parametrarna efter, i det här fallet 0.92 tom 0.99 i steg om 0.01. Resultatet presenteras som en graf/värde för dn ackumulerade avkastningen över tiden. Mycket effektivt! Vi kan gå vidare senare och titta på hur man fixar det.
Viktigt att tänka på är att om man ändrar något i sitt köpscript ovan måste exakt samma ändring göras även i köpscriptsdelen i stoppen nedan.
sl) Flytande köpstopp inkl entry
m1:=mov(c,5,s)
m2:=Mov(c,100,e)
stigande:=gt(m1,aref(m1,3))
köpentry:=and(cross(m1,m2),stigande)
{ STOPLOSS }
flytnivå:=0.98 {opt(0.92,0.99,0.01)}
bakåt1:=480
lasttradek=Retval(if(And(köpentry,or(ge(getval(4),getval(3)),eqv(getval(4),0))),D,Getval(3)),3)
efterinköp=if(ge(d,getval(3)),h,0)
highlevelb=hhv(efterinköp,bakåt1)
stoppok=gt(getval(3),getval(4))
köppris=find(And(ge(d,getval(3)),lt(ref(d,1),getval(3))),bakåt1,c,1)
stoppkurva=mult(highlevelb,flytnivå)
stoppsälj=and(stoppok,le(l,stoppkurva))
lasttrades=Retval(if(And(stoppsälj,gt(getval(3),getval(4))),D,Getval(4)),4)
draw(if(stoppok,stoppkurva,0),2,rqb)
mult(stoppsälj,25)
För att prova ovanstående, stoppa in det i Analysbänken, klicka på Inställningar, kryssa för "Animering per minut = Aktiv".
Kör simuleringen så kan du se var affärerna skulle skett och vad resultatet skulle blivit.
Comment