Allmänt meddelande

Collapse
No announcement yet.

Climber 1.0

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

  • Climber 1.0

    Pga stundande jobb inom finansbranschen så kommer jag tvingas avsluta mitt konto hos Autostocks. Jag tänkte därför ge forumet några julklappar i form av strategier jag kodat och använder live.

    Om man vidareutvecklar koden, så önskar jag att man delar med sig i den här tråden. Första strategin är ett trendföljande gridsystem för DAX. Ändra max_position för önskad total positionsstorlek. Klar att koppla till minisar med köp och sälj-antal script.

    Köpscript

    {Climber 1.0 #2}

    klocka:=frac(date())
    grid:=atr(5)


    max_grid:=10
    valuta:=cmpref(c,0,a)
    Max_position:=1000000

    köpantal=int(mult(div(div(mult(max_position,valuta),max_grid),c),valuta))

    ma1=mov(c,5,s)
    ADX=ema(dx(14),14)
    stoppafallet=and(and(gt(adx,aref(adx,1)),gt(adx,25)),lt(c,mov(c,200,s)))
    noshort=lt(getgvar(416),1)

    innehav1=eqv(portfolio(v),0)
    tid1=gt(int(mult(frac(d),1440)),600)

    risk=if(lt(c,mov(c,200,s)),3,3)

    filter1=or(gt(div(c,mov(c,200,s)),1.0),gt(div(mov(c,200,s),c),1.0))
    filter2=and(ge(int(d),add(lasttrade(s,d),3)),eqv(portfolio(v),0))
    signal1=gt(c,aref(hhv(c,risk),2))
    signal2=gt(ma1,aref(ma1,1))


    köp1=and(and(and(and(signal1,signal2),and(filter1,filter2)),innehav1),not(stoppafallet))
    setgvarif(0,405,köp1)
    setgvarif(köpantal,406,köp1)

    sälj_senast=gt(lasttrade(s,d),lasttrade(b,d))


    size_snitt=if(gt(c,mov(c,100,s)),if(ge(portfolio(v),mult(4,getgvar(406))),4,6),if(ge(portfolio(v),mult(4,getgvar(406))),1,3))
    size_öka=if(gt(c,mov(c,100,s)),if(ge(portfolio(v),mult(4,getgvar(406))),4,6),if(ge(portfolio(v),mult(4,getgvar(406))),1,3))
    reenter=and(lt(c,sub(lasttrade(s,p),div(grid,6))),gt(portfolio(v),0))

    köp2=and(or(and(gt(c,add(lasttrade(b,p),div(grid,size_öka))),gt(c,portfolio(p))),lt(c,sub(lasttrade(b,p),div(grid,size_snitt)))),gt(portfolio(v),0))

    {order}

    order1=if(ge(portfolio(v),mult(getgvar(406),10)),0,if(sälj_senast,or(reenter,köp1),if(eqv(portfolio(v),0),köp1,köp2)))



    draw(aref(hhv(l,risk),2),4,rqb0)

    mult(order1,1)

    {@A(0,XX46894F2D)}


    SÄLJSCRIPT

    {Climber 1.0 SÄLJ #1}

    klocka:=frac(date())

    grid:=atr(5)


    ma1=mov(c,200,s)
    innehav1=gt(portfolio(v),0)
    size=if(gt(c,mov(c,100,s)),4,6)

    momUPP=gt(c,sub(hhv(h,2),mx(mult(mult(0.2,mx(atr(20),atr(5))),0.25),1.25))) { 0.999))}

    urskalning1=and(and(and(ge(portfolio(v),mult(size,getgvar(406))),gt(c,add(portfolio(p),div(grid,4)))),gt(c,add(lasttrade(b,p),div(grid,4)))),not(momup p))
    urskalning2=and(and(gt(c,portfolio(p)),gt(c,add(lasttrade(s,p),div(grid,4)))),not(momupp))

    varning=and(and(ge(portfolio(v),mult(10,getgvar(406))),gt(c,mult(portfolio(p),if(gt(c,ma1),0.995,0.99)))),innehav1)
    setgvarif(1,407,varning)
    setgvarif(0,407,lt(abs(portfolio(v)),mult(10,getgvar(406))))
    stopp2=and(lt(c,mult(portfolio(p),if(gt(c,ma1),0.989,0.98))),eqv(getgvar(407),1))

    klimattarget=and(and(lt(c,portfolio(p)),gt(c,aref(hhv(h,10),1))),ge(portfolio(v),mult(getgvar(406),4)))

    test=and(or(gt(dayofmonth(),29),lt(dayofmonth(),6)),and(ge(portfolio(v),mult(getgvar(406),10)),gt(c,aref(hhv(h,4),1))))

    break_even=and(and(eqv(portfolio(v),mult(getgvar(406),10)),gt(div(c,portfolio(p)),1.005)),innehav1)
    setgvarif(1,408,break_even)
    setgvarif(0,408,lt(abs(portfolio(v)),mult(getgvar(406),10)))
    stopp3=and(eqv(getgvar(408),1),le(c,mult(portfolio(p),1.001)))

    stopp1=and(or(or(stopp2,stopp3),klimattarget),innehav1)
    setgvarif(1,415,stopp1)
    setgvarif(1,405,stopp1)
    sälj_senast=gt(lasttrade(s,d),lasttrade(b,d))

    sälj1=or(and(innehav1,if(sälj_senast,urskalning2,urskalning1)),stopp1)

    mult(sälj1,1)

    KÖPANTAL SCRIPT


    i1(


    köpantal=mult(getgvar(406),1)

    mult(köpantal,1)
    )



    SÄLJANTAL SCRIPT

    i1(
    stopp=eqv(1,getgvar(405))

    sälj1=if(stopp,abs(portfolio(v)),getgvar(406))

    mult(sälj1,1)

    )
    Attached Files

  • #2
    Intressant notering på extraobjektet

    {@A(0,XX46894F2D)}

    Har aldrig sett det förut.
    Last edited by HenrikSyst; 2017-12-09, 13:49.

    Comment


    • #3
      Vad kommer du göra i finansbranschen?

      Comment


      • #4
        Riktigt snygga algos! Skojigt att kika på vad andra har pillat på och generöst av dig att dela med dig av dom, för vet hur tidskrävande det är att utveckla dessa..

        Comment


        • #5
          Generöst, tack! Vill du skriva några korta rader om strategien?

          Comment


          • #6
            Ursprungligen postat av HenrikSyst Visa inlägg
            Intressant notering på extraobjektet

            {@A(0,XX46894F2D)}

            Har aldrig sett det förut.
            Det är ID för valutaspoten EURSEK.

            Riktigt snyggt jobbat Filip!!!

            Comment


            • #7
              Vackert! Tack för julklappen och lycka till på det nya jobbet!

              Comment


              • #8
                Generöst, Filip!
                Lycka till på nya jobbet!

                Comment


                • #9
                  Ja, fint gjort Filip!
                  Vi får tacka inte bara för dessa 2 utan även för de andra strategierna du lagt upp här.

                  Comment


                  • #10
                    Ser ju grymt bra ut!
                    Är det någon som kan berätta för en novis hur man får igång detta?

                    Comment


                    • #11
                      Strategin ser ut att jobba endast på Long-sidan.

                      Comment


                      • #12
                        Tack Filipb för julklapparna!

                        Jag testade att lägga in koden på ett testkonto men fick såklart felkod för EURSEK spotpriset då jag inte har lagt upp det på min VPS.
                        Ser dock att det går att avrunda lite och skippa användande av det externa objektet.
                        Skriver man om den här raden
                        valuta:=cmpref(c,0,a)
                        Till
                        valuta:=10 eller är det 0.1 som gäller?
                        så blir det hyfsat nära ändå och man kan då ta bort sista raden med det externa objektet.
                        {@A(0,XX46894F2D)}

                        Jag gillar dock idén med att använda så exakt kurs som möjligt för att kunna få maximalt utnyttjande av kassan.

                        Comment


                        • #13
                          Tack än en gång Filipb. Efter ha testat systemet och fått nödigt förtroende för det så körde jag igång det live på en av mina konton. Har under senaste veckan sett hur den stadigt byggt upp 10 grids på DAXen och just nu så såldes alla 10 i ett svep med en trevlig vinst.

                          En tanke som slog mig häromdagen är ett omvänt system, kanske man bör döpa det till "Diver"? Ett som följer omvänd logik när momentum är ned? Är det något som du har funderat på också?

                          Comment


                          • #14
                            Kul att folk uppskattar att man lägger upp!

                            Kul att du fått igång scriptet Bari, jag misstänker dock att du kopplat det lite fel. Climber säljer av en grid i taget, förutom när den tar plus minus noll stoppen eller hårdstoppen. Plus minus noll stoppen är dock = BE*1,01, så inte riktigt BE. Notera antal-scripten som sköter det här. Jag har testat lite strategier med omvänd logik men inte riktigt fått till det.

                            Comment


                            • #15
                              Jag har bara tagit bort cmpref från originalkoden och ersatt valuta med 10, i övrigt är den enligt ovan. Jag har inte kört någon backtest ännu för att se om det även där skulle bli en sälj av alla 10 grids på en gång. Sett till att DAX har gått ned sedan de 10 gridsen stängdes så var det denna gång bara bra att det blev som det blev. Konstigt dock att alla pos såldes av om inte det gjorde så för dig.

                              Angående omvända logiken, min erfarenhet säger att det är ingen enkel sak alla gånger att bara vända på strategin. Det brukar behövas andra sättningar då kursrörelser upp o ner sker på olika vis. E.g. det går ofta ner mycket snabbare än det går upp. Kanske krävs andra ATR parametrar till att börja med?

                              Comment

                              Working...
                              X