ChatGPT と TradingView を用いて Strategy バックテストをする方法

# 1. はじめに
今回は、自分自身への備忘録を兼ねて、ChatGPT と TradingView を用いて Strategy バックテストをする方法を、お伝えしたいと思います

- 参考文献：[YouTube：ChatGPT 驚異のパフォーマンスを生み出したAIトレード手法](https://youtu.be/ZaPeRJ3rIBY)

# 2. この記事を読んでできること
- ChatGPT を使えるようになる
- TradingView の ストラテジーを使えるようになる
- TradingView で バックテストをすることができるようになる

# 3. 注意事項
- 特になし

# 4. 必要なもの
- ChatGPT アカウント
- TradingView アカウント
- エディタ（メモ帳、サクラエディタ）

# 5. ChatGPT にログイン
- [ChatGPT](https://chat.openai.com/chat) にログインする

# 6. ChatGPT に質問
- [ChatGPT](https://chat.openai.com/chat) に質問して、ChatGPTからの回答のTradingViewのPineスクリプトをメモ帳にコピーする

```plaintext:プロンプト
// 質問
ボリンジャーバンドを使った手法を教えてください。

// 質問
回答内容を元に、TradingViewのStrategyを作成できますか。

// ChatGPT回答
はい、TradingViewのStrategyを使用してボリンジャーバンドを使ったトレード戦略を実装することができます。以下に、例としてブレイクアウトトレードの戦略をTradingViewのPineスクリプトを用いて記述してみます。

このスクリプトでは、20日の期間を使用して、2倍の標準偏差をボリンジャーバンドの上限と下限として計算しています。ブレイクアウトの検出には、crossoverとcrossunder関数を使用しています。また、strategy.entry関数を使用して、トレード注文を行っています。

このようにTradingViewのPineスクリプトを使えば、ボリンジャーバンドを含むさまざまなトレード戦略を簡単に実装することができます。ただし、本格的なトレードには、十分なバックテストや検証を行うことが重要です。

```

```javascript:TradingViewのPineスクリプト（Bollinger Band Breakout Strategy）
//@version=4
strategy("Bollinger Band Breakout Strategy", overlay=true)

// パラメータの設定
len = input(20, minval=1, title="Bollinger Bands Length")
mult = input(2.0, minval=0.1, maxval=5, title="Bollinger Bands Standard Deviation")

// Bollinger Bandsの計算
basis = sma(close, len)
dev = mult * stdev(close, len)
upper = basis + dev
lower = basis - dev

// ブレイクアウトの検出
longCondition = crossover(close, upper)
shortCondition = crossunder(close, lower)

// トレードの注文
if (longCondition)
    strategy.entry("Buy", strategy.long)
if (shortCondition)
    strategy.entry("Sell", strategy.short)

```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240522/8b9c3b4f-10b4-3ebe-2dfa-334345bf7d5a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240522/10da57ee-a373-b420-cd01-20095771f9ad.png)


# 7. TradingView にログイン
- [TradingView](https://jp.tradingview.com/chart/) にログインする

# 8. PineエディタにPineスクリプトを保存
- PineエディタにPineスクリプトをペーストする
- 「保存」をクリックする
- 「チャートに追加」をクリックする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240522/9b9d5519-1066-4a20-4c3c-fbaab6b026b7.png)

# 9. バックテストの資金設定
- 設定（歯車アイコン）をクリックする
- 「プロパティ」をクリックする
- 「初期資金」に1000000 円を入力する
- 「発注サイズ」に100000 円を入力する
- 「OK」ボタンをクリックする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240522/393a17f5-4867-60d4-95fc-fb11395db3ed.png)

# 10. ストラテジーテスターでバックテスト結果を確認
- 「ストラテジーテスター」をクリックし、バックテスト結果を確認する
- 「概要」を確認する
- 「パフォーマンスサマリー」を確認する
- 「トレード一覧」を確認する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240522/62179984-0217-2b86-e1c1-e181b882a04f.png)

# 11. 他のシンボルを確認
- 他のシンボル（為替、株価、インデックス）を選択し、他のシンボルでのバックテスト結果を確認する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240522/14d8f6f6-1f17-3631-c327-345c5ec43ac4.png)

# 12. おわりに
いかがでしたでしょうか？ChatGPT と TradingView を用いて Strategy バックテストをすることができたのではないかと思います
今回の記事が、みなさまの学習の参考になれば幸いです

2023/2/19 TAKAHIRO NISHIZONO

---
# 13. 追記1：その他

```javascript:TradingViewのPineスクリプト（MACD Long-term Investment Strategy）
//@version=4
strategy("MACD Long-term Investment Strategy", overlay=true)

// パラメータ設定
fastMA = input(12, title="Fast MA")
slowMA = input(26, title="Slow MA")
signalMA = input(9, title="Signal MA")
stoplossPct = input(10, title="Stop Loss %")

// 移動平均線計算
fastEMA = ema(close, fastMA)
slowEMA = ema(close, slowMA)

// MACD計算
macd = fastEMA - slowEMA
signal = sma(macd, signalMA)

// エントリーシグナル
buySignal = crossover(macd, signal)

// ストップロス
stopLoss = close * (1 - stoplossPct/100)

// ポジション管理
if (buySignal)
    strategy.entry("Long", strategy.long)
    strategy.exit("Stop Loss", "Long", stop=stopLoss)

```

```javascript:TradingViewのPineスクリプト（RSI Long-term Investment Strategy）
//@version=4
strategy("RSI Long-term Investment Strategy", overlay=true)

// パラメータ設定
rsiPeriod = input(14, title="RSI Period")
buyThreshold = input(30, title="Buy Threshold")
sellThreshold = input(70, title="Sell Threshold")
stoplossPct = input(10, title="Stop Loss %")

// RSI計算
rsi = rsi(close, rsiPeriod)

// エントリーシグナル
buySignal = rsi < buyThreshold

// エグジットシグナル
sellSignal = rsi > sellThreshold

// ストップロス
stopLoss = close * (1 - stoplossPct/100)

// ポジション管理
if (buySignal)
    strategy.entry("Long", strategy.long)
//    strategy.exit("Sell", "Long", limit=sellSignal)
    strategy.exit("Stop Loss", "Long", stop=stopLoss)

if (sellSignal)
    strategy.close("Long")

```

```javascript:TradingViewのPineスクリプト（MACD & RSI Long-only Strategy）
//@version=4
strategy("MACD & RSI Long-only Strategy", overlay=true)

// MACD settings
fastLength = input(12, title="Fast Length")
slowLength = input(26, title="Slow Length")
signalLength = input(9, title="Signal Length")
macdLine = ema(close, fastLength) - ema(close, slowLength)
signalLine = ema(macdLine, signalLength)
macdHist = macdLine - signalLine

// RSI settings
rsiLength = input(14, title="RSI Length")
oversoldLevel = input(30, title="Oversold Level")

// Entry condition
enterLong = crossover(macdLine, signalLine) and rsi(close, rsiLength) <= oversoldLevel

// Exit condition
exitLong = crossunder(macdLine, signalLine)

// Strategy execution
if (enterLong)
    strategy.entry("Long", strategy.long)

if (exitLong)
    strategy.close("Long")

```