지표 기반 손절매 및 이익 실현 전략


생성 날짜: 2023-11-10 11:28:06 마지막으로 수정됨: 2023-11-10 11:28:06
복사: 1 클릭수: 728
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

지표 기반 손절매 및 이익 실현 전략

개요

이 전략은 이동 평균을 거래 신호로 사용하여 사용자 정의한 스톱 스톱 비율과 결합하여 전체적인 지표 구동형 스톱 스톱 전략을 구현합니다. 이 전략은 자동으로 입문, 손실, 스톱을 수행 할 수 있으며, 인적 개입이 필요하지 않습니다.

전략 원칙

이 전략의 핵심 논리는 다음과 같습니다.

  1. 3주기 SMA를 거래 신호로 사용하며, SMA 상단에서 0을 넘으면 더하고, SMA 하단에서 0을 넘으면 공백합니다.

  2. 사용자 입장 후, 사용자 정의한 스톱 손실 비율과 스톱 스 비율을 설정할 수 있습니다.

  3. 입점 가격과 사용자 설정에 따라 자동으로 스톱 라인을 설정합니다.

  4. 입점 가격과 사용자 설정에 따라 자동으로 정지선을 설정합니다.

  5. 가격이 스톱 라인을 만지면 자동으로 스톱; 가격이 스톱 라인을 만지면 자동으로 스톱;

  6. 정지 주문을 자동으로 취소합니다.

구체적으로, 전략은 sma 함수를 통해 3주기의 이동 평균을 계산하고, 그 값을 ma 변수에 부여한다.

다음으로 다중 입구선 long를 계산하고, 그 값은 ma 더하기 ma의 백분율인 lo。lo는 사용자가 조정할 수 있는 변수이며, 여러 번에 입구선 이동량을 나타냅니다。

ma가 0을 입으면, 더하기 시작을 나타냅니다. strategy.entry 함수를 통해 더하기 입시, 입시 가격은 long。

동시에, 중지 및 정지 가격을 설정하십시오. 정지 가격은 출입 가격으로 출입 가격의 sl%를 니다. sl는 사용자가 조정할 수 있는 파라미터를 나타냅니다. 정지 가격은 출입 가격에 출입 가격의 tp%를 더합니다.

strategy.entry 함수를 통해 스톱로스 명령과 스톱 ?? 명령을 각각 설정한다. 가격이 스톱로스 라인을 만지면 자동으로 스톱; 가격이 스톱 ?? 라인을 만지면 자동으로 스톱한다.

포지션 평준화 후, strategy.cancel 함수를 통해 자동으로 스톱로스 스 주문을 취소한다.

전략적 이점

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 자동화 수준이 높고, 인간의 개입이 필요없고, 자동 거래에 적합합니다.

  2. 사용자 정의 가능한 Stop Loss Stop Stop 비율, 위험 제어;

  3. 거래 신호는 지표에서 나오고, 가짜 돌파구를 피합니다.

  4. “비즈얼 스톱 스톱 손실, 직관적으로 명확하다.

  5. 전략의 논리는 명확하고 간단하며, 구현을 이해하기 쉽습니다.

위험과 해결책

이 전략에는 몇 가지 위험도 있습니다.

  1. 지표가 잘못된 신호를 생성할 위험이 있다. 해결책은 지표가 안정적이고 신뢰할 수 있도록 파라미터를 최적화하는 것이다.

  2. 스톱 스톱 비율이 부합적으로 설정되어 너무 완만하거나 너무 급진적일 수 있습니다. 해결책은 상이한 시장에 맞게 스톱 스톱 매개 변수를 조정하는 것입니다.

  3. 브레이크 엔트리는 쉽게 잡힐 수 있다. 해결책은 트렌드, 수량 지표와 같은 필터링 엔트리 신호를 결합하는 것이다.

  4. 철회할 가능성이 크다. 해결책은 포지션 기준을 낮추거나, 또는 스톱로스를 추적하는 것이다.

전략 최적화 방향

이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.

  1. 이동 평균의 파라미터를 최적화하여 더 신뢰할 수 있도록 하는 것;

  2. 입시 조건을 최적화하여 가짜 돌파구를 방지하고, 가격확인을 추가할 수 있습니다.

  3. 역동적인 상쇄, 추적 상쇄 등으로 상쇄 전략을 최적화할 수 있다.

  4. 자금 관리를 최적화하고, 포지션 기준을 조정하고, 1인당 위험을 낮추는 것.

  5. 필터링 시점을 최적화하여 트렌드와 저항 지점을 지원하는 지표와 결합하십시오.

  6. 수익성을 높이기 위해 피라미딩에 가입하십시오.

  7. 특정 품종에 대한 파라미터 최적화.

요약하다

이 전략은 지표가동형의 중지 손실 전략으로, 거래 자동화, 위험 제어의 장점을 가지고 있으며, 양적 거래에 적합합니다. 그러나 지표 변수, 입시 필터, 중지 손실 전략, 자금 관리 등을 최적화해야하는 방향도 있습니다.

전략 소스 코드
/*backtest
start: 2023-01-01 00:00:00
end: 2023-11-09 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("example for panel signals", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)
//https://www.tradingview.com/script/m2a04xmb-noro-s-shiftma-tp-sl-strategy/
//Settings
lo = input(-5.0, title = "Long-line, %")
tp = input(5.0, title = "Take-profit")
sl = input(2.0, title = "Stop-loss")

//SMA
ma = sma(ohlc4, 3)
long = ma + ((ma / 100) * lo)

//Orders
avg = strategy.position_avg_price
if ma > 0
    strategy.entry("Long", strategy.long, limit = long)
    strategy.entry("Take", strategy.short, 0, limit = avg + ((avg / 100) * tp))
    strategy.entry("Stop", strategy.short, 0, stop = avg - ((avg / 100) * sl))
    
//Cancel order
if strategy.position_size == 0
    strategy.cancel("Take")
    strategy.cancel("Stop")

//Lines
plot(long, offset = 1, color = color.black, transp = 0)
take = avg != 0 ? avg + ((avg / 100) * tp) : long + ((long / 100) * tp)
stop = avg != 0 ? avg - ((avg / 100) * sl) : long - ((long / 100) * sl)
takelinecolor = avg == avg[1] and avg != 0 ? color.lime : na
stoplinecolor = avg == avg[1] and avg != 0 ? color.red : na
plot(take, offset = 1, color = takelinecolor, linewidth = 3, transp = 0)
plot(stop, offset = 1, color = stoplinecolor, linewidth = 3, transp = 0)
//
disp_panels = input(true, title="Display info panels?")
h=high
info_label_off = input(20, title="Info panel offset")
info_label_size = input(size.large, options=[size.tiny, size.small, size.normal, size.large, size.huge], title="Info panel label size")
info_panel_x = timenow + round(change(time)*info_label_off)
info_panel_y = h

info_title= "-=-=-=-=- Info Panel -=-=-=-=-"
info_div = "\n\n------------------------------"
a = "\n\ Long : " + tostring(long)
b = "\n\ Stop loss : " + tostring(stop)
c = "\n\ TP : " + tostring(take)
// info_text = a+c+b
// info_panel = disp_panels ? label.new(x=info_panel_x, y=info_panel_y, text=info_text, xloc=xloc.bar_time, yloc=yloc.price, color=color.yellow, style=label.style_labelup, textcolor=color.black, size=info_label_size) : na
// label.delete(info_panel[1])