Allmänt meddelande

Collapse
No announcement yet.

Första timmens högsta och lägsta

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

  • Första timmens högsta och lägsta

    Håller på med ett skript där strategin är att köpa när kursen underifrån korsar första timmens högsta kurs eller sälja när den överifrån korsar första timmens lägsta kurs. Ingen handel ska alltså kunna ske först timmen.

    Jag villl sedan använda en flytande stoploss för att följa med i positiv kursriktining eller gå ur om den går tillbaka till triggernivån.

    Eftersom man är nybörjare så finns det många frågetecken som jag hoppas få hjälp med. Just nu ser skriptet ut på följande sätt. Det är endast steg 1 för att gå in i marknaden som är implementerad. Kod för att få fram högsta och lägsta är delvis taget från formumet.

    {Hämta ut första timmens högts och lägsta värde}
    {----------}
    period1:=EQV(INT(REF(d,1)),INT(d))
    förstaTimmesGräns1:=AND(HHV(NOT(period1),2),period1)
    DRAW(MULT(förstaTimmesGräns1,123),0,yqb)

    i60(
    hi=Find(förstaTimmesGräns1,20,Aref(h,1),1)
    lo=Find(förstaTimmesGräns1,20,Aref(l,1),1)
    DRAW(hi,1,gqb)
    DRAW(lo,2,bqb)

    {Kontrollera om nivåerna korsas}
    köp=AND(HHV(CROSS(c,hi),2),GT(c,hi))
    sälj=AND(HHV(CROSS(c,lo),2),LT(c,lo))
    DRAW(MULT(sälj,123),3,bqb)
    DRAW(MULT(köp,123),4,gqb)
    )
    {----------}

    Nu används i60 för att få fram högsta och lägsta under period 1 (första timmen) men hur gör man om man vill att andra saker ska köras med kortare intervall. Kontrollen mot nivåerna vill jag ha på kanske 10 min basis. Får inte till det.

    Är också osäker på hur det rent tekniskt exekveras när olika delar av skriptet jobbar med olika upplösning. Någon som kan förklara det?

  • #2
    Scripten körs vid varje kursinsamling, så 60 minuters upplösning är bara något som används för att definiera de ingående tekniska parametrarnas sätt att beräkna, tex högst och lägsta kurs för perioden, eller om man använder glidande medelvärden etc.

    Prova att simulera detta med Animering påslaget så ser du exakt när det löser ut. Testen med Cross görs vid varje insamling.

    Comment


    • #3
      Menar du "animering per minut" i analysbänken eller
      Animera dagskurser i skriptinställningen

      Kör skriptet i intradagläge 1 minut. Behöver man verkligen ha animering då?

      Ritar ju ut med DRAW ut köp och sälj men upplösningen på de staplarna blir 1 timme. Vill ju ha en spik så man visuellt med säkerhet kan bekräfta att den jobbar rätt.
      Att det blir upplösning på 1 timme känns ju normalt när man har I60 runt koden så frågan är om det finns något bättre sätt att lösa det på.

      Försöker jag plocka ut koden nedan och lägga den efter i60 så ritar den inte ut alls lägsta linjen.


      köp=AND(HHV(CROSS(c,hi),2),GT(c,hi))
      sälj=AND(HHV(CROSS(c,lo),2),LT(c,lo))
      DRAW(MULT(sälj,123),3,bqb)
      DRAW(MULT(köp,123),4,gqb)

      Comment


      • #4
        Nja, jag syftade på animering i Analysbänken. Om du vill ta fram tim-staplarna på det vis du gjorde i första scriptet måste det köras i 60-minuters upplösning. Men det hindrar inte att scriptet läser in kurser vid varje insamling och testar om korsning skett. Det kan du se i Analysbänken exakt vilken minut det löser ut.

        Comment


        • #5
          Första timmen...

          Just denna strategi är gammal hederlig daytrading och jag tycker att det låter intressant att själv testa.
          Förövrigt är jag också nybörjare och behöver träna på lite scriptning:

          Tror att I60{....} blir fel eftersom du har en timmes skalning.
          Du får ta reda på när 1 timme gått kl. 10.00 sen spara i någon variabel.
          Gissar på att du vill ha köp om korsar lägsta och sälj på högsta??? eller??? Annars byt plats på köp och sälj..
          Sen går det inte att använda lika med Eqv för tid därför får du använda kl. 10.00 - 10.01

          {Startar Kl. 10.00}
          StartH:=10
          StartM:=00
          StartTime:=ADD(MULT(StartH,60),StartM)
          {Sluttid Kl. 10.01}
          EndH:=10
          EndM:=01
          EndTime:=ADD(MULT(EndH,60),EndM)
          {Nuvarande tid}
          TimeNow:=MULT(frac(d),1440)
          {Backa tillbaka 60 minuter}
          MinutesBack:=60
          {Föregående periods kurs}
          OneMinuteBack:=Ref(C,1)

          I1(
          {Lagra högstavärde i variabel 2 när kl. är 10}
          nSellLimit=retval(if(And(GE(TimeNow,StartTime),LE(TimeNow,EndTime)),HHV(H,MinutesBack),getval(2)),2)
          {Lagra lägstaavärde i variabel 3 när kl. är 10}
          nBuyLimit=retval(if(And(GE(TimeNow,StartTime),LE(TimeNow,EndTime)),LLV(L,MinutesBack),getval(3)),3)
          {Säljsignal}
          nSellSignal=if(And(And(GT(C,getval(2)),LE(OneMinuteBack,getval(2))),GT(TimeNow,StartTime)),1,0)
          {Köpsignal}
          nBuySignal=if(And(And(GT(C,getval(3)),LE(OneMinuteBack,getval(3))),GT(TimeNow,StartTime)),1,0)
          {Byt signal för att få köp eller sälj}
          Mult(nBuySignal,5)
          )
          NiclasGBG

          Comment


          • #6
            Hej NiclasGBG,

            Har inte kollat närmare på din kod ännu men spontant känns det som det är ett mer flexibelt sätt att få fram uppgifterna på. Ska göra lite tester när jag har tid.
            Vore intressant om man kan få fram en strategi på lite olika sätt och sen jämföra vad som är för och nackdelar.

            Just nu har jag ett problem att är helskumt men jag tror jag kommit på vad det är som gör att det strular.
            Om man skriver:

            var1:=vilkor

            så byts ju var1 på andra ställen ut mot "vilkor".
            Detta verkar ske även inom { }

            Om man har ett skript med följande rader så blir det syntax-error. Antar att sista } läggs in på den sista raden så det blir {kontroll}} vilket ju inte accepteras. Inte snyggt alls. Säkert ett känt problem om man läst igenom forumet....

            {var1:=kontroll}
            ...
            {var1}

            Comment


            • #7
              Hej Jompa...

              Sök efter inlägg och trådar med mitt namn på forumet...

              Jag har haft ett antal problem och plågat Rikard, bl.a. ganska nyligen det där med intraday prefix med tilldela och likamedstecken...

              Så klarnar nog en del.... Lycka till med scriptet!
              NiclasGBG

              Comment


              • #8
                Hej Niclas och övriga,

                Har fått till det rätt bra nu.
                Är lite undrande kring kontrollen du gör på en period istället för mot ett fast värde. Varför ska det behövas egentligen. Har provad lite och det funkar bra ibland att kolla mot ett visst värde men inte ibland. Kan du utveckla?
                I ett annat skript får jag nu alltid två triggningar när jag kollar mot en period på 2 minuter för att få veta när man befinner sig vid en viss tid. Har löst det genom att öka upp upplösningen till 2 minuter kring sista raden som returnerar flaggan.

                Vill gärna ha ett säkert sätt som funkar i alla lägen.

                Håller på och leker med analysbänken nu. :-)
                Ska börja med en flytande stopp-loss snart. Sen borde modellen vara klar att börja köras i realtid i simuleringsläge.

                Comment


                • #9
                  Hej

                  Har en fundering:

                  Om jag skulle vilja ha ett medelvärde på 50 som korsar aktien hur skulle det se ut?
                  Går det fortfarande att använda CROSS( , ) eftersom jag har svårt att skriva aktien...

                  Comment


                  • #10
                    Man ser det nog enklast som att aktiens kurs korsar medelvärdet:


                    medelvärde:=Mov(c,50,s)
                    Cross(c,medelvärde)

                    det här blir sant varje gång Close-kursen korsar medelvärdet. Om man tex vill testa om man fått en korsning i innevarande period uppåt kan man lägga till ett villkor som säger att Close-kursen ska vara ovanför medelvärdet i samma period som kursen korsat medelvärdet:

                    medelvärde:=Mov(c,50,s)
                    korsning:=Cross(c,medelvärde)
                    ovanför:=Gt(c,medelvärde)
                    korsnupp:=And(korsning,ovanför)

                    Comment


                    • #11
                      Tack för hjälpen

                      Comment


                      • #12
                        Hej

                        jag gjorde om det där skriptet till det här men när jag skulle testa syntaxen blir det fel.

                        {Köpskript}

                        medelvärde:=Mov(c,50,s)
                        korsning:=Cross(c,medelvärde)
                        ovanför:=Gt(c,medelvärde)
                        Klart:=And(korsning,ovanför)

                        {Säljskript}

                        medelvärde:=Mov(c,50,s)
                        korsning:=Cross(c,medelvärde)
                        Nedanför:=Lt(c,medelvärde)
                        klart:=And(korsning,Nedanför)

                        Kan inte hitta felet.
                        Tack på förhand

                        Comment


                        • #13
                          Tilldela vs Beräkna

                          Hej,

                          medelvärde:=Mov(c,50,s)
                          korsning:=Cross(c,medelvärde)
                          Nedanför:=Lt(c,medelvärde)
                          klart:=And(korsning,Nedanför)

                          Ovan har du bara tilldelat ett antal "namn" ett uttryck eller funktion. Om du vill utföra en beräkning använd exempelvis klart=And(korsning,Nedanför). När du använder = måste det finnas nedanför de tilldelade namnen där := används.

                          Testa att lägga till mult(klart,25).

                          medelvärde:=Mov(c,50,s)
                          korsning:=Cross(c,medelvärde)
                          Nedanför:=Lt(c,medelvärde)
                          klart:=And(korsning,Nedanför)
                          mult(klart,25)

                          om du använder intraday prefix skall beräkning finnas inom den.

                          i10(
                          mult(klart,25)
                          )

                          Comment


                          • #14
                            Tack för hjälpen JBG

                            Hur skriver man att ett medelvärde ska vara större än perioden innan

                            medelvärde:=Mov(c,50,s)
                            större:=GT(medelvärde,(?FÖRRA PERIODEN?))

                            Comment


                            • #15
                              Hej,

                              medelvärde:=Mov(c,50,s)
                              större:=GT(medelvärde,aref(medelvärde,1))

                              Comment

                              Working...
                              X