TradingViewでテクニカル分析に基づく株式トレードのアイデアが評価できます
今回は、一目均衡表を使った株式トレードをTradingViewのストラテジーテスターで評価します。
過去に行った、テクニカル分析に基づく株式トレードについては、下記の記事を参照ください。
一目均衡表に基づく株式トレードのストラテジー
今回評価するストラテジーは、以下の通りです。
■買いトレードのエントリー条件
転換線が雲の下にあり、かつ、転換線が基準線を下から上にクロスしたタイミング
■買いトレードのイグジット条件
転換線が基準線を上から下にクロスしたタイミング
■空売りトレードのエントリー条件
転換線が雲の上にあり、かつ、転換線が基準線を上から下にクロスしたタイミング
■空売りトレードのイグジット条件
転換線が基準線を下から上にクロスしたタイミング
また、建玉を保有している状況では、新たな売買は行わないものとします。
TradingViewのストラテジーテスター向けPineスクリプトのソースコード
上記のストラテジーをPineスクリプトで記述したものが、下記となります。
//@version=6
strategy("一目均衡表", overlay = true, process_orders_on_close = true)
// バックテストの期間を設定
StartTime = input.time(defval = timestamp("01 Jan 2005 00:00 +0600"), title = "テスト開始年月日")
EndTime = input.time(defval = timestamp("31 Dec 2024 00:00 -1200"), title = "テスト終了年月日")
// 期間の条件式
bool CondTime = StartTime <= time and time <= EndTime
// 一目均衡表の各期間の設定
const int PeriodBaseLine = 26
const int PeriodConvLine = 9
const int PeriodLeadSpan1 = 26
const int PeriodLeadSpan2 = 52
// 一目均衡表の算出
BaseLine = (ta.highest(PeriodBaseLine) + ta.lowest(PeriodBaseLine)) / 2
ConversionLine = (ta.highest(PeriodConvLine) + ta.lowest(PeriodConvLine)) / 2
LeadingSpan1 = (BaseLine + ConversionLine) / 2
LeadingSpan2 = (ta.highest(PeriodLeadSpan2) + ta.lowest(PeriodLeadSpan2)) / 2
// プロット
plot(BaseLine, title = "基準線", color = color.yellow)
plot(ConversionLine, title = "転換線", color = color.fuchsia, linewidth = 2)
LS1 = plot(LeadingSpan1, title = "先行スパン1", offset = PeriodLeadSpan1 - 1, color = color.red)
LS2 = plot(LeadingSpan2, title = "先行スパン2", offset = PeriodLeadSpan1 - 1, color = color.green)
plot(close, title = "遅行スパン", offset = 1 - PeriodBaseLine, color = color.blue)
fill(LS1, LS2, color = LeadingSpan1 <= LeadingSpan2 ? color.new(color = color.green, transp = 85) : color.new(color = color.red, transp = 85))
// 雲の上辺と下辺を算出
var float LeadingSpanTop = 0.0
var float LeadingSpanBottom = 0.0
if (LeadingSpan1[PeriodLeadSpan1 -1] <= LeadingSpan2[PeriodLeadSpan1 -1])
LeadingSpanTop := LeadingSpan2[PeriodLeadSpan1 -1]
else if (LeadingSpan2[PeriodLeadSpan1 -1] < LeadingSpan1[PeriodLeadSpan1 -1])
LeadingSpanTop := LeadingSpan1[PeriodLeadSpan1 -1]
if (LeadingSpan2[PeriodLeadSpan1 -1] <= LeadingSpan1[PeriodLeadSpan1 -1])
LeadingSpanBottom := LeadingSpan2[PeriodLeadSpan1 -1]
else if (LeadingSpan1[PeriodLeadSpan1 -1] < LeadingSpan2[PeriodLeadSpan1 -1])
LeadingSpanBottom := LeadingSpan1[PeriodLeadSpan1 -1]
// 売買ID
const string LongID = 'Long Entry'
const string ShortID = 'Short Entry'
// 売買条件の設定
// 買いトレードのエントリー条件
bool CondLongIn1 = ConversionLine[1] < BaseLine[1] and BaseLine <= ConversionLine
bool CondLongIn2 = ConversionLine < LeadingSpanBottom
bool CondLongIn = CondLongIn1 and CondLongIn2
// 空売りトレードのエントリー条件
bool CondShortIn1 = BaseLine[1] < ConversionLine[1] and ConversionLine <= BaseLine
bool CondShortIn2 = LeadingSpanTop < ConversionLine
bool CondShortIn = CondShortIn1 and CondShortIn2
// 買いトレードのイグジット条件
bool CondLongOut = ConversionLine <= BaseLine
// 空売りトレードのイグジット条件
bool CondShortOut = BaseLine <= ConversionLine
// 株式トレードの実行
// 買いトレードの決済
if (CondTime and CondLongOut)
strategy.close(LongID, comment = '返売')
// 空売りトレードの決済
if (CondTime and CondShortOut)
strategy.close(ShortID, comment = '返買')
// 買いトレード
if (CondTime and CondLongIn)
strategy.entry(LongID, strategy.long, comment = "買")
// 空売りトレード
if (CondTime and CondShortIn)
strategy.entry(ShortID, strategy.short, comment = "売")
上記のPineスクリプトにおいて、一つだけ修正すべき点があります。
■Pineスクリプトの修正内容
1行目の「@」を半角のアットマークに置き換えてください
coconalaブログは、半角のアットマークを記述することができない仕様であるため、このような対応を行っています。
TradingViewのストラテジーテスターによるストラテジーの評価結果 概要
今回は、日経平均株価を対象として、TradingViewのストラテジーテスターを使用したストラテジーの評価結果(概要)を以下に示します。
ストラテジーテスターによる評価結果 概要(出典: TradingView)
評価期間は、2005年1月1日から2024年12月31日の20年間としました。
また、株式トレードにおける手数料や税金、等は考慮していません。
- 純利益: -3,912.95円(1株単位)
- プロフィットファクター: 0.890
- トレード合計: 126
- トレード勝率: 42.06%
純利益は、100株単位に換算すると-391,295円となります。
このため、1年平均では-19,564.75円です。
今回のストラテジーでは、残念ながら純利益がマイナスとなってしまいました。
しかし、だからダメということではありません。
株式トレードの詳細を日足チャートで確認し、問題点を改善する条件を抽出し、結果をストラテジーに反映し、評価を行うプロセスを繰り返すことで、より良いストラテジーが完成します。
もし、試してみたいストラテジーがあるけど、自分でPineスクリプトを作成するのは面倒、等であれば、私の方でPineスクリプトを作成致します。
さらには、私がストラテジーを作成するサービスもご提供しています。
ご興味のある方は、お気軽にお問い合わせください。