Allmänt meddelande

Collapse
No announcement yet.

NAT stoppar utan att indikera detta

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

  • NAT stoppar utan att indikera detta

    Jag har fått stora problem med NAT senaste veckan. Trots total ominstallation är problemet kvar.
    Problemet yttrar sig så att de skarpa ordermodellerna slutar att trigga utan någon som helst indikation om detta.
    Om man går ur NAT letar upp filen Deblog.txt och tex söker på Exception code=c0000005 så kan det se ut så här:

    2017-04-27 13:01:49.838 Private feed - Is Alive
    2017-04-27 13:01:54.939 Private feed - Is Alive
    2017-04-27 13:01:55.380 Dll - Exception code=c0000005 Address=04df1848
    Flags=00000000
    2017-04-27 13:01:55.384 WhileJobTodo aborted due to exception!
    2017-04-27 13:01:55.427 undo_bors - instance 0x04f94613 - active 2
    2017-04-27 13:02:00.034 Private feed - Is Alive
    2017-04-27 13:02:05.158 Private feed - Is Alive
    2017-04-27 13:02:10.381 Private feed - Is Alive
    2017-04-27 13:02:14.974 Private feed - Is Alive
    2017-04-27 13:02:16.523 Watchdog - 5 minute heartbeat - code 0
    2017-04-27 13:02:20.095 Private feed - Is Alive

    Idag kom felet först enligt ovan men ibland kan det komma någon timma tidigare. Enda sättet att hitta felet under handelsdagen är att starta simulatorn och se om man där får någon trigg som man inte fått skarpt. Om så är fallet så får man starta om NAT. Annars måste man starta om NAT varje timma i förebyggande syfte. Har någon annan råkat ut för samma fel?
    undrar
    Bertil

  • #2
    Efter en del detektivarbete har jag härlett problemet till ett script. Ibland stannade NAT efter 2 timmar och ibland efter 6 timmar. Dock aldrig några problem i Analysatorn.
    Scriptet är komplicerat med multiplikationer och rotutdragningar samt variation av antal perioder i beräkningarna beroende på öppningsgapet.

    På grund av periotidsberäkningenens komplexiet kunde den inte utföras med := beräkningar utan fick delvis utföras med = nedanför indelningen.

    Detta medförde att man fick gardera med :maxvärde i beräkningarna. Troligen blev det då något minnesläckage eller annat beräkningsfel efter en viss tid.

    Man kan dock gå runt detta problem. Och här kommer själva tipset:

    Genom att spara till en global variabel och senare i scriptet ta fram den globala variabeln bryter detta antal parentesnivåer som ju kan vara max 10.



    Med vänlig hälsning
    Bertil
    Last edited by Bertil; 2017-05-03, 19:36.

    Comment


    • #3
      Exempel
      Nedanstående script ger 11 parentesnivåer där max 10 är tillåtna och kan inte exekveras.

      längd03:=35
      längd04:=65

      perioder01:=Sub(int(mult(frac(d),1440)),541)
      igårclose01:=aref(c,add(perioder01,6))
      idagopen01:=aref(c,add(perioder01,1))
      diff03:=sub(idagopen01,igårclose01)
      längd02:=if(Gt(ABS(diff03),3),längd03,längd04)

      vol:=Add(v,1)

      i1(
      hugo02=mov(mult(mult(c,vol),mult(c,vol)),längd02)
      sliten02=mov(mult(vol,vol),längd02)
      kvot02=sqrt(Div(hugo02,sliten02))
      mv02=mov(c,längd02)
      diff02=Sub(mv02,kvot02)
      lutning02=Mult(Div(Sub(mv02,aref(mv02,1)),mv02),1000)
      )


      Då man flyttar ner längd02 får scriptet 10 parentesnivåer och kan exekveras men stoppar NAT efter ett antal timmar.
      längd03:=35
      längd04:=65

      perioder01:=Sub(int(mult(frac(d),1440)),541)
      igårclose01:=aref(c,add(perioder01,6))
      idagopen01:=aref(c,add(perioder01,1))
      diff03:=sub(idagopen01,igårclose01)

      vol:=Add(v,1)

      i1(
      längd02=if(Gt(ABS(diff03),3),längd03,längd04)

      hugo02=mov(mult(mult(c,vol),mult(c,vol)),längd02:100)
      sliten02=mov(mult(vol,vol),längd02:100)
      kvot02=sqrt(Div(hugo02,sliten02))
      mv02=mov(c,längd02:100)
      diff02=Sub(mv02,kvot02)
      lutning02=Mult(Div(Sub(mv02,aref(mv02,1)),mv02),1000)
      )


      Gör man då själva tricket att mellanlagra i en global variabel så får man bara 5 parentesnivåer och kan ha längd02 med :=
      längd03:=35
      längd04:=65

      perioder01:=Sub(int(mult(frac(d),1440)),541)
      igårclose01:=aref(c,add(perioder01,6))
      idagopen01:=aref(c,add(perioder01,1))
      SetGVarIf(sub(idagopen01,igårclose01),1020,1,T)
      diff03:=GetGVar(1020)
      längd02:=
      if(Gt(ABS(diff03),3),längd03,längd04)

      vol:=Add(v,1)

      i1(
      hugo02=mov(mult(mult(c,vol),mult(c,vol)),längd02)
      sliten02=mov(mult(vol,vol),längd02)
      kvot02=sqrt(Div(hugo02,sliten02))
      mv02=mov(c,längd02)
      diff02=Sub(mv02,kvot02)
      lutning02=Mult(Div(Sub(mv02,aref(mv02,1)),mv02),1000)
      )


      Med vänlig hälsning
      Bertil
      Last edited by Bertil; 2017-05-03, 20:20.

      Comment


      • #4
        Tackar för lösningen! Alternativt gissar jag att det fungerar lika bra om man flyttar ner allt utom tilldelade namn innanför intradayprefixet (och tar bort kolon).

        Comment


        • #5
          Ursprungligen postat av Rikard Autostock Visa inlägg
          Tackar för lösningen! Alternativt gissar jag att det fungerar lika bra om man flyttar ner allt utom tilldelade namn innanför intradayprefixet (och tar bort kolon).

          Du menar att scripta så här:

          längd03:=35
          längd04:=65


          vol:=Add(v,1)

          i1(
          perioder01=Sub(int(mult(frac(d),1440)),541)
          igårclose01=aref(c,add(perioder01,6))
          idagopen01=aref(c,add(perioder01,1))
          diff03=sub(idagopen01,igårclose01)

          längd02=if(Gt(ABS(diff03),3),längd03,längd04)

          hugo02=mov(mult(mult(c,vol),mult(c,vol)),längd02)
          sliten02=mov(mult(vol,vol),längd02)
          kvot02=sqrt(Div(hugo02,sliten02))
          mv02=mov(c,längd02)
          diff02=Sub(mv02,kvot02)
          lutning02=Mult(Div(Sub(mv02,aref(mv02,1)),mv02),1000)
          )

          Det borde fungera och ger bara parentesdjupet 4.

          Med vänlig hälsning
          Bertil

          Comment


          • #6
            Ja, precis. Allt som är returvärden från funktioner kan läggas som minnesreferenser. Det går snabbare att exekvera.

            Comment


            • #7
              Ursprungligen postat av Rikard Autostock Visa inlägg
              Ja, precis. Allt som är returvärden från funktioner kan läggas som minnesreferenser. Det går snabbare att exekvera.
              Jag har alltid trott att det gick snabbare med tilldelningen := och har därför alltid försök att maximera parentesdjupet, men det gör alltså bara scripten slöare?

              Med vänlig hälsning
              Bertil

              Comment


              • #8
                Nu har problemet kommit tillbaka. Jag vet inte hur jag skall åtgärda det.
                Problemet har kostat mig många tusen kronor. Eftersom jag daytradar så märker jag ju direkt om inte affären avslutas på eftermiddagen.
                Det är ju möjligt att många andra råkat ut för problemet utan att märka det.
                Problemet kan förekomma en dag utan att man upptäcker det (daytradar ju inte på måndagar). Nästa dag då NAT initieras så fungerar allt igen, för att sedan återkomma dagen därpå.
                Idag kom problemet:
                2017-07-18 15:30:27.380 Dll - Exception code=c0000005 Address=04e21848 Flags=00000000
                2017-07-18 15:30:27.380 WhileJobTodo aborted due to exception!
                2017-07-18 15:30:27.396 undo_bors - instance 0x04fc4613 - active 2

                Jag har gått igenom alla 1436 script som jag har i NAT och kontrollerat syntaxen och rättat alla fel (förutom i ett par script som jag aldrig använt), men det löste inte problemet.

                Rikard skulle du inte kunna göra så att NAT startar om då Exception code=c0000005 inträffar?


                Med vänlig hälsning
                Bertil
                Last edited by Bertil; 2017-07-18, 21:44.

                Comment


                • #9
                  Hm, så det startar inte om själv? Eller vad händer mer i detalj?

                  Comment


                  • #10
                    Ursprungligen postat av Rikard Autostock Visa inlägg
                    Hm, så det startar inte om själv? Eller vad händer mer i detalj?
                    Det händer ingenting. Felet kan närmast betraktas som att sätta NAT i paus utan att tala om det.

                    Med vänlig hälsning
                    Bertil

                    Comment


                    • #11
                      Hm, fortsätter kursinsamlingen men orderläggningen "dör"? Kör du Obemannad högsta säkerhetsnivå ikryssad eller urkryssad?

                      Comment


                      • #12
                        Kursinsamlingen forsätter och draw ritas i diagrammen som vanligt.
                        Jag har inte Obemannad säkerhet ibockad.
                        Med vänlig hälsning
                        Bertil

                        Comment


                        • #13
                          Ok, så script körs alltså men inte orderläggningen. Märkligt, vi får undersöka närmare vad just den exception-koden betyder.

                          Comment


                          • #14
                            Jo man kan googla på det. Kan exempelvis bero på stack overflow i c++.
                            Jag har ju rätt komplicerad kod. I exemplet ovan så löstes ju problemet med att minska antalet parentesnivåer. Men sedan dess har jag ju skrivit lite mer kod. Jag vet ju inte om det är ett script eller den samlade mängden script som skall exekveras som orsakar problemet.
                            Men vore bra om NAT startade om automatiskt då problemet inträffar.

                            Med vänlig hälsning
                            Bertil

                            Comment


                            • #15
                              Ah, prova att ställa upp stackutrymmet i inifilen:

                              [Globalt]
                              scriptmaxstack=600000


                              Öka till tex 1200000, spara filen och starta om AT.

                              Comment

                              Working...
                              X