Allmänt meddelande

Collapse
No announcement yet.

Dynamiskt antal så att gearingen blir rätt

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

  • Dynamiskt antal så att gearingen blir rätt

    Hej, jag funderar på att bygga ett antalscript till min Legato OMX så att antal minifutures som köps styrs av aktuell gearing på instrumentet. Vad jag vill uppnå är att rätt antal minifutures köps så att total exponering blir rätt - automatiskt.

    Ett exempel, jag har 100 tkr i depån och jag vill ha en gearing 2.5 då position tas. Om Index ligger på 1412 och priset (sell) på minifuturen ligger på 324,00 ska antalet bli 100000x2.5/((1/324)/(1/1412)) = 57365 kr -> 177 instrument (57365/324)

    Tänkt målgearing lägger man som Screen-parameter i fält 32.

    Kommer detta fungera?



    va) Dynamiskt Antal

    MålGearing:=ScrPar(32)
    PortföljVärde:=cash(t)
    index:=cmpref(c,0,A)
    i1(
    Gearing=div(div(1,s),div(1,index))
    Position=mult(PortföljVärde,div(MålGearing,Gearing))
    Antal=int(div(Position,s))
    Antal
    )


    {@A(0,OMX Stock )}
    Last edited by Christer; 2015-12-17, 19:14.

  • #2
    Går det att använda index. Jag trodde emittenterna baserade priset på terminen? Särskilt vid utdelningar. Önskad hävstång bör vara lägre än minifuture som handlas (i alla fall så att ingen belåning behövs). Scriptet förutsätter ingen belåning och inga innehav, dvs cash(t)=cash(n). Tänk på att Nordnet kan kräva säkerhetskrav även på börshandlade produkter, typ 5%. Någon med erfarenhet som kan verifiera.

    Comment


    • #3
      Det är terminsbaserat men brukar ju följa index på nån punkts diff max. Utom under utdelningsperioden mars/april, då kan det lätt bli 20 punkter diff mot index så det kanske man får ta hänsyn till. Kör man med lägre häv så är nog inte ens 20 punkter något problem.

      Comment


      • #4
        Du har rätt, Henric! Önskad hävstång ("MålGearing") måste vara mindre än hävstången i vald minifuture (ingen belåning i portföljen), samt att ingen annan handel sker i depån.

        Stämmer själva syntaxen i scriptet? Fungerar det med extra-objekt i antalscript?

        Comment


        • #5
          Jag skulle ändra följande:

          Antal=int(div(Position,s))
          Antal

          till:

          Antal=int(div(Position,s))
          add(0,Antal)


          så att scriptet avslutas med returvärde från en funktion. Tror iofs det fungerar ändå, men alltid bra att vara säker.

          Comment


          • #6
            OK, tack! Jag implementerar detta ikväll!

            Comment


            • #7
              Ursprungligen postat av Rikard Nilsson Visa inlägg
              Det är terminsbaserat men brukar ju följa index på nån punkts diff max. Utom under utdelningsperioden mars/april, då kan det lätt bli 20 punkter diff mot index så det kanske man får ta hänsyn till. Kör man med lägre häv så är nog inte ens 20 punkter något problem.

              Ja, det fungerar bra. Bara lite info. Vid högre häv blir skillnaden större. I ett normalt ränteläge kommer det att skilja mer. Annars skulle det finnas ett riskfritt arbitrage.

              Comment


              • #8
                Hej, jag fick en Short Entry-signal kl 17.21 idag i Legato OMX. Jag noterar att mitt dynamiska Antal-script verkar fungera. Jag fick exakt netto-gearingen 2.5. Perfekt!

                Detta är det slutliga scriptet:


                va) Dynamiskt Antal


                { Dynamiskt antal }

                MålGearing:=ScrPar(32)
                PortföljVärde:=cash(t)
                index:=cmpref(c,0,A)
                i1(
                Gearing=div(div(1,s),div(1,index))
                Position=mult(PortföljVärde,div(MålGearing,Gearing))
                Antal=int(div(Position,s))
                add(0,Antal)
                )


                {@A(0,OMX Stock )}
                Last edited by Christer; 2015-12-21, 09:40.

                Comment


                • #9
                  Idag vände Legato OMX från Short till Long. Dessvärre så räknade antalscriptet ut antal Minifutures Long baserat på disponibelt belopp innan försäljningen av Short-positionen. Jag är osäker på om det beror på mitt script (ovan) eller om det beror på trigger-scripten?

                  Man kan tänka sig att man borde förskjuta köpet några sekunder från försäljningen så att disponibelt belopp hinner justerad. Eller finns det något annat enkelt sätt?

                  Comment


                  • #10
                    Hm, du kanske kan lägga till cash(a) till disponibelt belopp, så får du med dig värdet av öppen position också.

                    Comment


                    • #11
                      Eller, om du inte handlar andra saker på kontot, lägg till ett villkor i slavmodellen för både köp Long/Shrt att cash(a) ska vara noll. Då köps inget nytt innan den andra positionen är såld och kontot uppdaterats.

                      Comment


                      • #12
                        Ursprungligen postat av Rikard Nilsson Visa inlägg
                        Eller, om du inte handlar andra saker på kontot, lägg till ett villkor i slavmodellen för både köp Long/Shrt att cash(a) ska vara noll. Då köps inget nytt innan den andra positionen är såld och kontot uppdaterats.

                        Tack för snabbt svar! Det är något sådant som jag tror skulle behövas. "Slavmodellen" då menar du handelsmodellerna som jobbar mot index, eller hur?

                        I egna modeller har jag tidigare gjort så att jag skriver innehavd position i en global variabel som sedan kan läsas av av slavmodellen. Om jag implementerar en sådan funktion, finns det då risk att Long-signalen hinner "slockna" innan Short sålts av och att Long Entry kan köras igen och att ett köp släpps igenom? Eller kanske är det robustare att titta på cash(a) trots allt?
                        Last edited by Christer; 2015-12-21, 23:42.

                        Comment


                        • #13
                          Om det är glest mellan avsluten ger cash(a) värdet baserat på senaste avslut. Jag skulle använda cash(a)=0 eller spara värdet i en cell.
                          Position=if(and(gt(portfolio(v),0),gt(b,0)),mult(portfolio(v),b),if(eqv(cash(a),0),0,GetGvar(100)))
                          SetGvarIf(Position,100,1)

                          Comment


                          • #14
                            Nja, jag tänkte i slavmodellerna som köper ETPer. Där lägger man till ett villkor som testar om cash(a) är noll. Signalen från indexscripten ligger i en global cell, och normalt får tex Sälj Bear signal samtidigt som Köp Bull, och genom att testa även cash(a) kan man vara säker på att Sälj Bear säljer sitt innehav först. Köp Bull väntar några sekunder tills kontot är uppdaterat och cash(a) har blivit noll. Först då blir villkoret sant och köp sker. Signalen ligger fortfarande i den globala cellen.

                            Visst kan man göra det på andra sätt, tex låta Bull-sidan ha koll på Bear-sidans innehav via en annan global cell, och vice versa. Men jag tror det blir onödigt mycket celler.

                            Så här skulle Bull Köp-scriptet kunna se ut:

                            { datum 150903 }
                            i1(
                            signal=eqv(getgvar(880),11)
                            innehav=le(portfolio(v),0)
                            insats=scrpar(21)
                            trade_power=and(gt(cash(t),insats),eqv(cash(a),0))
                            samma_dag=eqv(int(date()),int(d))
                            buy1=and(and(signal,innehav),trade_power)
                            buy2=and(buy1,samma_dag)
                            mult(buy2,10)
                            )

                            Comment


                            • #15
                              Så, nu har jag lagt in modifierad trade_power på ETP Long Entry samt ETP Short Entry. Men, som sagt, detta förutsätter att ingen annan handel sker i depån.

                              Stort tack för hjälpen Henric och Rikard!
                              Last edited by Christer; 2015-12-22, 16:06.

                              Comment

                              Working...
                              X