리소스 로딩... 로딩...

다중 지표 양적 거래 전략 - 슈퍼 지표 7대1 전략

저자:차오장, 날짜: 2024-05-23 18:20:25
태그:SMAEMARSIMACD

img

전반적인 설명

슈퍼 인디케이터 7인 1 전략은 상대적 강도 지수 (RSI), 이동 평균 컨버전스 디버전스 (MACD), 스토카스틱 오시레이터, 볼링거 밴드, 단순 이동 평균 (SMA), 기하급수적 이동 평균 (EMA), 볼륨 등 7개의 인기있는 기술 지표를 통합한 정량적 거래 전략이다. 이 지표의 신호를 결합함으로써 과잉 구매 및 과잉 판매 시장 조건을 파악하고 최적의 구매 및 판매 기회를 파악하는 것을 목표로 한다. 이 전략은 또한 수익을 취하고, 손실을 멈추고, 거래 실행 및 위험 관리를 최적화하기 위해 시간 기반 필터를 통합한다.

전략 원칙

이 전략의 핵심 원칙은 더 포괄적이고 신뢰할 수 있는 거래 신호를 얻기 위해 여러 기술적 지표를 활용하는 것입니다. 각 지표는 시장 트렌드를 해석하는 고유한 계산 방법과 관점을 가지고 있습니다. 예를 들어, RSI는 가격 움직임의 속도와 강도를 측정합니다. MACD는 이동 평균 크로스오버를 기반으로 트렌드를 결정합니다. 스토카스틱 오시레이터는 특정 기간 동안 폐쇄 가격을 가격 범위와 비교하여 과반량 구매 및 과반량 판매 수준을 평가하며, 볼링거 밴드는 가격 변동성에 따라 상위 및 하위 경계를 설정합니다.

이 전략은 임계치를 설정하고 여러 지표 신호의 결합 강도를 평가하여 구매 및 판매 신호를 생성합니다. 지표가 특정 조건의 조합에 도달하면 거래 신호를 유발합니다. 이 전략은 또한 가격 움직임을 확인하기 위해 볼륨과 같은 다른 시장 정보를 고려합니다. 또한 전략에는 리스크 관리 및 최적화 조치가 포함됩니다. 이윤을 취하고, 손실을 멈추고, 거래 세션 필터를 포함하여 위험을 제어하면서 기회를 잡을 수 있습니다.

이점 분석

슈퍼 인디케이터 7인1 전략의 주요 장점은 포괄성과 유연성이다. 여러 인디케이터를 고려함으로써 전략은 다양한 각도에서 시장 신호를 검증하여 신뢰할 수있는 거래 기회를 창출 할 가능성을 높일 수 있습니다. 개별 인디케이터가 잘못된 신호를 생성하더라도 대부분의 인디케이터가 일치하는 한 전략은 여전히 올바른 판단을 내릴 수 있습니다.

또한, 전략은 사용자의 선호도와 거래 스타일에 따라 설정을 사용자 정의 할 수 있도록 다양한 매개 변수 옵션을 제공합니다. 다른 매개 변수 조합은 다른 민감도와 주파수를 가진 신호를 생성하여 다른 시장 조건에 적응 할 수 있습니다. 전략에는 또한 수익을 취하고 손실을 멈추고 거래 세션 필터와 같은 내장된 위험 관리 도구가 포함되어 있으며 실용성과 제어성을 더욱 향상시킵니다.

위험 분석

이 전략은 여러 가지 장점에도 불구하고 잠재적인 위험도 가지고 있다. 첫째, 전략의 성능은 선택된 매개 변수들의 합리성에 크게 의존한다. 부적절한 매개 변수 설정은 신호 왜곡과 잘못된 거래 결정으로 이어질 수 있다. 둘째, 전략은 주로 역사적 데이터와 통계 패턴에 의존하고 있으며, 시장 조건은 끊임없이 변화하고 있으며, 과거의 패턴은 미래에 적용되지 않을 수 있다.

또한 극단적 인 시장 조건 하에서 여러 지표가 동시에 실패하여 전략이 잘못된 판단을 내릴 수 있습니다. 전략은 또한 불안정한 시장에서 모순 된 신호를 생성하여 과잉 거래 및 급속한 자본 고갈로 이어질 수 있습니다.

최적화 방향

전략의 안정성과 수익 잠재력을 더욱 향상시키기 위해 다음 최적화 측면을 고려하십시오.

  1. 최적의 조합을 확인하기 위해 더 체계적인 역 테스트와 지표 매개 변수 최적화를 수행합니다.
  2. 전략의 관점을 넓히기 위해 감정 및 기본 지표와 같은 가격 이외의 추가 지표를 도입하십시오.
  3. 동적 비율을 설정하거나 후속 스톱을 사용하여 수익을 취하고 손실을 멈추는 논리를 정제하십시오.
  4. 거래 세션 필터에 특정 이벤트 (예를 들어, 중요한 경제 데이터 발표) 에 대한 고려 사항을 포함합니다.
  5. 전략에 의해 생성된 신호에 대한 2차 확인을 수행합니다. 예를 들어 여러 시간 프레임에서 지표 성능을 평가하는 것.

이러한 최적화를 통해 전략은 그 장점을 유지하면서 복잡한 시장 환경에서 탐색 할 수있는 능력을 더욱 향상시키고 사용자에게 더 일관된 수익을 제공합니다.

요약

요약하자면, 슈퍼 인디케이터 7-인-1 전략은 강력하고 잘 설계된 양적 거래 전략이다. 시장 역학을 여러 각도에서 파악하고 거래자에게 신뢰할 수있는 구매 및 판매 신호를 제공하기 위해 일반적으로 사용되는 7 가지 기술적 인 지표를 현명하게 결합합니다. 풍부한 매개 변수 옵션과 내장된 위험 관리 도구로 전략이 유연하고 사용자 친화적이며 적응이 가능합니다.

그러나 전략의 성능은 여전히 매개 변수 선택 및 시장 조건과 같은 요인에 의해 영향을 받는다. 트레이더들은 자신의 경험과 백테스팅 결과를 기반으로 전략을 정밀하게 조정해야합니다. 더 많은 지표 차원을 도입하고, 수익을 취하고 손실을 멈추는 논리를 최적화하고, 거래 세션 필터를 정제함으로써 전략은 위험 회복력과 수익 잠재력을 더욱 향상시킬 수 있으며, 양적 트레이더들에게 귀중한 도구가 될 수 있습니다.


/*backtest
start: 2024-04-22 00:00:00
end: 2024-05-22 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='Super Indicator 7 in 1', shorttitle='Super Indicator 7 in 1', overlay=true, initial_capital=100, pyramiding=0, default_qty_value=10000, default_qty_type=strategy.cash)

// Defining indicator parameters
show_plots = input(false, title="Show Plots", group="Visibility")
show_indicators = input(false, title="Show Indicators", group="Visibility")
show_trades = input(true, title="Show Trades", group="Visibility")
show_labels = input(false, title="Show Labels", group="Visibility")
start_hour = input.int(0, title="Start Hour (24h format)", group="Time-Based Filter", minval=0, maxval=24)
end_hour = input.int(24, title="End Hour (24h format)", group="Time-Based Filter", minval=0, maxval=24)
stop_trading = input(false, "Stop Trading", group="Time-Based Filter")
trade_time = (hour >= start_hour and hour <= end_hour)
bgcolor(trade_time and (start_hour != 0 or end_hour != 24) ? color.new(color.blue, 90) : na)

volume_length = input.int(1, title="Volume SMA Length", group="Volume", minval=1, step=1)
sma_period = input.int(50, title="SMA Period", group="Moving Averages")
ema_period = input.int(50, title="EMA Period", group="Moving Averages")
bb_length = input.int(20, title='Bollinger Bands Length', group="Bollinger Bands")
mult = input.float(2.0, title='Bollinger Bands MultFactor', group="Bollinger Bands")
src = input(close, title='Bollinger Bands Source', group="Bollinger Bands")
rsi_length = input.int(14, title='RSI Length', group="RSI")
macd_fast_length = input.int(12, title='MACD Fast Length', group="MACD")
macd_slow_length = input.int(26, title='MACD Slow Length', group="MACD")
macd_signal_length = input.int(9, title='MACD Signal Smoothing', group="MACD")
stoch_length = input.int(14, title='Stochastic Length', group="Stochastic")
smoothK = input.int(3, title='Stochastic %K Smoothing', group="Stochastic")
smoothD = input.int(3, title='Stochastic %D Smoothing', group="Stochastic")
tp_percent = input.float(0.14, title="Take Profit (%)", group="Trade Settings", minval=0.01, step=0.01) / 100
sl_percent = input.float(0.25, title="Stop Loss (%)", group="Trade Settings", minval=0.01, step=0.01) / 100

// Calculating indicators
dev = mult * ta.stdev(src, bb_length)
upper = ta.sma(src, bb_length) + dev
lower = ta.sma(src, bb_length) - dev
rsi_value = ta.rsi(close, rsi_length)
stoch_value = ta.stoch(close, high, low, stoch_length)
[macd_line, signal_line, _] = ta.macd(close, macd_fast_length, macd_slow_length, macd_signal_length)
k = ta.sma(stoch_value, smoothK)
d = ta.sma(k, smoothD)
sma = ta.sma(close, sma_period)
ema = ta.ema(close, ema_period)
volume_ma = ta.sma(volume, volume_length)
volume_condition = volume >= volume_ma

// Signal definitions(-10%, Normal, +10% and ! failed indicator)
min_buy_signal = rsi_value < 33 and rsi_value > 30 and stoch_value < 22 and stoch_value > 20 and low < lower and macd_line < 0 and volume_condition
min_sell_signal = rsi_value > 63 and rsi_value < 70 and stoch_value > 72 and stoch_value < 80 and high > upper and macd_line > 0 and volume_condition
buy_signal = rsi_value < 30 and stoch_value < 20 and low < lower and macd_line < 0 and volume_condition
sell_signal = rsi_value > 70 and stoch_value > 80 and high > upper and macd_line > 0 and volume_condition
max_buy_signal = rsi_value < 27 and stoch_value < 18 and low < lower and macd_line < 0 and volume_condition
max_sell_signal = rsi_value > 77 and stoch_value > 80 and high > upper and macd_line > 0 and volume_condition
buy_condition = (rsi_value < 30 ? 1 : 0) + (stoch_value < 20 ? 1 : 0) + (macd_line < 0 ? 1 : 0) + (low < lower ? 1 : 0) + (volume_condition ? 1 : 0) == 4
sell_condition = (rsi_value > 70 ? 1 : 0) + (stoch_value > 80 ? 1 : 0) + (macd_line > 0 ? 1 : 0) + (high > upper ? 1 : 0) + (volume_condition ? 1 : 0) == 4

// Plotting buy and sell signals
plotshape(show_plots and min_buy_signal, style=shape.triangleup, location=location.belowbar, color=#00ffb7, size=size.small, title="Min Buy Signal")
plotshape(show_plots and min_sell_signal, style=shape.triangledown, location=location.abovebar, color=#efa803, size=size.small, title="Min Sell Signal")
plotshape(show_plots and buy_signal and not max_buy_signal, style=shape.triangleup, location=location.belowbar, color=#004cff, size=size.small, title="Buy Signal")
plotshape(show_plots and sell_signal and not max_sell_signal, style=shape.triangledown, location=location.abovebar, color=#ffff00, size=size.small, title="Sell Signal")
plotshape(show_plots and max_buy_signal, style=shape.triangleup, location=location.belowbar, color=#1eff00, size=size.small, title="Max Buy Signal")
plotshape(show_plots and max_sell_signal, style=shape.triangledown, location=location.abovebar, color=#ff0000, size=size.small, title="Max Sell Signal")
plotshape(show_plots and buy_condition and not min_buy_signal and not buy_signal and not max_buy_signal, style=shape.triangleup, location=location.belowbar, color=#ffffff, size=size.small, title="Buy Condition")
plotshape(show_plots and sell_condition and not min_sell_signal and not sell_signal and not max_sell_signal, style=shape.triangledown, location=location.abovebar, color=#ffffff, size=size.small, title="Sell Condition")

// Plotting moving averages
plot(show_indicators ? sma : na, color=#fc0000, linewidth=2, title="SMA")
plot(show_indicators ? ema : na, color=#00aaff, linewidth=2, title="EMA")

// Crossover labels for moving averages
BullCross = ta.crossover(ema, sma)
BearCross = ta.crossunder(ema, sma)

if (show_labels)
    if (BullCross)
        label.new(bar_index, sma, color=color.green, textcolor=color.white, style=label.style_cross, size=size.huge)
    if (BearCross)
        label.new(bar_index, sma, color=color.red, textcolor=color.white, style=label.style_cross, size=size.huge)

// Calculating take profit and stop loss
long_take_profit = close * (1 + tp_percent)
long_stop_loss = close * (1 - sl_percent)
short_take_profit = close * (1 - tp_percent)
short_stop_loss = close * (1 + sl_percent)

// Opening long and short orders based on signals
if (show_trades and trade_time and not stop_trading)
    if (min_buy_signal or buy_signal or max_buy_signal or buy_condition)
        strategy.entry("Open Long", strategy.long)
        strategy.exit("TP/SL Long", limit=long_take_profit, stop=long_stop_loss)
    if (min_sell_signal or sell_signal or max_sell_signal or sell_condition)
        strategy.entry("Open Short", strategy.short)
        strategy.exit("TP/SL Short", limit=short_take_profit, stop=short_stop_loss)


관련

더 많은