
이 전략의 핵심 아이디어는 상대적으로 강한 지수 ((RSI) 와 다른 시간 주기의 이동 평균을 사용하여 동시 트렌드 역점을 식별하고 중·장선 트렌드를 동시에 잡기 위해 단선 거래를 하는 것입니다. 이 전략은 여러 가지 거래 신호를 통합하여 거래 성공률을 높이기 위해 고안되었습니다.
이 전략은 여러 가지 기술 지표의 돌파 신호를 통합하여, 다양한 매개 변수 설정의 이동 평균을 사용하여 다양한 주기의 트렌드를 식별하여 전략의 신뢰성을 향상시킵니다. RSI 지표는 과매매 상태를 판단하고, EMA 단선은 단기 트렌드를 판단하고, WMA 느린 선은 중기 트렌드를 판단하고, 가격과 보조 평균의 돌파 검증 트렌드를 판단합니다. 여러 가지 신호의 통합은 전략의 효과를 향상시킵니다.
위험은 변수 최적화, 엄격한 중지 손실 전략, 그리고 대주기 경향을 고려하는 방법과 같은 방법을 통해 감소시킬 수 있습니다.
이 전략은 트렌드 추적과 극점 반전 거래 아이디어를 통합하고, 다중 시간 프레임 분석과 여러 지표의 통합 사용을 추가하여 거래 성공률을 높이는 것을 목표로합니다. 위험을 잘 제어하고, 파라미터 설정을 최적화하고, 적절한 시기에 대주기 트렌드가 거래에 미치는 영향을 고려하는 것이 중요합니다.
/*backtest
start: 2023-09-15 00:00:00
end: 2023-10-15 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © HamidBox
//@version=4
// strategy("H-M By HamidBox-YT", default_qty_type=strategy.cash, default_qty_value= 100, initial_capital=100, currency='USD', commission_type=strategy.commission.percent, commission_value=0.1)
ma(source, length, type) =>
type == "SMA" ? sma(source , length) :
type == "EMA" ? ema(source , length) :
type == "WMA" ? wma(source , length) :
type == "VWMA" ? vwma(source , length) :
na
WMA(source, length, type) =>
type == "SMA" ? sma(source , length) :
type == "EMA" ? ema(source , length) :
type == "WMA" ? wma(source , length) :
type == "VWMA" ? vwma(source , length) :
na
WithMA(source, length, type) =>
type == "SMA" ? sma(source , length) :
type == "EMA" ? ema(source , length) :
type == "WMA" ? wma(source , length) :
type == "VWMA" ? vwma(source , length) :
na
rsi_inline = input(true , title="RSI Value)", inline="rsi")
rsiLength = input(title="Length:", type=input.integer, defval=9, minval=1, inline="rsi")
rsiLineM = input(title="Level:", type=input.integer, defval=50, minval=1, inline="rsi")
rsi_OSOBinline = input(true , title="RSI)", inline="rsiosob")
rsiLineU = input(title="O-BOUGHT", type=input.integer, defval=70, minval=1, inline="rsiosob")
rsiLineD = input(title="O-SOLD", type=input.integer, defval=30, minval=1, inline="rsiosob")
ma_inline = input(true , title="Price-MA)", inline="ma")
ma_type = input(title="Type", defval="EMA", options=["EMA","SMA","WMA","VWMA"], inline="ma")
emaLength = input(title="Length", type=input.integer, defval=3, inline="ma")
wma_inline = input(true , title="Trending-MA)", inline="wma")
ma_type2 = input(title="", defval="WMA", options=["EMA","SMA","WMA","VWMA"], inline="wma")
wmaLength = input(title="Length", type=input.integer, defval=21, inline="wma")
////////////////////////////////////////////////////////////////////////////////
startTime = input(title="Start Time", type = input.time, defval = timestamp("01 Jan 2021 00:00 +0000"), group="Backtest Time Period")
endTime = input(title="End Time", type = input.time, defval = timestamp("01 Jan 2200 00:00 +0000"), group="Backtest Time Period")
inDateRange = true
////////////////////////////////////////////////////////////////////////////////
rsi = rsi(close , rsiLength)
r = plot(rsi_inline ? rsi : na, color=color.yellow, linewidth=2)
EMA = ma(rsi, emaLength, ma_type)
e = plot(ma_inline ? EMA : na, color=color.lime)
myWMA = ma(rsi, wmaLength, ma_type2)
w = plot(wma_inline ? myWMA : na, color=color.white, linewidth=2)
up = hline(rsiLineU, title='UP Level', linewidth=1, color=color.red, linestyle=hline.style_dotted)
mid = hline(rsiLineM, title='Mid Level', linewidth=2, color=color.white, linestyle=hline.style_dotted)
dn = hline(rsiLineD, title='DN Level', linewidth=1, color=color.green, linestyle=hline.style_dotted)
col_e_w = EMA > myWMA ? color.new(color.green , 85) : color.new(color.red , 85)
col_r_w = rsi > myWMA ? color.new(color.green , 85) : color.new(color.red , 85)
fill(e , w, color=col_e_w)
fill(r , w, color=col_r_w)
////////////////////////////////////////////////////////////////////////////////
//Signals = input(true,group="👇 🚦 --- Backtesting Signals Type --- 🚦 ")
///////////////////////////////////////////////////////////////////////////////
RSI_Cross = input(false, "RSI x Trending-MA", inline="wma_cross",group="👇 🚦 --- Backtesting Signals Type --- 🚦 ") // INPUT
rsiBuySignal = crossover(rsi , myWMA)
plotshape(RSI_Cross ? rsiBuySignal : na, title="RSI Crossover", style=shape.labelup, location=location.bottom, color=color.green)
rsiSellSignal = crossunder(rsi , myWMA)
plotshape(RSI_Cross ? rsiSellSignal : na, title="RSI Crossunder", style=shape.labeldown, location=location.top, color=color.red)
if rsiBuySignal and RSI_Cross and inDateRange
strategy.entry("RSIxWMA", strategy.long)
if rsiSellSignal and RSI_Cross and inDateRange
strategy.close("RSIxWMA", comment="x")
if (not inDateRange)
strategy.close_all()
////////////////////////////////////////////////////////////////////////////////
MA_Cross = input(false, "MA x Trendin-MA",group="👇 🚦 --- Backtesting Signals Type --- 🚦 ") // INPUT
maBuySignal = crossover(EMA, myWMA)
plotshape(MA_Cross ? maBuySignal : na, title="MA Cross", style=shape.circle, location=location.bottom, color=color.lime)
maSellSignal = crossunder(EMA , myWMA)
plotshape(MA_Cross ? maSellSignal : na, title="RSI Crossunder", style=shape.circle, location=location.top, color=color.maroon)
if maBuySignal and MA_Cross and inDateRange
strategy.entry("MAxWMA", strategy.long)
if maSellSignal and MA_Cross and inDateRange
strategy.close("MAxWMA", comment="x")
if (not inDateRange)
strategy.close_all()
////////////////////////////////////////////////////////////////////////////////
Mix = input(false, "RSI + EMA x Trending-MA",group="👇 🚦 --- Backtesting Signals Type --- 🚦 ") // INPUT
rsi_ma_buy = crossover(rsi , myWMA) and crossover(EMA, myWMA)
rsi_ma_sell = crossunder(rsi , myWMA) and crossunder(EMA, myWMA)
plotshape(Mix ? rsi_ma_buy : na, title="RSI Crossunder", style=shape.circle, location=location.bottom, color=color.lime, size=size.tiny)
plotshape(Mix ? rsi_ma_sell : na, title="RSI Crossunder", style=shape.circle, location=location.top, color=color.yellow, size=size.tiny)
if rsi_ma_buy and Mix and inDateRange
strategy.entry("RSI+EMA x WMA", strategy.long)
if rsi_ma_sell and Mix and inDateRange
strategy.close("RSI+EMA x WMA", comment="x")
if (not inDateRange)
strategy.close_all()
////////////////////////////////////////////////////////////////////////////////
wma_cross = input(false, "Trending-MA x 50",group="👇 🚦 --- Backtesting Signals Type --- 🚦 ") // INPUT
wma_buy = crossover(myWMA , rsiLineM)
plotshape(wma_cross ? wma_buy : na, title="WMA Cross", style=shape.diamond, location=location.bottom, color=color.aqua)
wma_sell = crossunder(myWMA , rsiLineM)
plotshape(wma_cross ? wma_sell : na, title="WMA Cross", style=shape.diamond, location=location.top, color=color.aqua)
if wma_buy and wma_cross and inDateRange
strategy.entry("WMA x 50", strategy.long)
if wma_sell and wma_cross and inDateRange
strategy.close("WMA x 50", comment="x")
if (not inDateRange)
strategy.close_all()
////////////////////////////////////////////////////////////////////////////////
rsi_50 = input(false, "RSI x 50",group="👇 🚦 --- Backtesting Signals Type --- 🚦 ") // INPUT
rsi_50_buy = crossover(rsi , rsiLineM)
plotshape(rsi_50 ? rsi_50_buy : na, title="WMA Cross", style=shape.cross, location=location.bottom, color=color.purple)
rsi_50_sell = crossunder(rsi , rsiLineM)
plotshape(rsi_50 ? rsi_50_sell : na, title="WMA Cross", style=shape.cross, location=location.top, color=color.purple)
if rsi_50_buy and rsi_50 and inDateRange
strategy.entry("RSI Cross 50", strategy.long)
if rsi_50_sell and rsi_50 and inDateRange
strategy.close("RSI Cross 50", comment="x")
if (not inDateRange)
strategy.close_all()
////////////////////////////////////////////////////////////////////////////////
RSI_OS_OB = input(false, "RSI OS/OB x Trending-MA",group="👇 🚦 --- Backtesting Signals Type --- 🚦 ") // INPUT
rsi_OB_buy = (rsi < rsiLineD or rsi[1] < rsiLineD[1] or rsi[2] < rsiLineD[2] or rsi[3] < rsiLineD[3] or rsi[4] < rsiLineD[4] or rsi[5] < rsiLineD[5]) and rsiBuySignal
plotshape(RSI_OS_OB ? rsi_OB_buy : na, title="RSI OB + Cross", style=shape.circle, location=location.bottom, color=color.lime, size=size.tiny)
rsi_OS_sell = (rsi > rsiLineU or rsi[1] > rsiLineU[1] or rsi[2] > rsiLineU[2] or rsi[3] > rsiLineU[3] or rsi[4] > rsiLineU[4] or rsi[5] > rsiLineU[5]) and maSellSignal
plotshape(RSI_OS_OB ? rsi_OS_sell : na, title="RSI OS + Cross", style=shape.circle, location=location.top, color=color.red, size=size.tiny)
if rsi_OB_buy and RSI_OS_OB and inDateRange
strategy.entry("RSI-OBOS x WMA", strategy.long)
if rsi_OS_sell and RSI_OS_OB and inDateRange
strategy.close("RSI-OBOS x WMA", comment="x")
if (not inDateRange)
strategy.close_all()
////////////////////////////////////////////////////////////////////////////////
rsi_OB_OS = input(false, "RSI Over Sold/Bought",group="👇 🚦 --- Backtesting Signals Type --- 🚦 ") // INPUT
rsiBuy = crossover(rsi , rsiLineD)
rsiSell = crossunder(rsi, rsiLineU)
rsiExit = crossunder(rsi, rsiLineD)
plotshape(rsi_OB_OS ? rsiBuy : na, title="RSI OB", style=shape.cross, location=location.bottom, color=color.purple)
plotshape(rsi_OB_OS ? crossunder(rsi, rsiLineU) : na, title="RSI OS", style=shape.cross, location=location.top, color=color.purple)
plotshape(rsi_OB_OS ? rsiExit : na, title="RSI OS", style=shape.cross, location=location.bottom, color=color.red)
if rsiBuy and rsi_OB_OS and inDateRange
strategy.entry("RSI OB", strategy.long)
if (rsiSell or rsiExit) and rsi_OB_OS and inDateRange
strategy.close("RSI OB", comment="x")
if (not inDateRange)
strategy.close_all()
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
With_MA_Vis = input(true , title="With MA Signal)", inline="WITH MA", group="With MA")
withMA_type = input(title="", defval="SMA", options=["EMA","SMA","WMA","VWMA"], inline="WITH MA", group="With MA")
with_MALen = input(title="", defval=9, type=input.integer, inline="WITH MA", group="With MA")
// TAKE-PROFIT / STOP-LOSS
Stop_Take_Vis = input(true, "TP-SL")
LongSLValue = input(title="SL %", type=input.float, defval=3, minval=0.5) * 0.01
LongTPValue = input(title="TP %", type=input.float, defval=15, minval=0.5) * 0.01
LongSLDetermine = strategy.position_avg_price * (1 - LongSLValue)
LongTPDetermine = strategy.position_avg_price * (1 + LongTPValue)
//////////////////////////
with_ma = WithMA(close, with_MALen, withMA_type)
Close_buy_MA = crossover(close , with_ma)
Close_sell_MA = crossunder(close , with_ma)
// PLOT OPTION
WithMaSignal = input(true, "MA + RSI x Trending-MA",group="With MA") // INPUT
// CONDITION IN VARIABLE
withMA_RSI_BUY = (Close_buy_MA and rsiBuySignal) and WithMaSignal and inDateRange
withMA_RSI_SELL = (Close_sell_MA and rsiSellSignal) and WithMaSignal and inDateRange
// PLOT ING
plotshape(WithMaSignal ? withMA_RSI_BUY : na, title="With MA", style=shape.diamond, location=location.bottom, color=color.aqua)
plotshape(WithMaSignal ? withMA_RSI_SELL : na, title="With MA", style=shape.diamond, location=location.top, color=color.aqua)
if withMA_RSI_BUY
strategy.entry("MA + RSIxWMA", strategy.long)
if withMA_RSI_SELL
strategy.close("MA + RSIxWMA", comment="x")
if (not inDateRange)
strategy.close_all()
// FOR SL - TP
if (strategy.position_size > 0) and Stop_Take_Vis
strategy.exit("BUY", stop=LongSLDetermine, limit=LongTPDetermine)