Allmänt meddelande

Collapse
No announcement yet.

Tidsstämpeln i Global variabel

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

  • Tidsstämpeln i Global variabel

    Nedan har jag gjort en liten datumfunktion. Scriptet har ingen vettig funktion utan det är bara datumdelen som är intressant....

    Script 1 skiver Close till global 155 om close är över 100
    Script 2 skiver Close till global 156 om close är under 100
    Script 3 skriver ut 1 (köp) om datumet på global 155 är senare än 156...



    Script1:
    ---------------

    Olle:=If(Gt(C,100),SetGVarIf(c,155,1),0)

    ---------------

    Script2:
    ---------------

    Nisse:=If(Lt(C,100),SetGVarIf(c,156,1),0)

    ---------------

    Script3:
    ---------------

    Olle:=GetGvar(155,D)
    Nisse:=GetGvar(156,D)
    If(Gt(Olle,Nisse),1,0)

    ---------------


    Eller måste SetGVarIf skrivas på ett annat sätt för att få med datum delen????

    Enl. dokumentationen så funkar både "SetGVarIf(c,155,1)" & "SetGvarIf(c,155,d,d)" för att få med datumet, varvid den senare periodstämplar och förstnämnda enl. datumklockan...

    Så vilken metod är bäst för ett köpscript i en ordermodell. För mig är det är viktigt att se vilken signal som kommer först... Jag ska använda detta i en bull resp. bear strategi.

    Teoretiskt skulle jag kunna få köp från både bull & bear samtidigt så jag måste veta vem som kom först eller vilket sätt som är bäst????


    Tack för att du bemödar dig med att svara på alla frågor!
    NiclasGBG

  • #2
    Om du väljer att köra med periodstämpling kan det mycket väl bli samma period för både köp och sälj. Som det är skrivet blir alltså inget värde större än det andra, och sista raden väljer 0 som utvärde, alltså sälj. Däremot alternativet SetGVarIf(c,155,1) får du med systemtiden istället, och där kommer det alltid att skilja i någon av de sista decimalerna så man får alltid chansen att avgöra vilket värde som är störst.

    Ett annat sätt är ju att helt enkelt använda villkor i triggerscripten som aldrig kan bli sanna samtidigt för Bull och Bear.

    Comment


    • #3
      Fortsättning datum

      Jag måste tyvärr dela upp logiken mellan olika script p.g.a. viss komplexitet. Därför går det inte att se till att bull & bear aldrig "reagerar samtidigt" med signal....

      Det jag historiskt haft problem med är datumfunktionen och det är dags att jag förstår detta så att jag slipper programmera runt problemen...


      Till frågorna... Jag har ett antal frågor nedan och för att minska ditt arbete så kan du svara ja eller nej på de flesta:

      1)
      Date() = Systemklockan som registrerar "just nu" vare sig det är helg eller börsen är öppen. Mer noggrann men funkar bäst för körning i realtid inte backtesning?

      2)
      Frac(d) är ju decimaltals delen som man multiplicerar med 1440 för att få reda på vilken minut (det är jag med på). Jag gissar (vet ej) på att heltalsdelen "Int(d)" ger något slags datum och ska det då vara någon omvandlingsfaktor "Mult(Int(d),Omvandlingsfaktor)" för minutperioder?

      3)
      T.ex. imorgon vid samma klockslag blir det:
      x1:=Add(Int(d),1)
      x2:=Mult(frac(d),1440)
      imorgon:=Add(x1,x2)

      och igår vid samma klockslag:
      x1:=Sub(Int(d),1)
      x2:=Mult(frac(d),1440)
      igår:=Add(x1,x2)

      Stämmer detta?

      4)
      Om jag sparar undan värdet i "SetGvarIf(c,155,d,d)" registreras den period som scriptet just nu "råkar" befinna sig i t.e.x. 42 dagar bakåt trots jag egentligen registrerade detta för 2 sekunder sedan under en backtestning?

      5)
      Funkar detta "nGlobBearSell=SetGVarIf(1,207,D,If(Eqv(nSellFlag,1),D,0))" om jag vill skicka "SetGvarIf(1,207,d,d)" ibland (beroende på värdet på nSellFlag)?

      6)
      Samma sak med D enl. fråga 4... När jag använder D i mina script är detta period där skripter är just nu (behöver alltså inte vara nutid)?

      7)
      Blir det någon skillnad (samma resultat) om jag använder "D" eller "SetGvarIf(c,155,d,d)" inom intradagsprefixen (i1) eller utanför intradayprefix om jag ändå använder 1 minut?

      8)
      Om jag skriver "Gt(D,GetGvar(501,D))". Är det nuvarande programperiod "D" är senare än den period där variabel 501 fick ett värde?
      Last edited by niclas_gbg; 2010-03-07, 17:33.
      NiclasGBG

      Comment


      • #4
        Sådär, det tog lite tid men jag fick kolla med Lasse för att vara säker på att du får rätt svar:



        1)
        Date() = Systemklockan som registrerar "just nu" vare sig det är helg eller börsen är öppen. Mer noggrann men funkar bäst för körning i realtid inte backtesning?

        Det är riktigt, men med animera i analysbänken animeras varje minut fram hela tiden.

        Date kan också användas för att skapa en konstant från ett datum t.ex Date(20100306) ger dig ett datum du kan beräkna från.
        Det kan även göras med klockslag om man beräknar om det till decimaldel ex. Date(20100306.5) för kl 12.00 den 6 mars.
        Date(20100306)-stuket använde jag rätt mycket för att göra undantag i villkor vid rapportdatum osv.
        Gjorde ett gäng definitioner för alla rapportdatum för att se om man skulle undvika handel då eller inte osv


        2)
        Frac(d) är ju decimaltals delen som man multiplicerar med 1440 för att få reda på vilken minut (det är jag med på). Jag gissar (vet ej) på att heltalsdelen "Int(d)" ger något slags datum och ska det då vara någon omvandlingsfaktor "Mult(Int(d),Omvandlingsfaktor)" för minutperioder?,

        Ett dygn är 1440 minuter så att multiplicera med 1440 ger värde i minuter oavsett om inom dag eller flera dagar.

        Använder man 86400(24*3600) som faktor så får man i sekunder istället.

        Så ett datum+tid är ett flyttal där heltalsdelen är decimaltal i julianska kalendern och decimal delen del av dygn.

        Så all arimetisk beräkning kan göras typ skillnad mellan två tidstämplar(alltid datum+tid). och få fram antal dygn plus skillnad i tid.
        Eftersom heltalsdelen är datum som antal dagar från julianska kalenderns start så är det inte relevant att omvandla en tidpunkt rakt av till minuter.

        Gör något aritmetiskt som subtraktion för att beräkna mot en referens


        3)
        T.ex. imorgon vid samma klockslag blir det:
        x1:=Add(Int(d),1)
        x2:=Mult(frac(d),1440)
        imorgon:=Add(x1,x2)

        och igår vid samma klockslag:
        x1:=Sub(Int(d),1)
        x2:=Mult(frac(d),1440)
        igår:=Add(x1,x2)

        Stämmer detta?
        Nej inte riktigt.
        Imorgon samma klockslag blir
        x1:=Add(Int(d),1)
        x2:=frac(d)
        imorgon:=Add(x1,x2)

        Så med frac(d) tar du med dig klockslaget rakt av. Med Add() fogas heltal och decimaldel ihop igen.


        4)
        Om jag sparar undan värdet i "SetGvarIf(c,155,d,d)" registreras den period som scriptet just nu "råkar" befinna sig i t.e.x. 42 dagar bakåt trots jag egentligen registrerade detta för 2 sekunder sedan under en backtestning?


        Stämmer.


        5)
        Funkar detta "nGlobBearSell=SetGVarIf(1,207,D,If(Eqv(nSellFlag,1),D,0))" om jag vill skicka "SetGvarIf(1,207,d,d)" ibland (beroende på värdet på nSellFlag)?

        Nej,sista parametern är en konstant. Kan ej beräknas fram.
        Men det går bra att göra så på 3e parametern, och ange D som fjärde.Eftersom inte 1a parametern används till något vettig så verkar det vara en fixering vid att tidstämpeln skall sättas just som tidstämpel. Cellen är ett flyttal och kan lika gärna vara ett datum. Cellen innehåller alltså två flyttal där det ena är tänkt som värde och andra som tidstämpel, men som sagt värdet kan lika gärna vara en tidstämpel i sig.

        Sätt D som 1a parameter med vetskap att cellen innehåller ett datum och parameter 3 Eqv-villkoret med säljflaggan och 4e T för True att det villkoras skrivning baserat på 3e parametern.

        Då lämnas cellen i fred om villkoret inte är uppfyllt.

        Och eftersom cellen är två flyttal som också kan användas som senaste och previous value så kan man nyttja det på några sätt till.



        6)
        Samma sak med D enl. fråga 4... När jag använder D i mina script är detta period där skripter är just nu (behöver alltså inte vara nutid)?

        Stämmer delvis. Men en lurig sak när man skall göra saker är att funktioner som har periodparameter scannar bakåt och kan plocka fram tidstämpel i period bakåt.

        Skall man plocka fram scriptet nuvarande period och använda det för aritmetik behöver man spara undan det med retval() och sedan köra getval() på den cellen det sparades i. Låt säga när du skall beräkna diff från nuvarande period mot en som scannas fram.

        Har lurat mig själv några ggr innan jag kom på detta.

        Om svaret genererade fler frågor än det besvarade skall jag försöka ta fram exempel om det är oklart vad jag menar.

        T.ex ditt uttryck nedan
        x1:=Gt(D,GetGvar(501,D))
        hhv(x1,50)

        När det slutligen hamnar i ett uttryck(här hhv) som scannar bakåt så förändras också vilken period D plockas från under scanningens förlopp.

        Därav tipset att använda retval-getval när man verkligen vill göra beräkningar från nuvarande period scriptet befinner sig på som huvudperiod.

        7)
        Blir det någon skillnad (samma resultat) om jag använder "D" eller "SetGvarIf(c,155,d,d)" inom intradagsprefixen (i1) eller utanför intradayprefix om jag ändå använder 1 minut?

        Förstår nog inte frågan riktigt?

        Om scriptet kör i 1 minut eller annan upplösning så är D periodens tidstämpel oavsett.
        Vanligen hamnar ju utryck inom intradayprefix när det skall vara för bevakning, men saknas det och scriptet följer grafens upplösning så blir resultatet detsamma om angiven upplösning med intradayprefix och grafens upplösning är samma.

        Som det är nu är D början av perioden. Vi pratade ju om att göra D valbart som periodens sluttidpunkt så både beräkningar och ritning synkas korrekt grafiskt automatiskt.

        8)
        Om jag skriver "Gt(D,GetGvar(501,D))". Är det nuvarande programperiod "D" är senare än den period där variabel 501 fick ett värde?
        Stämmer.

        Det luriga med globala variabler är dock att variabel 501 är exakt samma oavsett från vilket script eller papper. Så krockar kan bli resultatet om man använder samma cell.

        Vill man spara undan inom ett script för ett visst papper använd retval-getval stuket istället.

        __________________


        mvh
        Lasse

        Comment


        • #5
          Tackar

          Datum-delen har varit lite svävande för mig och jag passade på att häva ur mig alla mina frågor på en gång... Tack för att ni tog er tid att svara gediget!

          NiclasGBG

          Comment

          Working...
          X