Allmänt meddelande

Collapse
No announcement yet.

Oscillator under/över noll-linjen

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

  • Oscillator under/över noll-linjen

    Det finns i script-assistenten script för oscillator 5,20 korsar noll-linjen. Jag skulle behöva ett script som kontrollerar om man befinner sig ÖVER eller UNDER 0-linjen för ex.15minuters-period.
    Skall man använda sig av HHV, LLV för att mäta detta?

    En annan synvinkel på detta skulle kunna vara att när kursen passerar oscillatorns 0-linje uppifrån och ner sätta om en flagga till sälj att nu befinner sig oscillator under 0-linjen och sedan göra kontroll mot flaggan om den är på eller av i scripten. Omvänt för köp.

    Tacksam för svar..

  • #2
    Undrar om 5,20 oscillator är per 15 minuter då, eller annan upplösning?

    Svårighetsgraden är mycket olika beroende på hur du menar.

    En oscillator är inget konstigare än en ren skillnad mellan två medelvärden. En ren subtraktion alltså.


    osc1:=osc(c,5,20)
    ox1:=cross(osc1,0)
    olo:=lt(osc1,0)
    ohi:=ge(osc1,0)
    osigdn:=and(ox1,olo)
    osigup:=and(ox1,ohi)

    Här 5,20-oscillator på raden 'osc1'


    Detta ovan är samma sak som nedan

    data:=C
    m1:=mov(data,5,s)
    m2:=mov(data,20,s)
    osc1:=sub(m1,m2)
    ox1:=cross(osc1,0)
    olo:=lt(osc1,0)
    ohi:=ge(osc1,0)
    osigdn:=and(ox1,olo)
    osigup:=and(ox1,ohi)

    Här är också 'osc1'-raden oscillatorn

    Nu kan vi manipulera dataserien så att värden för innevarande period är t.ex Low istället för close. Vi kan skapa en dataserie som man beräknar medelvärdet på där det första värdet är Low och resten av värdena Close.

    Det kan se ut så här

    data:=if(eqv(getval(2),retval(d,2)),L,C)
    m1:=mov(data,5,s)
    m2:=mov(data,20,s)
    osc1:=sub(m1,m2)
    ox1:=cross(osc1,0)
    olo:=lt(osc1,0)
    ohi:=ge(osc1,0)
    osigdn:=and(ox1,olo)
    osigup:=and(ox1,ohi)

    Raden 'data' tarvar lite förklaring.
    retval(d,2) stoppar tidstämpeln för nuvarande period i minnesplats 2.
    getval(2) hämtar från samma minnesplats.
    I If()-satsen så testar man om nuvarande periods värde så returnera Low-värdet till dataserien, annars om annan period är nuvarande returnera Close.

    Skulle man göra en kurva av 'data' enbart så blir ju detta alltid Low-värdet man ritar för.

    Men i en dataserie till en funktion som t.ex Mov() så skall man ju plocka 5 respektive 20 värden i detta scriptet. Då blir det skillnad och första värdet blir Low men resten från close för respektive period.

    Om vi tar 2 script och ritar kurvor där det ena kör med lägsta för innevarande period, och det andra det högsta värdet.

    data:=if(eqv(getval(2),retval(d,2)),L,C)
    m1:=mov(data,5,s)
    m2:=mov(data,20,s)
    osc1:=sub(m1,m2)
    osc1

    data:=if(eqv(getval(2),retval(d,2)),H,C)
    m1:=mov(data,5,s)
    m2:=mov(data,20,s)
    osc1:=sub(m1,m2)
    osc1

    Jag bifogar bild på oscillatorkurvorna och du ser skillnaden på high eller low i första perioden, och close i resten bakåt.

    Att då testa oscillatorn med high för sista perioden, om den är under noll så har ju hela sista perioden haft oscillatorn under noll.

    Och tvärtom, den baserad på low testas om den är över noll, så har oscillatorn varit över noll hela den sista perioden.

    Märk att sista perioden lever med varje minuts kursinsamling.

    Det är ett sätt att attackera problemet.
    Attached Files

    Comment


    • #3
      Tack lasse.

      Jag skall testa lösningen ikväll på fb-maskinen.

      Vad jag avsåg egentligen var den graf som visas om man trycker på osc-knappen i vänster-kanten i fb med 5,20-värden. Där syns när oscillator går över/under noll-linjen i grafen. 15-minuter brukar jag ha vid uttestningen av script, däremot verkar osc-grafen skala enligt kurser.

      Scriptet för kontroll om under noll-linjen:

      data:=if(eqv(getval(2),retval(d,2)),L,C)
      m1:=mov(data,5,s)
      m2:=mov(data,20,s)
      osc1:=sub(m1,m2)
      ox1:=cross(osc1,0)
      olo:=lt(osc1,0)
      ohi:=ge(osc1,0)
      osigdn:=and(ox1,olo)
      osigup:=and(ox1,ohi)

      När jag skall göra ett sl-script för kontroll om osc under noll-linjen skall jag lägga på intraday-period enl nedan?

      i15(And(osigdn,osigup))

      Comment


      • #4
        i15(osigup)

        då beroende på att det är stigande du tittar efter på lägsta värdet(på rad 1 'data'). Men det kanske sällan blir sant i samma period att korsning sker och att hela perioden legat över.

        Så kanske så här

        i15(And(Hhv(osigup,2),ohi))

        Detta testar att du får grundsignalen(korsning någon gång inom 2 perioder, och att du innevarande period varit över hela perioden) och att innevarande period varit över noll hela perioden.

        Så öka på 2:an om du vill ha ännu lite mjukare villkor att du är längre från själva korsningen men ändå över hela perioden.

        Jag har en känsla av att du vill knyta ihop fler villkor än du avslöjat. Så du får berätta exakt vad du vill göra.

        Låt säga att du vill agera när en sista färdig stapel har haft signal hela perioden.

        i15(Aref(And(Hhv(osigup,2),ohi),1))

        blir ett sätt för uppsignal.


        kanske lite omskrivet så det inte rör ihop sig.

        uppsignal:=And(Hhv(osigup,2),ohi)
        i15(Aref(uppsignal,1))

        Då syns det bättre vad man gör.

        Oscillatorgrafen i programmet skalar inte efter kurser. Det är en skillnadsgraf mellan två medelvärden så den är automatiskt skalad.

        Så titta inte i min exempelgraf efter skärningar med kurser eller något sådant.

        Comment

        Working...
        X