Strategy Name: Multilevel Take Profit Strategy
Data Cycle: Multi-Cycle
Support: Commodity Futures, Digital Currency


- Main chart:
Upper line, formula:UPPERLINE^^TODAYOPEN+BAND;
Lower line, formula:LOWERLINE^^TODAYOPEN-BAND;
MA, formula:MALINE^^MA(CLOSE,LENGTH); - Secondary chart:
none

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | (*backtest start: 2018-01-01 00:00:00 end: 2018-04-09 00:00:00 period: 1d exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}] args: [["LENGTH",80]] *) STARTPER1:=5; // 1 level tracking take profit, if profit 5% then start STOPPER1:=100; // 1 level tracking take profit, if profit retracement is 100% then trigger STARTPER2:=10; // 2 level tracking take profit, if profit 10% then start STOPPER2:=50; // 2 level tracking take profit, if profit retracement is 50% then trigger STARTPER3:=20; // 3 level tracking take profit, if profit 20% then start STOPPER3:=20; // 3 level tracking take profit, if profit retracement is 20% then trigger // Upper and lower intervals NN:=BARSLAST(DATE<>REF(DATE,1))+1; // The number of cycles since the opening today TODAYOPEN:=VALUEWHEN(NN=1,O); // Opening price of the day TODAYHIGH:=HHV(H,NN); // today’s highest price TODAYLOW:=LLV(L,NN); // today’s lowest price YESTDAYHIGH:=REF(TODAYHIGH,NN); // yesterday's highest price YESTDAYLOW:=REF(TODAYLOW,NN); // yesterday's lowest price BAND:=YESTDAYHIGH-YESTDAYLOW; UPPERLINE^^TODAYOPEN+BAND; LOWERLINE^^TODAYOPEN-BAND; // MA MALINE^^MA(CLOSE,LENGTH); // When to open and close position SKCOND: = C<LOWERLINE AND LOWERLINE<MALINE; BKCOND: = C>UPPERLINE AND UPPERLINE>MALINE; BPSHORT: = C>UPPERLINE OR C>MALINE; SPLONG: = C<LOWERLINE OR C<MALINE; //the mainbody of program //open position SKCOND,SK; BKCOND,BK; //close position SPLONG,SP; BPSHORT,BP; //take profit SKLOW<=SKPRICE*(1-0.01*STARTPER3) AND HIGH>=SKLOW+(SKPRICE-SKLOW)*0.01*STOPPER3,BP; // If profit get “STARTPER3”% and profit retracement get “STOPPER3”%, then close short position BKHIGH>=BKPRICE*(1+0.01*STARTPER3) AND LOW<=BKHIGH-(BKHIGH-BKPRICE)*0.01*STOPPER3,SP; // If profit get “STARTPER3”% and profit retracement get “STOPPER3”%, then close long position SKLOW<=SKPRICE*(1-0.01*STARTPER2) AND HIGH>=SKLOW+(SKPRICE-SKLOW)*0.01*STOPPER2,BP; // If profit get “STARTPER2”% and profit retracement get “STOPPER2”%, then close short position BKHIGH>=BKPRICE*(1+0.01*STARTPER2) AND LOW<=BKHIGH-(BKHIGH-BKPRICE)*0.01*STOPPER2,SP; // If profit get “STARTPER2”% and profit retracement get “STOPPER2”%, then close long position SKLOW<=SKPRICE*(1-0.01*STARTPER1) AND HIGH>=SKLOW+(SKPRICE-SKLOW)*0.01*STOPPER1,BP; // If profit get “STARTPER1”% and profit retracement get “STOPPER1”%, then close short position BKHIGH>=BKPRICE*(1+0.01*STARTPER1) AND LOW<=BKHIGH-(BKHIGH-BKPRICE)*0.01*STOPPER1,SP; // If profit get “STARTPER1”% and profit retracement get “STOPPER1”%, then close long position //stop loss C>=SKPRICE*(1+STOPRANGE*0.01),BP; C<=BKPRICE*(1-STOPRANGE*0.01),SP; AUTOFILTER; |
Backtest on FMZ Quant to know more
Source Code: https://www.fmz.com/strategy/128122
