Allmänt meddelande

Collapse
No announcement yet.

Script fråga

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

  • #16
    Jo, det är ganska enkelt att lägga till ett "kort minne" på varje delfunktion så att scriptet minns några dagar efter att villkoret blivit sant. För det använder man kommandot

    HHv(x,p)

    där HHv står för Highest High Value, alltså högsta värdet på dataserien x under p perioder bakåt. Om ett logiskt villkor x har varit sant inom p perioder bakåt returnerar funktionen sant.

    Inbakat i scriptet kan man tex skriva: (5 perioders "minne" på varje delvillkor)

    sl) Köp EMA-Macd-RSI

    köp1a:=Macd(b)
    köp1b:=Hhv(köp1a,5)

    ema1:=Mov(c,5,e)
    ema2:=Mov(c,20,e)
    stigande1:=Lt(HhvBars(ema1,2),1)
    köp2a:=And(Gt(ema1,ema2),stigande1)
    köp2b:=Hhv(köp2a,5)

    kurva:=Rsi(14)
    stigande2:=Lt(HhvBars(kurva,2),1)
    köp3a:=And(stigande2,Cross(kurva,0))
    köp3b:=Hhv(köp3a,5)

    totalt=And(And(köp1b,köp2b),köp3b)
    Mult(totalt,25)


    Motsvarande script för sälj eller blankning:


    sl) Sälj EMA-Macd-RSI

    sälj1a:=Macd(s)
    sälj1b:=Hhv(sälj1a,5)

    ema1:=Mov(c,5,e)
    ema2:=Mov(c,20,e)
    fallande1:=Lt(LlvBars(ema1,2),1)
    sälj2a:=And(Lt(ema1,ema2),fallande1)
    sälj2b:=Hhv(sälj2a,5)

    kurva:=Rsi(14)
    fallande2:=Lt(LlvBars(kurva,2),1)
    sälj3a:=And(fallande2,Cross(kurva,0))
    sälj3b:=Hhv(sälj3a,5)

    totalt=And(And(sälj1b,sälj2b),sälj3b)
    Mult(totalt,25)


    Jag såg att vi har dubbla variabler som heter "stigande" så jag la till 1 och 2 för att separera dessa.
    Nu är det bara att labba vidare och få fram lämpliga värden på parametrarna!

    Comment


    • #17
      Tack så hemskt mycket för ovanstående! Nu fick jag mycket att laborera med!

      Jag vill dock kunna jämföra med att ha en flytande stopp loss t ex. Har försökt få er stopp loss mini att funka men inte lyckats.

      Vad behöver jag göra för att få det att fungera?
      "Nothing noble is done without risk." - André Gide

      Comment


      • #18
        Stoploss Mini fungerar till skarpa innehav i realtid, inte i backtestning eller att studera i diagram. Då får man bygga ihop en flytande stopp, men det är faktiskt ganska bökigt att simulera det. Det går att göra, men det blir mycket kod.

        Vi ska se om vi kan ta fram ett bättre "skal" till en flytande stopp som man kan stoppa in sina egna signaler i. Det finns en del script att utgå ifrån på forumet om man söker lite, men det är för outvecklat för att vara riktigt bra.

        Jag ska gräva ner mig lite i det, så kan vi lägga det som en egen tråd.

        Det som är enklare att prova är flytande stoppar baserat på formationer, eller tex högsta/lägsta värde x antal staplar bakåt och liknande. Det är inga problem. En vanlig variant är att titta på lägsta Low 3-5 staplar bakåt, och använda som gräns för att gå ur en position. Vice versa för blankade positioner. Om du kan fundera ut någon logik för det kan vi enkelt koda ihop det. Som exempel kan vi tex ta scriptet längst ner på första sidan i Trading Chaos-tråden, som ritar ut stoppgränserna enligt samma princip.

        Comment


        • #19
          Flytande stopp

          Bra jobbat med den flytande stoppen!

          Jag testade ditt exempel rakt av och fick det funka bra. Förstod dock inte det där med animeringen. Tänkte sedan testa detta med "mitt" egna köpscript och skrev så här:

          köp1a:=Macd(b)
          köp1b:=Hhv(köp1a,1)

          ema1:=Mov(c,5,e)
          ema2:=Mov(c,20,e)
          stigande1:=Lt(HhvBars(ema1,2),1)
          köp2a:=And(Gt(ema1,ema2),stigande1)
          köp2b:=Hhv(köp2a,1)

          kurva:=Rsi(14)
          stigande2:=Lt(HhvBars(kurva,2),1)
          köp3a:=And(stigande2,Cross(kurva,0))
          köp3b:=Hhv(köp3a,1)

          köpentry=And(And(köp1b,köp2b),köp3b)

          { STOPLOSS }
          flytnivå:=0.98 {opt(0.92,0.99,0.01)}
          bakåt1:=480
          lasttradek=Retval(if(And(köpentry,or(ge(getval(4),getval(3)),eqv(getval(4),0))),D,Getval(3)),3)
          efterinköp=if(ge(d,getval(3)),h,0)
          highlevelb=hhv(efterinköp,bakåt1)
          stoppok=gt(getval(3),getval(4))
          köppris=find(And(ge(d,getval(3)),lt(ref(d,1),getval(3))),bakåt1,c,1)
          stoppkurva=mult(highlevelb,flytnivå)
          stoppsälj=and(stoppok,le(l,stoppkurva))
          lasttrades=Retval(if(And(stoppsälj,gt(getval(3),getval(4))),D,Getval(4)),4)
          draw(if(stoppok,stoppkurva,0),2,rqb)
          mult(stoppsälj,25)

          Men det gick inte bra... Vad är fel?
          Jag får bara en linje som följer kursen, inga säljsignaler.
          Last edited by SalK; 2008-11-22, 16:07.
          "Nothing noble is done without risk." - André Gide

          Comment


          • #20
            Kul att du provat redan!

            Det tog en liten stund innan jag hittade felet, men det var en gammal klassisk fälla:

            Variabeln "kurva" i ditt köpscript bildar delnamn av "stoppkurva" längre ned i stoppscriptet, och då blir det konflikt i scriptkompilatorn med pannkaka som följd. Det enda man behöver göra är att ändra "kurva" så att det blir unikt och entydigt, tex rsikurva. En annan fälla är tilldelade namn, som inte får förekomma nedanför den punkt i scriptet där man börjat använda minnesreferenser. Det sker precis i början av stoplosskoden, så ovanför det får det inte finnas några andra minnesrefar, som tex "köpentry" i ditt script. Jag lade till ett kolon så att det blir ett vanligt tilldelat namn, och då är det ok. Nedanstående fungerar fint!



            köp1a:=Macd(b)
            köp1b:=Hhv(köp1a,1)

            ema1:=Mov(c,5,e)
            ema2:=Mov(c,20,e)
            stigande1:=Lt(HhvBars(ema1,2),1)
            köp2a:=And(Gt(ema1,ema2),stigande1)
            köp2b:=Hhv(köp2a,1)

            rsikurva:=Rsi(14)
            stigande2:=Lt(HhvBars(rsikurva,2),1)
            köp3a:=And(stigande2,Cross(rsikurva,0))
            köp3b:=Hhv(köp3a,1)

            köpentry:=And(And(köp1b,köp2b),köp3b)

            { STOPLOSS }
            flytnivå:=0.98 {opt(0.92,0.99,0.01)}
            bakåt1:=480
            lasttradek=Retval(if(And(köpentry,or(ge(getval(4),getval(3)),eqv(getval(4),0))),D,Getval(3)),3)
            efterinköp=if(ge(d,getval(3)),h,0)
            highlevelb=hhv(efterinköp,bakåt1)
            stoppok=gt(getval(3),getval(4))
            köppris=find(And(ge(d,getval(3)),lt(ref(d,1),getval(3))),bakåt1,c,1)
            stoppkurva=mult(highlevelb,flytnivå)
            stoppsälj=and(stoppok,le(l,stoppkurva))
            lasttrades=Retval(if(And(stoppsälj,gt(getval(3),getval(4))),D,Getval(4)),4)
            draw(stoppkurva,2,rqb)
            mult(stoppsälj,25)

            Comment


            • #21
              Provade på kul att köra lite optimering på ABB, och testade som hastigast ett par olika upplösningar. Jag fick hyggligt bra resultat med ditt entry-script (helt utan optimering) i 60 minuters upplösning. Optimerade stoppen och kom fram till att 3% flytande stopp blev bäst med ditt entryscript. Titta på bilden så ser du hur den ackumulerade avkastningen blev från 2007 fram till nu.

              Attached Files

              Comment


              • #22
                Tack för snabbt svar!

                Nu funkar det ju bra och det var verkligen kul att du tog dig tid att titta lite närmare på resultatet. Kul att det ser hyggligt ut redan nu!

                Känner att jag inte riktigt får till det där du visade på snapshoten...
                60-minutersupplösning innebär intraday diagram eller hur? När jag väljer att 60-minuters ska visas några hundra dagar tillbaka har jag bara data några månader tillbaka men jag har ju dagsstaplar till 2003? Hur får jag fram intraday för 2007 som du hade?

                Är det animeringen som ger resultatlinjen du visade? Fungerar den bara på intraday för jag får inte fram den.
                "Nothing noble is done without risk." - André Gide

                Comment


                • #23
                  Hur får du till att linjen som visar stoppen, går ner och på så vis tydligt visar när det finns position och inte. Det var så på det ursprungliga exempelbilden du visade när du skapat den flytande stoppen jag får inte till att det visas så på min.
                  "Nothing noble is done without risk." - André Gide

                  Comment


                  • #24
                    Jo, jag ändrade i scriptet för jag tyckte det var lite störande när kurvan ritades lodrätt tvärs över hela diagrammet, men det är ju rätt som du säger att man vet precis när det finns ett innehav. Om du vill ändra tillbaka så är det bara den här raden:


                    draw(if(stoppok,stoppkurva,0),2,rqb)

                    om villkoret "stoppok" är sant väljs stoppkurva som ritvärde, annars noll.


                    Comment


                    • #25
                      Ok, tack!

                      Jag har nu fått fram intraday längre tillbaka, fick ändra inställningar i preferenser. Mycket att lära sig i detta program men det klarnar lite i taget liksom! Ni som har lång erfarenhet vad ska man köra för upplösning... 1min, 5min, 60min, dagsstaplar osv.

                      Jag har försökt på tusen sätt att få fram den där resultatlinjen du hade i din snapshot men jag lyckas inte! Hur får jag fram den?
                      "Nothing noble is done without risk." - André Gide

                      Comment


                      • #26
                        Det första man måste kolla är så att Analysbänkens resultat loggas i en fil, det finns ett kryss under Inställningar > Preferenser > Handel där det står "Logga analysbänkens resultat till disk". Det måste vara förkryssat. Nästa sak är att se till så man valt periodering i Analysbänken, jag brukar välja dag eller vecka, eller månadsvis om det är långkörning flera år tillbaka.

                        När man kört en backtest med dessa inställningar finns resultatkurvan tillgänglig via dubbelhögerklick i diagrammet, nästan längst ner kryssar man för "Visa analysbänkens delrapporter". Då får man upp en dialog där filen "vinst.txt" är förvald. Klicka OK så ska kurvan visas.

                        Comment


                        • #27
                          Optimering?

                          Kan man utgående från att intraday/stapelinställningar är konstant testa vilka inställningar för t.ex MACD som skulle ha gett bäst resultat under en viss period bakåt

                          Comment


                          • #28
                            Optimering

                            Tack!

                            Nu har vi kommit en bit tycker jag... Kul! Har du något bra tips hur jag ska gå vidare? Hur ska jag bestämma vad för upplösning jag ska ha, hur många dagar jag ska ge signalerna på att uppkomma, vad ska jag sätta stoppen på och vilka aktier som är intressanta? Alltså jag menar inte att du ska kolla upp detta utan jag känner att jag behöver lite tips från er som utvecklat mycket strategier hur jag ska gå till väga.

                            En annan sak... Finns det något bra tips på hur man undviker att det blir fel när en aktie gör en split eller en omvänd split. Exempelvis så blir Eric B resultatet ganska bra tills man tar bort den affären som var över spliten!
                            "Nothing noble is done without risk." - André Gide

                            Comment


                            • #29
                              Ursprungligen postat av Hong Kong Ola Visa inlägg
                              Kan man utgående från att intraday/stapelinställningar är konstant testa vilka inställningar för t.ex MACD som skulle ha gett bäst resultat under en viss period bakåt
                              Det kan man absolut göra. Om man "tillverkar" Macd-funktionen i script kan man köra parametrarna i Optimeringsbänken och få fram de som är bäst. Vi kan lägga Macd i en egen tråd tror jag så vi inte blandar ihop det med det andra scriptet i den här tråden.

                              Comment


                              • #30
                                Ursprungligen postat av SalK Visa inlägg
                                Tack!

                                Nu har vi kommit en bit tycker jag... Kul! Har du något bra tips hur jag ska gå vidare? Hur ska jag bestämma vad för upplösning jag ska ha, hur många dagar jag ska ge signalerna på att uppkomma, vad ska jag sätta stoppen på och vilka aktier som är intressanta? Alltså jag menar inte att du ska kolla upp detta utan jag känner att jag behöver lite tips från er som utvecklat mycket strategier hur jag ska gå till väga.

                                En annan sak... Finns det något bra tips på hur man undviker att det blir fel när en aktie gör en split eller en omvänd split. Exempelvis så blir Eric B resultatet ganska bra tills man tar bort den affären som var över spliten!

                                Visst är det roligt!

                                Parametrarna med antal dagar som "överlappningen" kan köras i Optimeringsbänken. Man får tilldela värdena namn som kan optimeras, i stil med nedanstående. Här testas värdena från 1-5 i steg om 1. Det sker för varje parameter individuellt. Så man får tänka sig för att inte köra för många på en gång för då blir det extremt många kombinationer som ska testas. Och resultaten måste ju gås igenom.....Glöm inte att göra exakt likadant i köpscriptet som sitter i flytstoppen om det ska simuleras. Annars kan du kanske börja med att simulera endast entry-scripten mot varandra, alltså köp-blanka och hitta optimala värden där. När det är klart kan man koppla in stoppen och optimera bara den.

                                När det gäller splitar är det ju lite problematiskt, men om du får bra resultat utom just vid splitten kan man ju ignorera den. Eller är det bra innan split men uselt efter? Då är det ju något med priset som får aktiens beteende att ändra sig.



                                parameter1:=1 {$opt(1,5,1)}
                                parameter2:=1 {$opt(1,5,1)}

                                köp1a:=Macd(b)
                                köp1b:=Hhv(köp1a,parameter1)

                                ema1:=Mov(c,5,e)
                                ema2:=Mov(c,20,e)
                                stigande1:=Lt(HhvBars(ema1,2),1)
                                köp2a:=And(Gt(ema1,ema2),stigande1)
                                köp2b:=Hhv(köp2a,parameter2)

                                Comment

                                Working...
                                X