Vi har fått önskemål om en ATR-baserad stopp som utgår ifrån värdet av ATR(10) den dagen köpet gjordes. Dvs, inte en kontinuerligt föränderlig ATR-kurva utan fast.
De flesta skulle nog fundera på att lagra värdet i en global cell, men vi försöker promota användandet av dataserier istället för att få enklare programmering.
Om vi antar att man köper en aktie manuellt och därefter vill ansluta en stoploss vars gräns går 3 x ATR(10) från inköpsnivån, så kan vi använda Find() för att hitta den dagen då köpet gjordes. Finessen med Find() är att kommandot kan leta efter ställen då ett visst villkor var uppfyllt, men returnera värdet från en helt annan dataserie.
För att hitta köpdagen kan vi testa om D (databastid ) är mindre än LastTrade(b,d) som returnerar tidstämpel för senaste köp:
köpdag=le(d,lasttrade(b,d))
uttrycket blir sant så länge D är mindre än köpdagen, dvs tidigare än köpdagen.
För att hitta vad ATR(10) hade för värde den dagen använder vi Find:
at_värde=find(köpdag,250,atr(10),1)
Här testas om "köpdag" är sant någon gång inom 250 dagar, och i så fall returneras värdet av atr(10) från den dagen.
För att beräkna vår stoppgräns behöver vi även veta vilket pris inköpet gjordes på, och subtrahera ifrån värdet av 3 x ATR(10):
stoppgräns=sub(lasttrade(b,p),mult(3,at_värde))
Slutligen kopplar vi ihoop de logiska besluten att C (senast betalt) ska vara lägre än köppriset - 3 * atr(10):
sälj1=lt(c,stoppgräns)
Dessutom ska vi ju bara sälja om det finns något innehav att sälja:
innehav=gt(portfolio(v),0)
sälj1=lt(c,stoppgräns)
sälj2=and(sälj1,innehav)
Sammantaget blir hela scriptet:
köpdag=le(d,lasttrade(b,d))
at_värde=find(köpdag,250,atr(10),1)
stoppgräns=sub(lasttrade(b,p),mult(3,at_värde))
draw(stoppgräns,2,rqb)
innehav=gt(portfolio(v),0)
sälj1=lt(c,stoppgräns)
sälj2=and(sälj1,innehav)
mult(sälj2,10)
Notera hur den röda stoppgränsen uppdateras kontinuerligt fram till den dagen då köpet skedde (markerat med gult i diagrammet) och därefter ligger fast.
De flesta skulle nog fundera på att lagra värdet i en global cell, men vi försöker promota användandet av dataserier istället för att få enklare programmering.
Om vi antar att man köper en aktie manuellt och därefter vill ansluta en stoploss vars gräns går 3 x ATR(10) från inköpsnivån, så kan vi använda Find() för att hitta den dagen då köpet gjordes. Finessen med Find() är att kommandot kan leta efter ställen då ett visst villkor var uppfyllt, men returnera värdet från en helt annan dataserie.
För att hitta köpdagen kan vi testa om D (databastid ) är mindre än LastTrade(b,d) som returnerar tidstämpel för senaste köp:
köpdag=le(d,lasttrade(b,d))
uttrycket blir sant så länge D är mindre än köpdagen, dvs tidigare än köpdagen.
För att hitta vad ATR(10) hade för värde den dagen använder vi Find:
at_värde=find(köpdag,250,atr(10),1)
Här testas om "köpdag" är sant någon gång inom 250 dagar, och i så fall returneras värdet av atr(10) från den dagen.
För att beräkna vår stoppgräns behöver vi även veta vilket pris inköpet gjordes på, och subtrahera ifrån värdet av 3 x ATR(10):
stoppgräns=sub(lasttrade(b,p),mult(3,at_värde))
Slutligen kopplar vi ihoop de logiska besluten att C (senast betalt) ska vara lägre än köppriset - 3 * atr(10):
sälj1=lt(c,stoppgräns)
Dessutom ska vi ju bara sälja om det finns något innehav att sälja:
innehav=gt(portfolio(v),0)
sälj1=lt(c,stoppgräns)
sälj2=and(sälj1,innehav)
Sammantaget blir hela scriptet:
köpdag=le(d,lasttrade(b,d))
at_värde=find(köpdag,250,atr(10),1)
stoppgräns=sub(lasttrade(b,p),mult(3,at_värde))
draw(stoppgräns,2,rqb)
innehav=gt(portfolio(v),0)
sälj1=lt(c,stoppgräns)
sälj2=and(sälj1,innehav)
mult(sälj2,10)
Notera hur den röda stoppgränsen uppdateras kontinuerligt fram till den dagen då köpet skedde (markerat med gult i diagrammet) och därefter ligger fast.
Comment