Allmänt meddelande

Collapse
No announcement yet.

Script som triggar när kursen passerar MA

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

  • #16
    Du är på rätt spår, men det man behöver veta är från vilken tid eller händelse som fördröjningen ska mätas.

    Mer om globala celler finns i scriptreferensen som du når via Välj formel-knappen i scripteditorn.

    Funktionerna SetGVarIf() och GetGVar()

    Comment


    • #17
      Ursprungligen postat av Cupra Visa inlägg
      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?
      Då du har anslutna scipt uppe så klicka på formler och sök SetGvarIf(d,n,c,NDLEPT) där finns förklaringen. (Rikard var först att svara) Där står visserligen att det bara finns 899 minnesplatser, det är nu utökat till 10000 om jag minns rätt.

      Själv använde jag inte globala celler under mina två första år som scriptare för jag ville inte krångla till det, men nu är jag nog den som använder globala celler mest. Har många hundra som går skarpt.
      En global cell är ju bara en minnesplats där man kan lagra ett värde som man sedan kan ta fram i andra script. En global cell är gemensam för alla instrument, strategier och konton, så man måste se till så att man inte använder samma globala cell i olika strategier av misstag.
      Ursprungligen postat av Cupra Visa inlägg
      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?
      Nu förstår jag inte vad du är ute efter. Visst du adderar 5 sekunder, men vad skall du ha det till? Om du skulle testa på detta med eqv skulle det ju aldrig bli sant. Om du däremot skulle låsa in det i en global variabel och ta fram skulle det, skulle det heller inte bli sant om du inte samtidigt sätter ett villkor för att lägga in det i en global variabel, som jag gjorde i mitt scriptexempel tidigare.
      köpsignal=And(ditt_köpscript,ok_att_handla)
      SetGVarIf(addera_5sek,8005,köpsignal,T)

      Dessutom så snurrar ju exekveringen av alla ordermodeller med 5 sekundersintervall så sannolikheten att scriptet skulle exekveras i samma sekund som testvillkoret anger är inte stor. Om du låser in värdet i global cell med villkoret ovan och testar med Ge skulle det fungera. Skall man testa på tid med Eqv så bör man ha med int(mult(frac(d),1440)) så att man får hela minuter att testa på.

      mvh
      Bertil
      Last edited by Bertil; 2019-03-10, 10:23.

      Comment


      • #18
        Ni är jättehjälpsamma. Jag får grotta ned mig lite mer i dessa globala celler för att kunna använda dem skarpt vart det lider.
        Jag är lite ivrig att köra något skarpt så jag har en liknande idé men tar hjälp av Stochastic för köpsignal. På så sätt får jag köp och säljsignal på olika perioder vilket underlättar skiftet mellan bull och bear.

        I exemplet på bilden vill jag köpa när den röda långsamma kurvan går förbi 40 uppåt. Jag provade skriva detta skript men ser inget hända i grafen:

        timme:=9.5 {handel börjar efter 9.30)
        slut:=17.1 {får inte köpa efter 17:05)
        i5(
        omxs30=cmpref(c,0,a) {handlar med omxs30 som bas}
        st1=mov(stoc(omxs30,2),7,s)
        stupp=and(lt(aref(st1,1),40),gt(st1,40)) {definierar när linjen går förbi 40}
        tid=and(gt(frac(date()),div(timme,24)),lt(frac(date()),div(slut,24)))
        köp=and(and(aref(stupp,1),eqv(portfolio(v),0)),tid)
        Draw(st1,1,dgqb)
        Mult(köp,5)
        )

        {@A(5,OMX Stock )}


        Något galet gör jag ju.
        Attached Files

        Comment


        • #19
          Date() fungerar inte i diagram. Vid ritning får du ta bort villkoret eller ändra till d.
          Portfolio(v) kan också påverka i fall det finns en position på det aktuella kontot.

          Comment


          • #20
            Har testat lite nu och det mesta ser ut att funka. Dock är det som Henric säger att köpsignalerna inte funkar om man har Date(). Jag vill ju fortfarande ha samma regler att den köper efter 9:30 och slutar köpa efter 17:10. Men jag förstår inte hur. Finns det något sätt att göra det på utan date()?
            Vad menas att ändra till "d"?

            timme:=9.5
            slut:=17.1
            linje:=40
            i5(
            omxs30=cmpref(c,0,a)
            ma20=Mov(omxs30,20,s)
            st1=mov(stoc(omxs30,15),7,s)
            korsningupp=and(lt(aref(st1,1),40),gt(st1,40))
            kl0930=and(gt(frac(date()),div(timme,24)),lt(frac(date()),div(slut,24))) {Denna behöver jag ändra}
            köp=and(and(aref(korsningupp,1),eqv(portfolio(v),0)),kl0930)
            Draw(ma20,1,dgqb)
            Draw(linje,3,dgsa)
            Mult(köp,10)
            )

            {@A(5,OMX Stock )}

            Comment


            • #21
              Skarpt fungerar Date(). Det är bara när du vill rita historiska signaler i diagrammet som det strular. Enklast är att ta bort villkoren för Date() när du bara vill rita.

              d är en tidstämpel för stapeln. Du kan också prova att helt enkelt byta date() mot d. Obs! inte live. Vill du använda samma script live kan du ta in extraobjekt i 1min upplöpplösning. Sedan använda d för extraobjektet istället för date().

              Edit: Date() är datorns systemtid.
              Last edited by Henric; 2019-03-14, 09:22.

              Comment


              • #22
                Till skillnad mot date() så fungerar d i diagram som Henric påpekar. D fungerar utmärkt live i ordermodeller och vid simulering. Jag testade att ersätta D med date() i några ordermodeller men det blev inte bra så jag använder genomgående d i alla mina ordermodeller då jag testar tidpunkt på dagen.

                { Efter kl 09.30 }
                tid1:=gt(int(mult(frac(d),1440)),570)
                { före kl 17.10 }
                tid2:=lt(int(mult(frac(d),1440)),1030)

                linje:=40
                i5(
                omxs30=cmpref(c,0,a)
                ma20=Mov(omxs30,20,s)
                st1=mov(stoc(omxs30,15),7,s)
                korsningupp=and(lt(aref(st1,1),40),gt(st1,40))
                kl0930=and(tid1,tid2) {Denna har jag ändrat}
                köp=and(and(aref(korsningupp,1),eqv(portfolio(v),0)),kl0930)
                Draw(ma20,1,dgqb)
                Draw(linje,3,dgsa)
                Mult(köp,10)
                )

                {@A(5,OMX Stock )}

                mvh
                Bertil
                Last edited by Bertil; 2019-03-14, 09:28.

                Comment


                • #23
                  Men, det finns bara en tid för stapeln. Vid historisk diagramritning kan signaler inte komma inne i stapeln. Därför kan det strula till sig om man rakt av byter ut Date() mot "d" och använder det både för historik diagramritning och live. Beroende på stapelns upplösning.

                  Comment


                  • #24
                    Ursprungligen postat av Henric Visa inlägg
                    Men, det finns bara en tid för stapeln. Vid historisk diagramritning kan signaler inte komma inne i stapeln. Därför kan det strula till sig om man rakt av byter ut Date() mot "d" och använder det både för historik diagramritning och live. Beroende på stapelns upplösning.
                    Kör man genomgående med upplösningen i1 så är det inga problem.
                    mvh
                    Bertil

                    Comment


                    • #25
                      Jo visst, men de flesta gör inte det. Det kan lätt uppfattas som att det går att byta rakt av.

                      Comment


                      • #26
                        Ursprungligen postat av Bertil Visa inlägg
                        Till skillnad mot date() så fungerar d i diagram som Henric påpekar. D fungerar utmärkt live i ordermodeller och vid simulering. Jag testade att ersätta D med date() i några ordermodeller men det blev inte bra så jag använder genomgående d i alla mina ordermodeller då jag testar tidpunkt på dagen.

                        { Efter kl 09.30 }
                        tid1:=gt(int(mult(frac(d),1440)),570)
                        { före kl 17.10 }
                        tid2:=lt(int(mult(frac(d),1440)),1030)

                        linje:=40
                        i5(
                        omxs30=cmpref(c,0,a)
                        ma20=Mov(omxs30,20,s)
                        st1=mov(stoc(omxs30,15),7,s)
                        korsningupp=and(lt(aref(st1,1),40),gt(st1,40))
                        kl0930=and(tid1,tid2) {Denna har jag ändrat}
                        köp=and(and(aref(korsningupp,1),eqv(portfolio(v),0)),kl0930)
                        Draw(ma20,1,dgqb)
                        Draw(linje,3,dgsa)
                        Mult(köp,10)
                        )

                        {@A(5,OMX Stock )}

                        mvh
                        Bertil
                        Konstigt att det blir stor skillnad mellan date() och "d" när du använder i1(). Det ska väl då bara skilja max en insamling?

                        Comment


                        • #27
                          Ursprungligen postat av Henric Visa inlägg
                          Konstigt att det blir stor skillnad mellan date() och "d" när du använder i1(). Det ska väl då bara skilja max en insamling?
                          Det var i höstas någon gång jag testade att ersätta d med date() och gjorde simuleringar och fick andra resultat. Jag har visserligen några script som går med i4 och i5, och nu kommer jag inte ihåg vilka det var som gav annorlunda resultat. Tror mig komma ihåg att med date() så gjordes avslut utanför det intervall som jag tillät. Hursomhelst så gick jag tillbaka till d eftersom jag optimerat alla strategier så.
                          mvh
                          Bertil
                          Last edited by Bertil; 2019-03-14, 11:12.

                          Comment


                          • #28
                            Olika upplösningar borde vara förklaringen. Det kan då det skilja 4-5 minuter för "ny" tid. Det gör modellerna lite långsammare runt tidsgränser eller att modellerna indirekt hittar bättre tidsgränser.

                            Comment


                            • #29
                              Hej igen.
                              Är det någon som kan förklara varför det inte triggas någon köpsignal vid dessa tillfällen på bilden? Jag vill att det ska trigga när kursen passerar linjen. Har hänt vid flera tillfällen.
                              Jag har skrivit så här:
                              omxs30=cmpref(L,0,a)
                              ma33=Mov(omxs30,33,w)
                              korsningned=and(ge(aref(cmpref(c,0,a),1),ma33),lt(cmpref(c,0,a),ma33))
                              Attached Files

                              Comment


                              • #30
                                Ursprungligen postat av Cupra Visa inlägg
                                Hej igen.
                                Är det någon som kan förklara varför det inte triggas någon köpsignal vid dessa tillfällen på bilden? Jag vill att det ska trigga när kursen passerar linjen. Har hänt vid flera tillfällen.
                                Jag har skrivit så här:
                                omxs30=cmpref(L,0,a)
                                ma33=Mov(omxs30,33,w)
                                korsningned=and(ge(aref(cmpref(c,0,a),1),ma33),lt(cmpref(c,0,a),ma33))
                                Du har inte missat sista raden? Typ mult(korsningned,5).

                                Comment

                                Working...
                                X