Swingueur

3 lines break reversal strategy on trending stocks

Category: Strategies By: Swingueur Created: August 30, 2021, 9:03 AM
August 30, 2021, 9:03 AM
Strategies
3 Comments
3 lines break reversal strategy on trending stocks

Hello,

Based on 3 lines break indicator and some other pieces of code found elsewhere, I propose this strategy, with several alternative conditions of exits. An optimization variable “strategy” needs to be implemented from 1 to 9, to compare the different variations.

Visually winning trades look beautiful, but at the end, % of winning rates ratio is average. Profit factor is often profitable when tested on various stocks.

Would appreciate some feedback to improve the strategy. I already know that the code may look pretty messy and not optimized.

Discussions about the strategy take place in this forum topic: https://www.prorealcode.com/topic/a-strategy-around-3-lines-break-on-stocks-daily/

// @Name DT_3LineBreak
// @Type Backtest
// @Date: 04.08.2021
// @Source: Tradosaure Youtube + code DocTrading
// @Timeframe: Daily
// @Entry:Breakout 3LB reversal with trend filter (close>MA200)
// @Stop Loss: 3LB low
// @Take Profit: 1 SL distance (RRR) - to be tested

DEFPARAM CumulateOrders=True

// Sub-Strategies:
// 1- TP = 1SL
// 2- TP = 1.5 SL
// 3- TP = 2 SL
// 4- TP = 5%
// 5- TBC
// 6- BE after 5%
// 7- TP =1.5 SL + BE 5%
// 8- TP =2 SL + BE 5%
// 9- BE + Trailing stop
strategy = 2


//////////////////////////////////////////////////////////////////////
//// GENERIC CODE
//////////////////////////////////////////////////////////////////////

// TAILLE DES POSITIONS : 3 VARIABLES A PARAMÉTRER
CAPITALInit = 1000
// Capital initial (pour le calcul de taille des trades)
LEVIER = 1
// Levier : ne pas en abuser, bien vérifier le drawdown
REINV = 0
// 0 = sans réinvestir  /  1 = réinvestir les gains

RISQ = 0.01
distSL = 0.04 // minimum stop loss distance % to be profitable

RRR=1 // Risk Reward Ratio
if strategy = 2 or strategy =7 then
RRR=1.5
elsif strategy = 3 or strategy = 8 then
RRR=2
endif

IF REINV = 0 THEN
n = round((CapitalInit / close) * levier)
ELSIF REINV = 1 THEN
capital = (CAPITALinit + strategyprofit)
n = round((capital/close) * levier)
ENDIF

//////////////////////////////////////////////////////////////////////
//// INDICATOR
//////////////////////////////////////////////////////////////////////

once t=1
once a0=(close)
once a1=(close)
once a2=(close)
once a3=(close)

newClose = close
if t=1 and newClose>a3 then
a0=a1
a1=a2
a2=a3
a3=newClose
elsif t=1 and newClose<a0 then
t=-1
a1=a3
a0=a3
a3=newClose
elsif t=-1 and newClose<a3 then
a0=a1
a1=a2
a2=a3
a3=newClose
elsif t=-1 and newClose>a0 then
t=1
a1=a3
a0=a3
a3=newClose
cBuy=1
else
cBuy=0
endif

//////////////////////////////////////////////////////////////////////
//// BUY CONDITIONS
//////////////////////////////////////////////////////////////////////

i=0
c1 = cBuy
ma50=Average[50](close)
c2 = ma50>ma50[1] or close>ma50
//c2 = close>Average[200](close)
c0=1
 
if not longonmarket and c0 and c1 and c2 then
BUY n shares at market nextbaropen
sellprice = min(high*(1-distSL-0.001),a0)
targetprice = high+RRR*(high-sellprice)
if strategy = 4 then
targetprice = high*1.05
endif
ENDIF

//////////////////////////////////////////////////////////////////////
//// BREAK EVEN
//////////////////////////////////////////////////////////////////////
IF NOT ONMARKET THEN
breakevenLevel=0
ENDIF

//test if the price have moved favourably of "startBreakeven" points already
IF strategy >5 then
IF LONGONMARKET AND high>1.05*tradeprice(1) THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)*1.02
ENDIF
endif
 
//place the new stop orders on market at breakevenLevel
IF breakevenLevel>0 THEN
SELL AT breakevenLevel STOP
ENDIF


//////////////////////////////////////////////////////////////////////
//// REBUY
//////////////////////////////////////////////////////////////////////
if longonmarket and cBuy[0] and t[1]=-1 then
BUY n shares at market nextbaropen
endif

//////////////////////////////////////////////////////////////////////
//// SELL CONDITIONS
//////////////////////////////////////////////////////////////////////

IF longonmarket THEN
cSell = close < sellprice or close > targetprice
if strategy=9 then
cSell = close<a0
endif
IF cSell THEN
SELL at market nextbaropen
ENDIF
ENDIF

Download
Filename: 3LB-reversal-trending-stocks.itf
Downloads: 600
Swingueur
Swingueur Average
Code artist, my biography is a blank page waiting to be scripted. Imagine a bio so awesome it hasn't been coded yet.
Author’s Profile

Comments

Kev Monaghan
5 years ago
#

The equity curve looks to follow the stock price almost perfectly, Have you tested on stock that is in a down trend? I have found that to be effective for teaching the system when not to trade, for example I will forbid a system to take Long entries below yesterdays low or some other fail safe, to limit losses and drawdowns, just a suggestion, I havent read or tried to understand the code itself I just find if the equity curve follows the price you are essentially a bag holder. Averaging in and out can help improve win rate eg, below a basic and rough example of effective way to average INPROFIT = close[1] > (POSITIONPRICE[1]+(POINTSIZE*2)) If C1 THEN BUY 5 XXXX at market ELSIF C2 AND COUNT OF POSITION >5 Then Buy 5 SHARES AT MARKET ENDIF IF EX1 AND INPROFIT THEN SELL 5 XXXX AT MARKET ELSIF EX2 AND NOT INPROFIT THEN SELL 5 XXXX AT MARKET ENDIF

adconsulting
5 years ago
#

Ciao, I look that the strategy (backtest 50 k), works very good wiht US 500 CASH 1 EURO in 4 h time frame. i made the following changes: DEFPARAM CumulateOrders=false strategy = 5 n=5 (size 5) I do not use the size it increases ma50=Average[30](close) / @Name DT_3LineBreak // @Type Backtest // @Date: 04.08.2021 // @Source: Tradosaure Youtube + code DocTrading // @Timeframe: Daily // @Entry:Breakout 3LB reversal with trend filter (close>MA200) // @Stop Loss: 3LB low // @Take Profit: 1 SL distance (RRR) - to be tested DEFPARAM CumulateOrders=false // Sub-Strategies: // 1- TP = 1SL // 2- TP = 1.5 SL // 3- TP = 2 SL // 4- TP = 5% // 5- TBC // 6- BE after 5% // 7- TP =1.5 SL + BE 5% // 8- TP =2 SL + BE 5% // 9- BE + Trailing stop strategy = 6.50 ////////////////////////////////////////////////////////////////////// //// GENERIC CODE ////////////////////////////////////////////////////////////////////// // TAILLE DES POSITIONS : 3 VARIABLES A PARAMÉTRER //CAPITALInit = 10000 // Capital initial (pour le calcul de taille des trades) LEVIER = 1 // Levier : ne pas en abuser, bien vérifier le drawdown //REINV = 0 // 0 = sans réinvestir / 1 = réinvestir les gains RISQ = 0.015 distSL = 0.04 // minimum stop loss distance % to be profitable RRR=1 // Risk Reward Ratio if strategy = 2 or strategy =7 then RRR=1.5 elsif strategy = 3 or strategy = 8 then RRR=2 endif n=6.50 ////////////////////////////////////////////////////////////////////// //// INDICATOR ////////////////////////////////////////////////////////////////////// once t=1 once a0=(close) once a1=(close) once a2=(close) once a3=(close) newClose = close if t=1 and newClose>a3 then a0=a1 a1=a2 a2=a3 a3=newClose elsif t=1 and newClose<a0 then t=-1 a1=a3 a0=a3 a3=newClose elsif t=-1 and newClose<a3 then a0=a1 a1=a2 a2=a3 a3=newClose elsif t=-1 and newClose>a0 then t=1 a1=a3 a0=a3 a3=newClose cBuy=1 else cBuy=0 endif ////////////////////////////////////////////////////////////////////// //// BUY CONDITIONS ////////////////////////////////////////////////////////////////////// i=0 c1 = cBuy ma50=Average[30](close) c2 = ma50>ma50[1] or close>ma50 //c2 = close>Average[200](close) c0=1 if not longonmarket and c0 and c1 and c2 then BUY n shares at market nextbaropen sellprice = min(high*(1-distSL-0.001),a0) targetprice = high+RRR*(high-sellprice) if strategy = 4 then targetprice = high*1.05 endif ENDIF ////////////////////////////////////////////////////////////////////// //// BREAK EVEN ////////////////////////////////////////////////////////////////////// IF NOT ONMARKET THEN breakevenLevel=0 ENDIF //test if the price have moved favourably of "startBreakeven" points already IF strategy >5 then IF LONGONMARKET AND high>1.05*tradeprice(1) THEN //calculate the breakevenLevel breakevenLevel = tradeprice(1)*1.02 ENDIF endif //place the new stop orders on market at breakevenLevel IF breakevenLevel>0 THEN SELL AT breakevenLevel STOP ENDIF ////////////////////////////////////////////////////////////////////// //// REBUY ////////////////////////////////////////////////////////////////////// if longonmarket and cBuy[0] and t[1]=-1 then BUY n shares at market nextbaropen endif ////////////////////////////////////////////////////////////////////// //// SELL CONDITIONS ////////////////////////////////////////////////////////////////////// IF longonmarket THEN cSell = close < sellprice or close > targetprice if strategy=9 then cSell = close<a0 endif IF cSell THEN SELL at market nextbaropen ENDIF ENDIF

emism12
5 years ago
#

Looks great, personally I don't use automated trading for single stocks, but is definitely on my to do list. Good results in emerging companies. Backtested it in many forex but didn't find solid results. Thanks for sharing!

ProRealCode ProRealCode
Loading...