압력 균형에 기반한 높은 확률의 돌파구 거래 전략

저자:차오장, 날짜: 2023-11-13 11:40:53
태그:

img

전반적인 설명

이 전략은 트렌드 방향과 거래 기회를 결정하기 위해 여러 지표의 조합을 사용하여 거래의 승률을 높이기 위해 압력 균형 접근 방식을 채택합니다. 판단을 위해 주로 MACD, PSAR 및 EMA 지표를 활용하고 효과적인 수익성을 달성하기 위해 스톱 로스를 구현하고 이익을 취합니다.

전략 논리

  1. 전체 트렌드 방향을 결정하기 위해 이동 평균을 계산하기 위해 EMA를 사용하십시오. 더 큰 EMA 값은 상승 추세를 나타냅니다. 더 작은 EMA 값은 하락 추세를 나타냅니다.

  2. MACD를 사용하여 빠른 평균과 느린 이동 평균의 차이를 계산하십시오. 차이가 0보다 크면 상승 추세를 나타냅니다. 0보다 작으면 하락 추세를 나타냅니다.

  3. 연속 변수점을 계산하기 위해 PSAR를 사용하십시오. PSAR 값이 크면 하락 추세를 나타냅니다. PSAR 값이 작으면 상승 추세를 나타냅니다.

  4. 위의 세 가지 지표를 결합하여 동향의 일관성을 결정합니다. 세 가지 지표의 판단이 일관되면 진입 거래를 허용하는 명확한 동향을 나타냅니다.

  5. 구매 및 판매 기준에 따라 거래를 입력하고 스톱 로스 및 취리 포인트를 설정합니다. 수익을 실현하기 위해 스톱 로스 또는 취리 조건이 충족되면 거래를 종료합니다.

  6. 구체적인 규칙은 다음과 같습니다.

    • 구매 조건: 상승 추세가 없습니다. MACD 히스토그램 < 0, 폐쇄 가격 > EMA
    • 판매 조건: 상승 추세, MACD 히스토그램 > 0, 폐쇄 가격 < EMA
    • 스톱 로스 조건: 가격이 다음 PSAR 값을 달성합니다.
    • 영업이익 조건: 미리 설정된 영업이익 비율을 달성

전략 의 장점

  1. 트렌드를 결정하기 위해 여러 지표를 사용하는 것은 정확성을 향상시킵니다.

  2. 압력 균형에 의해 확인된 확실한 추세에 기반한 거래를 시작하면 이기는 비율이 증가합니다.

  3. 손해를 멈추고 수익을 취하면 손실을 제한하고 수익을 확보할 수 있습니다.

  4. 명확하고 체계적인 거래 규칙은 알고리즘 거래에 적합합니다.

  5. 매개 변수는 다양한 제품과 시간대에 적응하도록 최적화 할 수 있습니다.

전략 의 위험

  1. 트렌드 판단이 잘못되어 잘못된 거래 방향이 발생할 수 있습니다.

  2. 극심한 시장 움직임은 지표에서 잘못된 신호를 생성할 수 있습니다.

  3. 너무 큰 스톱 손실을 설정하고, 적시에 종료 할 수 없습니다.

  4. 부적절한 매개 변수 조정으로 인해 거래가 지나치게 많거나 빠집니다.

  5. 유동성 없는 상품은 스톱 로스 (stop loss) 및 수익 계획 (take profit) 을 충족시킬 수 없습니다.

  6. 위험은 매개 변수를 최적화하고, 정지점을 조정하고, 액체 제품을 선택함으로써 줄일 수 있습니다.

최적화 방향

  1. 트렌드 정확성을 최적화하기 위해 EMA 기간을 조정합니다.

  2. 감수성을 높이기 위해 MACD 빠른 기간과 느린 기간을 조정합니다.

  3. 최적화 스톱 로스 및 수익 비율을 취하여 최적의 균형을 찾습니다.

  4. 출입 시기를 개선하기 위해 다른 보조 지표를 추가하십시오.

  5. 유동성이 좋고 큰 변동이 있는 상품을 선택하세요.

  6. 다른 제품 특성에 맞게 시간 프레임을 조정합니다.

요약

이 전략은 트렌드 분석을 위한 여러 지표를 통합하고, 사전 설정된 스톱 로스로 수익을 취하여, 시장 움직임을 효과적으로 파악하고 일정 수익성을 보장하면서 좋은 수익을 얻을 수 있는 확실한 트렌드를 기반으로 거래를 수행한다. 파라미터 튜닝과 추가 지표를 통해 안정성과 수익성에 대한 추가적인 개선이 이루어질 수 있다. 명확한 거래 규칙은 이 전략을 알고리즘 거래에 매우 적합하게 만든다.


/*backtest
start: 2023-10-13 00:00:00
end: 2023-11-12 00:00:00
period: 1h
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/
// © exlux99

//@version=4
strategy(title = "Crypto Scalper", overlay = true,  pyramiding=1,initial_capital = 100, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.03)
len = input(60, minval=1, title="Length EMA")
src = input(close, title="Source")
out = ema(src, len)
//
fast_length = input(title="Fast Length MACD", type=input.integer, defval=12)
slow_length = input(title="Slow Length MACD", type=input.integer, defval=26)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Oscillator MA Type MACD", type=input.string, defval="EMA", options=["SMA", "EMA"])
sma_signal = input(title="Signal Line MA Type MACD", type=input.string, defval="EMA", options=["SMA", "EMA"])

// Calculating
fast_ma = sma_source == "SMA" ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source == "SMA" ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal


start = input(0.02)
increment = input(0.02)
maximum = input(0.2)
var bool uptrend = na
var float EP = na
var float SAR = na
var float AF = start
var float nextBarSAR = na
if bar_index > 0
	firstTrendBar = false
	SAR := nextBarSAR
	if bar_index == 1
		float prevSAR = na
		float prevEP = na
		lowPrev = low[1]
		highPrev = high[1]
		closeCur = close
		closePrev = close[1]
		if closeCur > closePrev
			uptrend := true
			EP := high
			prevSAR := lowPrev
			prevEP := high
		else
			uptrend := false
			EP := low
			prevSAR := highPrev
			prevEP := low
		firstTrendBar := true
		SAR := prevSAR + start * (prevEP - prevSAR)
	if uptrend
		if SAR > low
			firstTrendBar := true
			uptrend := false
			SAR := max(EP, high)
			EP := low
			AF := start
	else
		if SAR < high
			firstTrendBar := true
			uptrend := true
			SAR := min(EP, low)
			EP := high
			AF := start
	if not firstTrendBar
		if uptrend
			if high > EP
				EP := high
				AF := min(AF + increment, maximum)
		else
			if low < EP
				EP := low
				AF := min(AF + increment, maximum)
	if uptrend
		SAR := min(SAR, low[1])
		if bar_index > 1
			SAR := min(SAR, low[2])
	else
		SAR := max(SAR, high[1])
		if bar_index > 1
			SAR := max(SAR, high[2])
	nextBarSAR := SAR + AF * (EP - SAR)

tplong=input(0.245, step=0.005)
sllong=input(1.0, step=0.005)
tpshort=input(0.055, step=0.005)
slshort=input(0.03, step=0.005)

if (uptrend and hist >0 and close < out)
	strategy.entry("short", strategy.short, stop=nextBarSAR, comment="short")
	strategy.exit("short_tp/sl", "short", profit=close * tpshort / syminfo.mintick, loss=close * slshort / syminfo.mintick, comment='SHORT EXIT',  alert_message = 'closeshort')
if (not uptrend and hist <0 and close > out)
	strategy.entry("long", strategy.long, stop=nextBarSAR, comment="long")
	strategy.exit("short_tp/sl", "long", profit=close * tplong / syminfo.mintick, loss=close * sllong / syminfo.mintick, comment='LONG EXIT',  alert_message = 'closelong')

	

더 많은