Allmänt meddelande

Collapse
No announcement yet.

Vad är fel i scriptet??

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

  • Vad är fel i scriptet??

    Behöver lite hjälp. Scriptet nedan är ett triggerscript men den ger inte några köp/sälj signaler. Vad är fel??

    Felet ligger i tilldelning av BCount och pullback. Sätter jag ett fast värde för dessa två variablar så funkar allt. Men när jag vill att variablarna skall ändras beroende på år så funkar det inte..


    {Walk Forward Settings}
    nr1=if(eqv(yearnumber(),2016),6,0)
    nr2=if(eqv(yearnumber(),2017),6,0)
    nr3=if(eqv(yearnumber(),2018),4,0)
    nr4=if(eqv(yearnumber(),2019),4,0)

    nr5=if(eqv(yearnumber(),2016),6,0)
    nr6=if(eqv(yearnumber(),2017),6,0)
    nr7=if(eqv(yearnumber(),2018),2,0)
    nr8=if(eqv(yearnumber(),2019),2,0)

    BCount=mx(mx(nr1,nr2),mx(nr3,nr4))
    pullback=mx(mx(nr5,nr6),mx(nr7,nr8))

    setgvarif(BCount,50,1)
    setgvarif(pullback,51,1)
    {Walk Forward Settings End}

    stängning=le(mult(1440,sub(market(c),frac(date()))),15)
    ejinnehav=eqv(portfolio(v),0)
    close=cmpref(c,0,a)
    open=cmpref(o,0,a)

    up=sum(gt(sub(close,open),0),BCount)
    down=sum(lt(sub(close,open),0),BCount)

    vilkor1=and(gt(up,down),lt(close,aref(close,pullback)))
    vilkor2=and(and(vilkor1,stängning),ejinnehav)


    {@A(0,)}

  • #2
    Vet inte riktigt varför, men om jag byter ut "ARef" i "vilkor1" (som nu via "close" refererar till en cmpref) till motsvarande cmpref börjar scriptet ge signaler.

    Innan:

    "vilkor1=and(gt(up,down),lt(close,aref(close,pullback)))"

    Efter förändringen:

    "vilkor1=and(gt(up,down),lt(close,cmpref(c,pullback,a)))"

    Eftersom "close" i vilket fall som helst bara är close kursen för A objektet antar jag att det bör ge samma resuitat.

    Mvh,
    Anders

    PS! Någon med mer kunskap om hur det egentligen fungerar kanske kan kommentera skilnaden?

    Comment


    • #3
      1. Om scriptet körs i dagsupplösning behövs inget extraobjekt. Annars ignorera.
      2. Eftersom att mx används för Bcount och Pullback kommer högsta hittills att använda och blir helt styrt av när man börjar. Börjar man 2020 blir det helt fel. Villkoren i if behöver ändras.
      3. Eftersom att dynamiska perioder används i sum behövs ett högsta värde reserveras.
      tex: up=sum(gt(sub(close,open),0),BCount:6)
      Använder det på hhv och har själv inte använt det på sum.
      4. Jag visste inte att dynamiska periodvärden i aref fungerar. Typ aref(close,pullback), Åtgärdas nr2. ser det ut att fungera. Åtminstone i diagrammet.
      5. Bör verifieras så att det fungerar likadant i diagrammet som i simulatorn.

      Comment


      • #4
        Jag testade lite i simulatorn och det ser ut att fungera bra med de ändringar som jag gjorde.

        Edit: Att jag i ett annat syfte inte fick dynamiska perioder för aref att fungera skulle kunna bero på att simuleringen innehöll flera instrument.
        Last edited by Henric; 2020-04-28, 18:03.

        Comment


        • #5
          Tack det verkar vara lösningen på min fråga... Nu funkar det la till :6 efter BCount så funka det fint.

          If-satserna föresätter att man bara backtestar 2016-01-01 till 2019-12-31.

          1. Om scriptet körs i dagsupplösning behövs inget extraobjekt. Annars ignorera.
          Fråga gällande extra objekt, gäller även det när dom hanterar omxs30 index?? Jag har sedan en tid tillbaka använt detta för att kunna få ut signaler ur index instrument.

          Comment


          • #6
            Det blir helt onödigt om det är samma instrument. Är det fel kanske det anslutna instrumentet inte visar något värde medan extraobjekt hämtar någon felaktig beräkning.

            Exempel när man använder extraobjekt:
            * Hämtar index som trendfilter för att handla enskilda aktier
            * Vill att samma instrument ska signalera i flera upplösningar samtidigt eller
            använda olika villkor för olika upplösningar
            * Pairs-trade där man går kort det ena och lång det andra

            Comment


            • #7
              Du använder följande:

              {Walk Forward Settings}
              nr1=if(eqv(yearnumber(),2016),6,0)
              nr2=if(eqv(yearnumber(),2017),6,0)
              nr3=if(eqv(yearnumber(),2018),4,0)
              nr4=if(eqv(yearnumber(),2019),4,0)

              Då det står walk-forward undrar jag av nyfikenhet vilken period du använder för att fastställa respektive års värde. Är det 2015 för 2016 osv eller någon annan period.

              Comment


              • #8
                Jag använder 2012-2015 In-sample, 2016 Out-sample. jag försöker hålla mig på 80% in-sample och 20% out-sample.

                Comment


                • #9
                  ...och för 2017?

                  Comment


                  • #10
                    2012-2015 In-sample, 2016 Out-sample.
                    2013-2016 In-sample, 2017 Out-sample.
                    2014-2017 In-sample, 2018 Out-sample.
                    2015-2018 In-sample, 2019 Out-sample.
                    2016-2019 In-sample, 2020 Out-sample.

                    Comment


                    • #11
                      Intressant. Sedan är det ingen exakt vetenskap hur långa eller korta perioder man använder och hur adaptiv modellen ska vara. Kortare perioder bli praktiskt bökigt då man får köra manuellt. Hur bestämmer du valda parametervärden. Subjektivt eller objektivt?

                      Comment


                      • #12
                        Hur långa och korta perioderna skall vara beror på hur ofta man vill göra sin omvärdering av parametrarna. Eftersom jag använder mig av dag-staplar för det mesta så har det blivit att 1år out-sample är en rimlig längd på den tycker jag. Fördelningen 80% in-sample och 20% out-sample den följer jag slaviskt.

                        Valda parametrar väljer jag genom att sortera ut alla utfall utifrån

                        Profitfactor >= 2 (den mest vitala värdet i detta skede för mig)
                        Låg MaxDrawDown (den är inte avgörande i detta skede utan om den är låg nu så är chansen att nästa steg i min utvärderingsprocess kommer att lyckas)

                        Nästa steg är att kombinera alla out-sample parametrar och som mitt script vissar så köra jag ett nytt backtesting test med alla dessa värden för respektive år och utvärderar om startegin är ok om den klarar min profitfactor kriteriet och har en relativt låg MDD samt här kollar jag på avkastningen för att värdera strategins prestanda mot andra startegier jag har sedan tidigare.

                        En sak till som jag tycker är viktig är att alla utfall man får vid optimering av en specifk in-sample period måste minst 75% av dessa genererat vinst efter avgifter annars förkastar jag idén eller modiferar den lite.

                        // Fredrik
                        Last edited by Skpgnisse; 2020-05-01, 22:05.

                        Comment

                        Working...
                        X