Allmänt meddelande

Collapse
No announcement yet.

Script som triggar när kursen passerar MA

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

  • Script som triggar när kursen passerar MA

    Hej,
    Jag är väldigt ny här och har stött på patrull. Kanske inte det mest svårlösta fallet men det skulle vara bra med lite hjälp känner jag.
    Jag vill att scriptet skall trigga "sälg" när kursen har passerat glidande medelvärde 29. Både nedåt och uppåt.
    Jag vill att den ska trigga när 5min perioden är slut men jag får mitt script att även trigga när kursen enbart passerar (och sedan går tillbaka) vilket jag inte vill.
    Så här ser det jag skrivit ut.

    i5(
    ma29=Mov(c,29,s)
    nedåt=Lt(c,ma29)
    uppåt=gt(c,ma29)
    korsar=cross(c,ma29)
    innehav=ge(portfolio(v),0)
    sälj=or(and(and(nedåt,korsar),innehav),and(and(uppåt,korsar),innehav))
    Draw(ma29,1,dgqb)
    Mult(sälj,10)
    )

    Tacksam för all hjälp :-)
    Mvh

  • #2
    Om det gäller att testa en korsning oavsett håll borde man väl bara kunna testa om periodens High är över medelvärde samtidigt som periodens Low är under?

    i5(
    ma29=mov(c,29,s)
    korsning=and(lt(l,ma29),gt(h,ma29))

    innehav=ge(portfolio(v),0)

    sälj=and(aref(korsning,1),innehav) {här testas om korsning var sant förra perioden, dvs färdig stapel }

    draw(ma29,1,dgqb)
    mult(sälj,10)
    )

    Comment


    • #3
      Snabbt svar :-)
      Perfekt. Borde funka.
      Dock är "korsning" i ditt exempel sant om kursen passerar både nedåt och uppåt samtidigt? Eller? Jag är ute efter att trigga när kursen passerar MA vid olika tillfällen. Alltså inte samtidigt. Skall jag använda "OR" istället för "AND" eller funkar det ändå enl din text?
      Mvh

      Comment


      • #4
        Ahaa. Nu fattar jag. Sent på kvällen nu :-)
        Klart det skall vara "AND"

        Comment


        • #5
          Jag tror handeln blir lite knäpp då jag satt att göra en skiftning från köp till sälj vid ett visst värde. Dessa skickas till marknaden i stort sett samtidigt. Dock har jag att vid köp måste kontot vara tomt på värdepapper och vid sälj måste jag ha ett innehav.
          Men då modellen köper alldeles för lite (jag har satt att den ska köpa hälften) vid ett skift tror jag att jag måste fördröja köp några sekunder i alla fall.
          Finns det något sätt att göra detta på?

          Comment


          • #6
            Är inte riktigt med på hur du menar. Modellen köper bara när det inte finns något innehav. Hur mycket den köper ligger i antalscriptet, så om det blir för lite är det där vi ska undersöka.

            Vilket antalscript kör du?

            Comment


            • #7
              Ursprungligen postat av Cupra Visa inlägg
              Jag tror handeln blir lite knäpp då jag satt att göra en skiftning från köp till sälj vid ett visst värde. Dessa skickas till marknaden i stort sett samtidigt. Dock har jag att vid köp måste kontot vara tomt på värdepapper och vid sälj måste jag ha ett innehav.
              Men då modellen köper alldeles för lite (jag har satt att den ska köpa hälften) vid ett skift tror jag att jag måste fördröja köp några sekunder i alla fall.
              Finns det något sätt att göra detta på?
              Triggar du mot index och skall blanka?
              En variant som jag använder är att ha 4 kompletta ordermodeller.
              1) Köp från nollinnehav
              2) Köp vänd då man har negativt innehav
              3) Sälj från nollinnehav
              4) Sälj vänd då man har positivt innehav

              Är det detta du är ute efter?

              Undrar
              Bertil

              Comment


              • #8
                Det är bull/bear jag provhandlar med. Jag har fyra st ordermodeller. 2 för bull Köp/sälj och 2 för bear köp/sälj.
                När bull säljs skall bear köpas. Jag har även andra triggers för sälj men det är just vid skiftningen som jag märker att det blir märkligt.
                Antalskriptet är "hälften av vad kassan tillåter" vid köp.

                Comment


                • #9
                  Ah, få förstår jag. Kontot hinner inte uppdateras efter försäljningen skett tills nytt köp görs. Två sätt att lösa det:

                  1. Testa om Cash(a) är noll - då vet vi att värdet av öppna positioner är noll och det är ok att handla.

                  2. Istället för att räkna trading Power på kontot räknar man ut kontovärdet inkl ev positioner och dividerar med två, så får man köpbeloppet.


                  Punkt 1 förutsätter att inget annat handlas på samma konto, annars blir ju cash(a) aldrig noll. Enkelt att lägga in i triggerscripten:

                  konto_tomt=eqv(cash(a),0)


                  Punkt två läggs i antalscriptet, där man istället använder följande som värde på kontot:

                  kontovärde=add(cash(a),cash(t)) {fungerar på konton där äkta blankning inte förekommer}

                  halva=div(kontovärde,2)
                  köpantal=int(div(halva,s))


                  Last edited by Rikard Autostock; 2019-03-08, 22:20.

                  Comment


                  • #10
                    Ursprungligen postat av Cupra Visa inlägg
                    Det är bull/bear jag provhandlar med. Jag har fyra st ordermodeller. 2 för bull Köp/sälj och 2 för bear köp/sälj.
                    När bull säljs skall bear köpas. Jag har även andra triggers för sälj men det är just vid skiftningen som jag märker att det blir märkligt.
                    Antalskriptet är "hälften av vad kassan tillåter" vid köp.
                    Jag antar att du inte har ETP-link. Då får man ta reda på crcid för ditt bull resp bear instrument och testa i ordermodellen så att man vet vilket instrumet som köps.
                    Ovanstående måste göras då man kör med Analyzern. Men då du kör simulering under handelstid så kan du ju välja att koppla två ordermodeller till Bear och två till Bull då behövs inte testen med crcid.

                    Då ett köp gått igenom sätter man en global variabel. Säljmodellen blir då en slavmodell och säljer då den globala variabeln är satt till 1.
                    När säljslavmodellen sålt måste man sätta den globala variabeln till 0 igen.

                    Lite trixigt är det att få till.

                    mvh
                    Bertil

                    Comment


                    • #11
                      Jag har andra aktier på depån jag inte vill röra så jag kommer aldrig ha noll.
                      Bertils väg ser logisk ut med slavmodell som ser till att den ena aldrig blir aktiv om huvudmodellen är noll. Dock vet jag inte hur jag skulle få till det.

                      En enkel väg hade kanske varit att ha tex "sälj" satt på 5min perioder med ett medelvärde och köp istället på 6min? Då får man en fördröjning i alla fall och modellen skulle fungera ändå.
                      Behöver jag i så fall sätta ordermodellen för köp till i6( (istället för default i5) som nedan??:
                      i6(
                      int(mult(0.5,div(cash(),c)))
                      )

                      Comment


                      • #12
                        Säg att du har ett säljscript som master
                        Om du skall simulera i analysatorn måste du ha koll på vilket instrument du säljer om det är bull eller bear säg villkor09 är att du säljer bear medan villkor19 är att du säljer bull.

                        Sälja=Or(villkor09,villkor19)
                        ditt_säljscript=And(And(And(And(sälja,tid1),tid2),delay_ok),trans_ok)
                        säljsignal=And(ditt_säljscript,ok_att_handla)
                        SetGVarIf(468276556,8009,and(säljsignal,villkor19),T)
                        SetGVarIf(2930203935,8009,and(säljsignal,villkor09),T)
                        SetGVarIf(1,8005,säljsignal,T)
                        Mult(säljsignal,10)
                        )

                        Om du då direkt efter skall köpa bear (eller bull)

                        blir slavscriptet
                        ...
                        i1(

                        { kl 09.01 }
                        tid1=gt(int(mult(frac(d),1440)),540)
                        { före kl 17.10 }
                        tid2=lt(int(mult(frac(d),1440)),1030)

                        villkor01=Eqv(GetGVar(8005),1)
                        villkor02=Eqv(crcid(),468276556)
                        villkor03=Eqv(GetGVar(8009),2930203935)
                        villkor09=And(And(villkor01,villkor02),villkor03)

                        villkor11=Eqv(GetGVar(8005),1)
                        villkor12=Eqv(crcid(),2930203935)
                        villkor13=Eqv(GetGVar(8009),468276556)
                        villkor19=And(And(villkor11,villkor12),villkor13)

                        Köpa=or(villkor09,villkor19)
                        ditt_köpscript=And(And(And(And(köpa,tid1),tid2),delay_ok),trans_ok)
                        köpsignal=And(ditt_köpscript,ok_att_handla)
                        SetGVarIf(0,8005,köpsignal,T)

                        Mult(köpsignal,10)
                        )
                        Ovanstående är inte exakt då jag bara konverterat i huvudet från ett pairtradingscript som jag har.

                        mvh
                        Bertil
                        Last edited by Bertil; 2019-03-09, 17:13.

                        Comment


                        • #13
                          Enklast i så fall är att handla ena certet med analyslogik etc, och bara låta andra modellen köpa/sälja baserat på innehav eller inte innehav på första tror jag. Då behöver man använda en global cell som skickar innehavet från ena modellen till andra.

                          Alternativt, handla underliggande index på testkonto och kör ETP Link till certen.

                          Comment


                          • #14
                            Känns som att jag behöver lära mig mer om de globala cellerna. Jag har försökt hitta info om dessa men hittar inte. Finns det?

                            Comment


                            • #15
                              Medan jag lär mig om de globala cellerna skulle jag vilja testa detta för att fördröja köp med ca 5sek.
                              addera_5sek=add(frac(date()),0.00005) (Det är strax under 5 sek)

                              Gör jag en tankevurpa här eller skulle det kanske funka?

                              Comment

                              Working...
                              X