지표에 기반한 스톱 로스 및 영업 전략

저자:차오장, 날짜: 2023년 11월 10일 11:28:06
태그:

img

전반적인 설명

이 전략은 이동 평균을 거래 신호로 사용하고 사용자 정의 스톱 로스 및 수익률 비율과 결합하여 완전한 지표가 주도되는 스톱 로스 및 수익 전략을 구현합니다. 거래에 입력하고 스톱 로스를 설정하고 수동 간섭없이 자동으로 수익을 취할 수 있으며 알고리즘 거래에 적합합니다.

전략 논리

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

  1. 3주기 SMA를 거래 신호로 사용하세요. SMA가 0을 넘을 때 장거리, SMA가 0을 넘을 때 단거리입니다.

  2. 트레이드를 마친 후, 사용자는 스톱 로스를 사용자 정의하고 수익 비율을 취할 수 있습니다.

  3. 입력 가격과 사용자가 설정한 스톱 로스 비율을 기반으로 자동으로 스톱 로스 라인을 설정합니다.

  4. 입력 가격과 사용자에 의해 설정된 수익률을 기반으로, 자동으로 수익 라인을 설정합니다.

  5. 가격이 스톱 로스 라인에 닿으면 자동으로 스톱 아웃이 됩니다. 가격이 스톱 로스 라인에 닿으면 자동으로 이윤을 취합니다.

  6. 포지션을 마친 후 자동으로 스톱 로스를 취소하고 수익 오더를 취합니다.

구체적으로, 전략은 sma 함수를 사용하여 3 기간 SMA를 계산하고 ma 변수에 할당합니다.

그러면 긴 입력 라인 길이를 계산합니다. 이것은 ma 더하기 lo의 ma%입니다. lo는 긴 입력 라인 오프셋에 대한 사용자 조절 가능한 매개 변수입니다.

ma가 0을 넘으면 긴 진입을 표시합니다. 전략은 엔트리 가격으로 정해진 전략. 엔트리 함수를 사용하여 긴 진입을 표시합니다.

동시에, 스톱 로스 및 토프 리프트 가격이 설정됩니다. 스톱 로스 가격은 엔트리 가격 빼기 엔트리 가격%의 sl입니다. sl는 사용자 조정 가능한 스톱 로스 비율 매개 변수입니다. 토프 리프트 가격은 엔트리 가격 더하기 엔트리 가격%의 tp입니다. tp는 사용자 조정 가능한 토프 리프트 비율 매개 변수입니다.

Strategy.entry 함수는 Stop Loss 및 Take Profit 주문을 별도로 설정합니다. 가격이 Stop Loss 라인을 만지면 자동으로 종료됩니다. 가격이 Stop Loss 라인을 만지면 자동으로 수익을 취합니다.

포지션 종료 후, 스톱 로스 및 영업 주문은 자동으로 strategy.cancel 함수를 사용하여 취소됩니다.

장점

이 전략의 장점:

  1. 높은 수준의 자동화, 수동 간섭이 필요없고 알고리즘 거래에 적합합니다.

  2. 위험 조절을 위해 스톱 로스 및 수익률을 조정할 수 있습니다.

  3. 거래 신호는 지표에서 나오고, 거짓 브레이크를 피합니다.

  4. 시각화 된 스톱 로스 및 수익을 취합니다. 직관적입니다.

  5. 간단하고 명확한 전략 논리, 이해하기 쉽고 실행하기 쉽습니다.

위험 과 해결책

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

  1. 지표에서 잘못된 신호의 위험. 해결책은 신뢰할 수있는 지표를 보장하기 위해 매개 변수를 최적화하는 것입니다.

  2. 부적절한 스톱 손실 및 수익 비율 설정은 너무 느슨하거나 너무 공격적 일 수 있습니다. 해결책은 다른 시장에 대한 비율을 조정하는 것입니다.

  3. 브레이크아웃 진입은 함락될 가능성이 높습니다. 해결책은 트렌드, 볼륨 등으로 진입 신호를 필터하는 것입니다.

  4. 잠재적으로 큰 드로다운입니다. 해결책은 포지션 사이즈를 낮추거나 후속 스톱 로스를 사용하는 것입니다.

최적화 방향

전략을 최적화하는 몇 가지 방향:

  1. 신뢰성을 위해 이동 평균 매개 변수를 최적화합니다.

  2. 잘못된 브레이크오웃을 방지하기 위해 입구 조건을 최적화하고, 볼륨 확인 등을 추가합니다.

  3. 스톱 로스를 최적화하고 수익을 취하십시오. 동적 또는 후속 스톱 로스를 사용하십시오.

  4. 리스크 관리를 최적화하고, 포지션 크기를 조정하고, 단일 거래 위험을 줄이세요.

  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])




더 많은