Allmänt meddelande

Collapse
No announcement yet.

Att bygga 4 parallella ordermodeller

Collapse
X
 
  • Filter
  • Klockan
  • Show
Clear All
new posts

  • Att bygga 4 parallella ordermodeller

    Vi får ofta frågor om parallella ordermodeller och hur man bäst bygger ett system som kan ta position åt vilket håll som helst när som helst. Man vill alltså inte ha någon begränsning om vilka positioner som kan tas i ett givet tillfälle.

    Vår lösning är att använda 4 parallella ordermodeller med 1 sekvens i varje som är loopad tillbaka till sig själv. De 4 modellerna har följande uppgifter:

    Modell 1: Köporder

    Modell 2: Blankorder

    Modell 3: Stäng köpt position

    Modell 4: Stäng blankad position



    Som exempel kan vi ta tex OMX Raptor, som är byggd med parallella modeller. Version 2.0 har fått en extra finess där vi lagt till en andra sekvens i köp- resp blankmodellen. De nya sekvensernas uppgift är att lägga ut en order i marknaden nästan direkt efter att position tagits, detta för att snabbt kamma hem vinst för hela eller delar av positionen. Kunden kan alltså bestämma hur många terminskontrakt som ska säljas vid en viss vinst.


    Vi dissekerar Raptor 2.0:


    Modell 1: Köp x antal kontrakt


    Sekvens 1: Köp
    Triggerscript: sl) Raptor Long (som får signal från vårt centrala signalsystem när Raptor larmar)
    Antalscript: Raptor köpantal

    målantal:=GetGVar(20) {hämtar önskat målantal från cell 20 som programmerats av konfigscriptet sl) Raptor konfig }
    innehav:=Portfolio(v)
    i1(
    övermål=Ge(innehav,målantal)
    slutantal1=If(övermål,0,SUB(målantal,innehav))
    slutantal1)


    Prisscript: vl) Aktuell säljkurs + 0,25 punkter

    Extra kontrollscript: xk) Delay order

    xk) tidspärr:=1
    lt1:=LastTrade(B,D)
    lt2:=LastTrade(S,D)
    minSedanKöp:=Mult(Sub(Date(),lt1),1440)
    minSedanSälj:=Mult(Sub(Date(),lt2),1440)
    OkAttHandla:=And(Gt(minSedanKöp,tidspärr),Gt(minSedanSälj,tidspärr))
    OkAttHandla

    Scriptet kollar om det gått minst 1 minut sedan förra ordern postades och ledde till avslut. Scriptet kollar både köp- och säljorder. När minst 1 minut gått blir scriptet SANT och order tillåts att skickas om triggerscriptet löser ut.


    Sekvens 2: Posta takeprofit-order efter viss fördröjning

    Triggerscript: sl) Raptor place takeprofitorder
    tidspärr:=1
    lt1:=LastTrade(B,D)
    lt2:=LastTrade(S,D)
    minSedanKöp:=Mult(Sub(Date(),lt1),1440)
    minSedanSälj:=Mult(Sub(Date(),lt2),1440)
    delay_ok:=And(Gt(minSedanKöp,tidspärr),Gt(minSedanSälj,tidspärr))
    Mult(delay_ok,1)


    Scriptet ovan är i grund och botten exakt samma som xk)-scriptet men används här som trigger i stället. Den enda uppgiften är att mäta tiden sedan köpordern i sekvens 1 postades. När tiden gått (1 minut) skickas en säljorder med det antal kontrakt som användaren vill ska läggas ut i marknaden för sälj om kursen når takeprofit-nivån. Att skicka ordern direkt gör att vi hamnar först i orderkön.

    Antalscript: va) OMX Raptor takeprofit

    takeprofitantal:=GetGVar(23) {antal kontrakt som ska läggas ut i säljorder i marknaden hämtas från cell 23 som programmerats av konfig-scriptet}
    innehav:=Abs(Portfolio(v))
    i1(
    orderantal=Mn(takeprofit,innehav) {kontroll görs att aktuellt innehav inte är mindre än det antal som angetts som takeprofit. Detta för att inte kunna få en oönskad position åt fel håll}
    orderantal)

    Prisscript: vl) OMX Raptor takeprofit long

    takeprofitprice:=GetGvar(22) {önskad vinstnivå för takeprofit hämtas från cell 22 som programmerats av konfig-scriptet}
    Add(LastTrade(B,P),takeprofitprice)

    Scriptet adderar helt enkelt senaste inköpspris med önskad takeprofit-nivå och levererar därmed det pris som säljordern ska ha.


    När denna order postats loopar hela ordermodellen tillbaka till sekvens 1. Eftersom vi nu har ett innehav och triggerscriptet OMX Raptor long känner det kommer inga fler order att skickas förrän nästa signal. I triggerscriptet finns en motsvarande fördröjning som gör att det inte larmar inom ett par minuter oavsett innehav, och därmed "räcker" signalsystemets duration inte till fler signaler. Vi har ett innehav på målantal, med en säljorder i marknaden på önskat antal kontrakt som ska säljas vid takeprofit.

    Konfig-scriptet ser ut så här:

    köpantal:=2
    blankantal:=-2
    takeprofit:=2.5
    antaltp:=2
    i1(
    SetGVarIf(köpantal,20,1)
    SetGVarIf(blankantal,21,1)
    SetGVarIf(takeprofit,22,1)
    SetGVarIf(antaltp,23,1)
    )


    Man kan alltså tex sätta köpantal:=4 och antaltp:=3 så kommer 4 kontrakt att köpas vid köpsignal och 3 av dessa läggs ut i en säljorder på 2,5 punkter högre pris. Det fina med antalscripten är att de beräkar rätt antal kontrakt som behöver köpas för att hamna på målantal - oavsett aktuellt innehav. Om man tex ligger blankad med -4 kontrakt när en köporder triggas med målantal 2 kontrakt så kommer scriptet själv att räkna ut att 6 kontrakt behöver köpas.


    Vi nöjer oss med att beskriva den första av de 4 parallella ordermodellerna till att börja med, så utvecklar vi det hela i takt med att frågor och synpunkter kommer in.


  • #2
    Verkligen snyggt jobbat Rikard ,

    ...man undrar bara om det spöregnar nere på Västkusten eftersom du gör en så ambitiös genomgång av detta område med orderläggning med åtföljande "fiskeorder" som jag brukar kalla det.
    Dock en stilla undran, under sekvens 2 skapar du denna säljorder bara det gått minst 1 minut från senaste köp/säljorder. Borde du inte också komplettera med att kolla att man verkligen fått rätt målantal på innehavet innan säljordern läggs ut?

    ...som i mitt fall, om man nu är lite snål, när man lägger köpordern, så kanske inte köpordern går igenom på första försöket utan först då man försökt någon minut senare (och dessförinnan makulerat den tidigare lagda köpordern).

    Hälsn
    Torsten

    Comment


    • #3
      Hähä, nåt regn har vi inte fått men det skulle behövas nu!

      Man kan ju kolla om innehavet stämmer med önskat målantal, men det är ju inte säkert att man nånsin får hela det antalet fyllt och då skulle modellen "fastna". Det görs i alla fall kontroll nu om det verkliga antalet är lika med önskat antal i takeprofit. Om inte så blir det det minsta värdet av de två som postas, dvs aldrig mer än det antal man verkligan har position på.

      Nästa steg är väl att gå vidare med de andra 3 modellerna och förklara hur de fungerar ihop. Avvaktar ev frågor först.

      Comment


      • #4
        Rikard,
        jag har idag börjat köra med de nya scripten i en test-maskin win xp med at8 och första trading-signalen gick bra.

        Jag är tvungen att köra mot produktionsdepån då scripten använder portfolio(v). Det kom en trade-signal, sedan stoppade scriptet, inget mer, som det ska vara tror jag...

        Har du läst mitt mail hur sälj-scriptet ska vara konfigurerad? eller du kanske kan förklara nedanstående.

        När vi gör köp kontrolleras om innehav är mindre än målantal,
        ex köp initieras
        innehav 0, målantal 3
        nästa insamling efter 10 sekunder
        innehav 2, målantal 3
        nästa insamling efter 10 sekunder
        innehav 3, målantal 3

        Nu är inte innehav 3 mindre än målantal 3 och scriptet slutar snurra

        MEN hur blir det vid BLANKNING?

        sl) Omx Sarlacc - Sälj Trade - Rosa - Okrypterat
        innehav:=Portfolio(v)
        målantal:=GetGVar(101)
        sälj1:=And(mitt_script,Lt(innehav,målantal)) <----- negativt tal
        i15(sälj1)


        ex sälj initieras
        innehav 0, målantal -3
        nästa insamling efter 10 sekunder
        innehav -2, målantal -3
        nästa insamling efter 10 sekunder
        innehav -3, målantal -3

        Behöver man ändra till
        Gt(innehav,målantal)) ???


        Last edited by jorgeng; 2010-07-06, 08:29.

        Comment


        • #5
          Det stämmer, scriptet ska ju kolla om man nått målantal och i så fall sluta larma. Det betyder att för blankning blir villkoret för att få signal att innehavet är större än målantalet, eller rättare sagt "inte lika mycket negativt" som målantal:

          sälj1:=And(mitt_script,Gt(innehav,målantal))

          Comment


          • #6
            Ursprungligen postat av Rikard Nilsson Visa inlägg
            Det stämmer, scriptet ska ju kolla om man nått målantal och i så fall sluta larma. Det betyder att för blankning blir villkoret för att få signal att innehavet är större än målantalet, eller rättare sagt "inte lika mycket negativt" som målantal:

            sälj1:=And(mitt_script,Gt(innehav,målantal))

            Bra, det var bara den sista kontrollfrågan jag hade.

            Rätt ambitiöst upplägg utav denna tråden med 4 parallella ordermodeller, tyvärr tror jag inte det går fram riktigt hur man ska göra det.

            Jag tror jag fått till fungerande logik, såg att du kontrollerar om både köp eller sälj skett, så sker inte i det förslag jag fick från dig, men det kommer säkert att fungera.

            Last edited by jorgeng; 2010-07-06, 09:48.

            Comment


            • #7
              Jo det blir ganska omfattande eftersom det är 4 modeller som ska "spela ihop" i ett system. Det svåra är kanske att greppa den övergripande logiken, men i princip går det ut på att varje triggerscript bara tillåts signalera när innehavet stämmer med villkoren:

              Triggerscript:

              Ta lång position: Le(innehav,0)

              Ta kort position: Ge(innehav,0)

              Stäng köpt position: Gt(innehav,0)

              Stäng kort position: Lt(innehav,0)


              Lägg märke till skillnade mellan Le och Lt, där köp tillåts om innehavet är noll eller mindre, dvs blankad position redan finns.


              Det andra scriptet kollar tiden sedan senaste order och det blir lite enklare om man slår ihop kontrollen att det har gått minst 1 minut sedan både köp och sälj, då kan man använda samma script för både köpta och blankade ordrar = lite mindre att hålla reda på.

              Comment


              • #8
                Ursprungligen postat av Rikard Nilsson Visa inlägg
                Jo det blir ganska omfattande eftersom det är 4 modeller som ska "spela ihop" i ett system. Det svåra är kanske att greppa den övergripande logiken, men i princip går det ut på att varje triggerscript bara tillåts signalera när innehavet stämmer med villkoren:

                Triggerscript:

                Ta lång position: Le(innehav,0)

                Ta kort position: Ge(innehav,0)

                Stäng köpt position: Gt(innehav,0)

                Stäng kort position: Lt(innehav,0)


                Lägg märke till skillnade mellan Le och Lt, där köp tillåts om innehavet är noll eller mindre, dvs blankad position redan finns.


                Det andra scriptet kollar tiden sedan senaste order och det blir lite enklare om man slår ihop kontrollen att det har gått minst 1 minut sedan både köp och sälj, då kan man använda samma script för både köpta och blankade ordrar = lite mindre att hålla reda på.

                Hmm, det ovan ställde nog till det i logiken.

                Idag var första dagen med full produktion med 4 parallella ordermodeller för Omx Sarlacc. Visserligen körde vi med skarpt målantal i virtual box win xp med at8 men det är så likt man kan komma produktion.

                Fördelarna är flera med 4 parallella ordermodeller:
                I Egna Larm syns bara ett larm per trade, tidigare hade jag stega-script efter ordinarie trade för att stänga ute ny trade-signal.

                En fördel till är att scriptet jobbar på var 10:e sekund tills det får det antal kontrakt som det vill ha. Är trade-signalen aktiv så jobbar scriptet på hela tiden. Idag fick scriptet sitt målantal med en gång så xk-scriptet behövde aldrig aktiveras.

                Härnäst väntar testning med 2 ordermodeller till för Omx Sarlacc Version 6 som kommer produktionssättas efter semestrarna. Omx Sarlacc kommer då innehålla 6 parallella ordermodeller.

                Om intresse finns kan jag göra en pdf med at8 screenshot här i forumet som beskriver utförligt hur man går tillväga för att bygga 4 parallella ordermodeller.

                För att hålla egen koll har jag gjort ett excel-ark med alla sl-script, xk-script, va-script, konfig-script, lösenords-script mm.

                Last edited by jorgeng; 2010-07-07, 16:37.

                Comment


                • #9
                  ScreenS PDF Orderm

                  Vore jättebra om du kunde lägga upp PDF om hur bygga upp ordermodellerna, tycker jag.
                  Dina instruktioner till WAMPA var väldigt tydliga o instruktiva

                  Comment


                  • #10
                    Ursprungligen postat av Hong Kong Ola Visa inlägg
                    Vore jättebra om du kunde lägga upp PDF om hur bygga upp ordermodellerna, tycker jag.
                    Dina instruktioner till WAMPA var väldigt tydliga o instruktiva
                    Tack.
                    Vi har nu produktionssatt Omx Sarlacc Version 6 med parallella ordermodeller och det fungerar bra.

                    Vid närmare eftertanke kanske det är bättre att Autostock tar fram ett färdigt kompendie hur de som vill bygga parallella ordermodeller ska göra än att vi på Rankor System gör kompendiet, vad tycker du Rikard?

                    Comment


                    • #11
                      ...nu gör du mig besviken Jörgen.

                      Jag har verkligen sett fram emot att ta del av din beskrivning hur man arbetar med de fyra parallella ordermodellerna.
                      Forum är väl en gemensam plattform där vi alla ska försöka att hjälpa varandra och åtminstone jag tycker att Rikard redan drar ett tungt lass?

                      Hälsn
                      Torsten

                      Comment


                      • #12
                        Ursprungligen postat av Torsten Visa inlägg
                        ...nu gör du mig besviken Jörgen.

                        Jag har verkligen sett fram emot att ta del av din beskrivning hur man arbetar med de fyra parallella ordermodellerna.
                        Forum är väl en gemensam plattform där vi alla ska försöka att hjälpa varandra och åtminstone jag tycker att Rikard redan drar ett tungt lass?

                        Hälsn
                        Torsten
                        Jag pratade med Rikard via mobilen igår kväll och förutsättningarna kommer ju att ändras när Autostock Trader 9 kommer till hösten. Rikard berättade att till nästa version kommer Autostock med inspelad video som berättar hur man bla bygger parallella ordermodeller.

                        Har inte du som andelsägare i Autostock fått information av Rikard hur man bygger parallella ordermodeller?

                        Comment


                        • #13
                          Vi är nog många som redan nu skulle vilja komma igång med säkra automatiska ordermodeller inför höstens nyheter
                          Triggerskripten har nog de flesta ideer o kunskap om, sen tar det stopp hur man går vidare pga dålig info så vi är nog en del som skulle bli tacksamma om det kom ut en PDF redan nu.
                          Om det kommer via RANKOR ser jag som kund inget konstigt med då det är ett forum för användare där vi alla ska hjälpa varandra

                          Comment


                          • #14
                            Tanken med den här tråden är just att diskutera hur man bygger med parallella modeller. Om Jörgen vill publicera en PDF med sammanfattning från den diskussionen ser vi inga som helst problem med det, det är bara bra. Vi kommer som sagt att släppa ett antal instruktionsvideos i samband med nya program-releasen, men fram tills dess diskuterar vi gärna på forumet.
                            Grundtekniken med parallella modeller beskrivs ju ovan, och vi svarar gärna på fler frågor om det bara kommer några så att vi kan utveckla det vidare.

                            Comment


                            • #15
                              Har provat att få till en köp med åtföljande takeprofit men får error på köpskriptet inkl. mitt skript.

                              sl) breakout 10 Grön Köp takeprofit

                              period1:=eqv(int(ref(d,1)),int(d))
                              gräns:=And(hhv(Not(period1),2),period1)
                              i60(
                              hi=Find(gräns,20,Aref(h,1),1)
                              lo=Find(gräns,20,Aref(l,1),1)
                              signal1=And(Le(Aref(c,1),hi),Gt(c,hi))
                              signal2=And(signal1,period1)

                              målantal:=GetGVar(20) {hämtar önskat målantal från cell 20 som programmerats av konfigscriptet sl) Raptor konfig }
                              innehav:=Portfolio(v)
                              i1(
                              övermål=Ge(innehav,målantal)
                              slutantal1=If(övermål,0,SUB(målantal,innehav))
                              and:=(signal2,slutantal1))

                              vl) Aktuell säljkurs + 0,25 punkter

                              xk) tidspärr:=1

                              lt1:=LastTrade(B,D)
                              lt2:=LastTrade(S,D)
                              minSedanKöp:=Mult(Sub(Date(),lt1),1440)
                              minSedanSälj:=Mult(Sub(Date(),lt2),1440)
                              OkAttHandla:=And(Gt(minSedanKöp,tidspärr),Gt(minSedanSälj,tidspärr))
                              OkAttHandla



                              sl) Breakout place takeprofitorder

                              tidspärr:=1
                              lt1:=LastTrade(B,D)
                              lt2:=LastTrade(S,D)
                              minSedanKöp:=Mult(Sub(Date(),lt1),1440)
                              minSedanSälj:=Mult(Sub(Date(),lt2),1440)
                              delay_ok:=And(Gt(minSedanKöp,tidspärr),Gt(minSedanSälj,tidspärr))
                              Mult(delay_ok,1)

                              va) Breakout takeprofit

                              takeprofitantal:=GetGVar(23)
                              innehav:=Abs(Portfolio(v))
                              i1(
                              orderantal=Mn(takeprofit,innehav)
                              orderantal)

                              vl) Breakout takeprofit long

                              takeprofitprice:=GetGvar(22)
                              Add(LastTrade(B,P),takeprofitprice)

                              sl) Breakout takeprofit konfig

                              köpantal:=2
                              blankantal:=-2
                              takeprofit:=2.5
                              antaltp:=2
                              i1(
                              SetGVarIf(köpantal,20,1)
                              SetGVarIf(blankantal,21,1)
                              SetGVarIf(takeprofit,22,1)
                              SetGVarIf(antaltp,23,1)
                              )

                              Comment

                              Working...
                              X