동력 가격 트렌드 추적 전략

저자:차오장, 날짜: 2023-11-13 16:44:58
태그:

img

전반적인 설명

임멘텀 가격 트렌드 추적 전략은 여러 임멘텀 지표를 사용하여 가격 트렌드를 식별하고, 트렌드의 시작에서 포지션을 설정하고, 가격 트렌드를 추적하기 위해 스톱 이윤 및 스톱 손실 설정을 통해 수익을 잠금합니다.

전략 논리

임멘텀 가격 트렌드 추적 전략은 주로 다음 기술 지표를 적용합니다.

  1. ROC 지표: 이 지표는 가격 동력을 결정하기 위해 특정 기간 동안 가격 변화의 비율을 계산합니다. ROC가 긍정적 인 경우 가격이 상승한다는 것을 의미합니다. ROC가 부정적 인 경우 가격이 하락한다는 것을 의미합니다. 전략은 가격 트렌드의 방향을 결정하기 위해 ROC 지표를 사용합니다.

  2. 황소 힘과 곰 힘 지표: 이 지표는 황소와 곰 사이의 힘 비교를 반영합니다. 황소 힘 > 0은 황소 힘이 곰 힘보다 크며 가격이 상승한다는 것을 나타냅니다. 전략은 이 지표를 사용하여 황소와 곰 힘을 비교하여 가격 방향을 예측합니다.

  3. 이 지표는 가격 및 부피의 분리를 계산하여 트렌드 반전을 식별합니다. 이 전략은 분산 신호를 입시 시점으로 사용합니다.

  4. 돈치안 채널: 이 지표는 가장 높은 가격과 가장 낮은 가격을 사용하여 채널을 구성하며 채널 경계는 지원 및 저항으로 사용될 수 있습니다. 전략은 트렌드 방향을 결정하는 채널을 사용합니다.

  5. 이동 평균: 이 지표 는 전체 추세 방향 을 파악 하기 위해 가격 변동 을 평탄 하게 한다. 전략 은 일반 가격 추세를 결정 하기 위해 이를 사용 한다.

이 전략은 위의 지표에 기초하여 가격 동향 및 반전 지점을 결정하고, 동향의 시작에 지표 신호에 따라 긴 또는 짧은 포지션을 설정합니다. 그 다음 가격 동향을 파악하기 위해 스톱 이익 및 스톱 손실 지점을 기반으로 적시에 포지션을 닫습니다.

이점 분석

이 전략의 장점은 다음과 같습니다.

  1. 경향을 결정하기 위해 여러 지표를 사용하는 것은 잘못된 판단의 가능성을 감소시킵니다.

  2. 지표의 오차를 이용하면 트렌드 반전 지점을 정확하게 파악할 수 있습니다.

  3. 채널과 이동 평균을 결합하면 전체 트렌드를 결정하는 데 도움이 됩니다.

  4. 스톱프로프트와 스톱프로스트를 설정하면 적시에 수익을 확보하고 확장된 마감을 피할 수 있습니다.

  5. 조정 가능한 매개 변수로 전략은 다양한 기간과 제품에 적응할 수 있습니다.

  6. 명확한 논리는 더 많은 최적화를 촉진합니다.

위험 분석

이 전략의 잠재적 위험은 다음과 같습니다.

  1. 여러 지표가 잘못된 신호의 확률을 증가시킬 수 있습니다. 지표 가중을 최적화하는 것이 필요합니다.

  2. 너무 작게 설정된 스톱 로스 포인트는 스톱 로스 확률을 증가시킬 수 있고, 너무 넓게 설정된 스톱 로스 포인트는 드라우다운을 확장시킬 수 있습니다. 합리적인 포인트는 포괄적인 고려가 필요합니다.

  3. 다른 시장 기간에 걸쳐 맹목적으로 적용하면 적응성이 떨어질 수 있습니다. 주기적인 매개 변수 조정이 필요합니다.

  4. 초과 수익을 얻기 위해서는 높은 지위 유닛을 지원할 충분한 자본이 필요합니다.

  5. 백테스트의 과잉 적합성 위험은 존재합니다. 실제 거래 성과에는 불확실성이 있습니다.

최적화 방향

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. 지표 매개 변수를 최적화하여 다른 기간과 제품에 최적의 조합을 찾습니다.

  2. 기계 학습 알고리즘을 도입해서 최적의 매개 변수를 자동으로 찾습니다.

  3. 시장 조건에 따라 적응적인 스톱 로스 메커니즘을 구축합니다.

  4. 알파를 개선하기 위해 고주파 요인과 기본 요소를 포함합니다.

  5. 매개 변수 최적화 및 성능 검증을 위한 자동화된 테스트 프레임워크 개발.

  6. 리스크 관리 모듈을 도입하여 포지션 크기를 제어하고 마이너운드를 줄이십시오.

  7. 안정성을 높이기 위해 시뮬레이션 및 실시간 거래 및 테스트를 추가합니다.

결론

이 전략은 가격 트렌드를 결정하기 위해 여러 동력 지표를 결합하고 수익을 잠금하기 위해 스톱 노프 / 로스를 사용합니다. 강력한 안정성을 가진 트렌드를 효과적으로 캡처 할 수 있습니다. 매개 변수 조정, 구조 최적화 및 위험 관리의 추가 향상으로 성능과 위험 관리가 향상됩니다. 전략은 양적 거래에 대한 신뢰할 수 있고 사용하기 쉬운 트렌드 다음 솔루션을 제공합니다.


/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-09 00:00:00
period: 1m
basePeriod: 1m
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/
// © mbagheri746

//@version=4
strategy("Bagheri IG Ether v2", overlay=true, margin_long=100, margin_short=100)

TP = input(3000, minval = 1 , title ="Take Profit")
SL = input(2200, minval = 1 , title ="Stop Loss")


//_________________ RoC Definition _________________


rocLength = input(title="ROC Length", type=input.integer, minval=1, defval=186)
smoothingLength = input(title="Smoothing Length", type=input.integer, minval=1, defval=50)
src = input(title="Source", type=input.source, defval=close)

ma = ema(src, smoothingLength)
mom = change(ma, rocLength)

sroc = nz(ma[rocLength]) == 0
     ? 100
     : mom == 0
         ? 0
         : 100 * mom / ma[rocLength]

//srocColor = sroc >= 0 ? #0ebb23 : color.red
//plot(sroc, title="SROC", linewidth=2, color=srocColor, transp=0)
//hline(0, title="Zero Level", linestyle=hline.style_dotted, color=#989898)


//_________________ Donchian Channel _________________

length1 = input(53, minval=1, title="Upper Channel")
length2 = input(53, minval=1, title="Lower Channel")
offset_bar = input(91,minval=0, title ="Offset Bars")

upper = highest(length1)
lower = lowest(length2)

basis = avg(upper, lower)


DC_UP_Band = upper[offset_bar]
DC_LW_Band = lower[offset_bar]

l = plot(DC_LW_Band, style=plot.style_line, linewidth=1, color=color.red)
u = plot(DC_UP_Band, style=plot.style_line, linewidth=1, color=color.aqua)

fill(l,u,color = color.new(color.aqua,transp = 90))

//_________________ Bears Power _________________


wmaBP_period = input(65,minval=1,title="BearsP WMA Period")
line_wma = ema(close, wmaBP_period)

BP = low - line_wma


//_________________ Balance of Power _________________

ES_BoP=input(15, title="BoP Exponential Smoothing")
BOP=(close - open) / (high - low)

SBOP = rma(BOP, ES_BoP)

//_________________ Alligator _________________

//_________________ CCI _________________

//_________________ Moving Average _________________

sma_period = input(74, minval = 1 , title = "SMA Period")
sma_shift = input(37, minval = 1 , title = "SMA Shift")

sma_primary = sma(close,sma_period)

SMA_sh = sma_primary[sma_shift]

plot(SMA_sh, style=plot.style_line, linewidth=2, color=color.yellow)

//_________________ Long Entry Conditions _________________//

MA_Lcnd = SMA_sh > low and SMA_sh < high

ROC_Lcnd = sroc < 0

DC_Lcnd = open < DC_LW_Band

BP_Lcnd = BP[1] < BP[0] and BP[1] < BP[2]

BOP_Lcnd = SBOP[1] < SBOP[0]

//_________________ Short Entry Conditions _________________//

MA_Scnd = SMA_sh > low and SMA_sh < high

ROC_Scnd = sroc > 0

DC_Scnd = open > DC_UP_Band

BP_Scnd = BP[1] > BP[0] and BP[1] > BP[2]

BOP_Scnd = SBOP[1] > SBOP[0]

//_________________ OPEN POSITION __________________//

if strategy.position_size  == 0
    strategy.entry(id = "BUY", long = true , when = MA_Lcnd and ROC_Lcnd and DC_Lcnd and BP_Lcnd and BOP_Lcnd)
    strategy.entry(id = "SELL", long = false , when = MA_Scnd and ROC_Scnd and DC_Scnd and BP_Scnd and BOP_Scnd)

//_________________ CLOSE POSITION __________________//

strategy.exit(id = "CLOSE BUY", from_entry = "BUY", profit = TP , loss = SL)

strategy.exit(id = "CLOSE SELL", from_entry = "SELL" , profit = TP , loss = SL)

//_________________ TP and SL Plot __________________//

currentPL= strategy.openprofit
pos_price = strategy.position_avg_price
open_pos = strategy.position_size

TP_line = (strategy.position_size  > 0) ? (pos_price + TP/100) : strategy.position_size < 0 ? (pos_price - TP/100) : 0.0
SL_line = (strategy.position_size  > 0) ? (pos_price - SL/100) : strategy.position_size < 0 ? (pos_price + SL/100) : 0.0

// hline(TP_line, title = "Take Profit", color = color.green , linestyle = hline.style_dotted, editable = false)
// hline(SL_line, title = "Stop Loss", color = color.red , linestyle = hline.style_dotted, editable = false)


Tline = plot(TP_line != 0.0 ? TP_line : na , title="Take Profit", color=color.green, trackprice = true, show_last = 1)
Sline = plot(SL_line != 0.0 ? SL_line : na, title="Stop Loss", color=color.red, trackprice = true, show_last = 1)
Pline = plot(pos_price != 0.0 ? pos_price : na, title="Stop Loss", color=color.gray, trackprice = true, show_last = 1)


fill(Tline , Pline, color = color.new(color.green,transp = 90))
fill(Sline , Pline, color = color.new(color.red,transp = 90))

//_________________ Alert __________________//

//alertcondition(condition = , title = "Position Alerts", message = "Bagheri IG Ether\n Symbol: {{ticker}}\n Type: {{strategy.order.id}}")

//_________________ Label __________________//


inMyPrice           = input(title="My Price", type=input.float, defval=0)
inLabelStyle        = input(title="Label Style", options=["Upper Right", "Lower Right"], defval="Lower Right")

posColor = color.new(color.green, 25)
negColor = color.new(color.red, 25)
dftColor = color.new(color.aqua, 25)
posPnL   = (strategy.position_size != 0) ? (close * 100 / strategy.position_avg_price - 100) : 0.0
posDir   = (strategy.position_size  > 0) ? "long" : strategy.position_size < 0 ? "short" : "flat"
posCol   = (strategy.openprofit > 0) ? posColor : (strategy.openprofit < 0) ? negColor : dftColor
myPnL    = (inMyPrice != 0) ? (close * 100 / inMyPrice - 100) : 0.0

var label lb = na
label.delete(lb)
lb := label.new(bar_index, close,
   color=posCol,
   style=inLabelStyle=="Lower Right"?label.style_label_upper_left:label.style_label_lower_left,
   text=
      "╔═══════╗" +"\n" + 
      "Pos: "  +posDir +"\n" +
      "Pos Price: "+tostring(strategy.position_avg_price) +"\n" +
      "Pos PnL: "  +tostring(posPnL, "0.00") + "%" +"\n" +
      "Profit: "  +tostring(strategy.openprofit, "0.00") + "$" +"\n" +
      "TP: "  +tostring(TP_line, "0.00") +"\n" +
      "SL: "  +tostring(SL_line, "0.00") +"\n" +
      "╚═══════╝")






더 많은