Att bygga ordermodeller i Nordnet AutoTrader Genomgång grundläggande teori ordermodeller Genomgång script och konstanter Genomgång några enkla tekniska indikatorer Hitta samband mellan några indikatorer Genomgång tilldelade namn, minnesreferenser och extra objekt Scriptkommandon att använda i triggerscript Bygga triggerscript för köp- och säljsignal Konstruktion prisscript, antalscript och extra kontrollscript Bygga färdigt ordermodellen inkl teori bakom parallella ordermodeller loopfunktioner
Grundläggande scriptkunskaper Vad är script? Skillnad mellan script och ordermodell?
Ordermodellen och dess sekvenser
Parallella ordermodeller
Fördefinierade konstanter C – Closekursen O - Openkurs L – Low H – High B – Buy S - Sell V – Volym D – datum enligt databas Date() - datum enligt systemtid
Enkla tekniska indikatorer Glidande medelvärde Mov(c,20,s) Bollingerband övre BolBands(20,2,u) Oscillator Osc(c,3,20,e)
Exempel på uttryck mult(c,1.01) multiplicerar senast betalt med 1.01 sub(h,l) returnerar skillnaden mellan H och L or(villkor1,villkor2) returnerar logiskt SANT om antingen villkor1 eller villkor2 är SANNA. Om båda är falska returneras falskt från uttrycket hhv(c,5) returnerar högsta värdet av C för senaste 5 perioderna aref(kurva,1) returnerar värdet för variabeln ”kurva” 1 period bakåt
Exempel på villkor bollinger_övre=bolbands(20,2,u) studs_bollinger=gt(c,bollinger_övre) villkoret blir SANT när C är högre än bollinger_övre. SANT och FALSKT används för att fatta beslut i script.
Tilldelade namn Gräns1:=100 (notera kolon före = som talar om att det är ett tilldelat namn) 1. Tilldelade namn används för numeriska värden. 2. Minnesreferenser används för logiska villkor. OBS! Viktigt att samla minnesreferenser längst ned i scriptet.
Börja leta samband
Vi zoomar in lite
Frekvensband hjälper oss hitta sannolika vändpunkter för köp och sälj
Signaltillfällen
Förutsättningar för köpsignal OMXS30 ovanför sitt 200-dagars medelvärde Frekvensfördelning 30 senaste dagarna bildar köp- och säljnivåer Kurs under lägsta nivå 30 senaste dagarna definierad av slutkurser som förekommit minst 70% av tiden Vi handlar i slutet av dagen (ett par minuter innan stängning) Inget innehav finns
Vi definierar scriptindikatorerna 200 dagars glidande medelvärde ma200=mov(omxs30,200,s) (här kommer vi använda ett ”extra objekt” - alltså kursdata från OMXS30 trots att scriptet är anslutet till den minifuture vi vill handla) omxs30=cmpref(c,0,a) {@A(0,OMX Stock )} (klicka på Extra objekt)
Så här får du fram extra objekt
Definiera frekvensband för köpnivå (lo) lo=freq(omxs30,30,10000.7,L) Definiera villkor som testar om klockan är mer än 17:20 klocka=frac(date()) kl1720=gt(klocka,0.722) (Julianska kalendern – kl 00:00 motsvarar värde 0 och kl 24:00 motsvarar värde 1 Frac() tar ut decimaldelen av datumtalet)
Definierade villkor för köp långtrend=gt(llv(omxs30,5),ma200) kl1720=gt(klocka,0.722) ej_innehav=le(portfolio(v),0) köpläge=lt(omxs30,aref(lo,1))
And-kommandot villkor1=and(villkor2,villkor3) köp1=and(villkor1,xxxxx)
Scriptformel - sammanställning
Kombinera ihop villkoren för köp köp1=and(köpläge,långtrend) köp2=and(köp1,ej_innehav) köp3=and(köp2,kl1720)
Samla ihop hela triggerscriptet omxs30=cmpref(c,0,a) { läser in kurs för OMXS30 } ma200=mov(omxs30,200,s) { definierar 200-dagars medel för OMXS30 } långtrend=gt(llv(omxs30,5),ma200) { testar om 5-dagars lägsta stängning OMXS30 > ma200 } ej_innehav=le(portfolio(v),0) { testar om innehav är noll eller blankat } lo=freq(omxs30,30,10000.7,l) { definierar 30-dag frekvensband - används som köpnivå } köpläge=lt(omxs30,aref(lo,1)) { testar om OMXS30 är under frekvensband igår } draw(lo,3,dgqb) { ritar ut frekvensband i diagram } klocka=frac(date()) { definierar klockslag just nu } kl1720=gt(klocka,0.722) { testar om klockan är senare än 17:20 } köp1=and(köpläge,långtrend) { testar om köpläge och långtrend SANT samtidigt } köp2=and(köp1,ej_innehav) { testar om köp1 och ej_innehav SANT samtidigt } köp3=and(köp2,kl1720) { testar om köp2 och kl1720 SANT samtidigt } mult(köp3,5) { multiplicerar köpsignal SANT eller FALSKT med 5 } {@A(0,OMX Stock )} { definition av extra objekt med OMXS30 i dagsupplösning }
Scriptförutsättningar - parentesdjup Tilldelade namn ex: värde:=100 summa:=Add(värde,35) Minnesreferenser ex: värde:=100 summa=Add(värde,35) Viktigt att minnesreferenser omsluts av intradayprefix om sådant används
Upplösning – dags till intraday Script utan intradayprefix körs i dagsupplösning Larm kan triggas när som helst under dagen Script med intradayprefix körs i låst upplösning Du kan ha vilken upplösning som helst i chart Intradayprefix skrivs: i5(slutvillkor eller minnesreferenser)
Vi definierar prisscript och antalscript Köp på aktuell säljkurs + 0,25 kr add(s,0.25) Handla för belopp dividerat med säljkurs i1( { intradayprefix 1 minutupplösn } insats=ScrPar(21) { läser in värde från Indata script } köpantal=Int(Div(insats,s)) { Dividerar med säljkurs } innehav=Portfolio(v) { mäter innehav } övermål=Ge(innehav,köpantal) { testar om innehav större än mål } slutantal1=If(övermål,0,SUB(köpantal,innehav)) add(slutantal1,0) )
Extra kontrollscript Spärra orderskurar vid misslyckad köporder tidspärr:=1 lt1=LastTrade(B,D) minSedanKöp=mult(sub(date(),lt1),1440) gt(minSedanKöp,tidspärr)
Säljscript Kurs över övre frekvensband Innehav finns Klockan är senare än 17:20
Sida att ladda ner kursmaterial www.autostock.se/scriptkurs
Triggerscriptet för säljsidan omxs30=cmpref(c,0,a) { läser in kurs för OMXS30 } innehav=gt(portfolio(v),0) { testar om innehav större än noll } hi=freq(omxs30,30,10000.3,h) { definierar övre frekvensband – används som säljnivå } klocka=frac(date()) { läser in klockslag } kl1720=gt(klocka,0.722) { testar om kl senare än 17:20 } sälj1=gt(omxs30,aref(hi,1)) { testar om OMXS30 större än frekvensband igår } draw(hi,2,rqb) { ritar ut övre frekvensband i diagram } draw(mult(sälj1,5),3,rsbf) { ritar ut säljsignal i diagram även utan innehav } sälj2=and(and(sälj1,innehav),kl1720) { kombinerar ihop tre villkor med AND } mult(sälj2,5) { multiplicerar säljsignal SANT eller FALSKT med 5 } {@A(0,OMX Stock )} { definierar extra objekt med OMXS30 i dagsupplösn }
Antal- och prisscript Sälj på aktuell köpkurs - 0,25 kr sub(b,0.25) Sälj hela innehavet portfolio(v)
Generella regler – prefix för olika scripttyper Scriptens namn kan anges med olika prefix för att lättare hålla reda på vilka script som gör vad. Programmet visar dessutom endast script med rätt prefix i olika listor, tex i dialogen för ordermodeller. De prefix som finns är sammanställda nedan: · sl) betyder signalscript eller triggerscript · va) Volume Amount, betyder antal i en order, i dagligt tal kallat antalscript · vl) Value Limit, betyder pris i en order, i dagligt tal kallat prisscript · xk) Extra Kontrollscript, ett script som kan agera som blockering för en ordermodell när vissa förutsättningar inte är uppfyllda, tex att en viss tid gått sedan förra orderförsöket osv. Ett kontrollscript ska alltid lämna SANT för att ordern ska skickas. · g) Grafiska script, dessa har endast till uppgift att rita något i ett diagram. · st) Stega-script, returvärdet från detta bestämmer vilken nästa sekvens i en ordermodeller blir som exekveras · sy) Synka-script, returvärdet från detta bestämmer vilken sekvens en ordermodell börjar på vid anslutning.
Exempel på scriptnamn sl) Utbildningsmodell köp Scriptkod.....
Best practice – skriva och ordermodeller 1. Lägg minnesreferenser samlat längst ned i scriptet 2. Använd variabelnamn som inte heter exakt som en scriptfunktion 3. Använd inte variabelnamn som är delnamn av andra variabler 4. Vid simulering av modell, köp på säljkurs och sälj på köpkurs för bästa precision (index = välj Senast betalt ) 5. Ofta är det enklast att använda flera parallella ordermodeller med 1 sekvens i varje 6. Studera formelsammanställningen ofta – www.autostock.se/NATscriptref 7. Tänk på att ta bort alla intradayprefix om du simulerar utan animering (endast EOD-data) 8. Lägg ut script i simulatorprojekt i arbetsytan med Full Editor för enkel åtkomst 9. Känd bugg 1: Simulering måste avslutas innan midnatt – annars ingen rapport 10. Känd bugg 2: Projektfiler får felkod efter midnatt = omstart av både AT och Analyzer.exe lösning
Generella regler – delnamn Delnamn av variabler ej tillåtet Ex på fel: köp=and(villkor1,villkor2) köp2=and(köp,villkor3) Rätt lösning: köp1=and(villkor1,villkor2) köp2=and(köp1,villkor3)