
Il s’agit d’une stratégie basée sur la moyenne mobile sur 18 jours (SMA18), combinée à la reconnaissance des modèles de trading intraday et à un mécanisme de stop suiveur intelligent. Cette stratégie observe principalement la relation entre le prix et le SMA18, combine les points hauts et bas intrajournaliers et entre dans la position longue au bon moment. La stratégie adopte un plan de stop-loss flexible, qui peut utiliser soit un point de stop-loss fixe, soit un point le plus bas sur deux jours comme référence de stop-loss suiveur.
La logique fondamentale de la stratégie comprend les éléments clés suivants :
Cette stratégie construit un système de trading relativement complet en combinant des méthodes d’analyse de plusieurs dimensions. Le principal avantage de la stratégie réside dans ses paramètres flexibles et son mécanisme de stop-loss intelligent, qui lui permet de s’adapter à différents environnements de marché. Grâce à une optimisation et une amélioration continues, la stratégie devrait permettre de maintenir une performance stable dans diverses conditions de marché.
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-16 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/
//@version=5
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © zweiprozent
strategy('Buy Low over 18 SMA Strategy', overlay=true, default_qty_value=1)
xing = input(false, title='crossing 18 sma?')
sib = input(false, title='trade inside Bars?')
shortinside = input(false, title='trade inside range bars?')
offset = input(title='offset', defval=0.001)
belowlow = input(title='stop below low minus', defval=0.001)
alsobelow = input(false, title='Trade only above 18 sma?')
tradeabove = input(false, title='Trade with stop above order?')
trailingtwo = input(false, title='exit with two days low trailing?')
insideBar() => //and high <= high[1] and low >= low[1] ? 1 : 0
open <= close[1] and close >= open[1] and close <= close[1] or open >= close[1] and open <= open[1] and close <= open[1] and close >= close[1] ? 1 : 0
inside() =>
high <= high[1] and low >= low[1] ? 1 : 0
enterIndex = 0.0
enterIndex := enterIndex[1]
inPosition = not na(strategy.position_size) and strategy.position_size > 0
if inPosition and na(enterIndex)
enterIndex := bar_index
enterIndex
//if strategy.position_size <= 0
// strategy.exit("Long", stop=low[0]-stop_loss,comment="stop loss")
//if not na(enterIndex) and bar_index - enterIndex + 0 >= 0
// strategy.exit("Long", stop=low[0]-belowlow,comment="exit")
// enterIndex := na
T_Low = request.security(syminfo.tickerid, 'D', low[0])
D_High = request.security(syminfo.tickerid, 'D', high[1])
D_Low = request.security(syminfo.tickerid, 'D', low[1])
D_Close = request.security(syminfo.tickerid, 'D', close[1])
D_Open = request.security(syminfo.tickerid, 'D', open[1])
W_High2 = request.security(syminfo.tickerid, 'W', high[1])
W_High = request.security(syminfo.tickerid, 'W', high[0])
W_Low = request.security(syminfo.tickerid, 'W', low[0])
W_Low2 = request.security(syminfo.tickerid, 'W', low[1])
W_Close = request.security(syminfo.tickerid, 'W', close[1])
W_Open = request.security(syminfo.tickerid, 'W', open[1])
//longStopPrice = strategy.position_avg_price * (1 - stopl)
// Go Long - if prev day low is broken and stop loss prev day low
entryprice = ta.sma(close, 18)
//(high[0]<=high[1]or close[0]<open[0]) and low[0]>vwma(close,30) and time>timestamp(2020,12,0,0,0)
showMon = input(true, title='trade tuesdays?')
showTue = input(true, title='trade wednesdayy?')
showWed = input(true, title='trade thursday?')
showThu = input(true, title='trade friday?')
showFri = input(true, title='trade saturday?')
showSat = input(true, title='trade sunday?')
showSun = input(true, title='trade monday?')
isMon() =>
dayofweek(time('D')) == dayofweek.monday and showMon
isTue() =>
dayofweek(time('D')) == dayofweek.tuesday and showTue
isWed() =>
dayofweek(time('D')) == dayofweek.wednesday and showWed
isThu() =>
dayofweek(time('D')) == dayofweek.thursday and showThu
isFri() =>
dayofweek(time('D')) == dayofweek.friday and showFri
isSat() =>
dayofweek(time('D')) == dayofweek.saturday and showSat
isSun() =>
dayofweek(time('D')) == dayofweek.sunday and showSun
clprior = close[0]
entryline = ta.sma(close, 18)[1]
//(isMon() or isTue()or isTue()or isWed()
noathigh = high < high[1] or high[2] < high[3] or high[1] < high[2] or low[1] < ta.sma(close, 18)[0] and close > ta.sma(close, 18)[0]
if noathigh and time > timestamp(2020, 12, 0, 0, 0) and (alsobelow == false or high >= ta.sma(close, 18)[0]) and (isMon() or isTue() or isWed() or isThu() or isFri() or isSat() or isSun()) and (high >= high[1] or sib or low <= low[1]) //((sib == false and inside()==true) or inside()==false) and (insideBar()==true or shortinside==false)
if tradeabove == false
strategy.entry('Long', strategy.long, limit=low + offset * syminfo.mintick, comment='long')
if tradeabove == true and (xing == false or clprior < entryline) // and high<high[1]
strategy.entry('Long', strategy.long, stop=high + offset * syminfo.mintick, comment='long')
//if time>timestamp(2020,12,0,0,0) and isSat()
// strategy.entry("Long", strategy.long, limit=0, comment="long")
//strategy.exit("Long", stop=low-400*syminfo.mintick)
//strategy.exit("Long", stop=strategy.position_avg_price-10*syminfo.mintick,comment="exit")
//strategy.exit("Long", stop=low[1]-belowlow*syminfo.mintick, comment="stop")
if strategy.position_avg_price > 0 and trailingtwo == false and close > strategy.position_avg_price
strategy.exit('Long', stop=strategy.position_avg_price, comment='stop')
if strategy.position_avg_price > 0 and trailingtwo == false and (low > strategy.position_avg_price or close < strategy.position_avg_price)
strategy.exit('Long', stop=low[0] - belowlow * syminfo.mintick, comment='stop')
if strategy.position_avg_price > 0 and trailingtwo
strategy.exit('Long', stop=ta.lowest(low, 2)[0] - belowlow * syminfo.mintick, comment='stop')