Allmänt meddelande

Collapse
No announcement yet.

Metastock trendformler

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

  • Metastock trendformler

    Har en Metastockkod som ger signal för topp och botten i ett glidande medelvärde, Mov(C,3,W). Sen använder jag en logik sats för att konstatera om det var botten senast=upptrend eller
    top senast=nedtrend. Har någon ett tips hur man gör det i FriendlyBörs?

    Metastock kod:
    Topp
    Ref(Mov(C,3,W),1) < Mov(C,3,W) AND Ref(Mov(C,3,W),-1) < Mov(C,3,W)
    Botten
    Ref(Mov(C,3,W),1) > Mov(C,3,W) AND Ref(Mov(C,3,W),-1) > Mov(C,3,W)

    Sen kan man använda WriteVal(BarsSince(uttryck)) för att konstatera vad som inträffat senast. I Easylanguage kan man använda MRO=Most Recent Occurence.

    Men hur gör man i Friendly?

    Tacksam för tips.
    gbd

  • #2
    Friendly kan inte hänvisa till framtiden, vilket formlerna här gör. I verkliga fallet online kan man ju inte använda detta hursomhelst.

    Men modifierat till att hänvisa en bakåt och just nu funkar.

    Metastock kod:
    Topp
    Ref(Mov(C,3,W),1) < Mov(C,3,W) AND Ref(Mov(C,3,W),-1) < Mov(C,3,W)

    FriendlyScript(rak översättning först):

    And(Lt(ARef(Mov(C,3,W),1),Mov(C,3,W)),Lt(Aref(Mov(C,3,W),1),Mov(C,3,W)))

    Friendly gör alltså inte skillnad på positiva periodhänvisningar eller negativa. Allt är bakåt i tiden eller nu.

    Mer läsbart:

    mnu:=Mov(C,3,W)
    mdå:=ARef(mnu,1)
    mförr:=ARef(mnu,2)
    And(Lt(mnu,mdå),Lt(mförr,mdå))

    Modifierat ovan enligt samma tanke så att vi har en topp i förgående period och just nu ett lägre värde.

    Märkt att Ref() i Friendly kan användas men bara på konstanterna C för Close, V för Volume osv.

    Aref() kan användas på alla typer av dataserier.

    Metastock:

    Botten
    Ref(Mov(C,3,W),1) > Mov(C,3,W) AND Ref(Mov(C,3,W),-1) > Mov(C,3,W)

    Friendly script(fast topp i förgående period):
    mnu:=Mov(C,3,W)
    mdå:=ARef(mnu,1)
    mförr:=ARef(mnu,2)
    And(Lt(mnu,mdå),Lt(mförr,mdå))


    Topp kan också skriva med funktionen Top():

    mnu:=Mov(C,3,W)
    mtopdå:=topbars(mnu,3,1)
    Eqv(mtopdå,1)

    Topbars() returnerar 0 om den inte hittar topp. 1 om i förra perioden.

    3 betyder inom 3 perioders vy bakåt som man skannar
    1 betyder första toppen

    Sedan kan du utöka med en procentangivelse hur stor rörelse på ändera sidan om toppen som måste finnas.

    mnu:=Mov(C,3,W)
    mtopdå:=topbars(mnu,3,1,0.5)
    Eqv(mtopdå,1)

    Ger SANT(flagga) då du har en topp i förra perioden och det är minst 0.5% stor rörelse.

    Motsvarande för botten

    mnu:=Mov(C,3,W)
    mbottendå:=bottombars(mnu,3,1,0.5)
    Eqv(mbottendå,1)

    Comment


    • #3
      Rättelse...

      Topbars() och Bottombars() returnerar max angivet värde att skanna bakåt minus 1, då den inte träffar på någon topp alls.

      Anges som här t.ex 3 perioder fås värdet 2 hela tiden på topbars() om ingen topp hittas.

      Comment


      • #4
        Nästan klart

        Hej Lasse,

        Tror jag förstått scriptet. Att jag la in och hänvisar till framtiden är en lite specialare för att kompensera att MS inta klarar intraday,
        då matar jag in intraday i en extra datapost tomorrow.

        Naturligtvis ska man i normalfallet hänvsisa till nu samt igår och för två dagar sen.

        Tillbaka till toppar/bottnar i GMV3W, när jag utvärder vilken händelse som skedde senast så kan detta vara flera veckor tillbaka. Därför vore det bra om man kunde konstatera vem man senast fick signal från. Funktionen är faktiskt riktigt bra om man vill ha ett filter att bara ta position i trendens riktning, d.v.s. uppåt om du fick botten senast och v.v. Tänkte du att man skulla välja att använda GT eller LT för att utvärdera vad som kom senast?

        Tack på förhand!
        gbd

        Comment


        • #5
          Ja, som exempel

          tittabakåt:=66 {3månader per dagskurser}
          mnu:=Mov(C,3,W)
          mtopdå:=topbars(mnu,tittabakåt,1)
          mbottendå:=bottombars(mnu,tittabakåt,1)
          Gt(mbottendå,mtopdå)

          Om det är längre till en botten än top blir det SANT. Välja tittabakåt så du får minst en signal av varje räcker då.

          Comment


          • #6
            Växlande - Spinnande system

            Hej,

            Såg att det fanns flera diskussioner om system som växlade lång-kort. Ovanstående trendsignal hade jag tänkt att använda som filter, sen ta positioner i trendens riktning. Men började fundera på om "spinnande" system med 0 i order måste ligga som grund.
            Kan man inte välja entry-signal baserat på vilket filter som gett signal istället?
            Jag tänkte köra tre filter:
            1. Upptrend
            2. Nedtrend
            3. Cykliskt {Ingen av ovanstående ger signal}

            Sen såg jag att en fantastisk funtion, CmpRef(d,p,ABC) , var införd från 6.0 och de tär att referera till flera tidsperioder. Då tänkte jag köra filterna på dagskurs och sedan entry och exit med hjälp av Intraday.

            Tips på hur man hanterar det på effektivaste sätt utan att lägga o-orders?
            gbd

            Comment


            • #7
              Inte behöver köra spinnande generellt. Det var väl en listig lösning innan möjlighet till parallella ordermodeller fanns i version 6.

              Scriptet ovan fast mot dagskurser som ett extra objekt:


              tittabakåt:=66 {3månader per dagskurser}
              mnu:=Mov(CmpRef(C,0,B),3,W)
              mtopdå:=topbars(mnu,tittabakåt,1)
              mbottendå:=bottombars(mnu,tittabakåt,1)
              Gt(mbottendå,mtopdå)

              Definiera objekt B som dagskurser på det papper du önskar via knappen Extra objekt.

              Första hänvisningen till dataserie behöver bara ändras som synes.


              Sedan kan du blanda in intraday som du vill för övrigt i samma script.

              Comment


              • #8
                Tillägg...

                Så länge triggerscripten ger falskt i retur så blir det ingen order.

                Om strategin du tänkt använda passar till en ordermodell med växlande köp och säljsekvenser så använd den.

                Har du behov av att köp eller sälj ligger parallellt?

                Du vill t.ex kunna köpa flera gånger i rad, samtidigt som du har stopploss som testas för att göra dig av med innehavet helt när de villkoren är uppfyllda.

                Om du aktiverar multipla ordermodeller tillåts i Preferenser och fliken handel, så kan du koppla flera ordermodeller till samma papper.

                Då kan t.ex alla köp-sekvenser ligga i en modell och alla sälj i en annan. Då testas i varje ny kursinsamling både triggern för köpmodellen och säljmodellen. Skall vi köpa på oss mer, eller skall vi sälja av rubbet.

                Nackdelen med parallella modeller är att de agerar på varje signal man får. I sekvensiella modeller där göms ju extra köp-signaler för att man växlat till en säljsekvens, och de köpscripten körs inte längre. En parallell modell kräver nogrannare filtrering av oönskade signaler alltså. Svårare att få till.

                Comment


                • #9
                  Sekvensiell modell

                  Ska prova med sekvensiell modell om den inte växer och blir ohanterligt komplex. Det är ju mycket lättare med parallellt men jag tror inte jag lyckas få filtervilkor så rena. Risk att dom börjar konkurrera med varann vid cykliskt som växlar köp/sälj.

                  Helst vill jag använda ett enda filter för entries och det ska ha tre olika vägval beroende på marknad.
                  För att:
                  -ta mig ur planerat använder jag exits
                  -skydda vinster profittargets exits
                  -skydd mot förluster med stop-loss exits

                  Återkommer när jag ser vart det leder, men det tar nog till helgen innan jag har hunnit testa på lite olika marknader för att dra någon bra slutsats.

                  gbd

                  Comment


                  • #10
                    Du kan också använda Retval(d,01234) för att lägga saker i de fem minnesplatserna. Dessa lagras med varje verklig trans som blir i verkligheten(kan alltså inte backtestas med avseende på dessa värden).

                    Du kan sedan hämta värden med LastTrade(BS,VPD01234).

                    På det sättet kan du överföra viss info för din egen hantering mellan script och ordermodeller också. 5 st flyttal är det som överförs.

                    Comment


                    • #11
                      Kan tillägga att GetVal(01234) kan användas för att överföra info i scriptet från en period till en annan.

                      Returnera värden från scriptet till minnesplatser med RetVal() och hämta med GetVal().

                      Comment


                      • #12
                        Låter intressant!

                        Betyder det att man skulle kunna plocka ut den av de senaste signalerna som är stabilast = störst träffsäkerhet alt. störst vinst
                        och skapa en logik som pyramidar den signal som för stunden är bäst?

                        Blir avancerat i överkant förstås men borde kunna användas för att pyramida med en viss större säkerhet. Resultatet brukar ju oftast annars bli att när man pyramidar in sig så kommer man in för sent och hinner inte ur med någon marginal.

                        För den intresserade bifogar jag en kort beskrivning av ett "adaptive system" skrivet i easylanguage.
                        (Kommer från Clayburg.com)
                        Attached Files
                        gbd

                        Comment

                        Working...
                        X