반신 촛불 MACD 격차 트렌드 전략

저자:차오장, 날짜: 2024-02-04 15:06:58
태그:

img

전반적인 설명

이 전략은 MACD 지표와 MACD 히스토그램을 계산하여 MACD 히스토그램과 가격 움직임 사이의 오차 신호를 감지하여 거래 신호를 생성합니다. 가격의 새로운 고도가 감지되지만 MACD 히스토그램의 새로운 고도가 감지되지 않을 때, 하향적인 오차 신호가 생성됩니다. 가격의 새로운 낮지만 MACD 히스토그램의 새로운 낮은 것이 감지되지 않을 때, 상승적 오차 신호가 생성됩니다. 스톱 로스 및 수익을 취하기 위한 ATR 지표와 결합하면 트렌드를 따르는 거래를 수행합니다.

전략 논리

이 전략의 핵심 원칙은 MACD 지표와 MACD 히스토그램을 사용하여 가격 트렌드의 변화를 반영하고 MACD 히스토그램과 가격 사이의 분차 신호를 거래 신호의 트리거 조건으로 감지하는 것입니다.

구체적으로, 전략은 먼저 MACD 라인, 신호 라인 및 MACD 히스토그램을 계산합니다. 그 다음 지역 최대 및 최소를 추출하기 위해 MACD 히스토그램의 정점과 계곡을 감지하기 위해 프랙탈 함수를 정의하여 가장 높은 가격과 가장 낮은 가격과 결합하여 MACD 히스토그램과 가격 사이에 오차가 있는지 여부를 결정합니다.

가격이 새로운 최고치를 달성하지만 MACD 히스토그램이 새로운 최고치를 달성하지 않을 때, regular_bearish_div 하향 디버전스 신호가 생성됩니다. 가격이 새로운 최저 수준으로 떨어지지만 MACD 히스토그램이 새로운 최저 수준으로 떨어지지 않을 때, regular_bullish_div 하향 디버전스 신호가 생성됩니다.

마지막으로, 하향 및 올림 이차 신호가 생성되면 전략은 각각 짧은 주문과 긴 주문을 발행하고 ATR 스톱 손실 및 수익을 취하는 지위를 종료합니다.

이점 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. MACD 히스토그램과 가격 사이의 분차 특징을 활용함으로써 가격 트렌드의 전환을 일찍 파악할 수 있습니다.

  2. ATR 스톱 로스 및 취득 설정은 거래당 최대 손실을 효과적으로 제어하기 위해 합리적입니다.

  3. 트렌드를 따르는 방법을 사용하면 잠겨있는 수익을 극대화 할 수 있습니다.

  4. 합리적인 매개 변수 설정은 소란스러운 거래 신호를 필터링합니다.

  5. 전략 논리는 명확하고 이해하기 쉽고 실시간 거래에서 검증하기 쉽습니다.

위험 분석

이 전략에는 또한 몇 가지 위험이 있습니다.

  1. MACD 오차는 반드시 가격 반전으로 이어지는 것이 아니라 일부 잘못된 신호 위험이 있습니다.

  2. 부적절한 스톱 로스 및 수익 취득 설정은 과도한 손실 또는 불충분한 이익으로 이어질 수 있습니다.

  3. 짧은 사이클을 가진 디버전스 신호는 소음으로 인해 발생할 수 있으며 적절하게 필터링되어야합니다.

  4. 상용화되지 않는 거래 제품과 매개 변수 설정도 전략 성과에 영향을 줄 것입니다.

대응 솔루션:

  1. 거짓 신호를 필터링하기 위해 길기와 크기의 요구사항을 증가시킵니다.

  2. ATR을 스톱 로스 기준으로 사용하고 수익을 취하고 거래당 위험을 제어하기 위해 ATR 곱셈을 조정합니다.

  3. 다른 거래 제품에 대한 다른 매개 변수를 선택합니다. 최적의 매개 변수 조합을 찾기 위해 매개 변수 최적화를 수행합니다.

최적화 방향

이 전략은 다음 방향으로도 최적화 될 수 있습니다.

  1. 부피 분차 확인과 같이 좀 더 복잡한 분차 확인.

  2. MACD 매개 변수를 최적화하여 가장 좋은 매개 변수 조합을 찾습니다.

  3. ATR의 스톱 로스 곱셈을 최적화하고 이윤을 취합니다.

  4. 분산 신호의 신뢰성을 판단하는 데 도움이 되는 기계 학습 알고리즘을 추가합니다.

  5. 가격 역전 가능성을 결정하기 위해 모델 예측을 추가합니다.

  6. 시장 조건 변화에 따라 전략 매개 변수를 동적으로 조정합니다.

요약

요약하자면, 이 Demigod Candlestick MACD Divergence Trend Following 전략은 트렌드를 파악하기 위해 MACD 히스토그램과 가격 사이의 분리를 활용합니다. 합리적인 ATR 스톱 로스 및 영리 설정은 거래 당 리스크를 제어 할 수 있습니다. 전략 논리는 명확하고 이해하기 쉽습니다. 라이브 거래에서 검증 가치가 있습니다. 더 나은 결과를 얻기 위해 많은 측면에서 후속 최적화가 가능합니다.


/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © bigwin_sun
// copyright: Tradingvue Limited    

//@version = 5
strategy(title = "Demigod : CDMA histogram Divergence strategy", shorttitle = "Demigod strategy", overlay = false, pyramiding = 100)

//macd input
fastMA = input.int(13, title = "fast Length", minval = 1,     group = "CDMA")
slowMA = input.int(34, title = "slow Length", minval = 1,     group = "CDMA")
src          = input.source(title = "source", defval = close, group = "CDMA")
signalSmooth = input.int(9, title="ma Length", minval = 1,    group = "CDMA")
//Divergenc
divLength    = input.int(title = "Divergenc Length",   defval = 5, minval = 1,   maxval = 50,  inline = "ATRLength",  group = "Divergence")
divStren     = input.float(title="Divergenc Strength", defval = 2, minval = 1.0, maxval = 5.0, inline = "ATRLength",  group = "Divergence")

//atr input
atrLength = input.int(13, title = "ATR Length", minval = 1,   inline = "ATRLength", group = "ATR")
m         = input.float(1.0,  "ATR multyple",   minval = 0.5, inline = "ATRLength", group = "ATR", step = 0.5)
collong   = input.color(color.teal, title = "upper color",  inline = "ATR显示", group = "ATR")
colshort  = input.color(color.red,  title = "under color",  inline = "ATR显示", group = "ATR")

// MACD---------------------------------------------------------------------------------------------------------------------------------
DivOffset = -2
macdLine   = ta.ema(src, fastMA) - ta.ema(src, slowMA)    
signalLine = ta.ema(macdLine, signalSmooth)
histogram  = macdLine - signalLine

histogramColor = if histogram > 0
    histogram > histogram[1] ? color.lime : color.green
else 
    histogram < histogram[1] ? color.maroon : color.red

// cdma histogram
plot(histogram, title = "MACD histogram", linewidth = 2, style = plot.style_histogram, color = histogramColor)
plot(0,         title = "zero line",      linewidth = 1,                               color = color.gray)

// Divergenc calculation-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//peak / valley fundation
f_top_fractal(_src)=>_src[4] < _src[2] and _src[3] < _src[2] and _src[2] > _src[1] and _src[2] > _src[0] and _src > 0
f_bot_fractal(_src)=>_src[4] > _src[2] and _src[3] > _src[2] and _src[2] < _src[1] and _src[2] < _src[0] and _src < 0
f_fractalize(_src)=>f_top_fractal(_src) ? 1 : f_bot_fractal(_src) ? -1 : 0

//peak / valley value
fractal_top1 = f_fractalize(histogram) > 0 ? true : false //histogram[2] : na
fractal_bot1 = f_fractalize(histogram) < 0 ? true : false //histogram[2] : na

//previouse peak or valley
high_prev1  = ta.valuewhen(fractal_top1, histogram[2], 0)[2]
high_price1 = ta.valuewhen(fractal_top1, high[2], 0)[2]
low_prev1   = ta.valuewhen(fractal_bot1, histogram[2], 0)[2]
low_price1  = ta.valuewhen(fractal_bot1, low[2], 0)[2]

//Divergenc : cdma histogram against candle value
regular_bearish_div1 = high[2] > high_price1 + divStren and histogram[2] < high_prev1 / divStren and ta.barssince(fractal_top1[1]) > divLength
regular_bullish_div1 = low[2]  < low_price1 - divStren  and histogram[2] > low_prev1 / divStren  and ta.barssince(fractal_bot1[1]) > divLength

//-------------------------cdma Divergenc range------------------------------------------------
//histogramColor
col1 = regular_bearish_div1 ? color.red : na
col2 = regular_bullish_div1 ? #00FF00EB : na
//plot
plot(title='看跌背离', series= fractal_top1 ? histogram[2] : na, color=col1, linewidth=3, offset=DivOffset)
plot(title='看涨背离', series= fractal_bot1 ? histogram[2] : na, color=col2, linewidth=3, offset=DivOffset)

// calculate ATR				--------------------------------------------------------------------------------------------------------------------------------------------------
atr = ta.ema(ta.tr(true), atrLength) * m
up = atr + high
dw = low - atr

//stratety : enrty and exit---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
if regular_bearish_div1 and fractal_top1
//if regular_bullish_div1 and fractal_bot1
    //label.new(bar_index, histogram[2], text = "Short", textcolor = color.white, color = color.gray,  style = label.style_label_lower_left)
    strategy.entry("Short", strategy.short, qty = 1)
    strategy.exit("exitShort", "Short", stop = up, limit = dw - atr)
if regular_bullish_div1 and fractal_bot1
//if regular_bearish_div1 and fractal_top1   
    //label.new(bar_index, histogram[2], text = "Long", textcolor = color.white, color = color.fuchsia, style = label.style_label_upper_left)
	strategy.entry("Long", strategy.long, qty = 1)
    strategy.exit("exitLong", "Long", stop = dw, limit = up + atr)


더 많은