Allmänt meddelande

Collapse
No announcement yet.

Exit baserad på vinst och tid?

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

  • Exit baserad på vinst och tid?

    Hej,

    skulle vilja ha hjälp med Exit model (gärna som standardmodell i NAT så riktar frågan till Rikard) med följande konfigurerbara funktioner.

    Exit när:
    • Positionen är med vinst (konfigurerbart i % eller punkter min nivå, t.ex. 0 inget min krav men inte minus)
    • OCH: Tillåt Exit tidigast efter X dagar (0 tillåt exit samma dag, 1 tidigast imorgon osv)
    • OCH: Tillåt exit mellan Start tid in på dagen OCH stop tid in på dagen (t.ex. kl 17.10-17.25)
    • Eller: Sälj oavsett vinst/förlust Y dagar efter köp (t.ex. -1 inget krav, 0 samma dag inom start-stop tid, t.ex. 4 om fyra dagar.
    • OCH: Tillåt exit mellan Start tid in på dagen OCH stop tid in på dagen (t.ex. kl 17.10-17.25)

    (redigerad: nedan behövs ej då det bara är att koppla på standard SL-mini parallellt)
    • ELLER: Stop-Loss flagga (slå på och av)
    • konfigurerbart i % eller punkter SL nivå (t.ex 2% innebär sälj vid 2% förlust, eller kanske bättre att ha flytnivå (SL mini egenskaper), dvs dominerar de övriga villkoren om SL flagga är på)


    Last edited by jimmy; 2012-10-25, 10:50.

  • #2
    Hej,

    kanske man inte ska ha X och Y i dagar utan i perioder istället. Om tekniskt möjligt...
    Kör man i dagsupplösning så blir det i dagar. kör man i t.ex. 30 min upplösningen skulle 4 X motsvara 2 timmar.

    En generell fördel med tids exit är att man kan jämföra hur bra Entry är.

    MVH
    Jimmy
    Last edited by jimmy; 2012-10-25, 10:56.

    Comment


    • #3
      Hej,
      såg att Take Profit scripet ser ut att vara en bra utgångspunkt så jag ska försöka mig på det :-)

      Comment


      • #4
        Låter vettigt, du kan använda TopBars() för att räkna perioder sedan något villkor var sant, tex period för senaste köp.

        Comment


        • #5
          Ursprungligen postat av Rikard Nilsson Visa inlägg
          Låter vettigt, du kan använda TopBars() för att räkna perioder sedan något villkor var sant, tex period för senaste köp.

          Hej Rikard,

          provade exmplet du har i tråden räkna antal period sedan köp. Skulle nog behöva lite hjläp på vägen med antal dagar sedan köp biten?

          exempel på delvillkor (tillsammans med tid på dage och vinst)
          antal_dagar_innan_tillåt_sälj:=2
          antal_dagar_sedan_köp:=logik?
          tillåt_sälj:=ge(antal_dagar_sedan_köp,antal_dagar_innan_tillåt_sälj)

          Jag har förberett ett skript baserat på TP, som jag tänkte lägga upp här när delskripten verkar fungera...

          Comment


          • #6
            tillåt_sälj är delnamn av antal_dagar_innan_tillåt_sälj.

            Logiken i den andra tråden borde funka för rad 2.

            Comment


            • #7
              När ni är färdiga med backtestingmodulen får ni gärna rätta upp denna "delnamn-ej-tillåtet"-buggen

              Det finns inget modernt programmeringsspråk som inte tillåter delnamn.

              Jag antar att er scriptparser använder "search and replace" på varje ställe för att skapa en exekverbar kodmassa.

              Aa=XYZ
              A = Function1(Aa)
              B = Function2(A)

              Bör parsas som
              ==>
              B=Function2(Function1(XYZ))

              och inget annat

              Tex får inte
              Aa=XYZ
              bytas ut till
              Function1(Aa)a=XYZ

              Då får vi det knasfelet vi ser idag.

              Comment


              • #8
                Scriptspråket har funnits sedan slutet av 90-talet så ingen kan påstå att det är modernt. Men det hindrar ju inte att vi kan modernisera det på sikt.

                Comment


                • #9
                  Hej,

                  önskar hjälp och tacksam om någon känner för en titt och förslag på rättning?

                  Tror detta skript är nära klart, men det är något fel med det som jag inte hittar pga min skript-erfarenhet.

                  Det finns två conditions. Condition2 verkar fungera.
                  dvs vill man ha exit efter 5 dagar så sker exit, testat med Analysbänken). Däremot condition1 sälj när viss vinst är uppnådd efter viss period får jag inte att fungera.

                  Syftet med skriptet är att kunna välja en kombination av tid och vinst exit.

                  Skriptet bygger på TakeProfit som finns som standard.

                  {version 1, 2012-10-30}
                  {Condition 1}
                  {Positionen has configred profit (must be greated than 0) in percent use standard take profit input field ScrPar 12}
                  {AND: Allow exit earliest x days after buy day, where 0 is today, 1 tomrrow. Set variable "number_of_days_before_allow_sell_with_profit"}<
                  {AND: Allow exit between Start and end time of the day (e.g. kl 17.10-17.25) configure "script_start_time" NAT time after midnight, "minutes_lock_before_market_close" in minutes from close}

                  {Condition2}
                  {OR: Exit regardless profit or loss Y days after purchase. -1 (negative) is disable, 0 same day, 1 day after purchase etc}
                  {AND: Allow between start and end time of the day.}

                  {Script configuration section start}
                  number_of_days_before_allow_sell_with_profit=4 {Where 0 is allow same day, 1 tomorrow etc}
                  number_of_days_to_force_sell_regardless_profit:=5 {Sell even if with loss}
                  minutes_lock_before_market_close:=6 {limite execution in minutes before market close}
                  script_start_time:=0.379
                  {Script configuration section end}

                  {days before buy}
                  buy_day:=int(lasttrade(b,d))
                  today:=int(d)
                  days_since:=sub(today,buy_day)
                  is_allow_sell:=Ge(days_since,number_of_days_before_allow_sell_with_profit)

                  is_force_sell:=if(ge(number_of_days_to_force_sell_regardless_profit,0),ge(days_since,number_of_days_to_force_sell_regardless_profit),-1)

                  { based on "NAT Take Profit Long script", 120209, with further updates }
                  is_allow_before_market_close:=ge(mult(1440,sub(market(c),frac(d))),minutes_lock_before_market_close) {before close}
                  takeprofit_in_percent:=ScrPar(12) {Take Profit in percent}
                  target_symbol_amount:=ScrPar(13) {}
                  has_holding:=Gt(Portfolio(v),target_symbol_amount) {volume of insteuments are greater than target volume of instruments}
                  buy_price:=Portfolio(P) {buy_price}

                  buy_price_greater_than_zero:=Gt(buy_price,0) {price grater than 0, purpose is unclear but part of TP original}
                  has_profit:=Gt(b,Add(buy_price,Mult(buy_price,Div(takeprofit_in_percent,100)))) {profit level reached?}
                  time_lock_minutes:=1
                  lt1:=LastTrade(B,D)
                  lt2:=Portfolio(D)
                  i1(
                  is_takeprofit=And(has_profit,Gt(takeprofit_in_percent,0))
                  draw(buy_price,2,rqb2)
                  draw(add(buy_price,mult(buy_price,Div(takeprofit_in_percent,100))),3,dgqb2)
                  min_since_long=Mult(Sub(D,lt1),1440)
                  min_since_trans=Mult(Sub(D,lt2),1440)
                  delay_ok=gt(min_since_long,time_lock_minutes)
                  trans_ok=gt(min_since_trans,time_lock_minutes)
                  account_ok=And(not(eqv(cash(d),0)),And(has_holding,buy_price_greater_than_zero)) {Cash(D) kan användas för att detektera ev kommunikationsproblem}
                  is_allow_after_market_open=gt(frac(D),script_start_time)
                  is_time_window_to_operate=and(is_allow_after_market_open,is_allow_before_market_close)

                  common_condition=and(and(account_ok,and(is_time_window_to_operate,trans_ok)),delay_ok)
                  condition1=and(and(common_condition,is_takeprofit),is_allow_sell)
                  condition2=and(common_condition,is_force_sell)

                  signal=or(condition1,condition2)

                  mult(signal,20)
                  )

                  Comment


                  • #10
                    Hej Jimmy,
                    Kommer med några tips här. Försök att inte använda så långa variabelnamn, den allra enklaste funktion kan annars lätt bli helt oläslig. Om du vill veta vad variabeln gör skriv istället en kommentar till höger om variabeldefinitionen.

                    Jag antar att du inte ska ha med scriptet längst ned, utan detta är bara en inspiration?

                    Här kommer en lösning på "condition1"
                    Sätt sedan ihop cond1 och cond2 till ett komplett script så tittar vi vidare på det sedan.



                    {Condition 1}
                    tillåt_sälj:=5 { dagar }
                    krävd_vinst:=abs(scrpar(12)) {värde i procent}
                    köppris:=lasttrade(b,p)
                    köpdag:=lasttrade(b,d)
                    sälj1=ge(s,mult(köppris,add(1,div(krävd_vinst,100)))) {säljpriset högre än köppriset + viss procent}
                    sälj2=ge(sub(int(d),köpdag),tillåt_sälj) {tillåtet antal dagar har förflutit}
                    sälj3=and(sälj1,sälj2)
                    sälj3
                    Last edited by LillWicke; 2013-01-29, 01:49.

                    Comment


                    • #11
                      Stort tack!

                      Postar tillbaka när jag är fri från rådande förkylning och testat

                      Comment


                      • #12
                        Krya på dig.

                        Comment


                        • #13
                          edit 2013-03-25. kommentar om Take profit inparameter.

                          Hej Lillwicke,
                          Tack än en gång för hjälpen!
                          Så här ser det nu ut. Påbörjade test i analysbänken och funkar än så länge. (Jag har inte kört alla testfall ännu t.ex. om dag 0 eller -1 osv.)
                          Om du ser förslag på förbättring så får du gärna kommentera.

                          Exit när:
                          Villkor1
                          • Positionen är med vinst (konfigurerbart i %). Obs baserad på TP. Om man vill använda TP i kombination, sår man ändra.
                          • OCH: Tillåt Exit tidigast efter X dagar (0 tillåt exit samma dag, 1 tidigast imorgon osv)

                          Villkor2
                          • Eller: Sälj oavsett vinst/förlust Y dagar efter köp (t.ex. -1 inget krav, 0 samma dag inom start-stop tid, t.ex. 4 om fyra dagar.

                          Gemensamma villkor
                          • OCH: Tillåt Exit innan stängning
                          • OCH: Position innehas (kontohantering)



                          {Condition 1}
                          allow_sell:=1 { dagar }
                          profit_level:=abs(scrpar(12)) {värde i procent. OBS använder take profit inparameter}
                          buyprice:=lasttrade(b,p)
                          buyday:=int(lasttrade(b,d))
                          is_takeprofit:=ge(s,mult(buyprice,add(1,div(profit_level,100)))) {säljpriset högre än köppriset + viss procent}
                          day_ok:=ge(sub(int(d),buyday),allow_sell) {tillåtet antal dagar har förflutit}


                          {Condition 2}
                          force_sell:=5 {sälj oavsett vinst efter antal dagar}
                          buy_day:=int(lasttrade(b,d)) {köpdag}
                          today:=int(d) {idag}
                          days_since:=sub(today,buy_day) {dagar sedan köp}
                          is_force_sell:=if(ge(force_sell,0),ge(days_since,force_sell),-1)

                          {Condition common}
                          minutes:=10 { tillåt x minuter innan stängning }
                          time_ok:=le(mult(1440,sub(market(c),frac(date()))),minutes)
                          has_holding:=Gt(Portfolio(v),0) {innehav finns}

                          i1(
                          account_ok=And(not(eqv(cash(d),0)),has_holding) {Cash(D) kan användas för att detektera ev kommunikationsproblem}
                          common_condition=and(account_ok,time_ok)
                          condition1=and(and(common_condition,is_takeprofit),day_ok)
                          condition2=and(common_condition,is_force_sell)

                          signal=or(condition1,condition2)

                          mult(signal,20)
                          )
                          Last edited by jimmy; 2013-03-25, 23:15.

                          Comment


                          • #14
                            deleted post
                            Last edited by larry; 2013-05-25, 00:40.

                            Comment


                            • #15
                              Hej,

                              Edit, läste dåligt om fast sl. Men ser att den har du fått funka, då borde väll TP räcka..
                              (Borde inte medföljande stop loss mini och take profit lösa det?)
                              Last edited by jimmy; 2013-05-05, 14:56.

                              Comment

                              Working...
                              X