전략 을 따르는 단순 경향

저자:차오장, 날짜: 2023-09-14 18:01:07
태그:

전략 논리

이 전략은 이동 평균과 허일 곡선을 결합하여 시장 트렌드 방향을 파악하고 트렌드를 추적합니다.

가장 중요한 논리는

  1. 맥긴리 다이내믹 MA는 전체적인 트렌드 방향을 판단합니다.

  2. 선체 곡선 크로스오버는 특정 긴/단 신호를 생성

  3. 신호 검증을 위한 선택적 확인 지표

  4. 스톱 로스 및 수익 취득 원칙을 통한 리스크 관리

  5. 배구 곡선이 뒤집어지면 포지션을 닫습니다.

이 전략은 개별적인 주관적 영향을 최소화하여 추세에 따른 것을 기계적으로 체계화하는 것을 목표로합니다.

장점

  • MA는 전반적인 방향을 판단하고 유연한 확정

  • 선체 상공 장/단 신호

  • 규칙 기반의 위험 관리 는 오류 를 최소화 한다

위험성

  • 매개 변수 조정 및 필터는 최적화를 필요로 합니다

  • 트렌드 정확성 의 불확실성

  • 선체 곡선 후속 신호에 유연하다

요약

이 전략은 시장 리듬에 맞추어 트렌드 다음 거래를 체계화하려고 노력합니다. 그러나 매개 변수 최적화와 지표 제한은 안정성을 위해 신중을 기해야 합니다.


/*backtest
start: 2023-08-14 00:00:00
end: 2023-09-13 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © Milleman
//@version=4
strategy("Millebot", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital=100000, commission_type=strategy.commission.percent, commission_value=0.04)

// Risk management settings
Spacer2 = input(false, title="=== Risk management settings ===")
Risk = input(1.0, title="% Risk")/100
RRR = input(2,title="Risk Reward Ratio",step=0.1,minval=0,maxval=20)
SL = input(5,title="StopLoss %",step=0.25)/100

// Baseline : McGinley Dynamic
Spacer3 = input(false, title="=== Baseline - Switch L/S ===")
McG_Source = input(close, title="McGinley source")
McG_length = input(50, title=" McG length", minval=1)
McG_LS_Switch = 0.0
McG_LS_Switch := na(McG_LS_Switch[1]) ? ema(McG_Source, McG_length) : McG_LS_Switch[1] + (McG_Source - McG_LS_Switch[1]) / (McG_length * pow(McG_Source/McG_LS_Switch[1], 4))

// Confirmation indicator
Spacer4 = input(false, title="=== Confirmation indicator ===")
C1_Act = input(false, title=" Confirmation indicator Activation")
C1_src = input(ohlc4, title="Source")
C1_len = input(5,title="Length")
C1 = sma(C1_src,C1_len)

// Entry indicator : Hull Moving Average
Spacer5 = input(false, title="=== Entry indicator configuration ===")
src = input(ohlc4, title="Source")
length = input(50,title="Length HMA")
HMA = ema(wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length))),1)

//VARIABLES MANAGEMENT
TriggerPrice = 0.0, TriggerPrice := TriggerPrice[1]
TriggerxATR = 0.0, TriggerxATR := TriggerxATR[1]
SLPrice = 0.0, SLPrice := SLPrice[1], TPPrice = 0.0, TPPrice := TPPrice[1]
isLong = false, isLong := isLong[1], isShort = false, isShort := isShort[1]

//LOGIC
GoLong = crossover(HMA[0],HMA[1]) and strategy.position_size == 0.0 and (McG_LS_Switch/McG_LS_Switch[1] > 1) and (not C1_Act or C1>C1[1])
GoShort = crossunder(HMA[0],HMA[1]) and strategy.position_size == 0.0 and (McG_LS_Switch/McG_LS_Switch[1] < 1) and (not C1_Act or C1<C1[1])

//FRAMEWORK

//Long
if GoLong and not GoLong[1]
    isLong := true, TriggerPrice := close
    TPPrice := TriggerPrice * (1 + (SL * RRR))
    SLPrice := TriggerPrice * (1-SL)
    Entry_Contracts = strategy.equity * Risk / ((TriggerPrice-SLPrice)/TriggerPrice) / TriggerPrice //Het aantal contracts moet meegegeven worden. => budget * risk / %afstand tot SL / prijs = aantal contracts
    strategy.entry("Long", strategy.long, comment=tostring(round(TriggerxATR/TriggerPrice*1000)), qty=Entry_Contracts)
    strategy.exit("TPSL","Long", limit=TPPrice, stop=SLPrice, qty_percent = 100)
if isLong and crossunder(HMA[0],HMA[1])
    strategy.close_all(comment="TrendChange")
    isLong := false

//Short
if GoShort and not GoShort[1]
    isShort := true, TriggerPrice := close
    TPPrice := TriggerPrice * (1 - (SL * RRR))
    SLPrice := TriggerPrice * (1 + SL)
    Entry_Contracts = strategy.equity * Risk / ((SLPrice-TriggerPrice)/TriggerPrice) / TriggerPrice //Het aantal contracts moet meegegeven worden. => budget * risk / %afstand tot SL / prijs = aantal contracts
    strategy.entry("Short", strategy.short, comment=tostring(round(TriggerxATR/TriggerPrice*1000)), qty=Entry_Contracts)
    strategy.exit("TPSL","Short", limit=TPPrice, stop=SLPrice)//, qty_percent = 100)
if isShort and crossover(HMA[0],HMA[1])
    strategy.close_all(comment="TrendChange")
    isShort := false

//VISUALISATION
plot(McG_LS_Switch,color=color.blue,title="Baseline")
plot(C1_Act?C1:na,color=color.white,title="confirmation Indicator")
plot(HMA, color=(HMA[0]>HMA[1]? color.green : color.red), linewidth=4, transp=40, title="Entry Indicator")
plot(isLong or isShort ? TPPrice : na, title="TakeProfit", color=color.green, style=plot.style_linebr)
plot(isLong or isShort ? SLPrice : na, title="StopLoss", color=color.red, style=plot.style_linebr)
bgcolor(isLong[1] and cross(low,SLPrice) and low[1] > SLPrice ? color.yellow : na, transp=75, title="SL Long")
bgcolor(isShort[1] and cross(high,SLPrice) and high[1] < SLPrice ? color.yellow : na, transp=75, title="SL Short")

더 많은