Allmänt meddelande

Collapse
No announcement yet.

Utritning av TP eller SL

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

  • Utritning av TP eller SL

    Hej. Jag skulle vilja (i debug-syfte) kunna rita ut linjer i diagrammet när man kört en analys som visar Takeprofit eller Stoploss. Jag har gjort ett kort exempel utan den logiska beräkningen för att testa. Det är ju som Bertil säger mest trial-and-error när det gäller att koda ordermodeller - man testar i flera timmar tills det fungerar och funkar det inte ändå så frågar man på forumet

    {*** RECO - LOGIK TakeProfitberäkning ***}

    i1(

    omxs30=cmpref(c,0,a)

    Takeprofitnivå=if(lt(portfolio(v),0),add(omxs30,10),sub(omxs30,10))
    Takeprofitnivå=if(eqv(portfolio(v),0),0,Takeprofitnivå)

    SETGvarIF(Takeprofitnivå,150,1)

    draw(Takeprofitnivå,0,cqb1)

    mult(0,0)
    )

    {@A(1,OMX Stock )}

    Denna koden kräver ju att man har ett innehav för att något ska ritas ut i kursdiagrammet så jag tänkte det kunde funka i samband med att man kör i analysbänken men det gör det inte Finns det något annat sätt att lösa det på? Har läst någonstans att man kan få något skrivet i en extra kolumn i resultatlistan efter en analys, har aldrig testat - är det svårt?

    /Erik

  • #2
    Du har definierat samma variabelnamn två gånger vilket inte är tillåtet. Är det tänkt att rita ut i diagram bakåt eller i Analysbänken? I bänken kan du lägga till en eller flera extra kolumner med valfria script, tex ett som anger TP-nivån. Då ser du värdet på den i samband med varje affär osv.

    Gör ett script:

    g) TP-nivå

    i1(
    omxs30=cmpref(c,0,a)
    Takeprofitnivå=if(lt(portfolio(v),0),add(omxs30,10),sub(omxs30,10))
    add(Takeprofitnivå,0)
    )

    {@A(1,OMX Stock )}


    Inne i bänken kan du klicka på knappen Välj bredvid texten Scriptkolumner för extra information om varje affär. Där kan du välja in scriptet du just skapade. Efter nästa simulering ligger en extra kolumn i transaktionslistan där du kan se värdet.

    Lite mer i manualen:

    http://www.autostock.se/NATmanual/Ex...tkolumner.html

    Comment


    • #3
      Hej Rikard. Tack för snabbt svar.
      Va? Får man inte tilldela en variabel ett värde mer än en gång? Det gör jag vid flera tillfällen i mina script. I detta fallet behåller Takeprofitnivå sitt värde om portfolio(v) är skiljt från noll i annat fall blir värdet noll. Tyckte det var ett enkelt sätt att koda på för att slippa nästlade IF-satser som väl borde kunna lösa samma problem?

      Jag hade helst velat ha TP-nivån utritad i diagrammet för att enklare kunna se vad som händer. Dessutom ändras denna nivån även när jag inte gör affärer därför är det tråkigt att bara kunna se värdet just vid gjorda affärer som det blir om jag lägger en extra kolumn i analysbänken.

      Vad är ett g)-script? Varför inte likaväl göra ett sl)-script som aldrig triggar annat än noll.

      Vad är skillnaden rent praktiskt på om man sätter en intradagsupplösning t.ex. i1( ..... ) mot att man inte anger någon upplösning?

      Om man vill göra en beräkning på t.ex. smoothed heikin i dagsupplösning endast en gång per dag klockan 16:45 går det eller måste jag göra den ständigt men begränsa den till att enbart agera vid ett visst klockslag?

      Fler frågor någon?

      /Erik

      Comment


      • #4
        Njae, det är inte tillåtet att definiera samma variabel två gånger. Enklare att först definiera båda alternativen och därefter använda en enda IF som "vägdelare":

        Takeprofitnivå1=sub(omxs30,10)
        Takeprofitnivå2=add(omxs30,10)
        Takeprofitnivå3=if(lt(portfolio(v),0),Takeprofitnivå1,Takeprofitnivå2)

        (bara ett exempel, jag vet inte hur beräkningen du vill göra ser ut exakt)




        Prefix i scriptets namn avgör var det dyker upp i programmet. Tex, sl)-script listas bland triggerscript i ordermodelldialogen. vl)-script syns i Limit-fältet osv. Du kan i princip använda vilket prefix som helst för just extra kolumner i Analysbänken, där listas alla script. Scriptets "output" är det som visas i resultatlistan efter körning, så det kan inte sättas till noll - då får man bara nollvärden i listan också.

        Upplösningen, sätter du i1( så sätts periodlängden i scriptet till 1 minut. Sätter du inget intradayprefix blir periodlängden 1 dag. I vissa script spelar det ju ingen roll om man tex inte använder perioder på något sätt, men i andra fall är det avgörande, tex då medelvärden ska beräknas osv.
        Du kan känna av värdet på en Heikin-stapel kl 16:45 och lagra undan värdet just i den tidpunkten till en cell och därefter läsa av den i efterhand. Enklast är nog att använda SetGVarIf() och villkora skrivningen till ett smalt tidsfönster just runt 16:45 in så fall. Då skrivs momentanvärdet ner just då och ligger kvar till nästa gång ett nytt värde skrivs, kl 16:45 nästa dag.

        Comment


        • #5
          Jo, så kan man ju göra för att slippa tilldela en variabel ett värde mer än en gång. Tycker ändå att det är konstigt att man inte får ändra värdet på en variabel i ett script.

          Jo, jag har full koll på sl, va, xk-script osv men du skrev "g)" och det har jag aldrig använt mig av.

          Sista delen förstår jag inte riktigt. Givetvis kan jag välja att endast skriva resultatet av heikinberäkningen när den utförs klockan 16:45, men hur får jag scriptet att enbart göra uträkningen 16:45? Skriver jag den i ett script så görs den väl varje tick eller varje minut? Känns som det tar onödig kraft från servern - och slöar ner simuleringar.

          När det gäller upplösning. Hur ofta körs scripten? Jag förstår att periodlängden vid olika beräknar och hämtningar av värden med mera blir på den upplösningen man satt att scriptet ska jobba på men körs då scriptet en gång var femte minut (om man kör i5) eller körs det varje tick vilken upplösning jag än sätter?

          Comment


          • #6
            Utan att vara helt säker på vad som sker under motorhuven. Till skillnad mot ett vanlig dataprogram sparas variabler och kan användas på flera ställen och skickas mellan funktioner, etc. AT är alltid en tidserie som egenliten bara läser in priser och volymer. Alla script körs sekventiellt med undantag för loop(som kan loopa i tidserien eller göra beräkningar). Dessutom finns det kontoinformation som läser in senaste data, tex lasttrade, portfolio(v). Vill man ha en variabel som används på flera ställen kan en global cell användas. Den går dock inte att använda bakåt i dataserien. Rikard får gärna tillägga eller rätta mig.

            Det skulle faktiskt vara praktiskt att ha script som bara körs vid specifika tider. Tex genom ett villkor överst i scriptet. Något att lägga till önskelistan. Det gäller främst tex hhv, find och loopar med långa perioder. Scripten går annars generellt fort att köra och då kan man styra längden med tidsvillkor. Tex om scriptet bara kan trigga vid stängning används 1 fram till dess och sedan 500.

            Scripten körs varje insamling oberoende av upplösning. Hittills inkommen data i stapeln används. Vill man bara trigga på fullbordad stapel används tex aref(villkor,1).

            Comment

            Working...
            X