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

여러 매개 변수 스토카스틱 지능 트렌드 거래 전략

저자:차오장, 날짜: 2025-01-06 16:09:58
태그:스톡EMASMARRSLTPPOP

img

전반적인 설명

이 전략은 스토카스틱 오시레레이터 (Stochastic Oscillator) 를 기반으로 하는 지능형 거래 시스템이다. 동적 트렌드 식별, 여러 신호 확인, 지능형 리스크 관리 기능을 결합하여 자동으로 시장 과잉 구매/ 과잉 판매 조건을 식별하고 거래를 실행한다. 이 전략은 시장 조건을 시각적으로 표시하기 위해 컬러 코딩 시스템을 사용하며, 트렌드 확인을 위해 여러 기간 이동 평균 (EMA) 을 통합하고 유연한 스톱 로스 및 영업 취득 설정을 제공합니다.

전략 원칙

이 전략의 핵심은 스토카스틱 오시레일러와 여러 이동 평균 시스템 조합에 기반합니다. K 값이 미리 설정된 과잉 구매 / 과잉 판매 수준 (93/15) 또는 중간 수준 (40) 을 통과 할 때 거래 신호가 생성됩니다. 시스템은 색상의 변화를 통해 시장 조건을 시각적으로 표시합니다 (붉은 색은 잠재적 인 하락을 나타냅니다. 녹색은 잠재적 인 상승을 나타냅니다. 파란색은 중립을 나타냅니다). 또한 트렌드 확인을 위해 20, 50, 100, 200 기간 기하급수적 이동 평균 (EMA) 을 통합합니다. 전략에는 1:1, 1:4 및 1:8과 같은 다른 위험 / 보상 비율을 지원하는 지능형 리스크 관리 시스템이 포함되어 있습니다.

전략적 장점

  1. 명확하고 직관적인 신호 시스템, 색상 코딩으로 시장 상태를 빠르게 식별
  2. 여러 신호 확인 메커니즘은 잘못된 신호 위험을 줄입니다.
  3. 유연한 리스크 관리 시스템, 사용자 정의 가능한 리스크 보상 비율을 지원합니다.
  4. 트렌드 확인을 위한 여러 기간 이동 평균의 통합
  5. 자동화 된 스톱 로스 및 리프터 설정은 수동 작동 위험을 줄입니다.
  6. 명확한 코드 구조, 유지 및 최적화 쉬운

전략 위험

  1. 다양한 시장에서 빈번한 거래 신호를 생성 할 수 있습니다.
  2. 고정된 과잉 구매/ 과잉 판매 기준은 모든 시장 조건에 적합하지 않을 수 있습니다.
  3. 이동 평균 시스템은 변동성 시장에서 뒤쳐질 수 있습니다.
  4. 위험 통제를 위해 적절한 스톱 로스 설정을 요구합니다. 솔루션은: 신호 필터링 메커니즘 추가, 동적 임계 조정, 이동 평균 매개 변수 최적화, 엄격한 스톱 손실 실행

전략 최적화 방향

  1. 시장의 변동성에 따라 과소 구매/ 과소 판매 수준을 동적으로 조정하기 위한 적응성 있는 기준 시스템을 도입
  2. 신호 확인을 위한 부피 표시기를 추가합니다.
  3. 거짓 신호를 줄이기 위한 지능형 신호 필터링 메커니즘 개발
  4. 트렌드 판단 정확성을 향상시키기 위해 이동 평균 매개 변수를 최적화
  5. 매개 변수 최적화를 위한 기계 학습 알고리즘을 도입
  6. 유출 제어 메커니즘 추가

요약

이 전략은 스토카스틱 오시레이터, 이동 평균 시스템 및 지능적인 리스크 관리 등을 결합하여 포괄적인 거래 시스템을 구축합니다. 전략 디자인은 실용성과 작동성을 강조하며, 다양한 리스크 선호도를 가진 거래자에게 적합합니다. 지속적인 최적화 및 개선으로 전략은 다양한 시장 조건에서 안정적인 성능을 유지할 수 있습니다.


/*backtest
start: 2024-12-06 00:00:00
end: 2025-01-04 08:00:00
period: 4h
basePeriod: 4h
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/
// © petrusvorenusperegrinus

//██████╗ ███████╗████████╗██████╗ ██╗   ██╗███████╗                             
//██╔══██╗██╔════╝╚══██╔══╝██╔══██╗██║   ██║██╔════╝                             
//██████╔╝█████╗     ██║   ██████╔╝██║   ██║███████╗                             
//██╔═══╝ ██╔══╝     ██║   ██╔══██╗██║   ██║╚════██║                             
//██║     ███████╗   ██║   ██║  ██║╚██████╔╝███████║                             
//╚═╝     ╚══════╝   ╚═╝   ╚═╝  ╚═╝ ╚═════╝ ╚══════╝                             
                                                                               
//██╗   ██╗ ██████╗ ██████╗ ███████╗███╗   ██╗██╗   ██╗███████╗                  
//██║   ██║██╔═══██╗██╔══██╗██╔════╝████╗  ██║██║   ██║██╔════╝                  
//██║   ██║██║   ██║██████╔╝█████╗  ██╔██╗ ██║██║   ██║███████╗                  
//╚██╗ ██╔╝██║   ██║██╔══██╗██╔══╝  ██║╚██╗██║██║   ██║╚════██║                  
// ╚████╔╝ ╚██████╔╝██║  ██║███████╗██║ ╚████║╚██████╔╝███████║                  
//  ╚═══╝   ╚═════╝ ╚═╝  ╚═╝╚══════╝╚═╝  ╚═══╝ ╚═════╝ ╚══════╝                  
                                                                               
//██████╗ ███████╗██████╗ ███████╗ ██████╗ ██████╗ ██╗███╗   ██╗██╗   ██╗███████╗
//██╔══██╗██╔════╝██╔══██╗██╔════╝██╔════╝ ██╔══██╗██║████╗  ██║██║   ██║██╔════╝
//██████╔╝█████╗  ██████╔╝█████╗  ██║  ███╗██████╔╝██║██╔██╗ ██║██║   ██║███████╗
//██╔═══╝ ██╔══╝  ██╔══██╗██╔══╝  ██║   ██║██╔══██╗██║██║╚██╗██║██║   ██║╚════██║
//██║     ███████╗██║  ██║███████╗╚██████╔╝██║  ██║██║██║ ╚████║╚██████╔╝███████║
//╚═╝     ╚══════╝╚═╝  ╚═╝╚══════╝ ╚═════╝ ╚═╝  ╚═╝╚═╝╚═╝  ╚═══╝ ╚═════╝ ╚══════╝

//@version=6
strategy("CM Stochastic POP Method 3", shorttitle="CM_Stochastic POP_M3", overlay=true)

// Stochastic Settings
length = input.int(14, "Stochastic Length", minval=1)
smoothK = input.int(5, "Smooth K", minval=1)

// Risk:Reward Settings
use_rr = input.bool(true, "Use Risk:Reward Ratio")
use_sl = input.bool(true, "Use Stop Loss")  // New input for Stop Loss toggle
rr_options = input.string("1:1", "Risk:Reward Ratio", options=["1:1", "1:4", "1:8"])
stop_percent = input.float(1.0, "Stop Loss (%)", minval=0.1, step=0.1)

// Convert selected R:R ratio to number
get_rr_multiplier(rr) =>
    switch rr
        "1:1" => 1.0
        "1:4" => 4.0
        "1:8" => 8.0
        => 1.0  // default case
rr_ratio = get_rr_multiplier(rr_options)

// Fixed Level Settings
upperLine = 93.0  // Fixed sell level
midLine = 40.0    // Buy/Sell level
lowerLine = 15.0  // Fixed buy level

// EMA Settings
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema100 = ta.ema(close, 100)
ema200 = ta.ema(close, 200)

// Calculate Stochastic with smoothing
k = ta.sma(ta.stoch(close, high, low, length), smoothK)

// Dynamic color based on K value
kColor = k >= upperLine ? color.red :    // Above 93 -> Red
         k <= lowerLine ? color.green :   // Below 15 -> Green
         k <= midLine ? color.green :     // Below 40 -> Green
         color.blue                       // Between 40-93 -> Blue

// Buy Signals:
longCondition1 = ta.crossover(k, lowerLine)   // Cross above 15
longCondition2 = ta.crossover(k, midLine)     // Cross above 40

// Sell Signals:
shortCondition1 = ta.crossunder(k, upperLine) // Cross below 93
shortCondition2 = ta.crossunder(k, midLine)   // Cross below 40

calc_tp_sl(entry_price, is_long) =>
    sl_distance = entry_price * (stop_percent / 100)
    sl = is_long ? entry_price - sl_distance : entry_price + sl_distance
    tp_distance = sl_distance * rr_ratio
    tp = is_long ? entry_price + tp_distance : entry_price - tp_distance
    [sl, tp]

// Long entries
if (longCondition1)
    if (use_rr)
        [sl, tp] = calc_tp_sl(close, true)
        strategy.entry("Long_15", strategy.long)
        if (use_sl)
            strategy.exit("Exit_15", "Long_15", stop=sl, limit=tp)
        else
            strategy.exit("Exit_15", "Long_15", limit=tp)
    else
        strategy.entry("Long_15", strategy.long)

if (longCondition2)
    if (use_rr)
        [sl, tp] = calc_tp_sl(close, true)
        strategy.entry("Long_40", strategy.long)
        if (use_sl)
            strategy.exit("Exit_40", "Long_40", stop=sl, limit=tp)
        else
            strategy.exit("Exit_40", "Long_40", limit=tp)
    else
        strategy.entry("Long_40", strategy.long)

// Short entries
if (shortCondition1)
    if (use_rr)
        [sl, tp] = calc_tp_sl(close, false)
        strategy.entry("Short_93", strategy.short)
        if (use_sl)
            strategy.exit("Exit_93", "Short_93", stop=sl, limit=tp)
        else
            strategy.exit("Exit_93", "Short_93", limit=tp)
    else
        strategy.entry("Short_93", strategy.short)

if (shortCondition2)
    if (use_rr)
        [sl, tp] = calc_tp_sl(close, false)
        strategy.entry("Short_40", strategy.short)
        if (use_sl)
            strategy.exit("Exit_40", "Short_40", stop=sl, limit=tp)
        else
            strategy.exit("Exit_40", "Short_40", limit=tp)
    else
        strategy.entry("Short_40", strategy.short)

// Plot EMAs
plot(ema20, title="EMA 20", color=color.blue, linewidth=1, force_overlay = true)
plot(ema50, title="EMA 50", color=color.yellow, linewidth=1, force_overlay = true)
plot(ema100, title="EMA 100", color=color.orange, linewidth=1, force_overlay = true)
plot(ema200, title="EMA 200", color=color.purple, linewidth=1, force_overlay = true)

// Plot Stochastic line 
plot(k, title="Stochastic", color=kColor, linewidth=2)

// Plot reference lines 
hline(100, title="100 Line", color=color.white, linestyle=hline.style_solid)
hline(upperLine, title="93 Line", color=color.red, linestyle=hline.style_solid)
hline(midLine, title="40 Line", color=color.green, linestyle=hline.style_dashed)
hline(lowerLine, title="15 Line", color=color.green, linestyle=hline.style_solid)
hline(0, title="0 Line", color=color.white, linestyle=hline.style_solid)

관련

더 많은