Allmänt meddelande

Collapse
No announcement yet.

Standardmodell med MFI

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

  • Standardmodell med MFI

    Lite mer undersökning runt volymbaserade signaler visar att en dipp i volym ofta innebär ett köptillfälle, och en topp på motsvarande sätt ett säljtillfälle. Det verkar rimma ganska bra med volume profile-konceptet i en annan tråd. Vår tanke är att erbjuda fler standardmodeller i AutoTrader. Här är ett utkast på en modell med MFI, där en dipp i både volym och pris betyder köpsignal. Säljsidan är lite mer komplicerad, med en tidbaserad säljstrategi där man 5 dagar efter köp endast kräver att positionen ska ligga plus för att sälja strax innan börsstängningen.

    Det ser ut att simulera hyggligt bra på många aktier. Det vore intressant att höra lite synpunkter från panelen.



    Köp:

    ma100=mov(c,100,s)
    nedtrend=not(hhv(gt(c,ma100),45))
    ej_innehav=le(portfolio(v),0)
    stängning=le(mult(1440,sub(market(c),frac(date()))),7)
    öppet=ge(mult(1440,sub(market(c),frac(date()))),6)
    botten=and(aref(lt(mval,1),1),gt(mval,aref(mval,1)))
    draw(mval,2,dcsvw)
    köp=and(and(botten,ej_innehav),and(öppet,not(nedtrend)))
    mult(köp,10)



    Sälj:

    köpdag=lasttrade(b,d)
    mval=mov(mfi(3),3,e)
    ma100=mov(c,100,s)
    underma=lt(c,ma100)
    mfgräns=if(underma,95,99)
    topp=and(aref(gt(mval,mfgräns),1),lt(mval,aref(mval,1)))
    ej_köp_idag=gt(d,köpdag)
    5dgr=lt(köpdag,cmpref(d,5,a))
    kl1720=gt(frac(date()),0.72222)
    vinst=gt(c,mult(lasttrade(b,p),1.005))
    innehav=gt(portfolio(v),0)
    sell1=and(kl1720,or(topp,and(5dgr,vinst)))
    sell2=and(and(sell1,innehav),ej_köp_idag)
    mult(sell2,10)

    {@A(0,)}
    Attached Files

  • #2
    Hej,

    Intressant jämviktspendlande strategi, ser mycket lovande ut (likt studs i bollingerband), vore kul om den kan komplettera standardstrategiutbudet.

    Det ju är relativt enkelt att köpa på svaghet och sälja på styrka med många indikatorer. kanske har MFI ytterligare en edge...

    Förslag på att få en strategi av den här typen vass :
    • Behöver köra den på många aktier för att få många "opportunities" och sprida risk, en aktie kan dyka mycket på nyheter. Ser ut som du kört test sedan 2006, dvs den har ganska få opportunities.
    • Det viktigaste: Behöver logik som kan hantera vilka aktier som ska tillåtas ta position, signaler kommer troligen från många aktier samtidgt (klustras) och man kan inte köpa allt som signalerar (begränsat kapital).
    • En aktie som legat i trade med vinst i x dagar kanske ska tillåtas ge plats för en eftersläntrande aktie som signalerar senare och har en ny edge.
    • Önskemål i strategin (NAT) att det finns en slags global lista/array/fil-access/databas likt en kakylutforskare med t.ex. info om en akties "ID", en per aktie som ingår i strategin, Om den har köpsignal, säljsignal, tidpunkt för signal (hur gammal signalen är (forfarande gilltig), ifall den står på kö för position), vilka som ligger i trade, nuvarande vinst och datum för köp per aktie (ja valbart antal fält som kan bearbetas).. Därmed ska ett centralt script/logik för "signal/mony Management monitorera alla aktier i listan, bearbeta informationen om den och avgöra om köp, sälj ska göras (loopa igenom alla aktiers info och sortera fram senaste signalerna, kunna jämföra) performance, money management möjligheterna är många med t.ex. sizing blockering av signaler om t.ex. får man flera signaler samtigit kan man ju ta den med t.ex. lägst RSI eller likandne, hantera om övergripande klimat vänder. T.ex. spärra signaler en viss tid för nya signaler om flera aktier trades gått dåligt, kan det vara täcken på ras och köpa på svaghet är alltid sämst i ras.).
    • (Komplettera med trend-strategi. Man ser att under trend ligger strategin utanför. Man kan tänka sig en ADX- och MA indikator som tar ställning till om aktien ska fortsätta innehas en längre period och inte säljas på styrka, nu köps den inte på rekyler, eller så gör man villkoren känsligare vid trend så att den lättar köper på lite svaghet då, så att man har två 2-3 styrke-nivår i strategin kanske baserat på några MA eller ADX..)

      sedan har man en pefekt modell/programvara att trada med
    Last edited by jimmy; 2013-08-11, 15:40. Anledning: korrigerar småfel i stavning

    Comment


    • #3
      mval är inte definierad i köpscrptet?

      Comment


      • #4
        MFI och OMXS30 (volym)?

        Hej,

        jag postade också en relaterad fråga om index och volym och MFI som jag önskar svar på. (Pratas en del om funktionalitet i nästa release, kan det komma volym för index t.ex.).

        http://www.autostock.se/vbulletin/sh...newpost&t=3297

        Comment


        • #5
          Lite mer labbande, har lagt till kod för att låta positionen löpa vid starkare upptrend etc. Entries spärras vid mer ihållande nedgångar. Det finns fortfarande svagheter i systemet, men forumet kanske hittar bättre parameterinställningar etc.



          Köp:

          mval=mov(mfi(3),3,e)
          ma100=mov(c,100,s)
          nedtrend=not(hhv(gt(c,ma100),30))
          styrka=not(hhv(lt(c,ma100),30))
          mfgräns=if(styrka,10,1)
          ej_innehav=le(portfolio(v),0)
          stängning=le(mult(1440,sub(market(c),frac(date()))),7)
          öppet=ge(mult(1440,sub(market(c),frac(date()))),6)
          botten=and(aref(lt(mval,mfgräns),1),gt(mval,aref(mval,1)))
          draw(mval,2,dcsvw)
          köp1=and(and(botten,ej_innehav),and(öppet,not(nedtrend)))
          mult(köp1,10)



          Sälj:

          köpdag=lasttrade(b,d)
          mval=mov(mfi(3),3,e)
          ma50=mov(c,50,s)
          underma=lt(c,ma50)
          svaghet=hhv(lt(c,ma50),45)
          mfgräns=if(underma,90,99)
          topp=and(aref(gt(mval,mfgräns),1),lt(mval,aref(mval,1)))
          ej_köp_idag=gt(int(d),köpdag)
          5dgr=lt(köpdag,cmpref(d,5,a))
          kl1720=gt(frac(date()),0.72222)
          vinst=gt(c,mult(lasttrade(b,p),1.005))
          innehav=gt(portfolio(v),0)
          sell1=and(and(kl1720,or(topp,and(5dgr,vinst))),svaghet)
          sell2=and(and(sell1,innehav),ej_köp_idag)
          mult(sell2,10)

          {@A(0,)}
          Attached Files

          Comment


          • #6
            Hej,

            någon som ser en möjlighet att få till kontroll av vilka signalerande aktier som får ta position och säljas enligt förslag punk 2 och 4 (eller delar av efterfrågad funktionalitet) i inlägg #2 ? ?

            Att bara köra på låt säga 30-50 aktier utan central kontroll förefaller ialla fall mig ganska meningslöst, jag ser "ramverket" för sådan strategi som viktigare än själva villkoren för position... Det kanske är en anledning varför detta forum mest pratar om lösningar kring index strategier (ett instrument)?

            Last edited by jimmy; 2013-08-11, 22:51.

            Comment


            • #7
              Vet man bara vilken eller vilka parametrar man ska använda för att ranka eventuella köpkandidater som får signal samtidigt så går det ju alltid att spara värdet i globala celler tex, eller de nya ini-filvariablerna. Ett centralt script kan därefter avgöra vilken kandidat som är "hetast" och skicka in CRC ID för den aktien i en "master"-cell. Det script som får "träff" på sitt CRC ID lägger ordern.

              Vi bygger vidare på systemet ovan och försöker hitta ett sätt att ranka fram den bästa kandidaten. Resten är ganska enkelt.

              Comment


              • #8
                Liten uppdatering med nya versioner av scripten:

                Köp:

                mval=mov(mfi(3),3,e)
                ma50=mov(c,50,s)
                upptrend=llv(gt(c,ma50),5)
                styrka=and(upptrend,gt(macd2(n),macd2(t)))
                mfgräns=if(styrka,10,1)
                kl1720=le(mult(1440,sub(market(c),frac(date()))),10)
                ej_innehav=le(portfolio(v),0)
                stängning=le(mult(1440,sub(market(c),frac(date()))),7)
                öppet=ge(mult(1440,sub(market(c),frac(date()))),6)
                botten=and(aref(lt(mval,mfgräns),1),gt(mval,aref(mval,1)))
                draw(mval,2,dcsvw)
                draw(ma50,3,dgqb)
                köp1=and(and(botten,ej_innehav),and(öppet,kl1720))
                mult(köp1,10)


                Sälj:

                köpdag=lasttrade(b,d)
                mval=mov(mfi(3),3,e)
                ma50=mov(c,50,s)
                draw(ma50,2,rqb1)
                underma=lt(c,ma50)
                svaghet=hhv(lt(c,ma50),60)
                mfgräns=if(underma,80,99)
                topp=and(aref(gt(mval,mfgräns),1),or(lt(c,aref(l,1)),lt(mval,aref(mval,1))))
                ej_köp_idag=gt(int(d),köpdag)
                5dgr=lt(köpdag,cmpref(d,5,a))
                kl1720=le(mult(1440,sub(market(c),frac(date()))),10)
                inpådagen=gt(frac(date()),0.377)
                öppet=ge(mult(1440,sub(market(c),frac(date()))),6)
                vinst=gt(c,mult(lasttrade(b,p),1.005))
                innehav=gt(portfolio(v),0)
                sell1=and(and(or(5dgr,kl1720),or(topp,and(5dgr,vinst))),svaghet)
                sell2=and(and(and(and(sell1,innehav),ej_köp_idag),inpådagen),öppet)
                mult(sell2,10)

                {@A(0,)}



                Har simulerat på några olika aktier med varierande resultat men helt klart är att det skulle fungera att köra det i en portfölj. Antingen att man lägger till villkor så att de aktier som larmar först får köp tills depån är fullmatad, eller att man hittar ett sätt att ranka kandidaterna och låta de x antal bästa köpas.
                Attached Files

                Comment


                • #9
                  Lite statusuppdatering för MFI-modellen, har byggt på med kod för att ranka de fem bästa kandidaterna enligt en ännu så länge ganska enkel metod där man räknar antal dagar sedan kursen klättrade ovanför MA50, multiplicerat med den procentuella trading-rangen för de senaste 10 dagarna. Då får man ett värde som tar hänsyn till trenden på längre sikt och samtidigt sorterar ut de mest volatila kandidaterna just nu.

                  De fem bästa lagras i celler 830-834 samt motsvarande ID för aktien i cellerna 835-839. Sortering görs 1 minut innan handel sker kl 17:20.

                  Ska provhandla skarpt några dagar och se, men det verkar fungera. Nytt är att kommandot CRCID() används för att returnera instrument-ID i decimalform.
                  På så vis kan man hålla ordning på vilken aktie scriptet är anslutet till osv.





                  Köp:

                  mval=mov(mfi(3),3,e)
                  ma50=mov(c,50,s)
                  upptrend=llv(gt(c,ma50),5)
                  styrka=and(upptrend,gt(macd2(n),macd2(t)))
                  mfgräns=if(styrka,10,1)
                  rating1=getgvar(830)
                  rating2=getgvar(831)
                  rating3=getgvar(832)
                  rating4=getgvar(833)
                  crc1=getgvar(835)
                  crc2=getgvar(836)
                  crc3=getgvar(837)
                  crc4=getgvar(838)
                  rate1=div(hhv(h,10),llv(l,10))
                  rate2=topbars(lt(c,ma50),100,1)
                  rate3=mult(rate1,rate2)
                  kl1720=le(mult(1440,sub(market(c),frac(date()))),8)
                  kl1719=and(le(mult(1440,sub(market(c),frac(date()))),9),not(kl1720))
                  botten=and(aref(lt(mval,mfgräns),1),gt(mval,aref(mval,1)))
                  högre_rate=gt(mult(botten,rate3),rating1)
                  skriv_rate=and(högre_rate,kl1719)
                  setgvarif(rate3,830,skriv_rate)
                  setgvarif(rating1,831,skriv_rate)
                  setgvarif(rating2,832,skriv_rate)
                  setgvarif(rating3,833,skriv_rate)
                  setgvarif(rating4,834,skriv_rate)
                  setgvarif(crcid(),835,skriv_rate)
                  setgvarif(crc1,836,skriv_rate)
                  setgvarif(crc2,837,skriv_rate)
                  setgvarif(crc3,838,skriv_rate)
                  setgvarif(crc4,839,skriv_rate)
                  ej_innehav=le(portfolio(v),0)
                  öppet=ge(mult(1440,sub(market(c),frac(date()))),6)
                  draw(mval,2,dcsvw)
                  draw(ma50,3,dgqb)
                  nolltid=lt(frac(date()),0.377)
                  nollställ0=setgvarif(0,830,nolltid)
                  nollställ1=setgvarif(0,831,nolltid)
                  nollställ2=setgvarif(0,832,nolltid)
                  nollställ3=setgvarif(0,833,nolltid)
                  nollställ4=setgvarif(0,834,nolltid)
                  nollställ5=setgvarif(0,835,nolltid)
                  aktie1=getgvar(835)
                  aktie2=getgvar(836)
                  aktie3=getgvar(837)
                  aktie4=getgvar(838)
                  aktie5=getgvar(839)
                  kandidat_a=if(gt(aktie1,0),aktie1,aktie2)
                  kandidat_b=if(gt(kandidat_a,0),kandidat_a,aktie3)
                  kandidat_c=if(gt(kandidat_b,0),kandidat_b,aktie4)
                  kandidat_d=if(gt(kandidat_c,0),kandidat_c,aktie5)
                  köp1=and(and(botten,ej_innehav),and(öppet,kl1720))
                  köp2=and(and(köp1,eqv(crcid(),kandidat_d)),gt(kandidat_d,0))
                  setgvarif(0,835,or(nolltid,and(eqv(crcid(),aktie1),köp2)))
                  setgvarif(0,836,or(nolltid,and(eqv(crcid(),aktie2),köp2)))
                  setgvarif(0,837,or(nolltid,and(eqv(crcid(),aktie3),köp2)))
                  setgvarif(0,838,or(nolltid,and(eqv(crcid(),aktie4),köp2)))
                  setgvarif(0,839,or(nolltid,and(eqv(crcid(),aktie5),köp2)))
                  mult(köp2,10)



                  Sälj:


                  köpdag=lasttrade(b,d)
                  mval=mov(mfi(3),3,e)
                  ma50=mov(c,50,s)
                  draw(ma50,2,rqb1)
                  underma=lt(c,ma50)
                  svaghet=hhv(lt(c,ma50),60)
                  mfgräns=if(underma,80,99)
                  topp=and(aref(gt(mval,mfgräns),1),or(lt(c,aref(l,1)),lt(mval,aref(mval,1))))
                  ej_köp_idag=gt(int(d),köpdag)
                  5dgr=lt(köpdag,cmpref(d,5,a))
                  kl1720=le(mult(1440,sub(market(c),frac(date()))),10)
                  inpådagen=gt(frac(date()),0.377)
                  öppet=ge(mult(1440,sub(market(c),frac(date()))),6)
                  vinst=gt(c,mult(lasttrade(b,p),1.005))
                  innehav=gt(portfolio(v),0)
                  stoploss=lt(c,mult(0.8,lasttrade(b,p)))
                  sell1=and(and(or(5dgr,kl1720),or(topp,and(5dgr,vinst))),svaghet)
                  sell2=and(and(and(and(or(stoploss,sell1),innehav),ej_köp_idag),inpådagen),öppet)
                  mult(sell2,10)

                  {@A(0,)}

                  Comment


                  • #10
                    Köpsignal innan stängning idag för SHB-A, blir intressant att se hur den går närmsta dagarna.

                    Comment


                    • #11
                      Mycket intressant! Jag följer denna tråd med stort intresse.

                      Comment


                      • #12
                        Coolt, här är lite mer simulering. Körde ett svep med 12 aktier, 100 000 kr insats på varje med en 400 000 kr portfölj. Det intressanta är att se hur den sorterar ut kandidaterna, och att hitta ett bra sätt att ranka dem.

                        Attached Files

                        Comment


                        • #13
                          Hej
                          Försöker köra scriptet ovan i bänken men får det inte att funka med sorteringen. Känns inte som att det skrivs nått i de globala cellerna. Om jag struntar struntar i sorteringen och bara använder scriptet tom köp1 (köp1=and(and(botten,ej_innehav),and(öppet,kl1720)) funkar det fint. Vad kan jag ha missat denna gång?

                          Comment


                          • #14
                            Har du animering påslagen?

                            Comment


                            • #15
                              Idag blev det köp på GETI, SWED A och ELUX-B.

                              SHB-A ligger plus sedan köp igår.

                              Comment

                              Working...
                              X