트렌드 풀백 미세 조정 전략


생성 날짜: 2023-10-13 15:49:29 마지막으로 수정됨: 2023-10-13 15:49:29
복사: 1 클릭수: 932
avatar of ChaoZhang ChaoZhang
1
집중하다
1702
수행원

개요

이 전략은 트렌드 중의 작은 회전을 포착하고 회전이 끝날 때 더 많은 포지션을 열어 수익을 창출하는 것을 목표로합니다. 그것은 EMA 평균선, MACD 지표, RSI 지표와 같은 기술 지표를 사용하여 트렌드를 판단하고 회전이 끝날 때를 결정하며 ATR 지표를 사용하여 손실 중지 가격을 설정합니다.

원칙

이 전략은 우선 EMA, MACD, RSI를 계산하여 현재의 트렌드 방향과 강도를 판단합니다.

3개의 EMA 평균선을 사용한다 (단기 21주기, 중기 50주기, 장기 200주기), 단기 평균선 위에 중장기 2선을 횡단할 때 상승 추세로 판단한다.

MACD 지표는 트렌드 강도를 판단하며, MACD 라인 또는 histo 기둥에 0 축을 통과하면 상승 트렌드가 강해진다고 생각합니다.

RSI 지표는 과열과 과매매를 판단하며, RSI 값이 50을 넘으면 재조정이 종료될 수 있다.

수퍼트렌드 지표를 사용하여 특정 반전 구매 지점을 판단합니다. 수퍼트렌드가 아래에서 위로 반전하면 구매 신호가 발생합니다.

마지막으로, ATR 지표에 따라 철회 중지 및 수익 중지 가격을 설정하십시오.

장점

  • 여러 지표의 조합으로 판단하여 거래 신호를 더욱 신뢰하게 한다.
  • 트렌드 속의 단선 기회를 잡는 것은 높은 승률을 가지고 있다.
  • 제약 제약 장치 설치, 효과적으로 위험을 제어

위험

  • 재조정 시간이 너무 길어지면 손실이 커질 수 있습니다.
  • 다중 지표 조합, 매개 변수 설정이 복잡하고, 반복적으로 테스트 및 최적화가 필요합니다.
  • 이 경우, 손실이 커질 수 있습니다.

위험 관리 조치:

  • 매개 변수를 최적화하여 지표의 순조로운 사용을 보장한다.
  • 너무 큰 손실을 방지하기 위해 정지점을 적절하게 조정하십시오.
  • 너무 오래 걸리는 주식을 피하십시오.

최적화 방향

  • 다양한 변수 조합을 테스트하여 지표의 최적 상태 값을 찾습니다.
  • 주식의 일일 변동에 따라, 스톱로스 스톱을 조정한다.
  • 수량과 가격 지표를 추가하여 수량 부족을 방지하십시오.

요약하다

이 전략은 여러 가지 기술 지표를 종합적으로 사용하여 트렌드를 판단하고 회정을 수행하며 강력한 신뢰성을 가지고 있습니다. 엄격한 스톱 메커니즘을 통해 위험을 제어하고, 적시에 회수 처리를합니다. 지속적으로 조정되는 매개 변수와 주식 풀을 기반으로 더 나은 수익을 얻을 수 있습니다.

전략 소스 코드
/*backtest
start: 2022-10-06 00:00:00
end: 2023-10-12 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="pullb", overlay = true, initial_capital = 10000, default_qty_value = 100, default_qty_type = strategy.percent_of_equity)

//variables

///emas var
ema_src = input.source(close, "EMA Source")
ema_1 = input.int(21, 'EMA 1 len')
ema_2 = input(50, 'EMA 2 len')
ema_3 = input(200, 'EMA 3 len')

///macd var
mac_src = input.source(close, "MACD Source")
mac_1 = input.int(12, 'MACD Fast')
mac_2 = input.int(26, 'MACD Signal')
mac_3 = input.int(9, 'MACD Histogram')

///rsi var
rsi_src = input.source(close, "RSI Source")
rsi_len = input.int(14, 'RSI Len')

///stoch var
smoothK = input.int(3, "K", minval=1)
smoothD = input.int(3, "D", minval=1)
lengthRSI = input.int(14, "RSI Length", minval=1)
lengthStoch = input.int(14, "Stochastic Length", minval=1)
stoch_src = input(close, title="RSI Source Stoch")

//usage variables
ema_b = input.bool(true, "Use EMA Filter")
rsi_b = input.bool(true, "Use RSI Filter")
macd_b = input.bool(true, "Use MACD Filter")
//stoch_b = input(title="Use STOCH Filter", type=bool, defval=true)

//emaas
ema1 = ta.ema(ema_src, ema_1)
ema2 = ta.ema(ema_src, ema_2)
ema3 = ta.ema(ema_src, ema_3)

//macd
[macdLine, signalLine, histLine] = ta.macd(mac_src, mac_1, mac_2, mac_3)

//rsi
rsi = ta.rsi(rsi_src, rsi_len)

//stoch
rsi1 = ta.rsi(stoch_src, lengthRSI)
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = ta.sma(k, smoothD)

//supertrend
Periods = input.int(14, "ATR Period")
src_st = input.source(close, "Supertrend Source")
Multiplier = input.float(2.0 , "ATR Multiplier")
changeATR= input.bool(true, "Change ATR Calculation Method ?")
showsignals = input.bool(true, "Show Buy/Sell Signals ?")
highlighting = input.bool(true, "Highlighter On/Off ?")
atr2 = ta.sma(ta.tr, Periods)
atr3= changeATR ? ta.atr(Periods) : atr2
up=src_st-(Multiplier*atr3)
up1 = nz(up[1],up)
up := close[1] > up1 ? math.max(up,up1) : up
dn=src_st+(Multiplier*atr3)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
buySignal = trend == 1 and trend[1] == -1
sellSignal = trend == -1 and trend[1] == 1

//conditions
///buy
rsi_cond_b = if rsi_b
    rsi >= 50
else 
    true

macd_cond_b = if macd_b
    (histLine >= 0 or histLine < histLine[1])
else
    true
ema_cond_b = if ema_b
    (ema1 > ema2 and ema2 > ema3)
else 
    true

look_for = input.int(5, "Bars from cross to signal")

stoch_signal_sum = 0
for i = 0 to (look_for)
    if k[i] > d[i] and k[i + 1] < d[i + 1] and (k[i + 1] < 20 and d[i + 1] < 20)
        stoch_signal_sum := stoch_signal_sum + 1
        
stoch_cond_b = if stoch_signal_sum > 0
    if k > 80 and d > 80
        false
    else
        true
else
    false


sup_cond_b = buySignal

buy_sig = (rsi_cond_b and macd_cond_b and ema_cond_b and stoch_cond_b and sup_cond_b)

tp_b = close + (ta.atr(14) * 3)
sl_b = close - (ta.atr(14) * 1.5)

if (buy_sig)
    strategy.entry("long", strategy.long)
    strategy.exit("exit", "long", stop = sl_b, limit = tp_b)
plot(tp_b)
plot(sl_b)