1. はじめに
今回は、自分自身への備忘録を兼ねて、ChatGPT と TradingView を用いて Strategy バックテストをする方法を、お伝えしたいと思います
2. この記事を読んでできること
- ChatGPT を使えるようになる
- TradingView の ストラテジーを使えるようになる
- TradingView で バックテストをすることができるようになる
3. 注意事項
- 特になし
4. 必要なもの
- ChatGPT アカウント
- TradingView アカウント
- エディタ(メモ帳、サクラエディタ)
5. ChatGPT にログイン
- ChatGPT にログインする
6. ChatGPT に質問
- ChatGPT に質問して、ChatGPTからの回答のTradingViewのPineスクリプトをメモ帳にコピーする
プロンプト
// 質問
ボリンジャーバンドを使った手法を教えてください。
// 質問
回答内容を元に、TradingViewのStrategyを作成できますか。
// ChatGPT回答
はい、TradingViewのStrategyを使用してボリンジャーバンドを使ったトレード戦略を実装することができます。以下に、例としてブレイクアウトトレードの戦略をTradingViewのPineスクリプトを用いて記述してみます。
このスクリプトでは、20日の期間を使用して、2倍の標準偏差をボリンジャーバンドの上限と下限として計算しています。ブレイクアウトの検出には、crossoverとcrossunder関数を使用しています。また、strategy.entry関数を使用して、トレード注文を行っています。
このようにTradingViewのPineスクリプトを使えば、ボリンジャーバンドを含むさまざまなトレード戦略を簡単に実装することができます。ただし、本格的なトレードには、十分なバックテストや検証を行うことが重要です。
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)
7. TradingView にログイン
- TradingView にログインする
8. PineエディタにPineスクリプトを保存
- PineエディタにPineスクリプトをペーストする
- 「保存」をクリックする
- 「チャートに追加」をクリックする
9. バックテストの資金設定
- 設定(歯車アイコン)をクリックする
- 「プロパティ」をクリックする
- 「初期資金」に1000000 円を入力する
- 「発注サイズ」に100000 円を入力する
- 「OK」ボタンをクリックする
10. ストラテジーテスターでバックテスト結果を確認
- 「ストラテジーテスター」をクリックし、バックテスト結果を確認する
- 「概要」を確認する
- 「パフォーマンスサマリー」を確認する
- 「トレード一覧」を確認する
11. 他のシンボルを確認
- 他のシンボル(為替、株価、インデックス)を選択し、他のシンボルでのバックテスト結果を確認する
12. おわりに
いかがでしたでしょうか?ChatGPT と TradingView を用いて Strategy バックテストをすることができたのではないかと思います
今回の記事が、みなさまの学習の参考になれば幸いです
2023/2/19 TAKAHIRO NISHIZONO
13. 追記1:その他
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)
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")
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")