Allmänt meddelande

Collapse
No announcement yet.

Avrundningsfel?

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

  • Avrundningsfel?

    I mina försök att förstå hur AT räknar, har jag jämfört några olika sätt att göra samma sak, och fått lite underliga resultat.

    Jag beräknar det flytande medelvärdet, dels med ATs Mov-funktion, dels med min egen funktion (som bygger på Ref, Add och Div).

    För 4 perioder är medelvärdeskurvorna identiska. Vid 6 perioder kan man börja se att det är en liten skillnad mellan kurvorna. Vid 10 perioder har min kurva blivit påtagligt guppigare och dessutom ligger den lägre.

    Är det avrundningsfel i ATs beräkningar? Jag har nämligen i andra beräkningar svårt att få rätt kurvform jämfört med identiska beräkningar i Excel, därav dessa tester.

    Går det att höja beräkningsnogrannheten i ATs beräkningar, dvs styra antalet decimaler i beräkningarna? Några andra tips?

    Jag måste scripta på denna "låga" nivå (se script nedan) för det jag vill åstadkomma, även om det inte är just Mov-beräkningen jag har problem med (bara ett exempel här).

    --------------------------------------------

    {ATs flytande medelvärde med 4 perioder}
    atmov=mov(C,4,s)

    {Kenneths flytande medelvärde med 4 perioder}
    kmed01=Abs(Ref(C,0))
    kmed02=Abs(Ref(C,1))
    kmed03=Abs(Ref(C,2))
    kmed04=Abs(Ref(C,3))

    kmedx01=Add(kmed01,kmed02)
    kmedx02=Add(kmed03,kmed04)

    kmedsum=Add(kmedx01,kmedx02)

    kmov=Div(kmedsum,4)


    {uppritning, 4 perioder}
    draw(atmov,3,CAA)
    draw(kmov,4,BAA)
    draw(C,5,WAC)


    --------------------------------------------


    {ATs flytande medelvärde med 6 perioder}
    atmov=mov(C,6,s)

    {Kenneths flytande medelvärde med 6 perioder}
    kmed01=Abs(Ref(C,0))
    kmed02=Abs(Ref(C,1))
    kmed03=Abs(Ref(C,2))
    kmed04=Abs(Ref(C,3))
    kmed05=Abs(Ref(C,4))
    kmed06=Abs(Ref(C,5))

    kmedx01=Add(kmed01,kmed02)
    kmedx02=Add(kmed03,kmed04)
    kmedx03=Add(kmed05,kmed06)

    kmedxx01=Add(kmedx01,kmedx02)
    kmedxx02=Add(kmedx03,0)

    kmedsum=Add(kmedxx01,kmedx02)

    kmov=Div(kmedsum,6)

    {uppritning, 6 perioder}
    draw(atmov,3,CAA)
    draw(kmov,4,BAA)
    draw(C,5,WAC)


    --------------------------------------------


    {ATs flytande medelvärde med 10 perioder}
    atmov=mov(C,10,s)

    {Kenneths flytande medelvärde med 10 perioder}
    kmed01=Abs(Ref(C,0))
    kmed02=Abs(Ref(C,1))
    kmed03=Abs(Ref(C,2))
    kmed04=Abs(Ref(C,3))
    kmed05=Abs(Ref(C,4))
    kmed06=Abs(Ref(C,5))
    kmed07=Abs(Ref(C,6))
    kmed08=Abs(Ref(C,7))
    kmed09=Abs(Ref(C,8))
    kmed10=Abs(Ref(C,9))

    kmedx01=Add(kmed01,kmed02)
    kmedx02=Add(kmed03,kmed04)
    kmedx03=Add(kmed05,kmed06)
    kmedx04=Add(kmed07,kmed08)
    kmedx05=Add(kmed09,kmed10)

    kmedxx01=Add(kmedx01,kmedx02)
    kmedxx02=Add(kmedx03,kmedx04)
    kmedxx03=Add(kmedx05,0)

    kmedxxx01=Add(kmedxx01,kmedx02)
    kmedxxx02=Add(kmedxx03,0)

    kmedsum=Add(kmedxxx01,kmedxxx02)

    kmov=Div(kmedsum,10)

    {uppritning, 10 perioder}
    draw(atmov,3,CAA)
    draw(kmov,4,BAA)
    draw(C,5,WAC)

  • #2
    Du har glömt ett x

    Detta borde funka... Du hade glömt ett "x" 6 dagars och på 10 dagars... ("kmedx02" ska vara "kmedxx02")...

    -------------------Rätt-------------------------

    {ATs flytande medelvärde med 4 perioder}
    atmov=mov(C,4,s)

    {Kenneths flytande medelvärde med 4 perioder}
    kmed01=Abs(Ref(C,0))
    kmed02=Abs(Ref(C,1))
    kmed03=Abs(Ref(C,2))
    kmed04=Abs(Ref(C,3))

    kmedx01=Add(kmed01,kmed02)
    kmedx02=Add(kmed03,kmed04)

    kmedsum=Add(kmedx01,kmedx02)

    kmov=Div(kmedsum,4)


    {uppritning, 4 perioder}
    draw(atmov,3,CAA)
    draw(kmov,4,BAA)
    draw(C,5,WAC)


    --------------------------------------------


    {ATs flytande medelvärde med 6 perioder}
    atmov=mov(C,6,s)

    {Kenneths flytande medelvärde med 6 perioder}
    kmed01=Abs(Ref(C,0))
    kmed02=Abs(Ref(C,1))
    kmed03=Abs(Ref(C,2))
    kmed04=Abs(Ref(C,3))
    kmed05=Abs(Ref(C,4))
    kmed06=Abs(Ref(C,5))

    kmedx01=Add(kmed01,kmed02)
    kmedx02=Add(kmed03,kmed04)
    kmedx03=Add(kmed05,kmed06)

    kmedxx01=Add(kmedx01,kmedx02)
    kmedxx02=Add(kmedx03,0)

    kmedsum=Add(kmedxx01,kmedxx02)

    kmov=Div(kmedsum,6)

    {uppritning, 6 perioder}
    draw(atmov,3,CAA)
    draw(kmov,4,BAA)
    draw(C,5,WAC)


    --------------------------------------------


    {ATs flytande medelvärde med 10 perioder}
    atmov=mov(C,10,s)

    {Kenneths flytande medelvärde med 10 perioder}
    kmed01=Abs(Ref(C,0))
    kmed02=Abs(Ref(C,1))
    kmed03=Abs(Ref(C,2))
    kmed04=Abs(Ref(C,3))
    kmed05=Abs(Ref(C,4))
    kmed06=Abs(Ref(C,5))
    kmed07=Abs(Ref(C,6))
    kmed08=Abs(Ref(C,7))
    kmed09=Abs(Ref(C,8))
    kmed10=Abs(Ref(C,9))

    kmedx01=Add(kmed01,kmed02)
    kmedx02=Add(kmed03,kmed04)
    kmedx03=Add(kmed05,kmed06)
    kmedx04=Add(kmed07,kmed08)
    kmedx05=Add(kmed09,kmed10)

    kmedxx01=Add(kmedx01,kmedx02)
    kmedxx02=Add(kmedx03,kmedx04)
    kmedxx03=Add(kmedx05,0)

    kmedxxx01=Add(kmedxx01,kmedxx02)
    kmedxxx02=Add(kmedxx03,0)

    kmedsum=Add(kmedxxx01,kmedxxx02)

    kmov=Div(kmedsum,10)

    {uppritning, 10 perioder}
    draw(atmov,3,CAA)
    draw(kmov,4,BAA)
    draw(C,5,WAC)
    NiclasGBG

    Comment


    • #3
      Ah, vilken blunder! Stort tack för det. Ja, det blir många x etc i mina script och mycket att hålla reda på. Jag genererar till och med scripten i Excel med hjälp av dess automatiska uppstegningsfunktion, och det hade smugit in sig ett fel som slog igenom på en massa ställen.

      Comment

      Working...
      X