Allmänt meddelande

Collapse
No announcement yet.

Diverse nybörjarfrågor

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

  • Diverse nybörjarfrågor

    1. Vad är databastid?
    2. Hur kan man läsa av lutningen på en linje, t.ex. EMA(C,10)? Det jag gjort när jag läst av lutningen manuellt är att jämföra slutvärdet på senaste EMA med slutvärdet på näst senaste, men vet inte om det är rätt sätt att gå tillväga i skripten och hur man i så fall får fram näst senaste.
    3. Jag ser inte "OMX Stock" i listan över "Extra objekt". Skriptet accepterar dock att jag lägger in "{@A(0,OMX Stock)}" manuellt dock. Varför ser jag inte "OMX Stock" i listan? Har jag missat ladda ner något?
    4. Kan man spara data för ett köp någonstans så att säljskript har tillgång till denna information, t.ex. inköpskurs? Det är extra intressant att kunna spara flera inköpskurser så att säljskript kan skilja på olika ordrar. Även nyfiken på ifall dessa sparas / kan sparas på disk ifall programmet av någon anledning stängs av.
    5. Hur gör man om man vill att skriptet ska jobba i 60 minuters upplösning, men samtidigt vill att ett köp ska köras inom ett kortare intervall? Säg att du vill använda 60 minuters upplösning för att beräkna något, MA, EMA, MACD etc, men du vill att ett köp bara körs första två minuterna varje hel timme.

  • #2
    Hej Jocke!

    Lite svar på dina frågor nedan:

    1. Databastid är tidstämpel för resp punkt i dataserierna som AutoTrader använder, tex för att rita diagram osv. Varje period har en tidstämpel, "D" som man kan använda i script för att orientera sig tidsmässigt. Systemtid är den andra tidsparametern vi använder, och är bara den vanliga systemklockan på datorn vars tid man får med Date(). Date() returnerar alltid datortiden vid live-körning. Däremot går den att simulera i Analysbänken så att man inte behöver bygga om sina script.

    2. Vill du ha lutningen som ett variabelt mått, tex i procent, så kan man använda Roc(), tex:

    roc(ema(c,10),2,%)

    som returnerar den procentuella lutningen för ema(c,10) för de senaste 2 perioderna.

    Vill man bara testa om medelvärdet lutar uppåt kan man använda:

    medel=ema(c,10)
    upp=gt(medel,aref(medel,1))

    som jämför värdet på medel innevarande period med värdet från förra perioden. Vill man mäta förrförra:

    medel=ema(c,10)
    upp=gt(aref(medel,1),aref(medel,2))

    Notera hur Aref() används för att titta tillbaka i dataserien. aref(medel,1) ger värdet 1 period bakåt. aref(medel,2) ger värdet 2 perioder bakåt osv.


    3. Det är OMXS30 som har ID=OMX Stock, så i listan syns "kortnamnet", dvs OMXS30.

    4. Det sparas en del info per automatisk med varje order som kan läsas av med tex:

    lasttrade(b,p) som ger köpkursen för senaste köptrans.
    lasttrade(s,p) ger säljkursen för senaste säljtrans.
    lasttrade(b,v) ger antal för senaste köpkurs osv.

    Vill man spara ned fler saker går det fint med retval() som skriver värden till celler 0-4 och sparas på disk med transaktionen.

    Tex, i slutet av ditt köptriggerscript kan du skriva:

    retval(10,0)

    vilket skriver värdet 10 till cell 0. För att läsa av det senare i ett säljscript används:

    lasttrade(b,0) som ger tillbaka värdet som lagrades vid köpet, 10 i det här fallet. På så vis kan du låta varje köpmodell skriva sitt unika värdet och då vet alla säljmodeller vilken modell som köpte innehavet.


    Det går att skriva ned 5 värden totalt med varje affär, i celler 0-4. Kanske målantal, unik kod för modellen, framräknat värde för stoploss baserat på atr osv. Värdena lagras i TRANS.DBF på disk så det gör inget om datorn startar om osv.


    5. Om du kör scriptet i 60-minutersupplösning görs ändå beräkningar var 5:e sek när scripten exekveras. Det gör att du kan få signal mitt i en period. Ibland vill man undvika det, och ibland vill man ha det så.

    Minutfilter kan man använda för att styra när i perioden signal är tillåten. Vi har använt tex:

    {Minutfilter}
    tidnu=Frac(DATE())
    totalt=Mult(tidnu,1440)
    rest=Int(Mod(totalt,60))
    tidsignal=le(rest,1)

    Det här scriptet räknar fram antal minuter per dag, delar in det i 60-minutersportioner och "tidsignal" blir sant om "rest" är 1 eller mindre, dvs man befinner sig i de två första minuterna varje timme.


    Comment


    • #3
      Då har jag en följdfråga till fråga 5 eftersom det här är oklart för mig med:

      Om alla skript exelkveras var 5e sekund, behöver Jocke skriva koden så här för att se om senaste 1 minut close är under 60 minuters övre bollingerband?

      Kod:
      i60(
      högsta=BolBands(20,2,H)
      )
      
      i1(
      pris=LE(c,högsta)
      )
      AND(1,pris)
      Eller är jag helt ute och cycklar i min tidsupplösningsförståelse?
      Vidare, hur borde variabeln högsta initieras innan det har gått 60 min?

      Comment


      • #4
        Det går bara att ha en upplösning i ett script. Det går dock att ha 3 extraobjekt som kan vara olika upplösningar i samma instrument eller annat instrument. Extraobjektet bildar egen dataserie.

        Man får tänka lite annorlunda när det gäller dataserier för finansiella instrument som egentligen bara bygger på tid och varje punkt har bara pris och volym. Det behövs ingen initiering då beräkningen görs på dataserien. Använder man en global cell sätts värdet initialt till 0. Även om scriptet är i 60-minuters upplösning kan scriptet exekveras var 5:e sekund. Varje 60 minutersperiod kallas en stapel och bygger vid varje tidpunkt på hittills inkommen data i stapeln, dvs close(alltid senaste), hög, låg och volym. Vill man vänta tills stapeln är fullbordad kan aref(villkor,1) användas och vill man vänta x-antal minuter kan Rikards exempel i tidigare inlägg användas. För att göra en lång historia kort behövs endast i60.

        Edit: När man tittar i diagram syns bara senaste info i nuvarande stapel, samt färdigbildade staplar för vald upplösning. Vid livekörning och i simulatorn så "streamar" kurserna kontinuerligt in.
        Last edited by Henric; 2015-10-11, 15:31.

        Comment


        • #5
          Ursprungligen postat av SvartaBusken Visa inlägg
          Då har jag en följdfråga till fråga 5 eftersom det här är oklart för mig med:

          Om alla skript exelkveras var 5e sekund, behöver Jocke skriva koden så här för att se om senaste 1 minut close är under 60 minuters övre bollingerband?

          Kod:
          i60(
          högsta=BolBands(20,2,H)
          )
          
          i1(
          pris=LE(c,högsta)
          )
          AND(1,pris)
          Eller är jag helt ute och cycklar i min tidsupplösningsförståelse?
          Vidare, hur borde variabeln högsta initieras innan det har gått 60 min?

          Precis som Henric säger så kan scriptet bara ha 1 grundupplösning, men däremot upp till 3 extra objekt som kan vara i egna eller samma upplösningar. Men åter till din fråga om att testa om C är under över bollinger:

          i60(
          högsta=BolBands(20,2,H)
          close_under=lt(c,högsta)
          )

          C uppdateras löpande med senast betalt, så om testet bara är att se om senast betalt är under bollinger så behövs inte mer än ovan. Bollinger räknas i 60-minutersupplösning och C testar mot det varje gång scriptet exekveras.

          Comment


          • #6
            Ja då förstår jag att det krävs lite tid innan man med lätthet tänker annorlunda på rätt sätt.

            Bara för att se om jag börjar förstå:

            iX(
            ....
            )

            iX sätter man bara för att bestämma vilken tidsupplösning man vill ha på dataserier som används. Är default 5s eller EOD?

            Allt utanför iX parantesen blir fel eller exekveras varje 5s?

            Är iX fönstret glidande över tid så att det alltid är ett helt fönster eller är alla utom det nyaste fönstret fasta och det nyaste fylls/byggs hela tiden tills tidsupplösnignen blir mött och man börjar bygga ännu ett nytt?

            Comment


            • #7
              En till fråga, om man har extrascript med annan tidsupplösning, hur skickar man enklast data mellan dem?
              Om extraobjektet är en dataserie, hur många olika variabler får man plats med?

              Det jag funderar mest på är om man vill använda samma script till flera instrument, hur sparar man till globala minnet utan att behöva ändra minnesposition för varje instrument?

              Comment


              • #8
                Ursprungligen postat av SvartaBusken Visa inlägg
                Ja då förstår jag att det krävs lite tid innan man med lätthet tänker annorlunda på rätt sätt.

                Bara för att se om jag börjar förstå:

                iX(
                ....
                )

                iX sätter man bara för att bestämma vilken tidsupplösning man vill ha på dataserier som används. Är default 5s eller EOD?

                Allt utanför iX parantesen blir fel eller exekveras varje 5s?

                Är iX fönstret glidande över tid så att det alltid är ett helt fönster eller är alla utom det nyaste fönstret fasta och det nyaste fylls/byggs hela tiden tills tidsupplösnignen blir mött och man börjar bygga ännu ett nytt?

                iX sätts för att bestämma tidsupplösning för instrumentet som scriptet är kopplat till. Det finns inget default, utan det väljs. Om du utlämnar upplösning vid diagramritning följ scriptet diagrammet upplösning. Upplösning väljs även för extraobjektet och det finns ett fönster där det går att välja instrument och upplösning. Upplösningen för extraobjekt bör vara lägre än huvudscriptet, dvs högre antal minuter intraday.

                Allt utanför iX följer också scriptets upplösning. Det kan vara en bra vana att bara använda tilldelade namn utanför och minnesreferenser innanför.

                Det är fasta tider. Tex för 15 minuter är perioderna 9:00-9:15-9:30....
                Tex för 30 minuter är perioderna 9:00-9:30:10:00....
                Last edited by Henric; 2015-10-11, 18:10.

                Comment


                • #9
                  Ursprungligen postat av SvartaBusken Visa inlägg
                  En till fråga, om man har extrascript med annan tidsupplösning, hur skickar man enklast data mellan dem?
                  Om extraobjektet är en dataserie, hur många olika variabler får man plats med?

                  Det jag funderar mest på är om man vill använda samma script till flera instrument, hur sparar man till globala minnet utan att behöva ändra minnesposition för varje instrument?
                  Du skickar enklast med globala celler. Är det mycket info och parametervärden är det förmodligen enklast att använda extraobjekt. Jag vet inte vad du menar med variabler. Scriptet har en viss begränsning, men det kräver rätt mycket om du använder minnesreferenser. Jag skulle kolla upp extraobjekt i dokumentationen för att få en överblick.

                  Om det är mycket information som ska överföras skulle jag försöka bygga så att inte så många celler behövs. Annars går det att använda tex crcid()=identifierar varje instrument. Det finns olika lösningar och det är nog enklast om du har ett exempel.

                  Comment


                  • #10
                    Bra exempel är det ont om.
                    Jag har inte riktigt funderat ut hur jag vill göra. Det är ännu bara generellla tankar. T.ex så tänker jag mig att man från köp-scriptet skulle vilja skicka med lite information som pris, atr osv. getgvar och setgvarif hämtar och sätter bara värden som inte är kopplade till något instrument så om jag gör ett generellt script och använder det på flera instrument så kommer de att skriva till samma globala minnesområde och skriva över varandra?
                    Eller finns det något mer minne som är instrument beroende? retval och getval verkar vara det men kanske inte ska användas poå det sättet?

                    Comment


                    • #11
                      Du har instrumentberoende celler som lagras med transaktion enligt punkt 4 i ursprungsfrågan högre i tråden:

                      4. Det sparas en del info per automatisk med varje order som kan läsas av med tex:

                      lasttrade(b,p) som ger köpkursen för senaste köptrans.
                      lasttrade(s,p) ger säljkursen för senaste säljtrans.
                      lasttrade(b,v) ger antal för senaste köpkurs osv.

                      Vill man spara ned fler saker går det fint med retval() som skriver värden till celler 0-4 och sparas på disk med transaktionen.

                      Tex, i slutet av ditt köptriggerscript kan du skriva:

                      retval(10,0)

                      vilket skriver värdet 10 till cell 0. För att läsa av det senare i ett säljscript används:

                      lasttrade(b,0) som ger tillbaka värdet som lagrades vid köpet, 10 i det här fallet. På så vis kan du låta varje köpmodell skriva sitt unika värdet och då vet alla säljmodeller vilken modell som köpte innehavet.


                      Det går att skriva ned 5 värden totalt med varje affär, i celler 0-4. Kanske målantal, unik kod för modellen, framräknat värde för stoploss baserat på atr osv. Värdena lagras i TRANS.DBF på disk så det gör inget om datorn startar om osv.


                      Är det något här som skulle kunna användas till det du vill göra? Är det att köpscriptet ska spara värden med köpet som säljsidan därefter kan läsa av? I så fall fungerar det som beskrivs här utmärkt.

                      Comment


                      • #12
                        Följdfrågor.

                        2: "Vill man bara testa om medelvärdet lutar uppåt kan man använda:

                        medel=ema(c,10)
                        upp=gt(medel,aref(medel,1))

                        som jämför värdet på medel innevarande period med värdet från förra perioden."


                        Du säger "period", men jag blir lite konfunderad. "medel" har räknats ut genom att använda de senaste 10 perioderna, men i aref så används bara 1 period. Är det så att perioderna som används i ema (i exemplet) använder den tidsenhet vi angett för skriptet, medan aref i sin tur använder samma period som hela ema är baserat på? Det senare skulle förklara en del, men tycker inte det varit solklart när jag kollat i formelsamlingen.

                        3: De enda objekten med "OMXSxxx" som jag hittar i listan verkar vara terminer, d.v.s. "OMXS301D", "OMSX309G" etc.

                        4: Lasttrade är en fin funktion, men fungerar enbart för den absolut senaste köp-, respektive säljtransaktion, eller hur? Sparas denna också ner till disk eller ligger den enbart i minnet?

                        5: Körs alla skript alltid var 5:e sekund, eller är det baserat på det intervall man angett? Om de alltid körs var 5:e sekund så är det med andra ord omöjligt att agera på ticks?

                        Comment


                        • #13
                          Ja, period avser den tidsenhet man satt i scriptets intradayprefix. Så det stämmer som du skriver, Aref() tittar tillbaka i den dataserie man anger och då blir en period samma längds som dataseriens upplösning.

                          3. Menar du i den lilla menyn man får upp om man klickar Extra objekt i scriptdialogen? I så fall undrar jag om listan Index Sthlm verkligen är medplockad i Inställningar > Anpassa kursinsamling. Endast instrument som ligger på de listor man valt där kommer med i resten av programmet.

                          4. Ja, LastTrade avser bara senaste köp åt resp håll, dvs köp eller sälj. Den är instrumentunik så om du kör scriptet på flera instrument hämtar LastTrade alltid värdet för det instrument man "står på". Allt sparas på disk.

                          5. Ja, default-inställningen är 5 sek delay i program-loopen som exekverar script (plus en del annat). Det går att styra i en ini-fil hur lång den fördröjningen ska vara, men i praktiken blir det svårt att komma under 1 sek så tick-styrd handel är lite begränsade möjligheter med. Programmet är inte tänkt som HF-plattform.

                          Comment


                          • #14
                            Ursprungligen postat av Rikard Nilsson Visa inlägg
                            3. Menar du i den lilla menyn man får upp om man klickar Extra objekt i scriptdialogen? I så fall undrar jag om listan Index Sthlm verkligen är medplockad i Inställningar > Anpassa kursinsamling. Endast instrument som ligger på de listor man valt där kommer med i resten av programmet.
                            Mk. Jag hade inte med Index Stockholm i "Anpassa kursinsamling". Jag hade däremot med den i "Underhåll kursdatabaser", men ser nu att markera/avmarkera instrument där fyller noll funktion. Kanske något ni bör se över; antingen låta användaren lägga till / ta bort instrument utöver de som är "default", alternativt göra så att knapparna inte är klickbara.

                            Comment


                            • #15
                              Måste bara tacka för svar utanför ordinarie arbetstid. Gjorde jag kunde komma igång en del redan i helgen.

                              Comment

                              Working...
                              X