Allmänt meddelande

Collapse
No announcement yet.

HHV-funktionen

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

  • HHV-funktionen

    Problem med HHV-funktionen.
    Följande exempel belyser vad jag menar.

    del1:= {kurva1 stiger}
    del2:= {kurva2 stiger}
    del3:= {kurva3 stiger}
    {Dessa delar är skrivna för att endast retunera 1 eller 0 (Ja eller Nej)}

    summaDelar:=add(add(del1,del2),del3)
    {denna rad levererar 0,1,2 eller 3 beroende på hur många delar som är sanna.}

    Om jag nu vill veta om två av mina delar är sanna kan jag skriva:
    2av3:=eqv(summaDelar,2)
    Så långt är allt frid och fröjd. Programmet ritar snällt flaggor när detta gäller.

    Men när jag vill veta om ”2av3” har varit sant någon gång inom 5 perioder har jag skrivit:
    hhv(2av3,5) men detta blir inte rätt!

    Har jag missuppfattat hur man använder hhv för att ta reda på om ett visst villkor gällde inom ett visst antal perioder bakåt, eller skall jag göra på ett annat sätt?

  • #2
    Jag tycker det ser rätt ut, borde funka enligt vad jag tror mig veta.

    Har du provat att lägga det i samma rad?

    2av3:=Hhv(eqv(summaDelar,2),5)


    PS. Antar att du har ström och tele eftersom du kunnat posta här, jag var nere och sågade nedfallna träd hos brorsan, (St Skipås). Det ser ut som kriget därnere!

    Comment


    • #3
      Hej Rikard!

      Nej det hjälper inte, jag har det på en rad. Jag råkar ibland ut för sådana här "löjliga fel" som det brukar ta lång tid att komma till rätta med.

      Min tanke med det hela är att skriva ihop ett antal villkor som levererar ja eller nej. Därefter enkelt kunna variera hur många villkor som skall vara med i olika situationer.

      Antag att man vill sälja ett innehav i en stabil uppåttrend. Då kan man låta fler villkor vara uppfyllda än om trenden är osäker eller kanske viker. För att kunna bedöma trenden behöver man se hur andelen villkor som varit uppfyllda har varit under en tid. Det är här "HHV" kommer in. Men jag hittar nog någon lösning för detta bör inte vara så svårt.

      Jo jag har både el och tele. Appropå St Skipås så vet jag hur det ser ut för det är där jag bor.

      Ha det så bra
      Åke

      Comment


      • #4
        Generellt får man se upp med att göra aritmetiska exakta beräkningar på logiska uttryck. Har man absolut sett till att

        del1:=
        del2:=
        del3:=

        har bara logiska funktioner som sista instans borde det gå bra, då används ett värde som borde bli exakt 1 eller exakt 0 i retur. Annars om det så fattas en enda decimal 14e siffran eller så räcker det för att 2av3 inte skall bli sann.

        eqv(summaDelar,2) och summaDelar inte är exakt två utan 2.00000000000001 så räcker det för att ge falskt.

        Så försök utforma testen som GT(), GE(), LT(), LE() av något slag så underviker man sådana onödiga felutfall.

        Om alla tre är sanna så ger ju inte 2av3 sant. Är det hänsyn taget till det? Passar egentligen


        Annat tips att kolla kan vara ifall man använder LLVBARS() och HHVBARS() vid testen för fallande eller ökande kurs/värde. Tänk på att dessa ger sant för både ökad och likamed, eller minskad och likamed.

        Vanlig konstruktion man kör med

        closedn:=LT(LlvBars(c,2,1)

        Detta ger sant både vid fallande close och att båda är lika. Om båda är samma kurs är båda högst.

        closedn:=LT(LlvBars(c,2,1)
        closeup:=LT(HhvBars(c,2,1)

        om kursen är lika ger båda sant ut är annat exempel.

        Lägg in de nya Draw()-funktionen på respektive del1, del2, del3 i samma script så bör du se tydligt om det inte blir som tänkt.

        Comment


        • #5
          Lite typo av mig där

          closedn:=LT(LlvBars(c,2),1)
          closeup:=LT(HhvBars(c,2),1)

          så skall det vara.

          Comment


          • #6
            Upptäckte att det var ett av delarna i mitt script som inte tålde att bli behandlad med ”HHV”. Annars brukar den delen fungera som tänkt.

            Gjorde ett annat litet test med en annan funktion där jag lät en flagga ritas när c var större än parabolic. Detta ser intressant ut och skulle kunna vara en del av ett större script. Men kopplar man in en hhv-funktion så går det åt skogen.

            hhv(ge(c,parabolickurvan),2)
            Detta ritar alltid flagga vilket är felaktigt. Jag tycker att en flagga skulle ha ritats även första perioden som c faller under kurvan efter att tidigare varit över eller lika.
            Ge(c,parabolickurvan) borde endast kunna retunera 1 eller 0. Om den 14:de decimalen är något annat än 0 så gör programmet fel.

            Det är synd att det tydligen finns begränsningar i hhv-funktionen som åtminstone inte jag känt till tidigare.

            Kommentar till Lasses inlägg:
            Jag har försökt att använda GT, LT osv i stället för eqv men det hjälper inte. Felet finns inte att finna i några decimaler.

            LLVBARS och HHVBARS har jag sällan använt så dessa är jag inte så insatt i.

            Alla delfunktionerna fungerar utmärkt. Problemet uppstår när jag med hhv vill att en flagga skall ritas t.ex. 5 perioder i följd efter att själva delen var uppfylld. Alltså hhv(delen,5)

            Draw()-funktionen vad är det? Kan inte påminna mig att jag ens tidigare sett namnet!

            Comment


            • #7
              Lite om Draw():
              http://www.frndsw.com/vbulletin/show...highlight=draw

              SAR() kan inte användas för test alls. Bara som kurva.

              Det finns en som heter SAR2() i AT7 som kan användas för bevakning också.

              Syntax SAR2(step,max,perioder)

              T.ex så här kan sälj se ut

              i5(mult(lt(l,sar2(0.02,0.20,300)),10))

              Saren växlar ju visning under eller över kursen precis när signalen är,
              så därför får man hantera det så här.

              Perioden behöver tas till så den omfattar två cykler ungefär, så hakar
              den i den andra SAR() så de är likadana.

              Annars känner jag inte till några lägen där inte HHV() fungerar. Bara man inte blandar in obv() och sar() m.fl som är dokumenterade enbart som grafisk kurva. På dessa kan inte hhv() och andra typiska backtestingsaker göras.

              Comment


              • #8
                Det finns kanske intresse från andra ”scriptare” så jag lägger ut det delscriptet som inte fungerar med HHV.

                högst:=IF(gt(h,ref(h,1)),1,-1)
                senast:=IF(gt(c,ref(c,1)),2,-2)
                lägst:=IF(gt(L,ref(L,1)),1,-1)

                i30(
                tal=ADD(ADD(högst,lägst),senast)
                summaTal=div(SUM(tal,10),2)
                smalRöd=LinReg(ADD(summaTal,c),10)
                streckadRöd=LinReg(mov(ADD(summaTal,c),5,s),10)
                signal=ge(smalRöd,streckadRöd)
                mult(signal,15)
                )

                Detta fordrar troligen en del förklaringar. Jag har länge haft en tanke att göra en poängsättningskurva där man endast utgår ifrån kursen. Första raden sätter poäng efter hur h har utvecklats från förra perioden. Har den gått upp blir det 1 poäng, ner –1 poäng osv. SummaTal har så summerat hur många poäng det finns under i detta fallet 10 perioder. Jag dividerar med 2 bara för att kurvorna inte skall skena iväg alltför långt utanför skärmen. Man kan ta något annat där om man vill. Detta är utgångsvärdet som man kan göra många roliga kurvor av.

                Jag har i detta fallet valt att göra två kurvor som betecknas ock ritas som smalRöd och streckadRöd. Dessa kurvor finns givetvis inlagda som separata script för visning. Det som jag noterat ovan är ju ett bevakningsscript. Här ovan har jag valt att visa flagga när smalRöd är över eller lika med streckadRöd, vilket skulle indikera en uppgång. Så här långt fungerar allt som man kan förvänta sig.

                Om jag nu vill använda detta som en del i ett större script vill jag undersöka om detta varit sant någon gång inom t.ex 10 per bakåt. Jag börjar med att kolla 2 per och skriver mult(hhv(signal,2),15) och får mycket riktigt även flagga när scriptet har varit sant förra per. Men försöker jag med mult(hhv(signal,3),15) får man ingen ytterligare flagga. Värden 3 och uppåt funkar alltså inte. Vad detta kan bero på har jag ingen susning om. Kan du Lasse se varför det inte funkar? (Detta är också ett ex. på när man inte kommer så långt med de första 10 parantesnivåerna, utan snabbt måste börja använda minnesreferenser.)

                Poängsättningscriptet fungerar utmärkt i vissa lägen, men i andra är det helt felaktigt. Här kommer mina tankar in, om att summera delar som jag tidigare nämt. Lita aldrig på EN metod som underlag för en affär!

                Comment


                • #9
                  HHV() rättat i ny utgåva 6.9.9.12 och senare

                  Den finns på plats nu enligt tidigare länkar.

                  Comment

                  Working...
                  X