Allmänt meddelande

Collapse
No announcement yet.

Skillnad date() och d

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

  • Skillnad date() och d

    Date() Används för att ta reda på datum och klockslag enligt datorns systemklocka.

    D är vad jag förstår tiden som är stämplad på instrumentets data.

    Problem :
    Jag har de senaste månaderna haft stora skillnader mellan simuleringar och skarpa körningar med mina daytradingscript.

    Jag använder mig av globala variabler som jag räknar upp för antal avslut för strategin per dag samt ackumulerad dagsvinst.

    Jag nollar dessa variabler kl 09.01 varje dag med kommandona

    i1(
    tid0=eqv(int(mult(frac(d),1440)),541)
    SetGVarIf(0,100,tid0,T)
    SetGVarIf(0,202,tid0,T)
    ...

    Genom att addera en global variabel till c samt rita ut med draw upptäckte jag att variablerna inte alls var nollade.

    Detta var senare på handelsdagen och jag ändrade då nollningen från 541 till 1032 dvs 17.12
    Döm om min förvåning då scriptet aktiverades redan 17.10 !
    Det verkar alltså som om d går 2 minuter före Date()
    Detta betyder att min ordinarie nollning gjordes 08.59 innan scripten rullat igång dvs nollningen gjordes alltså inte.

    Min datorklocka går perfekt och synkar med tiden som visas då instrumentet uppdateras i instrumentgruppfönstret.

    Jag misstänker att det kommit in något trunkeringsfel eller liknande vid någon programuppdatering av Nat där man tar fram d. Alternativt har det alltid varit så men att mina strategier blivit mer komplexa så att allt inte hinner hoppa igång från 08.57 då allt startas upp till kl 08.59 då min nollning skulle skett med hänsyn till att d går två minuter före.

    För att se felet skrev jag följande script:

    i1(
    skillnad01=add(sub(D,date()),c)
    draw(skillnad01,4,rqb0)
    Mult(0,25)
    )

    Resultatet blir då så här dvs felet adderar sig bakåt.


    Jag har nu ändrat att nollningen skall göras 09.03 enligt
    tid0=eqv(int(mult(frac(d),1440)),543)
    I verkligheten kommer det att ske 09.01 vilket är vad jag önskar.

    mvh
    Bertil


    Edit: Jag önskar ingen ändring om det skulle vara en bugg, för då måste jag gå igenom hundratals ordermodeller och justera varje rad d förekommer.
    Attached Files
    Last edited by Bertil; 2020-01-07, 20:00.

  • #2
    Stämmer datorns klocka?

    Comment


    • #3
      Ursprungligen postat av Rikard Autostock Visa inlägg
      Stämmer datorns klocka?

      Javisst, den visar ju samma tid som instrumentgruppfönstret där man ser tiden för varje instrumentuppdatering.
      mvh
      Bertil

      Comment


      • #4
        d är väl tiden då stapeln börjar och date() datortid oberoende stapel. Dvs d blir beroende av upplösning. Jag skulle skriva värdena till fil och inte använda diagram då date() används. Annars ifrågasätter jag inte ditt problem och ska kolla imorgon.

        Edit:
        Skillnaden blir ungefär lika mycket i minuter som upplösningen då stapeln är fullbordad. Dvs 1 minut för 1 minuts upplösning, 2 för 2 minuter osv. Undantag dagsuypplösning. Kollade i simulatorn.
        Sedan såg jag lite lustigheter som förmodligen beror på tiden vid bildandet av nya stapeln. Med d blir första minuten(00) på dagen rätt. Sedan laggar det en minut.
        Jag förstår inte varför du använder använder "d" och inte date(). d är som beskrivet tid vid bildande av stapeln beroende av stapelns upplösning. Om du envisas med att använda "d",1 minuts upplösning och hela minuter verkar det fungera om följande används, vilket du i så fall själv får testa: int(add(mult(frac(d),1440),0.5)). Ska inte användas på date(), utan bara d.

        Sedan har jag ingen aning om ditt sätt använda globala celler påverkar. Kanske blir samma sak, men ser aldrig att någon använder metoden även om den beskrivs i manualen.
        Du använder: SetGVarIf(0,100,tid0,T)
        Jag använder: SetGVarIf(0,100,tid0)

        Om problemet kvarstår bör nog debugging ske separat och inte ihop med en massa andra script som kan påverka.
        Last edited by Henric; 2020-01-09, 07:08.

        Comment


        • #5
          Visst, man skall alltid renodla vid debugging. Så här ser mitt script ut:

          i1(
          skillnad01=add(sub(D,date()),1820)
          draw(skillnad01,4,rqb0)
          Mult(0,25)
          )

          Och så här blir grafen:


          Man ser ju tydligt hur skillnaden laggar kontinuerligt under handelsdagen med steg mellan handelsdagarna. Varför blir det så?

          mvh
          Bertil

          Edit: Tror inte felet finns i simulatorn, men har inte dubbelkollat.
          Edit2: Skillnadsglappet mellan handelsdagarna kan bli lite vad som helst.
          Attached Files
          Last edited by Bertil; 2020-01-09, 11:52.

          Comment


          • #6
            Det finns nog en förklaring till ditt problem. Tills dess skrämmer du mig.

            Rikard får rätta mig om jag har fel:

            1. Date() fungerar inte korrekt i diagram då d används för stapeltid. Inget inne i stapeln behandlas, även i 1 minutsupplösning. Kanske om du använder SetGvarIfGui skarpt.
            2. sub(d,date()) ska aldrig kunna bli positivt
            3. Verklig skillnad(inte diagram) mellan d och date() beror på vald timeframe/upplösning.

            Comment


            • #7
              Stämmer precis såvitt jag vet.

              Comment


              • #8
                Ursprungligen postat av Rikard Autostock Visa inlägg
                Stämmer precis såvitt jag vet.

                Och vad beror skillnaden i diagrammet i #5 på?
                Borde ju vara en rät linje.
                mvh
                Bertil

                Comment


                • #9
                  Förmodligen tiden just då diagrammet ritas. I simulatorn och skarpt är det datortiden vid varje insamling.
                  Last edited by Henric; 2020-01-09, 22:34.

                  Comment


                  • #10
                    Ursprungligen postat av Henric Visa inlägg
                    Förmodligen tiden just då diagrammet ritas. I simulatorn och skarpt är det datortiden vid varje insamling.
                    Jo så kan det vara. Då man ritar diagram som innehåller date() så är det datortiden vid ögonblicket för ritadet som används.

                    Slutsats: Då man ritar diagram så kan man aldrig lita på diagrammet om det i någon beräkning innehåller någon funktion med date().

                    Däremot är det helt lugnt att köra minutupplösning och använda d.

                    mvh
                    Bertil

                    Comment


                    • #11
                      Jo, det är ju det jag försökt förklara hela tiden. Ska man ge ett förslag så borde diagramritning konvertera date() till d eftersom att det ändå bara är fullbordade staplar som ritas. Det går nog inte att vinna och att det förmodligen finns en nackdel med det sättet.

                      Lugnt vet jag inte. Det blir en bra uppskattning om man simulerar och triggar med minutsampling. Annars är det ca 10ggr fler triggerchanser inne i stapeln och beror på modell.

                      Comment

                      Working...
                      X