(57)【要約】【課題】一般個人投資家がシステムトレードを開発するためには、コンピュータプログラミングの知識と能力が必要で、簡単には開発できない。【解決手段】  表計算ファイルに取引商品の価格と、価格から算出され指標を記憶させ、ロジックシートに判断式を使って売買ルールの数式を記憶させる。売買ルール数式は、「売り」または「買い」または「見送り」を表すラベルを演算値とする。マクロプログラムなどで提供される検証プログラムが、取引の成績を日ごとに計算し、成績を表計算ファイルのシートに表示する。【選択図】図４
2010267103.tif 000002
【特許請求の範囲】
【請求項１】
表計算アプリケーションファイルから実行されるコンピュータプログラムであって、
前記ファイルは、日付または時刻と価格が対応した検証期間分の第１のデータと、該第１のデータから算出される指標を含む第２のデータと、トレードロジックの売買ルール数式を記憶する表セルを含み、
前記売買ルール数式は、「売り」または「買い」または「見送り」を表す数値または記号等からなるラベルを演算値として算出する判断を含む数式であって、
前記第１のデータと前記第２のデータ及び前記売買ルール数式を読み込んで、トレードの成績を計算し、該成績を前記ファイルの表セルに出力することを特徴とするシステムトレード検証プログラム。
【請求項２】
請求項１記載のシステムトレード検証プログラムであって、
前記第１のデータのうち代表データ１日分または１時刻分のデータの数式を、検証期間分にわたりコピーする手段と、
前記ファイルはロスカットルール数式を記憶する表セルを含み、
該ロスカット数式は損切り幅を演算値として算出する数式であって、
前記第１のデータと前記第２のデータ及び前記売買ルール数式と前記ロスカットルール数式を読み込んで、損切り計算とともにトレードの成績を計算し、該成績を前記ファイルの表セルに出力することを特徴とするシステムトレード検証プログラム。
【請求項３】
表計算アプリケーションファイルから実行されるコンピュータプログラムによるシステムトレード検証方法であって、
前記ファイルは日付または時刻と価格が対応した検証期間分の第１のデータと、該第１のデータから算出される指標を含む第２のデータと、トレードロジックの売買ルール数式を記憶する表セルを含み、
前記売買ルール数式は、「売り」または「買い」または「見送り」を表す数値または記号等からなるラベルを演算値として算出する判断を含む数式であって、
前記第１のデータと前記第２のデータ及び前記売買ルール数式を読むステップと、トレードの成績を計算するステップと、該成績を前記ファイルの表セルに出力するステップからなるシステムトレード検証方法。
【請求項４】
請求項１記載のコンピュータプログラムを記憶した媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、日経先物やＴＯＰＩＸ先物、現物株、外国為替保証金取引等の取引において、損益が有利な成績になる、コンピュータ出力情報による機械的売買取引、いわゆるシステムトレードを構築する技術に関するものである。
【背景技術】
【０００２】
日経２２５先物、ＴＯＰＩＸ先物、現物株の大阪証券取引所や東京証券取引所での取引は、一般投資家は、証券会社を通じて行っている。近年、一般投資家は、上記日経２２５先物などの過去の市場価格を統計的に分析して、コンピュータプログラムがデータ処理して出力する売買取引の情報を使って、取引（トレード）を証券会社に発注するやり方が普及しつつある。
【０００３】
このようにコンピュータプログラムの出力情報を基にしてトレードをする方法は、システムトレードと呼ばれている。
【０００４】
システムトレードによる取引は、過去のデータに基づいて客観的に取引を実行でき、個人の主観による裁量取引と違って人の感情に影響されないので、有利な結果を生む利点がある。
【０００５】
すべての個人投資家がシステムトレードを創るノウハウがないので、特定のノウハウを有する業者がシステムトレードのソフトウェアを販売したり、システムトレードが出力する取引情報を電子メールで配信（サイン配信と呼ばれる）するサービスを有料で行ったりしている。
【０００６】
最近では、多くの一般投資家が、このようなシステムトレードソフトウェアを購入したり、サイン配信サービスを購入したりしている。
このように販売されるシステムトレードは、トレードロジックが開示される場合とそうでない場合があるが、どちらにせよ必ずしも良質な商品といえない場合も少なくない。
【０００７】
例えば、あまり客観的根拠がなくいいかげんに創られたシステムトレードを誇大宣伝し、投資家をだまして販売する詐欺まがいの販売を行う悪質な業者も現れたりして、投資家に損失をもたらし、不健全な投資環境を生み出すという問題がおきている。
【０００８】
また、詐欺ではないにしても、将来のトレード成績を約束できない性質のシステムトレードという商品をどのようにして、そのトレード性能を客観的に表現し購入者に説明できるのかという問題があり、システムトレード販売ビジネスを健全なものにすべき課題が指摘される。
【０００９】
このような問題があるので、一般個人投資家がシステムトレードを利用する上でシステムトレードの性能を熟知し、自分の責任においてトレードをするためには、自分でシステムトレードを開発できればよいことになる。
【００１０】
このような中、一般個人投資家向けにシステムトレード作成ツールを無料ないしは有料で販売する証券会社も現れている。
【００１１】
例えば、トレーダーズ証券株式会社が提供しているＴＲＡＤＥ  ＳＴＡＤＩＵＭ（トレーダーズ証券株式会社の登録商標）というソフトウェアを使えば、個人投資家がシステムトレードを創ることができる。しかし、そのためには、特殊なプログラム言語でトレードロジックをコーディングしプログラムを作成しなければならず、プログラミング技術のスキルが必要となる。
【００１２】
このように、プログラミングによってシステムトレードを創る機能を公開している証券会社は、ひまわり証券株式会社など、いくつか存在する。
【００１３】
しかし、一般個人投資家で、プログラミング技術を有する人は少なく、このようなソフトウェアツールでは、多くの個人投資家にシステムトレードを作成できるよういにはなっていない。
【先行技術文献】
【非特許文献】
【００１４】
【非特許文献１】森田佳佑著「自動売買ロボット作成マニュアル」パンローリング株式会社出版  ２００６年
【００１５】
【非特許文献２】井領邦弘著「株式  システムトレード」技術評論社出版  ２００８年
【発明の概要】
【発明が解決しようとする課題】
【００１６】
本発明が、解決しようとする課題は、一般個人投資家がシステムトレードを開発するためには、コンピュータプログラミングの知識と能力が必要で、簡単には開発できないことである。
【００１７】
前記非特許文献１「自動売買ロボット作成マニュアル」、および非特許文献２「株式  システムトレード」には、システムトレードの開発技法が説明されているが、コンピュータプログラミングのスキルを前提とするものにとどまっている。
【課題を解決するための手段】
【００１８】
本発明は、表計算アプリケーションファイルに、日付（または時刻）と価格が対応した検証期間分の第１のデータと、該第１のデータから算出される指標を含む第２のデータと、トレードロジックの売買ルール数式を記憶する表セルを含ませ、
【００１９】
前記売買ルール数式は、「売り」または「買い」または「見送り」を表す数値または記号等からなるラベルを演算値として算出する判断を含む数式であって、
【００２０】
前記第１のデータと前記第２のデータ及び前記売買ルール数式を読み込んで、トレードの成績を計算する手段と、該成績を前記ファイルの表セルに出力する手段から構成されるシステムトレード検証プログラムである。
【００２１】
また、本発明は、前記システムトレード検証プログラムであって、
前記第１のデータのうち代表データ１日分（または１時刻分）のデータの数式を、検証期間分にわたりコピーする手段と、
【００２２】
前記ファイルにロスカットルール数式を記憶する表セルを含ませ、
該ロスカットルール数式は、損切り幅を演算値として算出する数式であって、
【００２３】
前記第１のデータと前記第２のデータ及び前記売買ルール数式と前記ロスカットルール数式を読み込んで、損切り計算とともにトレードの成績を計算する手段と、該成績を前記ファイルの表セルに出力する手段からなることを特徴とするシステムトレード検証プログラムである。
【００２４】
また、本発明は、表計算アプリケーションファイルから実行されるコンピュータプログラムによるシステムトレード検証方法であって、
【００２５】
前記ファイルは日付（または時刻）と価格が対応した検証期間分の第１のデータと、該第１のデータから算出される指標を含む第２のデータと、トレードロジックの売買ルール数式を記憶する表セルを含み、
【００２６】
前記売買ルール数式は、「売り」または「買い」または「見送り」を表す数値または記号等からなるラベルを演算値として算出する判断を含む数式であって、
【００２７】
前記第１のデータと前記第２のデータ及び前記売買ルール数式を読むステップと、トレードの成績を計算するステップと、該成績を前記ファイルの表セルに出力するステップからなるシステムトレード検証方法である。
【００２８】
また、本発明は、前記システムトレード検証プログラムを記憶する記憶媒体である。
【発明の効果】
【００２９】
本発明は、コンピュータプログラミングのスキルのない一般個人投資家がシステムトレードを簡単に開発することを可能にし、システムトレードの性能と能力・限界を十分把握した上で、自己の責任においてトレードを行うことを可能にする。
【００３０】
それによって、健全な投資活動を活性化させることができ、ひいては経済の発展に寄与することが可能となり、きわめて重要な効果をもたらす。
【図面の簡単な説明】
【００３１】
【図１】図１は、第１の実施例の本発明のシステムトレード検証プログラムを実行するところの表計算ファイルの表示画面であって、日付と価格データ及び指標の表形式のデータの画面（データシート１）である。
【００３２】
【図２】図２は、第１の実施例の表計算ファイルの表示画面であって、日付と価格データ及び指標の表形式のデータの画面（データシート２）である。
【００３３】
【図３】図３は、第１の実施例の表計算ファイルの表示画面であって、トレードのルール数式やロスカットルール数式を入力する表セルを含む表形式のデータの画面（ロジックシート）である。
【００３４】
【図４】図４は、第１の実施例のシステムトレード検証プログラムを実行した損益の結果を表示した画面（ロジックシート）である。
【００３５】
【図５】図５は、第１の実施例のシステムトレード検証プログラムの処理を説明したフローチャートの前半部分である。
【００３６】
【図６】図６は、第１の実施例のシステムトレード検証プログラムの処理を説明したフローチャートの後半部分である。
【００３７】
【図７】図７は、表計算ソフトウェア及びシステムトレード検証プログラムが動作するコンピュータのハードウェア構成図である。
【００３８】
【図８】図８は、第２の実施例のロジックシートを説明する画面である。
【００３９】
【図９】図９は、第２の実施例の処理フローチャートの処理ケースの場合わけを説明する図である。
【００４０】
【図１０】図１０は、第２の実施例のフローチャートである。
【発明を実施するための形態】
【００４１】
本発明は、表計算ソフトウェアのマクロとして動作するプログラムに、システムトレード検証プログラムを埋め込み、表計算ソフトウェアのファイル（以下単に表計算ファイルと呼ぶ）から、該システムトレード検証プログラムを実行することにより、
【００４２】
該プログラムが表計算ファイルに記憶してあるデータと、売買ルール数式及びロスカットルール数式の演算結果を参照することによりトレードの検証を行い、損益などの成績を求め、前記表計算ファイルのシート上に出力するようにしたものである。
【００４３】
表計算ソフトウェアとしては、マイクロソフト社のＥＸＣＥＬ（登録商標）を利用することができるが、ＥＸＣＥＬ以外の表計算ソフトウェアであっても、マクロ機能などのようにユーザが作成したプログラムを実行できる機能があるものならなんでもよい。
【００４４】
また、以下に説明する実施例では、システムトレード検証プログラムはマクロプログラムに埋め込んだものであるが、それ以外の形態のプログラム、例えば、ＤＬＬ（ダイナミック・リンク・ライブラリ）のようなものであってもよい。
【実施例１】
【００４５】
以下に日経２２５先物取引の寄り引けのシステムトレードのロジック検証を行うシステムトレード検証プログラムの実施例を説明する。
【００４６】
日経２２５先物取引は大阪証券取引所が提供している株価指数を対象とした先物取引である。日経２２５先物取引は、日中の取引と夕場の取引が行われているが、ここでは日中の取引を対象としたシステムトレードの実施例を説明する。
【００４７】
しかし、もちろん本発明は、日中取引に限定されず、また日経２２５先物に限定されない。それ以外の、ＴＯＰＩＸ先物取引や外国為替保証金取引、あるいはまた現物株の取引にも適用できるものである。
【００４８】
寄り引けのトレードとは、日中の取引開始時刻９：００（寄付き）前に売買いずれかの成行注文を出し、日中の引け時刻１５：１０（大引け）より前に返済注文を引け成りで出す一日で決済するデイトレードのことである。
【００４９】
寄り引けのシステムトレードは、日中相場が開始する前に、「売り」か「買い」あるいは「見送り」かのいずれかのサインを出力しなければならない。
【００５０】
そのために、当日日中相場開始時刻以前に得られる情報を基に、サインを求めるロジックを決める必要がある。
【００５１】
そして、そのロジックで決定されるサインで取引を実行した場合に、勝ち負けがどうなるか、損失と利益がどうなるかを、過去の日経先物の価格データを使って検証し、損益（利益−損失）などがどうなるかを計算することが、検証である。
【００５２】
また、損益以外の成績データ、例えば勝率、最大ドローダウン、プロフィットファクター、なども求めて、システムトレードの性能を評価する必要がある。ドローダウンとは、（過去最大の累積損益−現在の累積損益）を意味する。最大ドローダウンとは、検証期間で最大のドローダウンのことである。
【００５３】
また、時間を横軸にとり、累積損益を縦軸にとった損益曲線のグラフがどうなるかも重要である。損益曲線がなめらかな直線に近いカーブであるほどシステムトレードの性能はよいとされている。
【００５４】
このような成績データやグラフをシステムトレードのロジックを決めるごとに作ることは面倒である。システムロジックのプログラムと、成績データ計算のプログラムを分離してモジュール化することが効率がよい。
【００５５】
プログラミングスキルのある人がモジュール化をするのはそれほど難しくはない。しかし、プログラミングの知識・能力がない人にとっては、モジュール化がどういうことなのかが理解できないし、実現する手段を思いつくのは容易ではない。
【００５６】
本発明は、このようなプログラミングのスキルのない人に、そのようなモジュール化と同等のことをたやすく実現する道具を提供するようなものである。
【００５７】
システムトレードの検証者は、売買決定ロジックを仮に決める。そして、そのロジックを、表計算ソフトの判断式（ＩＦ式）を使った数式で表現するだけでよい。
【００５８】
システムトレード検証者に必要な知識は、表計算ソフトの初歩的な知識とＩＦ式の使い方だけである。
【００５９】
図７は、システムトレード検証プログラム及び表計算ソフトが動作するコンピュータのハードウェア構成図であって、１０１はバス、１０２は計算や処理を実行するＣＰＵ、１０３はＢＩＯＳなどのファームウェアを記録するＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、１０４はプログラムが作業領域として利用する記憶領域であるところのＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、１０５は、コンピュータの基本ソフトウェアであるオペレーティングシステムや、表計算ソフト及びシステムトレード検証プログラムと表計算ファイル等を記憶しておくハードディスク装置のＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）、１０６はディスプレイ装置ＤＳＰ、１０７はキーボードＫＢ、１０８はマウス、１０９はインターネットと接続するためのアダプタのＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）インターフェースである。
【００６０】
表計算ソフトウェアとシステムトレード検証プログラムは、１０５のＨＤＤからＲＡＭ１０４にロードされ、ＣＰＵ１０２によって実行され、動作状況と動作結果はＤＳＰ１０６に表示される。また、オペレータは、キーボード１０７とマウス１０８によって、データを入力し、表計算ソフトウェアとシステムトレード検証プログラムを起動させる。
【００６１】
表計算ファイルには、マクロプログラムとして、システムトレード検証プログラムが組み込まれている。オペレータは、マウス１０８で表計算ファイルを選択し、ダブルクリックすると、表計算ソフトウェアのＥＸＣＥＬが起動され、ＥＸＥＣＬのウィンドウに表計算ファイルが表示される。
【００６２】
表計算ファイルには、３つのシートが含まれている。第１のシートは、データシート１（シート名称：Ａ）、第２のシートはデータシート２（シート名称：Ｂ）、及び第３のシートは、ロジックシート（シート名称：ＬＯＧＩＣ）である。
【００６３】
図１は、データシート１の表示画面である。データシート１には、第１のデータであるところの、日経２２５先物価格（以下、日経先物と略す）の日足４本値（始値、高値、安値、終値）と出来高、及びダウジョーンズ工業平均（以下、単にダウと呼ぶ）の価格の日足４本値（始値、高値、安値、終値）が、日付とともに記憶されている。列Ａは日経先物データの日付、列Ｂ、列Ｃ、列Ｄ、列Ｅは日経先物の日足４本値、列Ｆは日経２２５先物の出来高、列Ｇはダウの日付、列Ｈ、列Ｉ、列Ｊ、列Ｋは、ダウの日足４本値である。
なお、日経先物の日付に対して、同じ行には前日のダウの日付が対応するように並んでいる。
【００６４】
列Ｌは、日経先物の当日の変化量（終値−始値）が記憶されている。列Ｍには日経先物の当日変化率
（終値−始値）×１００÷始値  
が記憶されている。列Ｎには、日経先物の前日安値幅
（前日の始値−前日の安値）
が記憶されている。
【００６５】
また、図１には表示されていないが、そのほか、前記第１のデータから算出される各種指標データが、別の列に記憶されている。例えば、列Ｐには前日日経変化幅
（前日の日経終値−前日の日経始値）
が、列Ｔには前日ダウ変化率
（前日ダウ終値−前日ダウ始値）×１００÷前日ダウ始値
が記憶されている。
【００６６】
上記説明で、列Ｌの当日日経変化、列Ｍの当日日経変化率、列Ｎの前日安値幅、列Ｐの前日日経変化幅、列Ｔの前日ダウ変化率は、第１のデータから算出される指標であるところの第２のデータである。
【００６７】
なお、日経先物４本値は証券会社のインターネットサイトから取得でき、ダウ４本値もインターネットサイトから取得できる。
データシート１には、左上に「指標の計算」と表示されたボタンが配置されている。このボタンをクリックすると、指標を計算するマクロプログラムが実行され、第２のデータである上記指標が計算され、所定の表セルに記録されるようになっている。
【００６８】
図２は、データシート２（シート名：Ｂ）の表示画面である。データシート２には、第１のデータの日経先物４本値と同一のデータと、第１のデータから算出され、データシート１にはない指標であるところの第２のデータが記憶されている。例えば、それらは、移動平均、移動平均乖離率、ＲＳＩ（Ｒｅｌａｔｉｖｅ  Ｓｔｒｅｎｇｔｈ  Ｉｎｄｅｘ）、ストキャスティックスの％Ｋ、％Ｄ、％ＳＤ、ボリュームレシオ、ＭＡＣＤ（Ｍｏｖｉｎｇ  Ａｖｅｒａｇｅ  Ｃｏｎｖｅｒｇｅｎｃｅ  ａｎｄ  Ｄｉｖｅｒｇｅｎｃｅ）など、いわゆるテクニカル指標である。これらのテクニカル指標の定義については、下記の参考文献を参照されたい。
株式相場のテクニカル分析  合寳郁太郎・小沢文雄著  日経新聞出版社  １９８５年
【００６９】
データシート１にも、「指標の計算」ボタンが配置されている。このボタンをクリックすることにより、第１のデータから、各種指標の第２のデータが算出される。
【００７０】
図３は、ロジックシートである。列Ａには、日付が日付順に記憶されている。
列Ｂ〜列Ｊには、項目名として、
データ
メインルール
フィルタルール１
フィルタルール２
最終ルール
ＬＣ１
ＬＣ２
損益
累積残高
の列が並んでいる。
【００７１】
「データ」列には、指標として利用するメインの指標を前記第２のデータから選び、その数値を参照する数式をセルＢ１０に入力しておく。
例えば、本実施例では、前日ダウ変化率をメインの指標として使うので、次のようにする。
前日ダウ変化率は、データシート１（シート名：Ａ）の列Ｔに記憶されている。
【００７２】
また、ロジックシート先頭行の日付は、１９９７年１月７日である。したがって、参照するデータシート１のセルは、Ｔ列の、列Ａが１９９７年１月７日の行である。この行番号は１１であるので、セルＢ１０に入力する数式は、
＝Ａ！Ｔ１１
となる。これは、ＥＸＣＥＬの数式で、シート名ＡのＴ１１のセルを参照するという意味である。
【００７３】
次にメインルールのセルＣ１０に売買ルール数式を入力する。その前に、売買ロジックを決めておく必要がある。
日経先物の特性として、
前日ダウが上昇すれば、当日の日経先物は始値から終値にむかって下落する（陰線となる）可能性が大きい、反対に前日ダウが下落すれば、当日の日経先物は始値から終値にむかって上昇する（陽線となる）可能性が大きい
という性質が知られている。
【００７４】
また、前日日経先物変化が、上昇ならば、当日日経先物は始値から終値にむかって下落する（陰線となる）可能性が大きい、反対に前日日経先物変化が下落すれば、当日日経先物は始値から終値にむかって上昇する（陽線となる）可能性が大きい
という性質も知られている。
そこで、メインルールとして、
前日ダウ変化率が、ａ％より大きければ、売りサインとする。
前日ダウ変化率が、−ａ％より小さければ、買いサインとする。
を第１のサインとして使うことにする。
【００７５】
また、このサインをフィルタリングする第２のサインとして、フィルタルールを
前日日経変化幅が、ｂ円より大きければ、売りサインとする。
前日日経変化幅が、ｃ円より小さければ、買いサインとする。
を第２のサインとして使う。
【００７６】
そして、最終ルールは、第１のサインと第２のサインが一致した場合に、そのサインを最終のサインとする、一致しなければ、「見送り」とする、というものにする。
【００７７】
上記説明で、ａ，ｂ，ｃは、システムトレードを調整するためのパラメータである。
ａは、ロジックシートのパラメータ１のセルＭ１１に値を設定しておく。
ｂは、ロジックシートのパラメータ４のセルＭ１４に値を設定しておく。
ｃは、ロジックシートのパラメータ５のセルＭ１５に値を設定しておく。
【００７８】
そして、「売り」サインを示すラベルとして、数値「１」使う、「買い」サインを示すラベルとして、数値「２」を使う、「見送り」サインを示すラベルとして、数値「０」を使うことにする。
【００７９】
すると、メインルールのセルＣ１０に入力する売買ルール数式は、次のようになる。
[メイン売買ルール数式]
＝ＩＦ（Ｂ１０＞＄Ｍ＄１１，１，ＩＦ（Ｂ１０＜−＄Ｍ＄１１，２，０））
ＩＦ式の構文は、
ＩＦ（式１、式２、式３）
である。式１が真ならば、このＩＦ式の値は、式２になる。また、式１が偽ならば、このＩＦ式の値は、式３になるという意味である。
【００８０】
上記メイン売買ルール数式の式３には、また次のＩＦ式が入っている。
ＩＦ（Ｂ１０＜−＄Ｍ＄１１，２，０）
つまり、最初の判断で、売り「１」でなかったなら、買い「２」かどうかを検査するのである。
【００８１】
なお、＄Ｍ＄１１は、セルＭ１１を指定する絶対セル位置指定を意味する。
次に、フィルタルールとして、売買ルール数式をロジックシートのセルＤ１０に、入力する。
【００８２】
セルＤ１０に入力する数式は次のようになる。
[フィルタ売買ルール数式]
＝ＩＦ（Ａ！Ｐ１１＞＄Ｍ＄１４，１，ＩＦ（Ａ！Ｐ１１＜＄Ｍ＄１５，２，０））
ここで、Ａ！Ｐ１１は、前日日経変化幅のデータシート１のセル位置を指定している。
【００８３】
次に最終ルールとして、最終売買ルール数式を、セルＦ１０に入力する。
その数式は、次のようになる。
[最終売買ルール数式]
＝ＩＦ（Ｃ１０＝Ｄ１０，Ｃ１０，０）
これが、メインルールとフィルタルールのサインが一致した場合に、そのサインを最終サインとし、一致しなければ見送り「０」とすることは自明である。
【００８４】
次にロスカットルール数式をセルＧ１０に入れる。
ロスカットルールは、あらかじめ算出されたロスカット幅に等しいか大きい含み損になったら、損切りの返済をする、というものである。
【００８５】
そこで、ロスカットルール数式は、ロスカット幅を決める数式である。
ロスカットルール数式は、ｄをパラメータとして、
前日の日経先物の終値×ｄ÷１００００＝ｅ
を計算する。そして、ｅと７０の大きいほうをロスカット幅とする、である。
【００８６】
すなわち、セルＧ１０には次のロスカットルール数式を入力する。
＝ＩＦ（Ａ！Ｅ１０＊＄Ｍ＄２１／１００００＜７０，７０，Ａ！Ｅ１０＊＄Ｍ＄２１／１００００）
ここで、Ａ！Ｅ１０は前日日経先物の終値を指定するセル位置である。
また、＄Ｍ＄２１は、セルＭ２１の絶対セル位置指定であって、セルＭ２１には前記パラメータのｄを設定しておく。
【００８７】
なお、実際のロスカット幅は、１０円単位でなければならないので、セルＧ１０のロスカット幅を１０円未満切捨てされた実際のロスカット幅がＨ列にシステムトレード検証プログラムによって設定される。
【００８８】
パラメータとして、
セルＭ１１に、０．２５を
セルＭ１４に、３０  を
セルＭ１５に、−３０  を
セルＭ２１に、  ８０  を設定する。
ここまでが、ユーザが行う作業である。以上でわかるように、ユーザは、ＥＸＣＥＬのＩＦ式の使い方の知識があればよく、プログラミングの知識は必要ない。
【００８９】
以上の準備作業が終わったら、ロジックシートの右上にある「ＢａｃｋＴｅｓｔ」ボタンをクリックして、システムトレード検証プログラムを起動させる。
【００９０】
図５と図６は、システムトレード検証プログラムの処理を説明するフローチャートである。以下、これらにそって説明する。
【００９１】
ステップ５０１では、ロジックシートのルール行を残りの期間すべてにわたってコピーする。ユーザは、１９９７年１月７日の１日分の、データ、売買ルール数式とロスカットルール数式を入力した。システムトレード検証プログラムは、この１日分の数式を、１９９７年１月８日から、ロジックシートの最後の日付のところまで、コピーする。このコピーにおいて、Ｔ１１などのような相対セル位置指定は、ＥＸＣＥＬの機能で、自動的に１行ずつずれてくれて適切なセル位置に修正される。ただし、絶対セル位置指定は修正されない。
【００９２】
数式のコピーをすると、メインルール、フィルタルール、ロスカットルール（ＬＣ１）には、ＥＸＣＥＬが計算した数値が設定される。
【００９３】
次にステップ５０２へ行き、以下の初期化を行う。
セルＭ６に設定されている検証開始日に等しい日付のロジックシートの行番号、及びデータシート１の行番号を求め、それぞれを、行番号カウンタｉと，ｊに代入する。
ドローダウン変数ＤＤを０にセットする。
最大ドローダウン変数ＭＡＸ−ＤＤを０にセットする。
ドローダウンフラグをＯＦＦにセットする。
最大損益と損益を０にセットする。
勝ち数と負け数を０にセットする。
【００９４】
以下で使う用語の定義をする。当日損益とは、１日のトレードでの損失または利益を表し、単に、「損益」という用語は、その日までの累積の損益を表す。また、最大損益とは、これまでの損益の最大値を表すものとする。
【００９５】
次にステップ５０３に行き、これ以降、端子Ｂまでの処理を、行番号カウンタ、ｉ，ｊを１増やしながら、ループする。そして、セルＭ７の示す検証終了日に達したら、ループから抜け出し、ステップ５０４にいき、検証結果である成績の各種データをロジックシートのセル上に出力させる。すなわち、図４の右下にある成績プロフィールと、中央にある損益曲線グラフを出力する。
【００９６】
成績プロフィールには次のものが出力される。
総損益
有効トレード数
勝ちトレード数
負けトレード数
平均損益
ＰＦ（プロフィットファクター）
勝率
平均利益
平均損失
ペイオフレシオ
最大勝ち連続数
最大負け連続数
最大ドローダウン
最大ドローダウン発生日
平均ドローダウン
最大ドローダウン期間
平均ドローダウン期間
勝率は、勝ち数×１００÷（勝ち数＋負け数）
で計算する。
【００９７】
ステップ５０３の判断で検証終了日に達してなければ、ステップ５０５に行く。
ロジックシートのＦ列の第ｉ行目のセル（最終ルール）を読み取る。また、Ｇ列の第ｉ行目のセル（ＬＣ１）を読みとり、１の位を切り捨てた数値をＬＣとし、ＬＣをＨ列の第ｉ行目にセットする。
【００９８】
次にステップ５０６に行き、売買サインが、数値「１」（売り）か、数値「２」（買い）か、数値「０」（見送り）か、を検査する。
【００９９】
見送りならば、ステップ５０７にいき、当日損益（変数Ｒｅｓｕｌｔ）に０をセットする。
【０１００】
売りならば、ステップ５０８に行き、損切り（ロスカット）か、どうかを検査する。すなわち、（高値―始値）≧ＬＣならば損切りとなり、ステップ５０９に行き、
当日損益（変数Ｒｅｓｕｌｔ）に−ＬＣをセットする。また、ステップ５０８で（高値―始値）≧ＬＣでなければ、終値での買い返済（引け成り）であるので、ステップ５１０で、
当日損益（変数Ｒｅｓｕｌｔ）に（始値−終値）をセットする。
【０１０１】
ステップ５０６で、買いならば、ステップ５１１に行き、損切りかどうかを検査する。すなわち、（始値−安値）≧ＬＣならば損切りとなり、ステップ５１２に行き、
当日損益（変数Ｒｅｓｕｌｔ）に−ＬＣをセットする。また、ステップ５１１で始値−安値）≧ＬＣでなければ、終値での売り返済（引け成り）であるので、ステップ５１３で、
当日損益（変数Ｒｅｓｕｌｔ）に（終値−始値）をセットする。
【０１０２】
次にステップ６０１に行き、当日損益が０より大きいか、０以下であるかを判定する。当日損益が０より大きければ、ステップ６０２に行き、勝ち数を１増やす。また、当日損益が０以下ならば、ステップ６０３に行き、負け数を１増やす。ここで、当日損益が０の場合も負けとみなすのは、当日損益が０であっても、証券会社に支払う手数料が発生し、実際は当日損益がマイナスとなるので、負けとみなした。
【０１０３】
次にステップ６０４に行き、これまでの損益（累積の損益）に、当日損益を加算し、損益を更新する。そして、損益と最大損益を比較し、損益が最大損益以上ならば、ステップ６０５に行く。
【０１０４】
ステップ６０５では、最大損益に損益を代入する。そして、ステップ６０６に行き、ドローダウン変数ＤＤを０にセットし、ドローダウンフラグＤＤ−ＦＬＡＧをＯＦＦ（ドローダウン解消）にする。
【０１０５】
ステップ６０４で、損益が最大損益より小さければ、ドローダウン継続または開始なので、
ステップ６０７に行き、ドローダウンフラグＤＤ−ＦＬＡＧをＯＮにする。
【０１０６】
次にステップ６０８に行き、ＤＤと（最大損益−損益）を比べる。
ＤＤ＜（最大損益−損益）ならば、ドローダウン更新なので、ステップ６０９に行き、ＤＤに（最大損益−損益）をセットする。
【０１０７】
次にステップ６１０に行き、ＤＤとＭＡＸ−ＤＤを比較し、ＤＤのほうが大きければステップ６１１に行く。ステップ６１１では、ＭＡＸ−ＤＤにＤＤをセットする。
【０１０８】
そして、ステップ５０３に戻る。
ＤＤのほうが小さいか等しければ、直接ステップ５０３に行く。
このようにして、ユーザは、売買ルール数式とロスカットルール数式をたった１日分だけを設定すればよく、あとの検証すべてが自動的に行われる。
また、ロジックシートのパラメータの数値を変更して、ＢａｃｋＴｅｓｔボタンをクリックすれば、別のパラメータの検証結果を簡単に得ることができるので、最適パラメータを探すのが容易である。
【実施例２】
【０１０９】
次に第二の実施例として、デイトレードではなく、新規に売買をして建玉を建てたあと、当日は必ずしも返済しないで、後日返済条件をみたしたときに、返済をするスゥィングトレードの場合のシステムトレード検証プログラムを説明する。
（注：「建玉」とは、注文が成立して購入した日経先物のことをいう。「建玉を建てる」とは、新規に注文を成立させることをいう相場用語である。）
【０１１０】
図８は、スゥィングトレードの場合のロジックシートである。このロジックシートには、新規に建玉をするための売買ルール数式を設定するＥＮＴＲＹルールのセル領域と、建玉を返済するための売買ルール数式を設定するＥＸＩＴルールのセル領域がある。それぞれルール１〜ルール５の5個のルール数式設定用セルと、最終ルール設定用の最終ルール（ルール５の右隣）のセルがある。
【０１１１】
ＥＮＴＲＹルールとＥＸＩＴルールは異なる売買ルール数式を設定しても、同じ売買ルール数式を設定してもよい。
いま、例えば、テクニカル指標のＭＡＣＤとＭＡＣＤシグナルの2個の指標を使って、よく知られている出動／手仕舞いの売買ルールを採用する。
【０１１２】
すなわち、前々日に
ＭＡＣＤ  ＜  ＭＡＣＤシグナル
であったものが、前日に
ＭＡＣＤ  ＞  ＭＡＣＤシグナル
に変化したとき（条件Ａ）、当日は「買い」サインとする。
【０１１３】
また、
前々日に
ＭＡＣＤ  ＞  ＭＡＣＤシグナル
であったものが、前日に
ＭＡＣＤ  ＜  ＭＡＣＤシグナル
に変化したとき（条件Ｂ）、当日は「売り」サインとする。それ以外のケースは、「見送り」とする。
【０１１４】
そして、フィルタルールとしては、ＲＳＩを使う。すなわち、
上記ＭＡＣＤによるサインが「買い」であったとき、さらに前日のＲＳＩの数値が
ＲＳＩ＜９０
であったとき（条件Ｃ）に、「買い」サインとし、ＲＳＩが上の条件をみたさないときは「買い」サインではなく「見送り」とする。
【０１１５】
また、上記ＭＡＣＤによるサインが「売り」であったときに、さらに前日のＲＳＩの数値が、
ＲＳＩ＞１０
であったとき（条件Ｄ）に、「売り」サインとし、ＲＳＩが上の条件をみたさないときは「売り」サインではなく「見送り」とする。
【０１１６】
ＥＮＴＲＹルールのルール１には、次の数式を設定する。
＝ＩＦ（ＡＮＤ（Ｂ！Ｏ２５５＞Ｂ！Ｐ２５５，Ｂ！Ｏ２５４＜Ｂ！Ｐ２５４），２，０）
データシート２（シート名：Ｂ）には、列ＯにＭＡＣＤが、列ＰにＭＡＣＤシグナルのデータが記憶されている。
したがって、これは上述の条件ＡをＩＦ式で表現したものである。
【０１１７】
また、ＥＮＴＲＹルール２には、買いの場合のＲＳＩによるフィルタルールを設定する。すなわち、次の数式を設定する。
＝ＩＦ（Ｂ！Ｊ２５５＜＄Ｖ＄１１，２、０）
データシート２（シート名：Ｂ）には列ＪにＲＳＩのデータが記憶されている。また、セルＶ１１には、パラメータの数値９０がセットされている。これは、上記条件Ｃを表現したものである。
【０１１８】
同様にして、ルール３には、ＭＡＣＤによる「売り」サインを出す数式、
＝ＩＦ（ＡＮＤ（Ｂ！Ｏ２５５＜Ｂ！Ｐ２５４、Ｂ！Ｏ２５４＞Ｂ！Ｐ２５４），１，０）
を設定する（条件Ｂ）。
【０１１９】
また、ルール４には売りのＲＳＩによるフィルタルールの数式、
＝ＩＦ（Ｂ！Ｊ２５５＞＄Ｖ＄１２，１，０）
を設定する（条件Ｄ）。
セルＶ１２には、パラメータの数値１０が設定されている。
【０１２０】
そして、最終ルールのセルＧ１０には、次の数式を設定する。
＝ＩＦ（ＡＮＤ（Ｂ１０＝２，Ｃ１０＝２），２，ＩＦ（ＡＮＤ（Ｄ１０＝１，Ｅ１０＝１），１，０））
これは、上記条件ＡとＣをＡＮＤで組み合わせ、条件ＢとＤをＡＮＤで組み合わせて、売り買いのサインを出す売買ルール数式となっている。
【０１２１】
この実施例では、ＥＸＩＴルールはＥＮＴＲＹルールと同じものを設定するので、ＥＸＩＴルールの説明は省略する。
【０１２２】
ロジックシートのセルＯ１０には、利食い幅の数式を設定する。この例では、固定値８００を設定してある。また、セルＰ１０にはロスカットルール数式を設定するのであるが、この例では４００の固定値である。
【０１２３】
以上の準備を行って、ＢａｃｋＴｅｓｔボタンをクリックすると、システムトレード検証プログラムが起動される。
すると、まず、ロジックシートの売買ルール数式、利食いルール数式、ロスカットルール数式が設定されているセル領域Ｂ１０〜Ｐ１０の１行の数式が、ほかの全ての日付のところのＢ〜Ｐ列にコピーされる。
【０１２４】
そして、各変数（損益、最大損益、ドローダウン、最大ドローダウン、勝ち数、負け数等）、の初期化を行う。
【０１２５】
このスゥイングトレードの場合は、実施例１のデイトレードとは異なり、当日以前に建てた「建玉」が存在するかどうか、また、ＥＮＴＲＹルールとＥＸＩＴルールのサインが両方出るか、片方だけ出るかなどによって、処理は複雑になる。
【０１２６】
図９は、その処理を場合わけした分類表である。また、図１０は１日についてのフローチャートの概略である。
以下、図１０にしたがって説明する。
【０１２７】
ステップ１００１で「建玉があるか」を検査する。建玉がなければ、ステップ１００２に行き、ＥＮＴＲＹサインがあるかどうかを調べ、サインがあれば、ステップ１００３に行く。そして、そのＥＮＴＲＹサインで新規に建玉を建てる。すなわち、サインに従い、日経先物を当日寄り付きで売買する。売買条件（建価格）は建玉情報変数に記憶される。
【０１２８】
そして、ステップ１０１２へ行き、損切り処理を行う。すなわち、建玉の建てた価格と現在値を比較して、含み損がＬＣ（いまの場合４００円）以上になったら、損切りの返済をする。
【０１２９】
次に、ステップ１０１３へ行き、利食い処理を行う。すなわち、建玉の建価格と現在値比較して、含み益が利食い幅（今の場合８００円）になったら、利食いの返済を行う。もちろん、ステップ１０１２で損切りが実行された場合は、建玉が消えたので、利食い処理は実行されない。
【０１３０】
ステップ１００１で、建玉があったときは、ステップ１００４へ行く。
ステップ１００４では、ＥＮＴＲＹサインがあるかどうか検査し、あればステップ１００５へ行き、なければステップ１００９へいく。
【０１３１】
次にステップ１００５では、ＥＸＩＴサインがあるかどうか検査して、あればステップ１００６へ行き、なければステップ１００８へ行く。
【０１３２】
ステップ１００６では、ＥＮＴＲＹサインとＥＸＩＴサインが一致しているかどうか検査する。いまの例では、かならず一致するのであるが、図１０のフローチャートはより一般的なケースを表現している。
【０１３３】
サインが一致していればステップ１００７へ行き、ドテンをする、すなわち、建玉を返済し、新規にＥＮＴＲＹサインで建玉を建てる。サインが売りで一致していたら、建玉は「買い」で建てたわけであって、建玉を「売り」返済して、新規に「売り」の建玉を造るのである。このような建玉の「買い」「売り」が逆になる取引を「ドテン」と呼ぶ。
そして、ステップ１０１２へ行く。
【０１３４】
ステップ１００６でサインが同じでなければ、ステップ１００８へ行き、新規注文はせず、現在の建玉をそのまま保持する。すなわち、ＥＸＩＴサインが売り、ＥＮＴＲＹサインが買いだとしたら、建玉を売り返済して、新規に買いの建玉をしたとしても、もともとの「買い」建玉を保持するのと結果は同じだからである。
【０１３５】
ステップ１００４でＥＮＴＲＹサインがなければ、ステップ１００９へ行き、ＥＸＩＴサインがあるかどうか検査する。あれば、１０１０へ行き、建玉を返済する。そして、ステップ１０１２へ行く。
【０１３６】
１００９でＥＸＩＴサインがなければ、ステップ１０１１へ行き、現在の建玉を保持する。そして、ステップ１０１２へ行く。
以上の処理で、建玉を返済したら、当日損益を計算し、ロジックシートの列Ｒに記録する。
以上の１日の処理が終わったら、検査終了日に達するまで、図１０の処理を繰り返す。
【０１３７】
検査終了日に達したら、勝率の計算、累積損益、最大ドローダウンの計算は実施例１と同様に計算し、システムトレードの成績をロジックシートに記録する。
成績情報としては、実施例１と同様に、各種成績プロフィールと損益曲線のグラフがロジックシートに表示される。
【０１３８】
なお、実施例２は、日足４本値での検証を説明したが、本発明は、取引商品の価格が日足に限定されるものではない。例えば、５分ごとの価格データである、５分足データをデータシートに記憶させ、ロジックシートのＡ列を５分間隔の時間軸にしても、本実施例とまったく同様に検証を行うことができる。
したがって、本発明は任意の分足の検証も包含する。
【産業上の利用可能性】
【０１３９】
本発明のシステムトレード検証プログラムは、システムトレード開発に欠かせない検証を簡単に行うことができるので、特に一般個人投資家が自分でシステムトレードを開発することを容易にするものであり、投資家は、性能と限界をよく理解した上で投資活動を行うことができるようになる。
【０１４０】
また、販売されているシステムトレードの検証を一般個人投資家が行うことに活用すれば、システムトレード販売マーケットに健全な影響をもたらすので、本発明を活用する意義は大きい。
【符号の説明】
【０１４１】
１０１  バス
１０２  ＣＰＵ
１０３  ＲＯＭ
１０４  ＲＡＭ
１０５  ハードディスク装置
１０６  表示装置
１０７  キーボード
１０８  マウス
１０９  ＬＡＮインターフェース
【図５】
2010267103.tif 000003
【図１】
2010267103.tif 000004
【図２】
2010267103.tif 000005
【図３】
2010267103.tif 000006
【図４】
2010267103.tif 000007
【図６】
2010267103.tif 000008
【図７】
2010267103.tif 000009
【図８】
2010267103.tif 000010
【図９】
2010267103.tif 000011
【図１０】
2010267103.tif 000012