K-라인 연속숫자 황소와 곰 판단 전략

EMA ATR
생성 날짜: 2024-05-17 13:54:06 마지막으로 수정됨: 2024-05-17 13:54:06
복사: 1 클릭수: 682
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

K-라인 연속숫자 황소와 곰 판단 전략

개요

이 전략은 K 선의 연속적인 상승 또는 하락 수를 기반으로 황소 시장 또는 곰 시장을 판단하고, 이에 따라 거래를 한다. 종결 가격이 연속적으로 이전 K 선의 종결 가격보다 높은 수를 달성하면 다단위 포지션을 개설하고, 종결 가격이 연속적으로 이전 K 선의 종결 가격보다 낮은 수를 달성하면 공백 상위 포지션을 개설한다.

전략 원칙

  1. 연속적으로 다중 헤드 및 공허 헤드 조건이 이루어지는 횟수를 기록하십시오. 종점값이 이전 K선보다 높다면, 다중 헤드 카운트 + 1, 공허 헤드 카운트가 0으로 재설정됩니다. 종점값이 이전 K선보다 낮다면, 공허 헤드 카운트 + 1, 다중 헤드 카운트가 0으로 재설정됩니다. 그렇지 않으면 두 개의 카운트가 0으로 재설정됩니다.
  2. 다중 헤드 카운트가 지정된 k에 도달하면 다중 헤드 포지션을 열고, 스톱로스 및 스톱을 설정한다.
  3. 다중 상점 포지션의 경우, 포지션을 열고 나서 가장 높은 가격을 기록합니다. 최고 가격은 포지션을 열 때 iTGT의 최소 변동 단위를 초과하고, 폐쇄 가격은 최고 가격 이하의 iPcnt%로 되돌릴 때, 평점 포지션 ᅳ.
  4. 공백 수치가 지정된 k2에 도달하면 공백 포지션을 열고, 스톱로즈와 스톱을 설정한다.
  5. 공수 포지션의 경우, 포지션 개시 후 최저 가격을 기록합니다. 최저 가격이 포지션 개시 가격 iTGT의 최소 변동 단위보다 낮고, 폐쇄 가격이 최저 가격 상위 iPcnt%로 반발하면, 평지 포지션 △

전략적 이점

  1. 간단하고 이해하기 쉽고, K선 연속성을 기반으로 거래 결정을 내리고, 논리가 명확하다.
  2. 가격의 유리한 방향으로 운행된 후 수익을 적극적으로 보호하기 위해 이동식 차단 장치가 도입되었다.
  3. 스톱로스 및 스톱의 설정은 위험을 효과적으로 제어하고 수익을 잠금화할 수 있다.
  4. 다른 시장과 거래 스타일에 적합합니다.

전략적 위험

  1. 불안한 상황에서는 빈번하게 공백을 두는 것이 큰 슬라이드 포인트 비용을 초래할 수 있다.
  2. 연속 K선 수에 대한 판단은 시장 소음에 영향을 받으며, 빈번한 신호가 발생할 수 있다.
  3. 고정된 스톱 로즈와 스톱 지점은 시장의 변동성에 적응하지 못할 수 있다.

전략 최적화 방향

  1. 트렌드의 강도와 방향을 판단하는 데 도움이 되는 평균선, 변동률 등과 같은 더 많은 기술적 지표를 도입한다.
  2. ATR 적응에 따라 회수율을 조정하는 것과 같은 이동식 정지 촉발 조건을 최적화하십시오.
  3. 더 역동적인 스톱 및 스톱 방법을 사용하십시오. 예를 들어, 추적 스톱, 계단식 스톱 등.
  4. 다양한 시장과 품종에 맞는 최적의 조합을 찾기 위해 매개 변수를 최적화하십시오.

요약하다

이 전략은 K 선의 연속성을 통해 황금 고리 트렌드를 포착하고, 동시에 위험을 제어하기 위해 손해 중지 을 설정한다. 이동식 을 도입하면 이익을 더 잘 보호할 수 있다. 그러나, 흔들리는 시장에서 자주 신호가 발생할 수 있어 신호의 신뢰성을 더 이상 최적화할 필요가 있다. 또한, 손해 중지 의 설정은 시장의 역동적인 변화에 적응하기 위해 더 유연할 수 있다. 종합적으로 볼 때, 이 전략의 아이디어는 간단하고 명확하며, 트렌디 시장에 적합하지만 여전히 최적화 할 여지가 있다.

전략 소스 코드
/*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]))