[暗号通貨自動売買] TVExtBotスタートガイド2(Pineスクリプト編)

TVExtBot for 暗号通貨(以下、TVExtBot)で使用するPineスクリプトについて説明します。
前回をまだ見ていない方はこちらをどうぞ 
:point_right: [TVExtBotスタートガイド1(設定編)](https://qiita.com/tvextbot/items/5cc7e8028879b706b5e7)

<font color="green">🎁**Bybit 取引手数料15%割引&特典**
Bybit取引所の**アフィリエイトリンク**を使ってアカウントを新規登録していただくと、**取引手数料15%割引**と**最大90ドルの登録特典**がいただけます。
 :point_right: [アフィリエイトリンク](https://www.bybit.com/en-US?affiliate_id=5246&group_id=0&group_type=1)
 :point_right: [登録特典ページ](https://www.bybit.com/ja-JP/prize_page/)
</font>

# Pineスクリプト準備

トレーディングビューサイト(tradingview.com)ではユーザーが自分のアイデアを公開したり、TradingViewの言語であるpineスクリプトを使用し作成したインジケーターやストラテジーを公開することができます。
TradingViewのユーザーは公開されたインジケーターを自由に自分のチャート上に表示することができます。
今回は説明のために予め準備したPineスクリプトを使用します。
<font color="red">**※ 実際に売買には使用しないでください！**</font>

① 『インジケーター＆ストラテジー』を選択します。
<img width="1680" alt="スクリーンショット 2019-04-21 10.42.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402678/1312432c-ea4c-9aae-484b-ea483751a1ae.png">

② 『TVExtBot』を入力し、一覧から『SMA Strategy for TVExtBot』Pineスクリプト(※1)をクリックします。
(※1) Pineエディタの『新規作成−空のインジケータースクリプト』を実行するとデフォルトとして提供されるコードにバックテストの期間を指定してシミュレーションできるように変更しているコードになります。<br>（バックテストのデフォルト期間は2019年1月1日〜2019年12月31日です）	
<img width="1680" alt="スクリーンショット 2019-04-22 22.09.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402678/e9e58ff5-f1db-bfd5-8616-0f3e982f47e1.png">

③ 『SMA Strategy for TVExtBot』のバックテスト結果が『投資戦略テスター』タブに表示されます。
<img width="1680" alt="スクリーンショット 2019-04-22 21.35.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402678/08195788-77c2-ae6b-50e9-676541fb324f.png">
ビットフライヤーBTC/JPYチャートで1５分足の場合、2019年1月1日〜4月22日までの勝率が『34.97%』です。
他にも、『パフォーマンスサマリー』『トレード一覧』も確認できます。
<img width="1680" alt="スクリーンショット 2019-04-22 21.43.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402678/45e8d9a9-97f2-b985-ef0b-348d3349dde1.png">

# Pineスクリプト編集

アラートを設定するために、以下の2ステップが必要になります。
1.strategy関数をstudy関数に変更する。
2.カスタムアラート設定のalertcondition関数を追加する。
※ [alertconditionについての公式の解説はこちら](https://www.tradingview.com/wiki/Alerts_in_pine/ja)
<font color="red">**※ strategy関数を使用する場合、アラート設定を行うことができません。**</font>

① Pineスクリプトの変更前と変更後は以下の通りです。
【Pineスクリプトのコード内容】
　`移動平均(sma)の14日線、28日線が下から上にクロスした場合はLongエントリ、上から下にクロスした場合はShortエントリの戦略です。`

```c:変更前
//－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－
//【説明】TVExtBot for Cryptocurrency 戦略サンプル
//－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－
//@version=3
strategy("SMA Strategy for TVExtBot", overlay=true)

FromYear  = input(defval = 2019, title = "From Year", minval = 2010)
FromMonth = input(defval = 1, title = "From Month", minval = 1)
FromDay   = input(defval = 1, title = "From Day", minval = 1)
ToYear    = input(defval = 2019, title = "To Year", minval = 2010)
ToMonth   = input(defval = 12, title = "To Month", minval = 1)
ToDay     = input(defval = 31, title = "To Day", minval = 1)

FromDate = timestamp("GMT+9",FromYear,FromMonth,FromDay, 0, 1)
ToDate = timestamp("GMT+9",ToYear,ToMonth,ToDay, 0, 1)

BGColor =  (time >= FromDate) and (time <= ToDate) ? #FFFF4D : na
bgcolor(BGColor, transp=94)
BackTest() =>
    time >= FromDate and time <= ToDate ? true : false

longCondition = crossover(sma(close, 14), sma(close, 28))
if (BackTest() and longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = crossunder(sma(close, 14), sma(close, 28))
if (BackTest() and shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)
```

【Pineスクリプトのコード内容】
`移動平均(sma)の14日線、28日線が下から上にクロスした場合は買いアラートを、上から下にクロスした場合は売りアラートを設定できるように変更しました。`

```c:変更後
//－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－
//【説明】TVExtBot for Cryptocurrency スタートガイドサンプル
//－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－
//@version=3
study("SMA Indicator for TVExtBot", overlay=true)

longCondition = crossover(sma(close, 14), sma(close, 28))
shortCondition = crossunder(sma(close, 14), sma(close, 28))

plotshape(longCondition,title="Buy",style=shape.triangleup,text="Buy",color=green,textcolor=green,location=location.belowbar)
plotshape(shortCondition,title="Sell",style=shape.triangledown,text="Sell",color=red,textcolor=red,location=location.abovebar)
alertcondition(longCondition, title = "Buy", message = '買い注文メッセージ入力')
alertcondition(shortCondition, title = "Sell", message = '売り注文メッセージ入力')
```

② Pineエディタの『新規作成−空のインジケータースクリプト』をクリックします。
<img width="1680" alt="スクリーンショット 2019-04-22 22.47.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402678/85058eaf-5425-b422-d5b0-4177581998c7.png">

③ 上記①変更後のPineスクリプトをコピー＆ペーストします。
<img width="1680" alt="スクリーンショット 2019-04-22 22.55.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402678/a29bf15c-3fe6-0765-c8c8-27532c53c278.png">

④ 『チャートに追加』をクリックします。
<img width="1680" alt="スクリーンショット 2019-04-22 22.58.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402678/2e7aed25-096b-bf03-3759-d2dfdb0ef549.png">

これで自動売買するためのPineスクリプトが準備できました。
次回は、自動売買するために必要な注文メッセージ作成及び設定について説明させていただきます。
:point_right: [TVExtBotスタートガイド(注文メッセージ作成及び設定編)](https://qiita.com/tvextbot/items/07c82d50f880bdc4c818)