该策略是一个基于MA100移动平均线的多区间网格交易系统。它通过设定不同的价格回撤区间(-8%、-15%、-20%)来实现分批建仓,在市场出现较大跌幅时逐步买入,并在价格反弹3%时获利了结。策略采用智能网格的思路,通过限制每个区间的最大持仓数量和交易间隔来控制风险。
策略的核心逻辑包含以下几个方面: 1. 使用100周期简单移动平均线(SMA)作为策略的基准价格 2. 设定三个买入区间: - 区间2: 价格回撤8%,最大允许2笔交易 - 区间3: 价格回撤15%,最大允许3笔交易 - 区间4: 价格回撤20%,最大允许4笔交易 3. 统一的平仓条件:当价格反弹超过MA100的3%时 4. 每个区间都设置了50个K线周期的最小交易间隔,避免过于频繁交易
该策略通过多区间网格交易的方式,在市场大幅回调时分批建仓,具有较好的抗风险能力。虽然存在一些潜在风险,但通过合理的参数设置和风险控制措施,可以实现稳定的交易效果。进一步优化空间主要在于加入更多的市场适应性指标和完善风险控制机制。
/*backtest
start: 2024-02-20 00:00:00
end: 2025-02-17 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
// BTC SOL ETH BNB XMR RNDR AKT OM ONDO IO
strategy("MA100 crash buy 3 Zone // 15 min", overlay=true, calc_on_every_tick=true)
// Définition des MA
maH1 = ta.sma(close, 100)
maB2 = ta.sma(close, 100)
maB3 = ta.sma(close, 100)
maB4 = ta.sma(close, 100)
// Définition du niveau d'achat et de vente
sellLevel1 = maH1 * 1.03 //+3%
buyLevel2 = maB2 * 0.92 //-8%
buyLevel3 = maB2 * 0.85 //-15%
buyLevel4 = maB2 * 0.80 //-20%
// Nombre max de trades simultanés
maxTrades2 = 2
maxTrades3 = 3
maxTrades4 = 4
// Délais entre deux ordres (en bougies)
tradeDelay = 50
var float lastTradeTime = na
var float lastSellTime = na
tradeDelay2 = 50
var float lastTradeTime2 = na
tradeDelay3 = 50
var float lastTradeTime3 = na
tradeDelay4 = 50
var float lastTradeTime4 = na
// Condition d'achat et de vente
buyCondition2 = low <= buyLevel2 and strategy.opentrades < maxTrades2 and (na(lastTradeTime2) or bar_index - lastTradeTime2 > tradeDelay2)
buyCondition3 = low <= buyLevel3 and strategy.opentrades < maxTrades3 and (na(lastTradeTime3) or bar_index - lastTradeTime3 > tradeDelay3)
buyCondition4 = low <= buyLevel4 and strategy.opentrades < maxTrades4 and (na(lastTradeTime4) or bar_index - lastTradeTime4 > tradeDelay4)
sellCondition = strategy.position_size > 0 and high >= sellLevel1 and (na(lastSellTime) or bar_index - lastSellTime > tradeDelay)
if buyCondition2
strategy.entry("Buy", strategy.long)
lastTradeTime2 := bar_index // Enregistre le moment du trade
if buyCondition3
strategy.entry("Buy", strategy.long)
lastTradeTime3 := bar_index // Enregistre le moment du trade
if buyCondition4
strategy.entry("Buy", strategy.long)
lastTradeTime4 := bar_index // Enregistre le moment du trade
if sellCondition
strategy.close("Buy") // Ferme 50% de toutes les positions ouvertes // , qty_percent=30
lastSellTime := bar_index // Enregistre le moment du trade
// Affichage des niveaux
plot(sellLevel1, color=#fa930d, title="Sell Level")
plot(buyLevel2, color=#15bbfd, title="Buy Level")
plot(buyLevel3, color=#1229aa, title="Buy Level")
plot(buyLevel4, color=#9812aa, title="Buy Level")