ファインスクリプトの戦略(strategy)を使って自動売買する方法について説明します。

戦略スクリプト(strategy)の準備

※ Pineスクリプトバージョン4以降でのみ利用可能です。(//@version=4)
Pineスクリプト

 1//@version=4
 2strategy("サンプル戦略", overlay=true)
 3
 4// Create Indicator's
 5shortSMA = sma(close, 10)
 6longSMA = sma(close, 30)
 7rsi = rsi(close, 14)
 8atr = atr(14)
 9
10// Specify crossover conditions
11longCondition = crossover(shortSMA, longSMA)
12shortCondition = crossunder(shortSMA, longSMA)
13
14// Execute trade if condition is True
15if (longCondition)
16    stopLoss = low - atr * 2
17    takeProfit = high + atr * 2
18    strategy.entry("long", strategy.long, 100, when = rsi > 50)
19    strategy.exit("exit", "long", stop=stopLoss, limit=takeProfit)
20
21if (shortCondition)
22    stopLoss = high + atr * 2
23    takeProfit = low - atr * 2
24    strategy.entry("short", strategy.short, 100, when = rsi < 50)
25    strategy.exit("exit", "short", stop=stopLoss, limit=takeProfit)
26
27// Plot Moving Average's to chart
28plot(shortSMA)
29plot(longSMA, color=color.black)
※ 説明のためのサンプルです。実際の売買には使用しないでください。

修正するコードは、上記のソースから18行目、19行目、24行目、25行目です。

説明
  • 18行目で買い注文を行い、19行目で買いポジション決済を行います。
  • 24行目で売り注文を行い、25行目で売りポジション決済を行います。

Bybit取引所1時間足チャートのバックテスト結果です。

戦略(strategy)に注文メッセージを設定する

ショート注文メッセージを使用すると、注文内容を変更してもスクリプトを修正する必要はありません。
使用方法は通常の注文メッセージと同じです。 詳しくは ショート注文メッセージの使い方 リンクを参考にしてください。

上記の戦略に合わせて3つの注文メッセージを作成します。 (Bybit基準)

買い注文メッセージ

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

上記の注文メッセージを以下のように戦略スクリプトに追加します。
 1//@version=4
 2strategy("サンプル戦略", overlay=true)
 3
 4// Create Indicator's
 5shortSMA = sma(close, 10)
 6longSMA = sma(close, 30)
 7rsi = rsi(close, 14)
 8atr = atr(14)
 9
10// Specify crossover conditions
11longCondition = crossover(shortSMA, longSMA)
12shortCondition = crossunder(shortSMA, longSMA)
13
14// Execute trade if condition is True
15if (longCondition)
16    stopLoss = low - atr * 2
17    takeProfit = high + atr * 2
18    strategy.entry("long", strategy.long, 100, when = rsi > 50, alert_message='TVM:{"exchange":"bybit-testnet","account":"*","symbol":"BTC/USD","type":"market","side":"buy","bal_pct":50,"token":"トークン"}:MVT')
19    strategy.exit("exit", "long", stop=stopLoss, limit=takeProfit, alert_message='TVM:{"exchange":"bybit-testnet","account":"*","symbol":"BTC/USD","type":"market","side":"close","token":"トークン"}:MVT')
20
21if (shortCondition)
22    stopLoss = high + atr * 2
23    takeProfit = low - atr * 2
24    strategy.entry("short", strategy.short, 100, when = rsi < 50, alert_message='TVM:{"exchange":"bybit-testnet","account":"*","symbol":"BTC/USD","type":"market","side":"sell","bal_pct":50,"token":"토큰"}:MVT')
25    strategy.exit("exit", "short", stop=stopLoss, limit=takeProfit, alert_message='TVM:{"exchange":"bybit-testnet","account":"*","symbol":"BTC/USD","type":"market","side":"close","token":"トークン"}:MVT')
26
27// Plot Moving Average's to chart
28plot(shortSMA)
29plot(longSMA, color=color.black)

strategy.entry関数とstrategy.exit関数にalert_message属性を追加し、上記の注文メッセージを設定します。
※ ここで重要なのは、alert_messageに注文メッセージを設定するときに二重引用符(")ではなく、引用符(’)にする必要があります。(例)alert_message = ‘注文メッセージ’

アラートを設定する

以下のようにアラートを追加します。 メッセージに {{strategy.order.alert_message}} を設定します。