Allmänt meddelande

Collapse
No announcement yet.

Simulering av terminer under längre perioder

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

  • Simulering av terminer under längre perioder

    Eftersom att rullning inte fungerar har det varit svårt att simulera terminer under längre perioder. I praktiken sker ett manuellt köp och försäljning för att nolla den gamla terminen och ta position i den nya. I gamla AT gick det att bygga en sammansatt termin. Den nya terminen skarvades med den sammansatta en gång i månaden.

    Genom att skapa en virtuell sammansatt termin går det att simulera terminshandel i AutoTrader under längre perioder än en månad. Det fungerar genom att två ordermodeller läggs till projektet. Dessa ordermodeller väljer aktuell termin från en lista av terminer och gör terminsbyten. Listan utökas efterhand som terminerna förfaller. För att särskilja vilken termin som ska handlas används crcid().

    Det är "betascript" och ingen patentlösning. Synpunkter,förslag och eventuella problem är välkomna.


    De ordinarie ordermodellerna måste ha tillägget eqv(crcid(),GetGvar(100). Tex,
    ……
    köp1=and(signal, le(portfolio(v),0))
    köp2=and(köp1,eqv(crcid(),GetGvar(100)))

    De två sl)-scripten nedan läggs in i varsin ordermodell och ansluts till projektet. Byte sker automatiskt med inlagda datum för terminsbyte. Direkt efter sista möjliga tid för ordinarie signal sker en uppdatering av aktuell termin. Om modellen ligger lång tar köpscriptet(ordermodellen) position i den nya terminen och samtidigt tar säljscriptet(ordermodellen) exit av den gamla. Om modellen ligger blankad tar sälscriptet(ordermodellen) en kort position i den nya terminen och samtidigt tar köpscriptet(ordermodellen) exit av den gamla blankade positionen.

    Köpscript terminsbyte:
    {Sammansatt Termin: Köp nya och cover blankad gamla}
    i1(
    idag=eqv(int(d),int(date()))
    stängning=le(mult(1440,sub(market(c),frac(date()))),7) {efter sista handelstid i signalmodellerna}
    O4F=and(and(and(eqv(yearnumber(),2014),eqv(monthnumber(),5)),eqv(dayofmonth(),15)),stängning)
    O4G=and(and(and(eqv(yearnumber(),2014),eqv(monthnumber(),6)),eqv(dayofmonth(),18)),stängning)
    O4H=and(and(and(eqv(yearnumber(),2014),eqv(monthnumber(),7)),eqv(dayofmonth(),17)),stängning)
    O4I=and(and(and(eqv(yearnumber(),2014),eqv(monthnumber(),8)),eqv(dayofmonth(),14)),stängning)
    SetGvarIf(1391064143,100,O4F)
    SetGvarIf(1395367544,100,O4G)
    SetGvarIf(1484249413,100,O4H)
    SetGvarIf(1505080178,100,O4I)
    SetGvarIf(1391064143,100,eqv(GetGvar(100),0))

    quant=and(and(idag,not(stängning)),eqv(crcid(),GetGvar(100)))
    SetGvarIf(portfolio(v),101,quant)

    covershort=and(not(eqv(crcid(),GetGvar(100))),lt(portfolio(v),0))
    roll=and(eqv(crcid(),GetGvar(100)),lt(portfolio(v),GetGvar(101)))
    and(and(or(covershort,roll),idag),stängning)
    )

    Säljscript Terminsbyte:
    {Sammansatt Termin: blanka nya och sälj long gamla}
    i1(
    idag=eqv(int(d),int(date()))
    stängning=le(mult(1440,sub(market(c),frac(date()))),7) {efter sista handelstid i signalmodellerna}

    O4F=and(and(and(eqv(yearnumber(),2014),eqv(monthnumber(),5)),eqv(dayofmonth(),15)),stängning)
    O4G=and(and(and(eqv(yearnumber(),2014),eqv(monthnumber(),6)),eqv(dayofmonth(),18)),stängning)
    O4H=and(and(and(eqv(yearnumber(),2014),eqv(monthnumber(),7)),eqv(dayofmonth(),17)),stängning)
    O4I=and(and(and(eqv(yearnumber(),2014),eqv(monthnumber(),8)),eqv(dayofmonth(),14)),stängning)
    SetGvarIf(1391064143,100,O4F)
    SetGvarIf(1395367544,100,O4G)
    SetGvarIf(1484249413,100,O4H)
    SetGvarIf(1505080178,100,O4I)
    SetGvarIf(1391064143,100,eqv(GetGvar(100),0))

    quant=and(and(idag,not(stängning)),eqv(crcid(),GetGvar(100)))
    SetGvarIf(portfolio(v),101,quant)

    exitlong=and(not(eqv(crcid(),GetGvar(100))),gt(portfolio(v),0))
    roll=and(eqv(crcid(),GetGvar(100)),gt(portfolio(v),GetGvar(101)))
    and(and(or(exitlong,roll),idag),stängning)
    )

    Va) Terminsbyte_Köp:
    instrument=eqv(crcid(),GetGvar(100))
    orderantal=if(instrument,add(GetGvar(101),portfolio(v)),abs(portfolio(v)))

    Va) Terminsbyte_Sälj:
    instrument=eqv(crcid(),GetGvar(100))
    orderantal=if(instrument,add(mult(GetGvar(101),-1),portfolio(v)),abs(portfolio(v)))
    Last edited by Henric; 2014-11-17, 16:40.

  • #2
    Mycket bra att du lägger ut en potentiell lösning på detta Henric! Har inte testat detta själv ännu, men om det fungerar så är det precis vad jag söker!

    Nån som testat och har nån åsikt?

    Det förordas ju ibland att man kan simulera mot index istället, men då kan man ju inte använda sig av volym i scripten. Därför blir det rätt värdelöst för min del. Förstår inte riktigt det Henric skriver om listan som utökas med förfallna terminer, men det får jag väl återkomma till när jag testat.

    Comment


    • #3
      Listan av terminer som ingår i körningen är de som finns i scripten. För att det ska fungera behövs crcid() för varje termin(numerisk identifiering av instrument). Crcid() finns inte innan terminen är upplagt i programmet.

      Det blir lite meck i början innan de historiska terminerna är upplagda. Sedan är det bara att fylla på varje månad.

      Steg vid ny termin:
      1. Kolla upp crcid()
      2. Lägg till ett nytt tilldelat namn med datum då du vill att terminen ska börja handlas(normalt ons-tors samma vecka som föregående terminen förfaller), t.e.x.

      O4I=and(and(and(eqv(yearnumber(),2014),eqv(monthnumber(),8)),eqv(dayofmonth(),14)),stängning)

      3. Lägg till en rad som används för att välja crcid()=termin med datum satt i steg två, t.e.x.
      SetGvarIf(1505080178,100,O4I)

      4. Bekräfta att kursuppdatering är gjord för de terminer som är inkluderade.

      Om modellen kan hålla position över natten sker ett automatiskt terminsbyte. Annars väljs nästa termin vid ny signal.

      Det vore bra om någon testade för feedback. Eftersom att jag har lagt in crcid() för några terminer går det snabbare att använda dessa för att verifiera. För att testa går det att köra en mycket enkel modell.

      Comment


      • #4
        Då jag alltid går ut marknaden vid handelsdagens slut så behöver jag ju inte köpa och sälja dvs ha villkoren i sl scripten utan jag nöjer mig med att ha villkoren i antalsscriptet dvs va scriptet och koppla detta till alla ordermodeller som köper eller säljer från innehav = 0.

        Fungerar bra. I Simuleringen så bockar man för "Kör som samtidigt kopplade". Det hela tar sin lilla tid men terminsbytet går ju med automatik.
        Jag har antalet terminer som skall handlas i scrpar(25).
        OBS bytet sker mellan onsdag och torsdag. D-terminen är fortfarande utan slutdatum.

        va script:

        i1(
        köpantal=ScrPar(25)
        innehav=Portfolio(v)
        övermål=Ge(innehav,köpantal)
        slutantal1=If(övermål,0,SUB(köpantal,innehav))
        O4FB=Ge(date(),2456794)
        O4FE=Lt(date(),2456826)
        O4GB=Ge(date(),2456826)
        O4GE=Lt(date(),2456856)
        O4HB=Ge(date(),2456856)
        O4HE=Lt(date(),2456888)
        O4IB=Ge(date(),2456888)
        O4IE=Lt(date(),2456919)
        O4JB=Ge(date(),2456919)
        O4JE=Lt(date(),2456947)
        O4KB=Ge(date(),2456947)
        O4KE=Lt(date(),2456982)
        O4LB=Ge(date(),2456982)
        O4LE=Lt(date(),2457010)
        O5AB=Ge(date(),2457010)
        O5AE=Lt(date(),2457038)
        O5BB=Ge(date(),2457038)
        O5BE=Lt(date(),2457073)
        O5CB=Ge(date(),2457073)
        O5CE=Lt(date(),2457101)
        O5DB=Ge(date(),2457101)
        O5DE=Lt(date(),2457130)

        villkor4F=And(And(O4FB,O4FE),eqv(crcid(),1391064143))
        villkor4G=And(And(O4GB,O4GE),eqv(crcid(),1395367544))
        villkor4H=And(And(O4HB,O4HE),eqv(crcid(),1484249413))
        villkor4I=And(And(O4IB,O4IE),eqv(crcid(),1505080178))
        villkor4J=And(And(O4JB,O4JE),eqv(crcid(),1542655275))
        villkor4K=And(And(O4KB,O4KE),eqv(crcid(),1513187100))
        villkor4L=And(And(O4LB,O4LE),eqv(crcid(),1602122137))
        villkor5A=And(And(O5AB,O5AE),eqv(crcid(),4011492783))
        villkor5B=And(And(O5BB,O5BE),eqv(crcid(),3982244854))
        villkor5C=And(And(O5CB,O5CE),eqv(crcid(),3969798593))
        villkor5D=And(And(O5DB,O5DB),eqv(crcid(),3922806596))

        villkor99=or(or(or(or(villkor4I,villkor4H),villkor4G),villkor4F),villkor5D)
        villkor02=or(or(or(or(or(or(villkor4L,villkor5A),villkor5B),villkor5C),villkor4K),villkor4J),villkor99)
        slutantal2=if(villkor02,slutantal1,0)
        slutantal2)



        Med vänlig hälsning
        Bertil
        Last edited by Bertil; 2015-03-22, 11:58.

        Comment


        • #5
          En kommentar.
          Henric använder sig ju av
          O4F=and(and(and(eqv(yearnumber(),2014),eqv(monthnumber(),5)),eqv(dayofmonth(),15)),stängning)
          Vilket fungerar fint för ett bestämt tillfälle. Jag önskar ju ett datum där jag kan sätta före ( LT ) och efter eller samma (GE).
          Om man gör detta för monthnumber() så kommer ju månad 1 efter månad 12 och det stämmer ju inte med den matematiska logiken. I så fall måste man skriva en if-sats med undantag. För att förenkla använder jag ju istället date() där detta problem inte finns. Behöver alltså inte använda globala variabler.
          O4FE=Lt(date(),2456826)
          O4GB=Ge(date(),2456826)

          Med vänlig hälsning
          Bertil
          Last edited by Bertil; 2015-03-22, 15:04.

          Comment

          Working...
          X