전략으로 자동매매하기
파인스크립트 전략(strategy)의 alert_message에 TVExtBot 주문메시지를 넣고, 얼러트 하나로 매수·매도·청산을 자동매매하는 방법을 예제 코드로 설명합니다.
파인스크립트 전략(strategy)의 주문마다 TVExtBot 주문메시지를 넣어, 얼러트 하나로 매수·매도·청산을 자동매매합니다. 파인스크립트 기본 지식이 필요합니다. 처음이라면 파인스크립트 기초를 먼저 보세요.
코드를 고치지 않아도 됩니다
공개 전략 코드를 붙여넣으면 주문메시지를 자동으로 넣어 주는 전략 변환 기능이 있습니다.
v6 기준 설명
이 글의 예제는 v5입니다. v6 예제는 지표를 전략으로 바꾸기와 손절·익절·트레일링 스탑에 있습니다. v5 코드를 v6로 옮길 때 달라지는 점은 v6 변경점을 보세요.
전략(strategy) 스크립트 준비하기
alert_message는 파인스크립트 버전 4 이상에서만 쓸 수 있습니다. 예제는 //@version=5입니다.
//@strategy_alert_message {{strategy.order.alert_message}}
//@version=5
strategy('샘플전략', overlay=true)
// Create Indicator's
shortSMA = ta.sma(close, 10)
longSMA = ta.sma(close, 30)
rsi = ta.rsi(close, 14)
atr = ta.atr(14)
// Specify crossover conditions
longCondition = ta.crossover(shortSMA, longSMA)
shortCondition = ta.crossunder(shortSMA, longSMA)
// Execute trade if condition is True
if longCondition and rsi > 50
stopLoss = low - atr * 2
takeProfit = high + atr * 2
strategy.entry('long', strategy.long, 100)
strategy.exit('exit', 'long', stop=stopLoss, limit=takeProfit)
if shortCondition and rsi < 50
stopLoss = high + atr * 2
takeProfit = low - atr * 2
strategy.entry('short', strategy.short, 100)
strategy.exit('exit', 'short', stop=stopLoss, limit=takeProfit)
// Plot Moving Average's to chart
plot(shortSMA)
plot(longSMA, color=color.new(color.black, 0))설명용 샘플입니다. 실제 매매에는 쓰지 마세요.
고칠 곳은 주문 함수 4줄(19·20·25·26번째 줄)입니다.
- 19번째 줄에서 매수 진입, 20번째 줄에서 매수 청산
- 25번째 줄에서 매도 진입, 26번째 줄에서 매도 청산
전략(strategy)에 주문메시지 설정하기
위 전략에 맞게 주문메시지 3개(매수·매도·청산)를 만듭니다. 예시는 바이빗 테스트넷 기준입니다.
단축 주문메시지를 쓰면 편합니다
주문 내용을 바꿔도 스크립트를 고치지 않아도 됩니다. 쓰는 법은 보통 주문메시지와 같습니다. → 단축 주문메시지 사용법
매수용 주문메시지
TVM:{"exchange":"bybit-testnet","account":"*","symbol":"BTC/USD","type":"market","side":"buy","bal_pct":50,"token":"토큰"}:MVT매도용 주문메시지
TVM:{"exchange":"bybit-testnet","account":"*","symbol":"BTC/USD","type":"market","side":"sell","bal_pct":50,"token":"토큰"}:MVT청산용 주문메시지
TVM:{"exchange":"bybit-testnet","account":"*","symbol":"BTC/USD","type":"market","side":"close","token":"토큰"}:MVT만든 메시지를 strategy.entry와 strategy.exit의 alert_message에 넣습니다.
//@strategy_alert_message {{strategy.order.alert_message}}
//@version=5
strategy('샘플전략', overlay=true)
// Create Indicator's
shortSMA = ta.sma(close, 10)
longSMA = ta.sma(close, 30)
rsi = ta.rsi(close, 14)
atr = ta.atr(14)
// Specify crossover conditions
longCondition = ta.crossover(shortSMA, longSMA)
shortCondition = ta.crossunder(shortSMA, longSMA)
// Execute trade if condition is True
if longCondition and rsi > 50
stopLoss = low - atr * 2
takeProfit = high + atr * 2
strategy.entry('long', strategy.long, 100, alert_message='TVM:{"exchange":"bybit-testnet","account":"*","symbol":"BTC/USD","type":"market","side":"buy","bal_pct":50,"token":"토큰"}:MVT')
strategy.exit('exit', 'long', stop=stopLoss, limit=takeProfit, alert_message='TVM:{"exchange":"bybit-testnet","account":"*","symbol":"BTC/USD","type":"market","side":"close","token":"토큰"}:MVT')
if shortCondition and rsi < 50
stopLoss = high + atr * 2
takeProfit = low - atr * 2
strategy.entry('short', strategy.short, 100, alert_message='TVM:{"exchange":"bybit-testnet","account":"*","symbol":"BTC/USD","type":"market","side":"sell","bal_pct":50,"token":"토큰"}:MVT')
strategy.exit('exit', 'short', stop=stopLoss, limit=takeProfit, alert_message='TVM:{"exchange":"bybit-testnet","account":"*","symbol":"BTC/USD","type":"market","side":"close","token":"토큰"}:MVT')
// Plot Moving Average's to chart
plot(shortSMA)
plot(longSMA, color=color.new(color.black, 0))작은따옴표로 감싸세요
주문메시지 안에 큰따옴표(")가 들어 있습니다.
그래서 alert_message는 작은따옴표(')로 감쌉니다. 예: alert_message='주문메시지'
전략이 계산한 주문 수량을 그대로 쓰려면 전략 수량대로 자동매매를 보세요.
얼러트 설정하기
전략 차트에서 얼러트를 하나 만듭니다.
메시지 칸에는 {{strategy.order.alert_message}}가 꼭 있어야 합니다.
신호는 4가지지만 얼러트는 하나만 만들면 됩니다.
자주 하는 실수
- 얼러트 조건에서 전략 스크립트를 골랐는지 확인하세요. 지표를 고르면
{{strategy.order.alert_message}}가 동작하지 않습니다. - 스크립트나 주문메시지를 고쳤다면 얼러트를 다시 만드세요. 얼러트는 만든 때의 스크립트로 동작합니다. 단축 주문메시지에서 주문 내용만 바꿨다면 다시 만들지 않아도 됩니다.
- 얼러트 방식별 차이는 얼러트 메시지 정리에 있습니다.