리소스 로딩... 로딩...

K 연속 촛불 황소 곰 전략

저자:차오장, 날짜: 2024-05-17 13:54:06
태그:EMAATR

img

전반적인 설명

이 전략은 연속적으로 상향 또는 하향 촛불의 수에 따라 황소 또는 곰 시장을 결정하고 그에 따라 거래를 수행합니다. 종료 가격이 이전 촛불이 지정된 시간 동안 닫는 것보다 연속적으로 높을 때, 그것은 긴 위치에 들어갑니다. 종료 가격이 이전 촛불이 지정된 시간 동안 닫는 것보다 연속적으로 낮을 때, 그것은 짧은 위치에 들어갑니다. 스톱 손실과 수익을 설정하고 수익을 보호하기 위해 후속 스톱 메커니즘을 도입합니다.

전략 원칙

  1. 연속적인 상승 및 하락 조건이 충족되는 수를 기록합니다. 종료가 이전 촛불보다 높으면 상승 횟수가 1로 증가하고 하락 횟수가 0으로 다시 설정됩니다. 종료가 낮다면 하락 횟수가 1로 증가하고 하락 횟수가 0으로 다시 설정됩니다. 그렇지 않으면 두 횟수 모두 0으로 다시 설정됩니다.
  2. 상승률이 정해진 숫자 k에 도달하면, 지각 손실을 가진 긴 지점에 들어가서 이윤을 취합니다.
  3. 긴 포지션의 경우 입점 후 가장 높은 가격을 기록합니다. 가장 높은 가격이 입점 가격을 iTGT 최소 가격 변동 단위로 초과하고 닫는 것이 가장 높은 가격보다 iPcnt% 낮아지면 포지션을 닫습니다.
  4. 하락률이 지정된 숫자 k2에 도달하면, 손해를 멈추고 수익을 취하는 짧은 포지션을 입력합니다.
  5. 짧은 포지션의 경우 입상 후 가장 낮은 가격을 기록합니다. 가장 낮은 가격이 iTGT 최소 가격 변동 단위로 입상 가격보다 낮고 IPcnt%로 가장 낮은 가격보다 가까운 리바운드가 발생하면 포지션을 닫습니다.

전략적 장점

  1. 단순하고 이해하기 쉬운, 명확한 논리로 촛불의 연속성에 기초한 거래 결정을 내립니다.
  2. 가격이 유리한 방향으로 일정 거리를 이동 한 후 수익을 적극적으로 보호하기 위해 후속 중지 메커니즘을 도입합니다.
  3. 스톱 로스를 설정하고 이윤을 취하면 위험을 효과적으로 통제하고 이윤을 확보할 수 있습니다.
  4. 다른 시장과 거래 스타일에 맞게 조정 가능한 매개 변수

전략 위험

  1. 불안정한 시장에서 포지션의 빈번한 개장과 폐쇄는 큰 미끄러짐 비용을 초래할 수 있습니다.
  2. 연속 촛불 숫자의 판단은 시장 소음에 의해 영향을 받으며, 이는 빈번한 신호로 이어질 수 있습니다.
  3. 고정된 스톱 로즈 및 수익 취득 수준은 시장 변동성 변화에 적응하지 못할 수 있습니다.

전략 최적화 방향

  1. 추세의 힘과 방향을 판단하는 데 도움이 되는 이동 평균과 변동성과 같은 더 많은 기술적 인 지표를 도입하십시오.
  2. ATR에 기반한 인회율의 조정과 같은 후속 정지 (trailing stop) 에 대한 트리거 조건을 최적화합니다.
  3. 더 역동적인 스톱 로스 및 트래일링 스톱 및 단계적 스톱 로프와 같은 수익을 취하는 방법을 채택하십시오.
  4. 다양한 시장과 도구에 최적의 조합을 찾기 위해 매개 변수를 최적화합니다.

요약

이 전략은 촛불의 연속성을 통해 황소와 곰 트렌드를 포착하고 있으며 위험을 제어하기 위해 스톱 로스를 설정하고 이익을 취합니다. 트레일링 스톱의 도입은 이익을 더 잘 보호 할 수 있습니다. 그러나 불안정한 시장에서 빈번한 신호를 생성 할 수 있으므로 신호 신뢰성을 더 이상 최적화해야합니다. 또한, 스톱 로스의 설정 및 이익 취득은 역동적인 시장 변화에 적응하기 위해 더 유연할 수 있습니다. 전반적으로 전략은 트렌딩 시장에 적합한 간단하고 명확한 아이디어를 가지고 있지만 여전히 최적화 할 여지가 있습니다.


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

//@version=5
strategy("K Consecutive Candles 數來寶V2", max_bars_back=300, overlay=true)

// 定義用戶輸入
k = input.int(3, title="Number of Consecutive Candles for Long", minval=1)
k2 = input.int(3, title="Number of Consecutive Candles for Short", minval=1)
stopLossTicks = input.int(500, title="Stop Loss (Ticks)")
takeProfitTicks = input.int(500, title="Take Profit (Ticks)")
iTGT = input.int(200,"iTGT")  // 移動停利點
iPcnt = input.int(50,"iPcnt")  // 移動停利%

var float TrailValue = 0
var float TrailExit = 0
var float  vMP = 0

BarsSinceEntry = ta.barssince(strategy.position_size == 0)

vMP := strategy.position_size

// 创建一个包含键值对的字典
addArrayData(type, value) =>
    alert_array = array.new_string()
    array.push(alert_array, '"timenow": ' + str.tostring(timenow))
    array.push(alert_array, '"seqNum": ' + str.tostring(value))
    array.push(alert_array, '"type": "' + type + '"')
    alertstring = '{' + array.join(alert_array,', ') + '}'


// 定義條件變量
var int countLong = 0  // 記錄連續多頭條件成立的次數
var int countShort = 0 // 記錄連續空頭條件成立的次數

// 計算連續大於或小於前一根的收盤價格的次數
if close > close[1]
    countLong += 1
    countShort := 0 // 重置空頭計數
else if close < close[1]
    countShort += 1
    countLong := 0 // 重置多頭計數
else
    countLong := 0
    countShort := 0

// 開設多頭倉位條件
if countLong >= k
    strategy.entry("Long Entry", strategy.long)
    strategy.exit("Exit Long", "Long Entry", loss=stopLossTicks, profit=takeProfitTicks)
    

if vMP>0
    TrailValue := ta.highest(high,BarsSinceEntry)
    TrailExit := TrailValue - iPcnt*0.01*(TrailValue - strategy.position_avg_price)
    if TrailValue > strategy.position_avg_price + iTGT * syminfo.minmove/syminfo.pricescale and close < TrailExit
        
        strategy.close("Long Entry", comment = "Trl_LX"+ str.tostring(close[0]))
// 開設空頭倉位條件
if countShort >= k2
    strategy.entry("Short Entry", strategy.short)
    strategy.exit("Exit Short", "Short Entry", loss=stopLossTicks, profit=takeProfitTicks)

if vMP<0    
    TrailValue := ta.lowest(low,BarsSinceEntry)
    TrailExit := TrailValue - iPcnt*0.01*(TrailValue - strategy.position_avg_price)
    if TrailValue < strategy.position_avg_price - iTGT * syminfo.minmove/syminfo.pricescale and close > TrailExit
        
        strategy.close("short60", comment = "Trl_SX"+ str.tostring(close[0]))






관련

더 많은