Allmänt meddelande

Collapse
No announcement yet.

Bara updatera variabeln en gång om dagen/tidsenhet

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

  • Bara updatera variabeln en gång om dagen/tidsenhet

    Jag tänkte mig att jag skulle vilja ha ett MACD histogram och tänkte testa om det gick att göra på dagskurser. Tyvärr tror jag nog att jag gör eller tänker fel.

    Kod:
    inte_agera:=4
    inpådagen:=eqv(int(ref(d,inte_agera)),int(d))
    close_delay:=30
    öppet:=ge(mult(1440,sub(market(c),frac(date()))),close_delay)
    
    kp:=12
    lp:=26
    {## ss + 1 = 9 + 1##}
    ss:=10
    {## 2/(ss + 1)##}
    para:=DIV(2,ss)
    
    sgamla=GetGVar(scrpar(3))
    higamla=GetGVar(scrpar(1))
    
    kortperiod0=mov(cmpref(c,1,A),kp,e)
    långperiod0=mov(cmpref(c,1,A),lp,e)
    fast0=SUB(kortperiod0,långperiod0)
    {## signal = fast * 2/(ss+1) + gamlasignal * (1 - 2/(ss +1))##}
    signal0=ADD(MULT(fast0,para),MULT(sgamla,SUB(1,para)))
    hist0=SUB(fast0,signal0)
    
    gammdag=GetGVar(scrpar(23))
    nydag=NOT(EQV(int(date()),gammdag))
    dagend=IF(nydag,int(date()),gammdag)
    test1=AND(öppet,AND(inpådagen,nydag))
    
    setgvarif(hist0,scrpar(1),test1)
    setgvarif(signal0,scrpar(3),test1)
    setgvarif(dagend,scrpar(23),test1)
    
    {@A(0,)@B(60,)@C(15,)}
    Tanken är att om jag spar förra dagen int(date()) och jämför den med int(date()) nu så ska jag bara spara undan hist0 och signal0 en gång per dag.

    Det känns som att jag har krånglat till allt, finns det ett lättare sätt att göra?

  • #2
    Jo, det ser ut som att det är lite onödigt krångligt, man får enklast fram ett histogram med:

    histogram=sub(macd2(n),macd2(t))

    som helt enkelt beräknar skillnaden mellan de båda MACD-kurvorna. Därefter kan man ju alltid leka med olika färger baserat på stigande eller fallande staplar osv.

    Vill man ha MACD-värdet konstant över dagen och köra i ett intraday-script kan man göra enligt följande:


    mv1:=12
    mv2:=26
    mv3:=9

    i5(
    close=cmpref(c,0,a)
    m1=ema(close,mv1)
    m2=ema(close,mv2)
    diff=sub(m1,m2)
    mcd=ema(diff,mv3)
    hist=sub(diff,mcd)
    add(0,hist)
    )

    {@A(0,)}


    här används de båda medelvärdena och beräknas på extra objekt som är instrumentet man står på, låst i dagsupplösning. Då får vi en "trappstegskurva" men det beror bara på att värdet håller sig konstant under dagen.

    Attached Files

    Comment


    • #3
      Ah, helt klart enklare.

      Det är ännu inte självklart för mig att diff kan användas som en dataserie. Skulle det även i den här koden gå att ta skillnad mellan tidigare hist och nuvarande utan att dubblera koden?

      Nu kollar din exempelkod på compref(c,0,a) vilket är efter end of day(?) vilket är bra till att börja med men skulle jag kunna köra det här tex klockan 17:01 och ta det klockslaget som end of day?
      Tanken är att kolla hur stapeln ser ut lite innan dagen är slut och eventuellt hinna agera. Jag inser att det kan bli massa meck med halvdagar och liknande men då kankse man skulle kunna sätta att det ska ske 29 min innan stängning.

      Comment


      • #4
        Det är finessen med scriptspråket, man kan använda dataserier utan att behöva tänka på att beräkna saker i olika tidpunkter och spara ned osv. Det gör att vi kan jobba med väldigt lite kod och få väldigt mycket jobb gjort.

        cmpref(c,0,a) är alltså senast betalt i EOD-upplösning vilket betyder att det blir samma som C under innevarande dag, det uppdaterar sig live. Men en period bakåt blir "igår" eftersom vi valt EOD.

        Annars är ett bra sätt att kolla hur dagsstapeln ser ut strax innan stängning att använda villkor som blir sant ett par minuter innan. Om man använder Market() följder det även kalendern så att man tar hänsyn till halvdagar.

        stängning=le(mult(1440,sub(market(c),frac(date()))),6)

        Det här blir sant ett par minuter innan stängning, även halvdagar.

        Comment

        Working...
        X