이동 평균 간격 삼키는 전략은 이동 평균을 기반으로 한 트렌드 추적 전략이다. 그것은 두 개의 이동 평균의 교차점을 계산하여 가격 트렌드를 판단하고, 간격 관리와 결합하여 트렌드를 추적하여 수익을 창출한다.
이 전략은 두 개의 이동 평균을 사용합니다: 빠른 선과 느린 선. 빠른 선의 변수가 작으면 가격 변화에 더 민감하게 반응합니다. 느린 선의 변수가 커지면 추세 판단이 더 신뢰할 수 있습니다. 빠른 선이 아래에서 느린 선을 통과하면 더 많이하고 빠른 선이 위에서 느린 선을 통과하면 공백을 만듭니다.
또한, 이 전략은 주요 트렌드 방향을 판단하는 데 사용되는 여러 보조 이동 평균을 도입하여 잘못된 조화를 방지합니다. 또한, HIGHEST 및 LOWEST 함수를 ATR과 결합하여 동적 스톱을 계산하여 수익을 잠금합니다.
각 거래에 대해, 이 전략은 고정된 수의 주문을 선택할 수 있으며, 또는 매개 변수에 따라 설정된 최대 손실 비율에 따라 동적으로 포지션을 계산할 수 있다. 후자는 각 거래의 위험을 일정 범위 내에서 제어할 수 있다.
이동 평균의 매개 변수를 최적화하고, 보조 평균의 무게를 조정하고, 중지 손실 범위를 수정하는 방법을 사용하여 이러한 위험을 줄일 수 있습니다. 동시에 포지션 관리 규칙을 엄격하게 제어하여 단독 손실의 영향을 줄일 수 있습니다.
이 전략은 다음과 같은 방향으로 최적화될 수 있습니다.
이동 평균 간격 포식 전략은 전반적으로 매우 실용적인 수량 거래 전략이다. 그것은 동시 동시 트렌드 추적과 위험 통제의 장점을 겸비하고, 긴 라인 지점을 보유하기에 적합하다. 매개 변수 조정과 기능 확장의 최적화를 통해 이 전략은 더 안정적이고 지능화되어 더 지속적인 수익성을 얻을 수 있다.
/*backtest
start: 2024-01-10 00:00:00
end: 2024-01-17 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// This is a simple crossover Moving Average strategy, good for long term crypto trades.
// It buys when the MA "X" crosses up the MA "Y", viceversa for shorts.
// Both MAs are selectable from the Inputs section in the front panel.
// There is also a Position Management option thats
// sizes positions to have the same USD risk (using leverage) on each trade,
// based on the percentage distance to the stop loss level.
// If you turn this option on you will see how the profit
// grows exponentially while the drawdown percentage almost remains the same.
strategy("4 MA Strat", overlay=true, pyramiding=1,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100,
commission_value = 0.04,
initial_capital=100,
process_orders_on_close=false)
direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))
//Inputs
PSMGMT=input(defval=false, title="Position Management")
risk_per_trade=input(defval=5, title="Risk Per Trade % (for PSMGMT)", step=0.5)*.01
//SL & TP Inputs
i_SL=input(true, title="Use Swing Lo/Hi Stop Loss & Take Profit")
i_SwingLookback=input(10, title="Swing Lo/Hi Lookback")
i_SLExpander=input(defval=0, step=1, title="SL Expander")
i_MAFilter=input(false, title="Use MA4 as Bull / Bear filter")
//MA Type Selector
MAtype = input(false, title="----------------MA Selector-----------------")
MA1Period = input(9, title="MA1 Period")
MA1Type = input(title="MA1 Type", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "ALMA"])
MA2Period = input(21, title="MA2 Period")
MA2Type = input(title="MA2 Type", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "ALMA"])
MA3Period = input(50, title="MA3 Period")
MA3Type = input(title="MA3 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "ALMA"])
MA4Period = input(100, title="MA4 Period")
MA4Type = input(title="MA4 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "ALMA"])
//MA Selector
MA1 = if MA1Type == "SMA"
sma(close, MA1Period)
else
if MA1Type == "EMA"
ema(close, MA1Period)
else
if MA1Type == "WMA"
wma(close, MA1Period)
else
if MA1Type == "RMA"
rma(close, MA1Period)
else
if MA1Type == "HMA"
hma(close, MA1Period)
else
if MA1Type == "ALMA"
alma(close, MA1Period, 0.85, 6)
MA2 = if MA2Type == "SMA"
sma(close, MA2Period)
else
if MA2Type == "EMA"
ema(close, MA2Period)
else
if MA2Type == "WMA"
wma(close, MA2Period)
else
if MA2Type == "RMA"
rma(close, MA2Period)
else
if MA2Type == "HMA"
hma(close, MA2Period)
else
if MA2Type == "ALMA"
alma(close, MA2Period, 0.85, 6)
MA3 = if MA3Type == "SMA"
sma(close, MA3Period)
else
if MA3Type == "EMA"
ema(close, MA3Period)
else
if MA3Type == "WMA"
wma(close, MA3Period)
else
if MA3Type == "RMA"
rma(close, MA3Period)
else
if MA3Type == "HMA"
hma(close, MA3Period)
else
if MA3Type == "ALMA"
alma(close, MA3Period, 0.85, 6)
MA4 = if MA4Type == "SMA"
sma(close, MA4Period)
else
if MA4Type == "EMA"
ema(close, MA4Period)
else
if MA4Type == "WMA"
wma(close, MA4Period)
else
if MA4Type == "RMA"
rma(close, MA4Period)
else
if MA4Type == "HMA"
hma(close, MA4Period)
else
if MA4Type == "ALMA"
alma(close, MA4Period, 0.85, 6)
// X Y Logic
x=input(title="x", defval="close", options=["MA1", "MA2", "MA3", "MA4", "close"])
y=input(title="y", defval="MA1", options=["MA1", "MA2", "MA3", "MA4", "close"])
X = if x == "MA1"
MA1
else
if x == "MA2"
MA2
else
if x == "MA3"
MA3
else
if x == "MA4"
MA4
else
if x == "close"
close
Y = if y == "MA1"
MA1
else
if y == "MA2"
MA2
else
if y == "MA3"
MA3
else
if y == "MA4"
MA4
else
if y == "close"
close
//SL & TP Calculations
SwingLow=lowest(i_SwingLookback)
SwingHigh=highest(i_SwingLookback)
bought=strategy.position_size != strategy.position_size[1]
LSL=valuewhen(bought, SwingLow, 0)-((valuewhen(bought, atr(14), 0)/5)*i_SLExpander)
SSL=valuewhen(bought, SwingHigh, 0)+((valuewhen(bought, atr(14), 0)/5)*i_SLExpander)
islong=strategy.position_size > 0
isshort=strategy.position_size < 0
SL= islong ? LSL : isshort ? SSL : na
//Position Management Calculations
capital=strategy.equity
distance_to_long_stop_loss=1-(LSL/strategy.position_avg_price)
distance_to_short_stop_loss=(SSL/strategy.position_avg_price)-1
PS=(capital*risk_per_trade)/distance_to_long_stop_loss
SPS=(capital*risk_per_trade)/distance_to_short_stop_loss
PSqty=PS/close
SPSqty=SPS/close
//Strategy Calculations
MAFilter=close > MA4
BUY = crossover(X , Y)
SELL = crossunder(X , Y)
BUY2 = crossover(X , Y) and MAFilter
SELL2 = crossunder(X , Y) and not MAFilter
//Entries
strategy.entry("long", true, qty=PSMGMT ? PSqty : na, when=not i_MAFilter ? BUY : BUY2)
strategy.entry("short", false, qty=PSMGMT ? SPSqty : na, when=not i_MAFilter ? SELL : SELL2)
//Exits
if i_SL //and SL != na
strategy.exit("longexit", "long", stop=LSL)
strategy.exit("shortexit", "short", stop=SSL)
if i_MAFilter
strategy.close("long", when=SELL)
strategy.close("short", when=BUY)
//Plots
plot(i_SL ? SL : na, color=color.red, style=plot.style_cross, title="SL")
plot(MA1, color=color.green, linewidth=1, title="MA1")
plot(MA2, color=color.yellow, linewidth=2, title="MA2")
plot(MA3, color=color.red, linewidth=3, title="MA3")
plot(MA4, color=color.white, linewidth=3, title="MA4")
plotshape(BUY ? 1 : na, style=shape.triangleup, location=location.belowbar, color=color.green, title="Bullish Setup")
plotshape(SELL ? 1 : na, style=shape.triangledown, location=location.abovebar, color=color.red, title="Bearish Setup")
//Debugging Plots
plot(LSL, transp=100, title="SwingLow")
plot(bought ? 1:0, transp=100, title="bought")
plot(PSqty, title="PSqty", transp=100)
plot(SPSqty, title="SPSqty", transp=100)
plot(PS, title="PS", transp=100)
plot(SPS, title="SPS", transp=100)
plot(distance_to_long_stop_loss, title="distance to LSL", transp=100)
plot(distance_to_short_stop_loss, title="distance to SSL", transp=100)
plot(capital, title="equity", transp=100)