이중 하위 반전 평균 반전 DCA 그리드 전략

저자:차오장, 날짜: 2024-02-20 11:09:33
태그:

img

전반적인 설명

이중 하위 반전 평균 반전 DCA 그리드 전략은 주로 평균 반전 가격과 DCA 전략을 적용하여 점진적 위치 구축을 구현합니다. 이중 하위 반전 패턴에 기반하여 반전 기회를 결정합니다. 반전 패턴이 활성화되면 점진적 그리드 포지션을 설정하기 위해 DCA와 결합하여 다양한 가격에서 여러 가지 제한 명령을 사용합니다.

전략 논리

이 전략은 먼저 촛불 차트에서 아래쪽과 같은 두 개의 연속적인 종료 가격이 있는지 확인하고, 이는 더블 바닥이라고 불린다. 이중 바닥이 검출되면 가격 반전 기회가 있을 수 있다고 간주한다. 이 시점에서 전략은 아래쪽 가격 주위에서 여러 가지 제한 주문을 설정할 것이다. 이 주문의 가격은 ATR과 변동성을 기반으로 계산되며, 그리드 영역을 형성한다. 이것은 DCA 효과를 달성하고 트레이더들이 반전 후 점차적으로 다른 가격으로 포지션을 구축할 수 있게 한다.

특히, 최근 14개의 촛불 상의 ATR 지표는 먼저 ta.atr를 통해 얻는다. 그 다음 최근 5개의 촛불 상의 가격 변동성을 계산한다. 이들은 그리드 영역을 결정하는데 사용되는 주요 매개 변수이다. 그리드에는 4개의 가격 레벨이 포함되어 있다 - 최하위 가격 + 변동성, 최하위 가격 + 0.75 * 변동성 등. 이중 최하위 조건이 트리거되면 이 공식에 따라 동일한 크기의 4개의 제한 오더가 배치될 것이다. 채우지 않은 오더는 여러 개의 촛불 후에 취소될 것이다.

또한, 전략은 또한 스톱 로스 가격과 이윤을 취하는 가격을 설정합니다. 스톱 로스 가격은 이중 바닥 마이너스 한 틱 사이즈의 가장 낮은 가격으로 설정되며, 이윤을 취하는 가격은 입상 가격과 ATR의 5배로 설정됩니다. 이 두 가격은 포지션 크기가 0보다 크면 실시간으로 업데이트됩니다.

강점

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

  1. 역전도를 결정하기 위해 이중 바닥을 사용하는 것은 정확성을 향상시키고 잘못된 브레이크를 피합니다.
  2. DCA 그리드는 거래자가 서로 다른 가격으로 점유소를 점차적으로 구축하여 비용 기반을 낮추도록 허용합니다.
  3. 동적 ATR 및 변동성 매개 변수는 시장 변화에 따라 그리드와 수익 범위를 조정합니다.
  4. 자동 스톱 손실은 거래당 손실 금액을 효과적으로 제어합니다.

위험 분석

주요 위험:

  1. 가격은 반전 없이 지지를 뚫고 스톱 로즈와 손실을 유발할 수 있습니다. 보호를 위해 스톱 로즈 거리를 넓히십시오.
  2. DCA 그리드 설정이 잘못되면 충전율이 낮을 수 있습니다. 충전율을 보장하기 위해 다른 매개 변수를 테스트하십시오.
  3. 휘발성 시장에서 빈번하게 수익을 취하고 더 넓은 수익 수 배수를 허용하는 것을 고려하십시오.

개선 할 수 있는 분야

개선 할 수있는 몇 가지 영역:

  1. 트렌드 판단을 추가하고, 손실을 피하기 위해 주요 트렌드를 따라 전환만 거래합니다.
  2. 자본 사용 효율을 최적화하기 위해 첫 번째 항목에 더 큰 크기와 그리드 항목에 더 작은 크기를 고려하십시오.
  3. 최적의 매개 변수를 찾기 위해 다른 매개 변수 조합을 테스트하거나
  4. 자동 매개 변수 최적화를 달성하기 위해 고급 플랫폼에 기계 학습을 통합합니다.

요약

이중 하위 반전 평균 반전 DCA 그리드 전략은 가격 패턴, 지표 기술 및 그리드 거래를 통합합니다. 정확한 타이밍, 제어 가능한 비용 기반 및 드라우다운 보호가 있습니다. 여전히 최적화 할 여지가 있으며 조사 할 가치가 있습니다. 올바르게 구성되면 범위 제한 시장에서 좋은 결과를 얻을 수 있습니다.


/*backtest
start: 2024-02-12 00:00:00
end: 2024-02-19 00:00:00
period: 3m
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/
// © cherepanovvsb

//@version=5
strategy("Reversal (only long)", overlay=true, margin_long=1, margin_short=1,initial_capital=1000,commission_type = strategy.commission.percent,commission_value =0.1,currency='USD', process_orders_on_close=true)
plotshape(low == low[1], style=shape.triangleup, location=location.belowbar, color=color.blue, title="1 Setup")
plotshape(low == low[1] and low[1]==low[2], style=shape.triangleup, location=location.belowbar, color=color.red, title="Triple Setup")

ATRlenght   = input.int(title="ATR length for taking profit", defval=14, group="Strategy Settings")
rewardMultiplier= input.int(title="ATR multiplier", defval=5, group="Strategy Settings")
Volatility_length=input.int(title='Volatility length',defval=5,group="Strategy Settings")
Volatility_multiplier=input.float(title='Volatility multiplier',defval=0.5,step=0.1, group="Strategy Settings")
Candles_to_wait=input.int(title='How many candles to wait after placing orders grid?',defval=4,group="Strategy Settings")

// Get ATR
atr1 = ta.atr(ATRlenght)

//Get volatility values (not ATR) 
float result = 0
for i = 0 to Volatility_length
	result+=high[i]-low[i]
volatility=result*Volatility_multiplier/Volatility_length

//Validate entrance points
validlow =  low [2]== low[1] and not na(atr1) 
validlong = validlow and strategy.position_size == 0  and low[1]<low


// Calculate SL/TP
longStopPrice = low[1]-syminfo.mintick
longStopDistance = close - longStopPrice
longTargetPrice = close + (longStopDistance * rewardMultiplier)
strategy.initial_capital = 50000
//Assign all variables
var tradeStopPrice = 0.0
var tradeTargetPrice = 0.0
var point1=0.0
var point2=0.0
var point3=0.0
var point4=0.0
var contracts = int(strategy.initial_capital/close)/4
if validlong 
    tradeStopPrice := longStopPrice
    tradeTargetPrice := longTargetPrice
    point1:=low[1]+volatility
    point2:=low[1]+volatility*0.75
    point3:=low[1]+volatility*0.5
    point4:=low[1]+volatility*0.25

strategy.entry ("Long1", strategy.long,limit=point1,qty=contracts, when=validlong)
strategy.entry ("Long2", strategy.long,limit=point2,qty=contracts, when=validlong)
strategy.entry ("Long3", strategy.long,limit=point3,qty=contracts, when=validlong)
strategy.entry ("Long4", strategy.long,limit=point4,qty=contracts, when=validlong)

stopcondition = ta.barssince(validlong) == Candles_to_wait

strategy.cancel("Long1",when=stopcondition)
strategy.cancel("Long2",when=stopcondition)
strategy.cancel("Long3",when=stopcondition)
strategy.cancel("Long4",when=stopcondition)
    
strategy.exit(id="Long Exit", limit=tradeTargetPrice, stop=tradeStopPrice, when=strategy.position_size > 0)

plot(strategy.position_size != 0 or validlong ? tradeStopPrice : na, title="Trade Stop Price", color=color.red, style=plot.style_linebr, linewidth=3)
plot(strategy.position_size != 0 or validlong ? tradeTargetPrice : na, title="Trade Target Price", color=color.green, style=plot.style_linebr, linewidth=3)

plot(strategy.position_size != 0? point1 : na, title="Long1", color=color.green, style=plot.style_linebr, transp=0)
plot(strategy.position_size != 0? point2 : na, title="Long2", color=color.green, style=plot.style_linebr, transp=0)
plot(strategy.position_size != 0? point3 : na, title="Long3", color=color.green, style=plot.style_linebr, transp=0)
plot(strategy.position_size != 0? point4 : na, title="Long4", color=color.green, style=plot.style_linebr, transp=0)



더 많은