Allmänt meddelande

Collapse
No announcement yet.

Två ordermodeller

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

  • Två ordermodeller

    Hej lfm!

    Undrar om du kan hjälpa till med nedanstående problem.

    Jag har två ordermodeller på OMX4J:

    Ordermodell Köp:
    9A Köp-stochastic 5 dgr, 20min
    9B Stäng köp - nollställer depån + loopflagga på

    Ordermodell Blanka:
    9A Sälj-stochastic 5 dgr, 20min
    9B Stäng sälj - nollställer depån + loopflagga på

    Dessa ordermodeller är anslutna samtidigt.

    Om dagen börjar med sälj vill jag att detta utförs + nollställning depån när köp-signalen kommer. Nu har jag loopflagga på vilket innebär att det rullar runt, hur får man sälj + stäng sälj att utföras en gång per dygn samt att scriptet står i position 9A nästa börsdag?

    När sälj-ordermodellen sålt, köpt tillbaks har köp skett också i köp-ordermodellen, hur löser jag detta när jag vill uppnå
    BARA blankning+nollställning ELLER köp-stäng köp en gång per dag?

    Eftersom jag ej vet om dagen börjar med sälj eller köp behöver jag ha två ordermodeller anslutna samtidigt.

    Har du någon ide hur man löser ovanstående lfm?


  • #2
    Om du vill att en position alltid skall avslutas en dag (om i steg 9B på någon av modellerna) så kan triggerscriptet ha en tidstest om vissa minuter innan stängning t.ex då det alltid blir sant. Då står ju modellen med loopflagga alltid i pos 9A sedan.


    Sedan för att styra att det inte sker köp och sälj på oönskade ställen och kanske bara en gång per dag osv så tycker jag LastTrade(x,D) är utmärkt för det(x är B=buy S=Sell).

    Så en enkel test

    buyat:=int(lasttrade(b,d))
    sellat:=int(lasttrade(s,d))
    datumnu:=int(date())
    isbuytoday:=eqv(datumnu,buyat)
    isselltoday:=eqv(datumnu,sellat)


    Sedan för egen administration använd gärna minnesvariablerna med retval(d,n) där n=0-4.

    De intressanta med dessa är att triggerscriptets värden i cellerna 0,1,2,3,4 sparas med varje trans.

    Så hitta på ett värde för att tala om vilken modell det är som arbetat.

    T.ex 100=köpmodellen 200=blankningsmodellen

    Så i triggerscriptet för köpmodellen har du en rad

    xx=retval(100,2)

    och i blankningsmodellens triggerscript ett värde

    xx=retval(200,2)

    Med transar för respektive modell får du värdena 100 eller 200 i cell 2.

    Sedan med LastTrade(b,2) eller LastTrade(s,2) kan du hämta denna info och använda den som du behagar.

    I detta fallet LastTrade(b,2)=200 skulle betyda att senaste är Blankningsmodellens köptrans(nollning) som gjorts senast.

    Från AT 7 har du 10 minnesceller 0-9 totalt varav 0-4 lagras med varje trans också. Hitta på ett eget system för hur du kan föra runt info om vad som händer i den olika modellerna.

    Det skall väl få dig något steg till i alla fall.

    Comment


    • #3
      Hej lfm.

      Tidskontrollen kan jag lösa genom att i 9B-sekvensen ha en
      variant av ett tidigare xk -script i forumet som agerade efter
      09.36 och ej efter 17.17. Mina ordinarie script agerar ej efter 17.19, så nedantående script går att ändra tim1,min1 till 17.19 och tim2,min2 till 17.25 och sedan OR:a ihop tidskontroll med ordinarie script.

      tim1:=9
      min1:=36
      morgon:=add(mult(tim1,60),min1)
      start:=DIV(morgon,1440)
      inom1:=LE(frac(DATE()),start)
      tim2:=17
      min2:=17
      kväll:=add(mult(tim2,60),min2)
      slut:=DIV(kväll,1440)
      inom2:=GE(frac(DATE()),slut)
      { Systemklockan användes }
      utanför:=OR(inom1,inom2)
      tidskontroll:=not(utanför)


      Ordinarie script som används är:

      sl) köpläge Stoch under 20 linjen
      kurva1:=sub(100,Stoch(5))
      kurva2:=20
      under20:=LT(kurva1,kurva2)
      i15(under20)

      sl) säljläge Stoch över 80 linjen
      kurva1:=sub(100,stoch(5))
      kurva2:=80
      över80:=GT(kurva1,kurva2)
      i15(över80)


      Om vi tar köp-scriptet, köp-modellen och lägger på lasttrade-test:

      kurva1:=sub(100,Stoch(5))
      kurva2:=20
      under20:=LT(kurva1,kurva2)
      { }
      buyat:=int(lasttrade(b,d))
      sellat:=int(lasttrade(s,d))
      datumnu:=int(date())
      isbuytoday:=eqv(datumnu,buyat)
      isselltoday:=eqv(datumnu,sellat)
      { }
      {100=köpmodellen 200=blankningsmodellen}
      TestRetval:=retval(100,2)
      { }
      TestLasttradeBuy:=LastTrade(b,2)=200
      i15(And(under20,TestLasttradeBuy)

      Hur får jag till i köp-scriptet rätt kontroller ?

      Comment


      • #4
        Syntaxmässigt behöver sista delen rättas.

        i15(
        xx=retval(100,2)
        TestLasttradeBuy=eqv(LastTrade(b,2),200)
        And(under20,TestLasttradeBuy)
        )

        Det saknades dels en parentes på sista raden, och sedan en eqv()-funktion för att göra testen. Sedan tog jag bort kolon som du sett vid likhetstecknen. Detta för att det direkt skall bli körbar kod, inte bara en definition. En defintion(tilldelat namn) måste du användas också. Här stoppar jag bara retval() i variabeln xx för den skall ändå inte användas utan bara se till att retval görs.

        Då du kör parallella modeller så bildas ändå bara en logg för LastTrade() oavsett vilken modell som genererat den transen. Därav har retval(100,2) och retval(200,2) tillkommit. Då kan man ta hänsyn till vilken modell också ifall man vill det.

        Gör bara en sak i taget. Dvs gör all bestämning av villkor först separat. Och sedan när du har alla villkor klara börja fundera över hur scriptet skall fånga desa villkor.

        Vilka olika villkor skall tas hänsyn till

        1. Har blankningsmodellen gjort något idag gör inget i innehavmodellen.
        2. Har innehavsmodellen gjort något idag gör inget i blankningmodellen.
        3. Om man är i marknaden med innehav eller blankning efter viss tid på dagen skall man göra exit.
        4. Har man varit i marknaden alls tidigare idag skall man inte in igen.


        När du sätter upp villkor på detta sättet ser man ibland ett villkor som redan ryms i ett annat. Men det gör inget. Det är bättre med redundans är tvärtom. Effektivisera och optimera kan man göra senare om man vill det.

        Som du ser rymmer rad 4 rad 1 o 2. Så står man på sekvens A i endera modellen räcker testen om man varit i marknaden alls. Och du täcker också in att inget varit idag ännu även vid första anslutning av modellen.

        Det skrivs i script som 'anytradetoday' nedan

        sl) köpläge Stoch under 20 linjen
        kurva1:=sub(100,Stoch(5))
        kurva2:=20
        under20:=LT(kurva1,kurva2)
        sellat:=int(lasttrade(s,d))
        datumnu:=int(date())
        isbuytoday:=eqv(datumnu,buyat)
        isselltoday:=eqv(datumnu,sellat)
        anytradetoday:=or(isbuytoday,isselltoday)
        i15(
        xx=retval(100,2)
        And(under20,not(anytradetoday))
        )

        Ovan kompletta scriptet enligt de villkor du satt upp. Så vi behöver inte hålla redan på från vilken modell transen kommer i nuvarande utförande av din modell.

        Men kör du parallella modeller kan det vara god sed att köra identifiering med retval() för varje modells script ändå. Det kan ju dyka upp ett villkor du kommer på behövs och då har du datat i transarna redan.

        Sedan tycker jag dina tankar om tidsscriptet i sekvens B är alldeles utmärkt. Ta bara bort morrondelen eller sätt det klockslaget till något som aldrig kan uppfyllas.

        Comment


        • #5
          Hej lfm.

          Jag har testat köp-scriptet i simulera-läge, det kom en köp-signal i fredags kl.09.01, sedan inget mer.

          För sälj-ordermodellen har jag lagt in motsvarande som köp-ordermodellen:
          sl) säljläge Stoch över 80 linjen
          och ändrat till xx=retval(200,2)

          I fredags kom det enligt ordinarie stoch-script både köp och sälj-flaggor på omx4j och igår köp-sälj-flaggor på omx4k men inga signaler i egna larm med retval inlagt.

          Sälj-scriptet är:

          sl) säljläge Stoch över 80 linjen
          kurva1:=sub(100,stoch(5))
          kurva2:=80
          över80:=GT(kurva1,kurva2)
          sellat:=int(lasttrade(s,d))
          datumnu:=int(date())
          isbuytoday:=eqv(datumnu,buyat)
          isselltoday:=eqv(datumnu,sellat)
          anytradetoday:=or(isbuytoday,isselltoday)
          i15(
          xx=retval(200,2)
          And(över80,not(anytradetoday))
          )

          Vad är det som gör att det inte fungerar?

          Comment


          • #6
            Du ser att buyat används på en rad, men definitionen för buyat saknas.

            Jag har missat en rad

            buyat:=int(lasttrade(b,d))

            Den skall in direkt vid 'sellat'.

            Comment


            • #7
              Hej lfm.

              Igår kom det en köp-signal i egna larm i simulera-läge, men ingen sälj-signal fastän det kom sälj-flaggor vid kurs-staplarna senare under dagen. Måste jag köra skarpt för att scripten ska fungera?

              Comment


              • #8
                Du får titta att modellen ligger på B-sekvensen för ordermodellerna.

                Menyn Fönster->Utkö för order och högerklicka och välja att visa bevakade.

                Sedan kör du simulering eller bekräfta-läge? Det är viss skillnad.

                Comment


                • #9
                  Jag kör simulering, ej bekräfta-läge.

                  När jag ansluter modellerna hamnar de ju automatiskt i 9A-sekvens. Jag behöver alltså stega till 9B-sekvensen efter anslutning. Varför?

                  Comment


                  • #10
                    Du skall inte stega modellen, utan den skall ju stega själv eftersom du sa att det kommit köp-signal. Då skall det ju stegas till 9B för den modellen automatiskt. Sedan körs det triggerscriptet för 9B tills vidare(typ tills din tidsignal träder in i slutet av dagen).

                    Sedan är det inte nog med att du kör simuleringen för riktigt full simulering. Den bildar ju inga transar i lokala ordertransar, och då får inte lastrade()-funktionerna nya data någon gång. Så riktigt full simulering av dessa scripten blir det inte då.

                    Så att spärrfunktionen jobbar som du tänkt lär inte fungera i simuleringsläge så som scripten här arbetar.

                    Utan spärrfunktionen borde de bara bli lite krock om t.ex både köp och blankningsidan agerar samma dag. Men annars borde de rulla.

                    Så kolla att:

                    a) du har aktiverat att du får koppla multipla ordermodeller på ett papper.(Preferenser->Handel).
                    b) Vid anslutning får du bekräftelse vilka modeller som är anslutna. När du ansluter modell nr 2 så står det i dialogen för direkt anslutning av det är en modell ansluten redan.

                    c) Kontrollera i Utkön och bevakade att båda modellerna finns där anslutna.

                    Comment


                    • #11
                      Hej lfm.

                      Går det att ordna så att transar bildas i lokala ordertransar i simulera-läge vid lasttrade? Då skulle det kunna gå att köra full simulering dvs som när scripten körs i produktion.

                      Comment


                      • #12
                        Nja, tanken är att du kör i bekräftaläge när du är så nära produktion. Det bildar också order och transar.

                        Så växla till Bekräfta på alla transar.

                        Comment


                        • #13
                          Hej lfm.

                          Jag har emailat fråga till sales@frndsw.com.

                          Comment


                          • #14
                            Hej lfm.

                            Jag vill att köp/stäng köp eller sälj/stäng sälj skall ske bara EN.....
                            gång per dag i de två ordermodellerna. Tas detta omhand med
                            xx=retval(100,2) och xx=retval(200,2) eller behöver man infoga något villkor xx < 2 ?

                            Comment


                            • #15
                              I nuvarande utförande av scripten behövs retval()-sakerna inte alls som jag nämnde förut. Men det kan snart bli så att du kommer på att det måste villkoras något beroende på vilken modell transen kommer från, och då är det utmärkt att detta redan finns.

                              Det som jag försökte enligt din kravspec var att villkoret Not(anytradetoday) finns med och skall blocka allt att exekvera från 9A-position om något annat hänt den dagen.

                              Så provkör detta med bekräftastatus på sekvenserna i ordermodellerna istället så får du se om något mer behövs.

                              Comment

                              Working...
                              X