Allmänt meddelande

Collapse
No announcement yet.

Antal perioder sedan händelse

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

  • Antal perioder sedan händelse

    Jag behöver som vanligt lite hjälp att komma över den första tröskeln och komma igång...

    Jag har två glidande medelvärden, mv1 och mv2, som korsar varandra och vill i mitt script veta för hur många perioder sedan detta hände. Jag vill också hålla reda på om det var korsning upp eller ner som hände senast.

    Någon som kan hjälpa mig att komma igång?

  • #2
    Finns en del olika sätt, men om du definierar villkoret för korsning uppåt, tex:

    kors_upp=and(gt(mv1,mv2),aref(lt(mv1,mv2),1))

    så kan du hämta värde från valfri dataserie från n:te gången kors_upp var sant senast:

    tid=find(kors_upp,100,d,1)

    returnerar D från den period då kors_upp var sant förra gången (begränsat till 100 perioder)


    eller:


    pris=find(kors_upp,100,c,2)

    returnerar Close från den period då medelvärdena korsade uppåt för andra gången bakåt.

    Comment


    • #3
      Antal perioder?

      ...Och antal perioder fås enklast fram hur då?

      ...Och om jag behöver leta mer än 100 perioder bakåt, går det att lösa med någon work-around?

      Comment


      • #4
        Du kan öka 100 till så mycket som stacken tål, dvs så mycket utrymme som finns reserverat i ini-filen.

        Ett annat sätt om du vill ha antal perioder sedan en viss händelse är att använda TopBars():


        perioder_sedan=topbars(kors_upp,200,1)

        returnerar antal perioder sedan villkoret kors_upp var sant senast inom 200 perioder bakåt.

        Comment


        • #5
          Jag brukar använda hhvbars för villkoren. Det ger mer korrekt visning i diagrammet. Topbars ritar en period efter, dvs aref. Vet ej om det bara är i diagrammet eller även vid scriptkörning. Byt hhvbars mot topbars för att testa.

          {korsU2 och korsN2 anger perioden när de skar och riktningen med lägsta värde har skett senast}
          mv1=mov(c,10,s)
          mv2=mov(c,50,s)
          korsU1=and(cross(mv1,mv2),gt(mv1,mv2))
          korsN1=and(cross(mv1,mv2),lt(mv1,mv2))
          korsU2=hhvbars(korsU1,250)
          korsN2=hhvbars(korsN1,250)
          kupp=lt(korsU2,korsN2)
          draw(mult(kupp,10),3,bsbF)
          draw(mult(gt(mv1,mv2),7),4,gsbF) {koll mot riktningen}
          add(0,0)

          Comment


          • #6
            Dags att labba!

            Tack för hjälpen! Nu ska det labbas lite (jag brukar börja med att rita ut värden i grafer för att få en visuell överblick) innan jag vet hur det ska inkorporeras i ett annat script och testas i bänken!

            Comment


            • #7
              Behöver mer hjälp...!

              Har labbat lite och testar bl.a. med följande script men hittar en lucka där det fattas kurser, t.ex. direkt efter börsöppning 2014-02-27 (finns ingen data att hämta för att täppa till luckan och detta behöver ju scriptet kunna hantera om det händer fler gånger). Försökte komma runt det mha den bortkommenterade if-satsen... men det verkar inte fungera... Finns det nåt sätt att få det senast korrekta värdet på variablen per_k1? Har per_k1 något värde i denna suspekta punkt? Vad skulle hända om man använder det värdet i fortsatta beräkningar? Blir det fel i beräkningen eller görs det ingen beräkning alls??

              Vad är fel här?

              ---

              i15(
              mv1=EMA(c,5)
              mv2=EMA(c,25)

              kors1=cross(mv1,mv2)

              per_k1=topbars(kors1,500,1)
              per_k2=aref(per_k1,1)

              draw(mult(per_k1,1),1,ksbF)
              {draw(mult(if(lt(per_k1,1),per_k2,per_k1),1),1,ksbF)}

              add(0,0)
              )

              ---

              ...Någon som kan hjälpa mig och/eller svara på mina frågor?

              Comment


              • #8
                Gäller OMXS30...

                ...Kanske ska tillägga att det är i OMXS30 jag saknar en stapel direkt efter börsöppning 2014-02-27. Någon som har en lösning?

                Comment


                • #9
                  Luckan beror på kursfeedproblem den dagen, så det är nog ingen som har datat. Det som sker i det läget är att perioderna tidstämplas normalt och får senast kända Close tills nytt data börjar komma in.

                  Comment


                  • #10
                    Är det verkligen så?

                    Luckan i datat gör mig inget... men är det verkligen så som du säger? I så fall borde ju inte scriptet lämna någon lucka bland periodräkningsstaplarna!?? Eller...?

                    Scriptet måste ju kunna hantera att det blir luckor i kursdatat, annars lämnas en lucka bland mina periodräkningsstaplar och det duger ju inte.

                    I scriptets nuvarande skick så blir det inga periodräkningsstaplar då det är lucka i datat trots att det är perioder sedan senaste korsning den ska returnera. Kör scriptet så får du se... att det blir en lucka bland staplarna kl 9, 2014-02-27!

                    Kan man komma runt detta på något sätt, att den returnerar rätt antal perioder sedan senaste korsning trots att det saknas data? I annat fall om det går att returnera värdet för senast korrekt genererade stapel? Jag försökte som sagt med den där if-satsen... men det funkade inte. Det går kanske att lösa på något annat sätt?

                    Hjälp!



                    Scriptet igen:
                    ---

                    i15(
                    mv1=EMA(c,5)
                    mv2=EMA(c,25)

                    kors1=cross(mv1,mv2)

                    per_k1=topbars(kors1,500,1)
                    per_k2=aref(per_k1,1)

                    draw(mult(per_k1,1),1,ksbF)
                    {draw(mult(if(lt(per_k1,1),per_k2,per_k1),1),1,ksbF)}

                    add(0,0)
                    )

                    ---

                    Comment


                    • #11
                      Vet inte om detta hjälper. Du kan tex köra 5 minuter för att hitta mindre luckor och sedan köra medelvärdena som extra objekt.

                      i5(
                      stillaA=eqv(c,aref(c,1))
                      stillaB=or(stillaA,ge(sum(stillaA,8),2))
                      draw(mult(stillaB,10),3,bsbF)
                      add(0,0)
                      )

                      Comment


                      • #12
                        Hmm... det där begrep jag inte. Vill du förklara?

                        Comment


                        • #13
                          i5(
                          stillaA=eqv(c,aref(c,1))
                          stillaB=or(stillaA,hhv(ge(sum(stillaA,2),2),8))
                          draw(mult(stillaB,10),3,gsbF)
                          add(0,0)
                          )

                          Liten ändring. Prova scriptet så ser du då spärr ska användas. Om closekursen är exakt den samma som förra perioden eller om tex villkoret varit sant i två perioder i rad de senaste åtta perioderna(ovanligt för index) läggs en spärr in.

                          Comment


                          • #14
                            Ska kika på det Henric.

                            ...Det verkar iaf som att det inte finns något värde alls på antal perioder sedan senaste korsning (per_k1) för oavsett om jag multiplicerar

                            draw(mult(per_k1,1),1,ksbF) ...med något värde...

                            ...eller istället lägger till en konstant

                            draw(add(per_k1,5),1,ksbF)

                            så blir det ändå ingen stapel där det fattas kursdata...

                            Är det topbars som spökar i detta fall? Rikard menar ju att close-värdena ska ha senast kända värde och då återstår ju bara topbars!? ...Eller??



                            Finns det förresten nåt i stil med

                            isnull

                            i scriptspråket som skulle kunna användas?

                            Comment


                            • #15
                              Jag testade lite snabbt med ett script som jämför Close med förra perioden och det larmar den 27:e, så nog känner C av senast noterade avslut.

                              Attached Files

                              Comment

                              Working...
                              X