Allmänt meddelande

Collapse
No announcement yet.

Problem med regressionslinje

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

  • Problem med regressionslinje

    Hello folks!

    Fick en ide om att låta vinstnivån styra periodvärdet på en reglinje.
    Tanken är att ju högre vinst, desto långsammare reglinje, och man ligger alltså kvar längre i en lång trend och sparar courtage.

    Problemet är att jag får inte det att funka!
    Periodvärdet blir inte det som "faktor1" landar på.
    Däremot om jag skriver ett absolut tal, tex 50 istället för "faktor2"
    på näst sista raden funkar det.
    Här är ett urklipp ur mitt script som stänger en blankposition:

    {lastsell:=LastTrade(S,P)}
    lastsell:=706 (simulerar blankat kontrakt)
    mp1:=div(sub(h,l),2)
    close:=add(l,mp1)
    profit:=Sub(lastsell,c) (vinst i absoluta punkter)
    faktor1:=Add(Div(Mult(profit,profit),2),20)
    faktor2:=If(Gt(faktor1,200),200,faktor1) (begränsn. max 200)
    rgln1:=LinReg(close,faktor2)
    regupp1=Lt(HhvBars(rgln1,2),1)

  • #2
    För att tillåta dynamiska periodparametrar krävs en speciell syntax:


    {lastsell:=LastTrade(S,P)}
    lastsell:=706
    mp1:=div(sub(h,l),2)
    close:=add(l,mp1)
    profit:=Sub(lastsell,c)
    faktor1:=Add(Div(Mult(profit,profit),2),20)
    faktor2:=If(Gt(faktor1,200),200,faktor1)
    rgln1:=LinReg(close,faktor2:200)
    regupp1=Lt(HhvBars(rgln1,2),1)

    lägg märke till denna raden

    rgln1:=LinReg(close,faktor2:200)

    Här talar du om med ':200' att det är max 200 som periodvärdet kan anta.


    Sedan är det absolutbeloppet du vill ha av 'profit' finns enklare sätt

    faktor1:=Add(abs(profit),20)

    Begränsa maxvärde kan göras enklare också

    faktor2:=Mn(200,faktor1)

    Minsta av 200 och faktor.

    lastsell:=706
    mp1:=div(sub(h,l),2)
    close:=add(l,mp1)
    profit:=Sub(lastsell,c)
    faktor1:=Add(abs(profit),20)
    faktor2:=Mn(200,faktor1)
    rgln1:=LinReg(close,faktor2:200)
    regupp1=Lt(HhvBars(rgln1,2),1)

    Comment


    • #3
      Så här borde det väl bli då?

      lastsell:=LastTrade(S,P)
      mp1:=div(sub(h,l),2)
      close:=add(l,mp1)
      profit:=Sub(lastsell,c)
      faktor1:=Add(Div(Mult(profit,profit),2),20)
      rgln1:=LinReg(close,faktor1:200)
      regupp1=Lt(HhvBars(rgln1,2),1)

      Absolutvärde behöver man ju inte ta väl?
      Raden "faktor1" kan ju aldrig returnera ett negativt värde.
      Det viktiga med den är att periodvärdet stiger kvadratiskt med vinsten.
      Faktor2 behövs ju inte eftersom begränsningen sker direkt i rgln1 med den nya syntaxen.

      Ska prova så får vi se hur det funkar.

      Tror att detta kan vara en bra signal på när det är dags att stänga en position.
      Har man liten vinst, stäng fort. Har man snabbt fått en större vinst, ligg kvar längre. Skulle vinstn börja krympa så justeras periodvärdet ner succesivt och man tar hem fortare. En slags flytande stoploss-karaktär.



      Comment


      • #4
        Jag tittade lite slarvigt på multiplikationen där. Det borde vart SQR(mult(x,y)) för att ABS() skulle vara samma sak.

        Profit kan ju bli negativt men kvadraten försäkrar ju att det alltid blir positivt resultat.

        Begränsningen i värde tror jag dock är bra för att vara säker att du inte överskrider 200 eller vad du sätter. Risk för krasch i sådana fall beroende på hur resten av scriptet ser ut.

        200 talar om för kompilatorn hur mycket minne som skall reserveras för arrayer som bildas. Det är sedan ditt eget ansvar att det inte överskrids. Det maximeras inget utan skrivs det över i minnet är resultatet ovisst och kanske krasch också.

        Så faktor2 raden tycker jag skall vara med.

        Comment


        • #5
          Jag la tillbaka "faktor2" så att toppvärdet begränsas till 200 vilket verkar vara lagom för mig som kör i 10-minuters upplösning.

          Har kollat lite på senaste terminen och det funkar brutalt bra!

          Comment

          Working...
          X