该策略名为”Jancok Strategycs v3”,是一个基于移动平均线(MA)、移动平均线收敛散度(MACD)、相对强弱指标(RSI)和平均真实范围(ATR)的多指标趋势追踪策略。该策略的主要思路是利用多个指标的组合来判断市场趋势,并在趋势方向上进行交易。同时,该策略还采用了动态止损和止盈方法,以及基于ATR的风险管理,以控制风险和优化收益。
该策略使用了以下四个指标来判断市场趋势: 1. 移动平均线(MA):计算短期(9周期)和长期(21周期)的移动平均线,当短期均线上穿长期均线时,表明上升趋势;当短期均线下穿长期均线时,表明下降趋势。 2. 移动平均线收敛散度(MACD):计算MACD线和信号线,当MACD线上穿信号线时,表明上升趋势;当MACD线下穿信号线时,表明下降趋势。 3. 相对强弱指标(RSI):计算14周期的RSI,当RSI大于70时,表明市场可能超买;当RSI小于30时,表明市场可能超卖。 4. 平均真实范围(ATR):计算14周期的ATR,用于衡量市场波动性和设置止损止盈点。
该策略的交易逻辑如下: - 当短期均线上穿长期均线,MACD线上穿信号线,成交量大于其移动平均线,且波动率低于阈值时,开多单。 - 当短期均线下穿长期均线,MACD线下穿信号线,成交量大于其移动平均线,且波动率低于阈值时,开空单。 - 止损和止盈点根据ATR动态设置,止损点为ATR的2倍,止盈点为ATR的4倍。 - 可选择使用基于ATR的跟踪止损,跟踪止损点为ATR的2.5倍。
“Jancok Strategycs v3”是一个基于多指标组合的趋势追踪策略,通过移动平均线、MACD、RSI和ATR等指标来判断市场趋势,并采用动态止损止盈和跟踪止损等风险管理手段,以控制风险和优化收益。该策略的优势在于趋势判断准确性高,风险管理灵活,适应性强。但同时也存在一定的风险,如虚假信号、参数设置敏感性和黑天鹅事件等。未来可以通过引入更多指标、优化参数选择、加入仓位管理和设置最大回撤限制等方式,进一步提升策略的性能和稳定性。
/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © financialAccou42381
//@version=5
strategy("Jancok Strategycs v3", overlay=true, initial_capital=100, currency="USD")
// Inputs
short_ma_length = input.int(9, title="Short MA Length", minval=1)
long_ma_length = input.int(21, title="Long MA Length", minval=1)
atr_multiplier_for_sl = input.float(2, title="ATR Multiplier for Stop Loss", minval=1.0)
atr_multiplier_for_tp = input.float(4, title="ATR Multiplier for Take Profit", minval=1.0)
volume_ma_length = input.int(20, title="Volume MA Length", minval=1)
volatility_threshold = input.float(1.5, title="Volatility Threshold", minval=0.1, step=0.1)
use_trailing_stop = input.bool(false, title="Use Trailing Stop")
trailing_stop_atr_multiplier = input.float(2.5, title="Trailing Stop ATR Multiplier", minval=1.0)
// Calculating indicators
short_ma = ta.sma(close, short_ma_length)
long_ma = ta.sma(close, long_ma_length)
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)
atr = ta.atr(14)
volume_ma = ta.sma(volume, volume_ma_length)
volatility = atr / close
// Plotting indicators
plot(short_ma, color=color.red)
plot(long_ma, color=color.blue)
// Defining entry conditions with added indicators and filters
long_condition = ta.crossover(short_ma, long_ma) and (macdLine > signalLine) and (volume > volume_ma) and (volatility < volatility_threshold)
short_condition = ta.crossunder(short_ma, long_ma) and (macdLine < signalLine) and (volume > volume_ma) and (volatility < volatility_threshold)
// Entering trades with dynamic stop loss and take profit based on ATR
if (long_condition)
strategy.entry("Long", strategy.long)
if use_trailing_stop
strategy.exit("Exit Long", "Long", trail_points=atr * trailing_stop_atr_multiplier, trail_offset=atr * 0.5)
else
strategy.exit("Exit Long", "Long", loss=atr * atr_multiplier_for_sl, profit=atr * atr_multiplier_for_tp)
if (short_condition)
strategy.entry("Short", strategy.short)
if use_trailing_stop
strategy.exit("Exit Short", "Short", trail_points=atr * trailing_stop_atr_multiplier, trail_offset=atr * 0.5)
else
strategy.exit("Exit Short", "Short", loss=atr * atr_multiplier_for_sl, profit=atr * atr_multiplier_for_tp)