Allmänt meddelande

Collapse
No announcement yet.

Scriptproblem

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

  • Scriptproblem

    Hej!

    Vad menas med parentesdjup?

    Räknas parentesdjupet enbart på en programrad, en funktion?

    Eller, om funktionen innehåller någon variabel, kan variabelns parentesdjup ärvas från där den beräknades?

    Syntaxtesten uppträder fortfarande som om den vore min fiende, men tiger som muren!

    /Torbjörn

  • #2
    Det som avgör parentesdjup är hur många funktioner som blir staplade i varandra.

    Alla tilldelade namn är egentligen inga variabler i vanlig mening, utan enbart en kortare namn för ett längre uttryck. Det görs alltså en sök-ersätt operation genom hela scriptet med detta uttryck.

    Slutresultat ett fåtal AKTIVA uttryck på slutet, vanligen ett enda.

    Men Roine då, vilket uttryck!!!

    Det blir något som är omöjligt att läsa ut. Därav kom de tilldelade namnen till , så man kan skriva i små grupper och hålla reda på sig.

    Så den djupaste av alla parenteserna kan vara max 10 nivåer. Detta är std internet-versionens maxgräns.

    I ActiveTrader har du möjligheten att skriva 32 st sådana uttryck om 10 nivåers djup vardera. Det gör med hjälp av minnesreferenser.

    Det skrivs helt enkelt med likhetstecken enbart(inget kolon). Dessa minnesreferenser måste komma sist dvs efter alla tilldelade namn.

    Jag har tagit upp detta på annan plats i Forum tidigare hur man använder detta. Sök förslagsvis på ordet 'referens' eller något sådant.

    Comment


    • #3
      Torsten föreslog att jag skulle lägga ut mitt problemfyllda script här för allmän beskådan. I så fall måste jag nog förklara att det inte är färdigt. Egentligen ville jag bara öva på att skriva ett lite mer komplicerat script, men det blev nog mer än jag kunde svälja. Få se om någon kan hjälpa mig upp på spåret igen.

      Vad jag vill göra är att hitta HHV mellan dagens börsöppning och nu, dvs. beräkna hur många perioder som gått från öppningen till nu. Jag använder Date() för att ta reda på nutid, och fltrerar fram decimalerna som ger klock-tiden.

      Felet dyker upp någonstans mot slutet i scriptet, men kan förstås bero på någonting högre upp. I ett försök att inringa felet har jag slagit isär några satser som annars kunde vara nästade inuti varandra:

      {sl) TMA - Sälj I-day, flytande stop-loss }
      {x% under högsta hittills idag}
      {Rev 2002-03-25}

      {Inställningar:}
      enperiod:=1 {minuter}
      Börsmorgon:=9.5 {Kl. 09:30}
      Börskväll:=17.5 {Kl 17:30}
      procentner:=0 {% under högsta värdet}
      flagghöjd:=10

      {Program:}
      stoppfaktor:=Div(Sub(100,procentner),100)

      {Beräkna ett antal parametrar som}
      {decimaldelar av ett dygn}
      ettdygn:=Mult(24,60) {Antal minuter per dygn}
      enminut:=Div(1,ettdygn) {Antal dygn per minut})
      börsstart:=Mult(Mult(börsmorgon,60),enminut) {Börsen öppnar}
      börsslut:=Mult(Mult(börskväll,60),enminut) {Börsen stänger}

      {Beräkna aktuell tid på börsdagen}
      tidnu:=Frac(Date()) {Tid på dagen}

      {Beräkna aktuell period från börsstart}
      exakt1:=Sub(tidnu,börsstart)
      exakt2:=Mult(exakt1,ettdygn)
      exakt3:=Div(exakt2,enperiod)
      avrundat1:=Add(exakt3,0.5)
      avrundat2:=Int(avrundat1)
      börsperiodnu:=avrundat2

      {Testa högsta värdet mot det aktuella}
      högst:=Hhv(H,börsperiodnu)
      stoppnivå:=Mult(högst,stoppfaktor)

      I1(Mult(stoppnivå,flagghöjd))

      Så ser det f.n. Om någon hittar något skumt, låt mig veta. Please.

      /Torbjörn

      Comment


      • #4
        Råkade på det här när jag letade efter något annat.

        Torbjörn,

        Vad är det du försöker göra egentligen? Högsta sedan börsöppningen är ju helt enkelt H i dagsupplösning.

        Antal perioder sedan börsöppningen kan du få enkelt ur följande, där exemplet visar antal timmar (60 minutersperioder) sedan öppningen.

        periodlängd1:=60
        tidnu1:=frac(D)
        timme1:=DIV(MULT(SUB(tidnu1,Market(o)),1440),periodlängd1)

        Comment


        • #5
          Nja, det var ju ett tag sedan jag fylldes med experimentlusta, men lyckades inte så jag gav det hela på båten.

          Egentligen ville jag bara ta reda på hur många perioder in på börsdagen som nu-tiden är.

          /Torbjörn

          Comment


          • #6
            Detta scriptet ligger bland kontrollscripten för ordermodeller(märkta 'xk)' alltså om du vill söka)

            "Agera inte om det är inom dagens 5 första tick"

            tittabakåt:=5
            inpådagen:=eqv(int(ref(d,tittabakåt)),int(d))
            i5(mult(inpådagen,30))

            Det tittar 5 perioder bakåt i tiden och ser om datum fortfarande är samma. Då är du 5 tick in på dagen.

            Här per 5-minuters perioder, men det går lika bra med valfri period.

            Tänk på att per intraday ger tidstämpeln början på innevarande period med konstanten 'D'.

            Per dagskurser är det alltid senast inkomna kurs istället.

            Comment


            • #7
              Variant av ovanstående är

              tittabakåt:=96
              omidag:=eqv(int(ref(d,1)),int(d))
              i5(sum(omidag,tittabakåt))

              'omidag' är sant(ett) om datum för period och förgående period är samma. Dvs fortfarande idag.

              Sist summerar man helt enkelt 96 perioder bakåt, som ju är max 5-minuters för en dag.

              Värdena är ett sålänge det är idag, och du får antal perioder in på dagen som resultat.

              Tänk på att om du kör annan period så kan du ändra antalet i 'tittabakåt' Det är ju ingen mening att sträcka sig onödigt långt bakåt, det tar bara kraft då.

              Så kör du 60-minuters så räcker 8 som värde på 'titabakåt'.

              Tänmk också på att sista värdet som blir 1 är när du står på period 2. Så addera 1 till resultatet eller ändra scriptet såhär:

              tittabakåt:=96
              omidag:=eqv(int(ref(d,1)),int(d))
              i5(add(sum(omidag,tittabakåt),1))

              Comment


              • #8
                Sedan finns det tekniker för att ta beräknade värden för period om man vill använda sig av resultatet i förgående exempel.

                Låt säga du vill plocka lägsta värdet för dagens första stapel:


                tittabakåt:=96
                omidag:=eqv(int(ref(d,1)),int(d))
                inpådagen:=sum(omidag,tittabakåt)
                i5(aref(L,inpådagen:inpådagen))

                Om vi titta på sista raden

                i5(aref(L,inpådagen:inpådagen))

                som kommer att bli

                i5(aref(L,inpådagen:96))

                Varför gör man så?

                'inpådagen' är ju ett beräknat värde som kompilatorn inte känner till när scriptet kompileras, utan först när scriptet körs så kommer det värdet på perioder fram.

                Då måste man ange ett MAXVÄRDE som periodvärdet kan bli, för att kompilatorn skall kunna reservera tillräckligt med minne för att köra det riktigt.

                Så formatet är helt enkelt att ange ett ':' (kolon) och ett maxtal.

                Comment


                • #9
                  Gäller det där med kolon även för "vanliga" Ref(d,p)?

                  Comment


                  • #10
                    Om Ref() och Aref() ger dig samma resultat fungerar den.

                    Det är lite speciell hantering i kompilatorn för REF() så jag minns inte.

                    AREF() fungerar alltid, och med alla typer av dataserier, även returvärden från valfri funktion.

                    REF() enbart med konstanterna C, O, H, L osv.

                    Comment

                    Working...
                    X