Allmänt meddelande

Collapse
No announcement yet.

Galet mysterium med Aref().

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

  • Galet mysterium med Aref().

    Jag har suttit och laborerat lite med olika lösningar på variabla tidsfördröjningar för köp och säljsignaler, och ramlade då över ett "galet mysterium" där aref() var inblandat.

    Jag trodde i min enfald att aref(buy,1) syftade på en period bakåt, där perioden bestäms av intraday-upplösningen för scriptet, såsom tidigare sagts. Emellertid när jag testkör tidsfördröjar-scriptetet nedan mot köp-scriptet och låter båda larma för analys, löser de ut inom samma minut. Det jag hade trott skulle hända var att tidsfördröjar-scriptet skulle lösa ut 7 min senare än köp_skriptet.

    Kanske är det så att perioden i aref() syftar till den senaste uppdateringen/skrivningen som gjorts? Dvs. om scripten nedan kopplas till ett diagram så skrivs det i cell 500 var 5:e sekund, och aref(buy,1) syftar då på 5 sek bakåt, och aref(buy,120) syftar på 2min bakåt.

    Jag testade denna hypotes och skrev aref(buy,120) för två minuter, men till min förvåning löser scriptet ut inom samma minut i alla fall.
    Dvs. i detta fall spelar ingen roll vilken period man skriver in i aref() det blir samma resultat i alla fall.

    Är det så att ”buy” nedan inte genererar någon dataserie? Aref() fungerar ju i andra köpscript med buy inblandat, så detta är för mig ett stort mysterium.

    Kan någon reda ut detta galna mysterium med aref() vore jag tacksam.


    sl) { Köp }
    i15(
    bla
    bla
    köp5=…….
    SetGvarIf(köp5,500,1,T)
    mult(köp5,10)
    )

    sl) { Tidsfördröjning köp }
    i7(
    buy=GetGvar(500,N)
    buy2=and(buy,aref(buy,1))
    mult(buy2,10)
    )

  • #2
    Precis,
    Vad jag förstår så försvinner tidsserien när man skickar data mellan script genom globala variabler. Dessa är endast momentana skalärvärden så AREF har inget att "se tillbaka på". Rickard har säkert något att tillägga.

    Comment


    • #3
      Jo, men lite konstigt är det ändå. Aref() tittar ju inte på den globala variabeln utan på minnesreferensen "buy", och den lagrar ju tydligen dataserier, annars skulle inte aref(buy,1) fungera i andra script. GetGvar() pumpar ju på med data var 5:e sekund.

      Kanske går det bättre om man skriver buy=mult(GetGvar(500,N),1) så att man får en scriptfunktion emellan?

      Comment


      • #4
        Buy hämtar sitt värde från en global cell som inte innehåller någon tidserie, och därmed får inte heller buy en dataserie. Det är helt riktigt bara ett momentant värde som cellen innehåller "just nu".

        Comment


        • #5
          Edit: -------------

          Comment


          • #6
            Ursprungligen postat av Rikard Nilsson Visa inlägg
            Buy hämtar sitt värde från en global cell som inte innehåller någon tidserie, och därmed får inte heller buy en dataserie. Det är helt riktigt bara ett momentant värde som cellen innehåller "just nu".

            Men hur kommer det sig då att raderna nedan i slutet av ett script fungerar för att slippa brus?
            Är det för att buy-serien högre upp har innehållit en sådan funktion?

            i15(
            .
            buy7=......
            buy8=and(buy7,aref(buy7,1))
            mult(buy8,5)
            )
            Last edited by LillWicke; 2012-06-01, 10:59.

            Comment


            • #7
              Exakt, om buy7 baseras på "vanliga villkor" och andra dataserier kan man även titta bakåt i buy7 som en dataserie.

              Comment


              • #8
                Ursprungligen postat av Rikard Nilsson Visa inlägg
                Exakt, om buy7 baseras på "vanliga villkor" och andra dataserier kan man även titta bakåt i buy7 som en dataserie.

                Tiotusenkronorsfrågan blir då:
                Kan man hitta en funktion som genererar en dataserie i vilken man kan stoppa in GetGvar() som parameter i?

                Comment


                • #9
                  I scriptmanualen står att läsa om And().
                  "Returnerar dataserie med logiskt värde SANT eller FALSKT."

                  Varför fungerar då inte det jag nyligen testade:

                  sl) { Tidsfördröjning köp }
                  i7(
                  buy1=and(GetGvar(500,N),1)
                  buy2=and(buy1,aref(buy1,1))
                  mult(buy2,10)
                  )

                  Comment


                  • #10
                    Ursprungligen postat av LillWicke Visa inlägg
                    I scriptmanualen står att läsa om And().
                    "Returnerar dataserie med logiskt värde SANT eller FALSKT."

                    Varför fungerar då inte det jag nyligen testade:

                    sl) { Tidsfördröjning köp }
                    i7(
                    buy1=and(GetGvar(500,N),1)
                    buy2=and(buy1,aref(buy1,1))
                    mult(buy2,10)
                    )

                    x=GetVar(500,N) {skalär}

                    borde då transformeras till en dataserie genom And(x,1)
                    till ==> [x,x,x,x,x,x,x,x,x]. Dvs en dataserie med samma värde på alla positionerna.


                    Men jag håller med att man borde kunna skicka dataserier mellan script.
                    Ännu hellre så borde man kunna använda script inne i andra script, så att man kan skapa mindre funktioner.

                    Tex:
                    D=MinFunktion(A,B,C)

                    Vilken fröjd NATs scriptspråk hade blivit då. Eller vad säger du Rickard?

                    Comment


                    • #11
                      Ursprungligen postat av cerion Visa inlägg
                      x=GetVar(500,N) {skalär}

                      borde då transformeras till en dataserie genom And(x,1)
                      till ==> [x,x,x,x,x,x,x,x,x]. Dvs en dataserie med samma värde på alla positionerna.
                      "En dataserie med samma värde på alla positionerna."
                      Nu är jag inte riktigt med hur du tänker. Du får ju en dataserie bestående av ettor och nollor.

                      Eller menar du kanske "en dataserie ut som erhåller samma värden, som GetGvar() matar in, på alla positionerna"? I så fall är vi överens.

                      Nåväl, hur som helst, problemet går inte att lösa på detta sätt i alla fall, vilket är synd.

                      Comment


                      • #12
                        Ursprungligen postat av cerion Visa inlägg
                        Men jag håller med att man borde kunna skicka dataserier mellan script.
                        Ännu hellre så borde man kunna använda script inne i andra script, så att man kan skapa mindre funktioner.

                        Tex:
                        D=MinFunktion(A,B,C)

                        Vilken fröjd NATs scriptspråk hade blivit då. Eller vad säger du Rickard?
                        Jo du, det skulle vara nåt.

                        Comment


                        • #13
                          Ponera att SetGVarIf() skulle hantera dataserier. Vilken upplösning skulle det bli om vi har två ( eller flera) script som skriver och läser från cellen i olika upplösning?

                          Comment


                          • #14
                            Ursprungligen postat av Rikard Nilsson Visa inlägg
                            Ponera att SetGVarIf() skulle hantera dataserier. Vilken upplösning skulle det bli om vi har två ( eller flera) script som skriver och läser från cellen i olika upplösning?
                            Det får bli den upplösning som den skrivs ner som. Sen är det upp till de andra scripten att veta det. Inte svårare än att man ska veta vilken minnesreferens man ska GetGVar() ifrån.

                            Men allt hade ju lösts genom funktionsbaserade script, som jag nämde ovan. Då hade man ju anropat scripten i rätt upplösning direkt.
                            Tänk Matlab-script tex.

                            Comment

                            Working...
                            X