No.23 条件表を最適化して成績を高めるには


2018年5月に執筆 ・・・・  講座目次へ.

【1】最適化するための基礎知識

【2】(10日間突破/順)トリガー条件表を最適化してみる

【3】最適化したトリガー条件表の買いマーク位置の検証をする

【4】トリガー条件表に別のチャートを追加すれば成績がよくなる

【5】条件表を分割して追加するチャートを見つける方法

【6】オートマを使って追加するチャートを決める方法

【7】オートマで全数を対象にした条件表を作る

【8】終わりに



【1】最適化するための基礎知識

《Qエンジン》の「最適化」と「オートマ」について説明します。株式を買うとき、投資家は明日あるいは10日後・1か月後・半年後・1年後・5年後に、株価は上昇しているだろうと思っています。買おうと思った理由・上がると思った理由は投資家によって異なります。世界の経済状態を考えずに決める人もいます。HPなどの噂の情報で決定する人もあるし、チャートで決める人もいます。

私は株式投資のウェートは、@チャートが60%、A経済を含めた情報(金融政策・為替・景気・企業業績・新製品などの情報)が30%、B世界の政治状況が5%、C残り5%は天災などの突発的な原因によるもので予想不能。くらいかなと思っています。チャートにはABをリサーチした投資家が現に株式を売買しているので、予想は正しいとは限らないが、現時点で投資家が思っていることが表現されているはずです。チャートのウエートは高くて当然です。

だからよいチャートの見方を身につけるならば、60%程度の勝率はあります。チャートの見方を身につけなくても、よい条件表を持っているなら同じように60%の勝率が得られます。(この際の勝率とは、投資家によって@保有する期間や、A利食いの大小が異なるので、X日後に評価益が少しでも出たなら、「勝ち」としたものです。自分が20%の利益を上げたいと思っているときに20%の利益がでる確率ではありません。


■■ (1)トリガーと売買ルール ■■

まずどうすれば勝率を60%にすることができるのかです。私が思っていることは、
  1. 簡単なチャートを中心に据える。この簡単なチャートを「トリガー」と呼びます。トリガーは何であってもかまいません。例えば、@株価が最近10日間の高値を上回ったとき、Aボリンジャーの+2σの線を上回ったとき、B9日順位相関が20以上になったとき、C長短2本の平均線がクロスしたとき、などいくつか考えられます。多くはこのトリガーだけで仕掛けるなら、その勝率は50%前後でしょう。(まれには55%の勝率を出すものもあります)

  2. このトリガーに別のチャートを追加して、より勝率を高める。というのが理論的な道筋です。勝率が高くなるということは、採用されないトリガーがでるということです。これによって仕掛ける回数は減ります。勝率を高めることはそう難しいことではありません。@キツイ売買条件をつけるか、Aわずかの利益で利食いするようにすれば、勝率70%〜80%の条件表を作ることは可能です。しかしその反面、@の場合は投資が機会はドンドン減り、1年に1回の機会しかなかったということになりかねません。Aの場合はすぐに利食いするので、累計利益がナカナカ積み上がりません。

  3. 別のチャートを加えることによって投資機会(トレード数)が、トリガーだけによるトレード数の1/1000になるよりも、1/100くらいで止まるほうがよい。ただし投資機会が1/1000になっても10年間で200回とか300回の投資機会があれば、さらに勝率を高めることは悪いことではありません。投資機会が少ないのはよくありません。

本講座では、トリガーは@(X日間の高値突破したら買い)の順張りを例にして説明します。A(X日間の安値を上に突破したら買い)という逆張りもありますが、本講座では説明を省きます。まずは(X日間を何日にすればよいのか)を最適化で決定します。この講座の売買ルールは、
  1. 買いマークが出たら、翌日の始値で仕掛ける
  2. 仕掛て20日が経過したら、翌日の始値で決済する(時間切れ)
  3. 途中ザラバで+20%の利益が出たら決済する(利食い)
という簡単なルールです。


(図1))は(10日間の高値を上に突破したら買い)のグラフです。順張りです。

(a)の翌日始値767円で仕掛け、20日が経過した翌日始値765円で決済したので-2円のマイナス。

(b)の翌日始値794円で仕掛け、20日が経過した翌日始値758 円で決済したので-36円のマイナス。

(c)の翌日始値768円で仕掛け、20日が経過した翌日始値771 円で決済したので+3円のプラス。

(d)の翌日始値786円で仕掛け、20日が経過した翌日始値931 円で決済したので+145円のプラス。

(e)の翌日始値860円で仕掛け、20日が経過した翌日始値922 円で決済したので+62円のプラス。

この例では3勝2敗です。

(図2)は(10日間の安値を下に突破したら買い)のグラフです。逆張りです。

(a)の翌日の始値588円で仕掛け、この日から20日たった翌日始値600円で決済して+12円のプラス。

(b)の翌日始値595円で仕掛け、20日が経過した翌日始値727円で決済すると+132円のプラス。たまたま+20%の利益率にもなりました。

この例では2勝0敗です。

■■ (2)トリガーのヒナ形を設定する ■■

@順張りとA逆張り の2種類のトリガーを設定しました。(逆張りのトリガーは本講座では説明しません)

(図3)は、(10日間の高値を上に突破したら買い)順張りのトリガーです。


  1. 過去10日間のうちで最も高い高値を取り出します。10日間のうちの高値は「株価の最大値」で取り出せます。
  2. それを1日先にずらすことによって、昨日までの高値を取り出します。
  3. 今日の終値が昨日までの高値を上回った(ゴールデンクロスした)日に買いとします。
  4. しかし連続して高値を更新することもあるので、前日までの5日間は下回っていた(デッドクロスしていた)ときだけ買いとします。
(図4)は、(10日間の安値を下に突破したら買い)逆張りのトリガーですが、参考のために掲げます。


  1. 過去10日間のうちで最も安い安値を取り出します。10日間のうちの安値は「株価の最小値」で取り出せます。
  2. それを1日先にずらすことによって、昨日までの安値を取り出します。
  3. 今日の終値が昨日までの安値を下回った(Dクロスした)日に売りとします。
  4. しかし連続して安値を更新することもあるので、前日までの5日間は上回っていた(Gクロスしていた)ときだけ買いとします。

■■ (3)設定したトリガーの成績を知る ■■ 

10日高安値突破の成績はどうなっているのでしょうか? いくら簡単なトリガーであっても、平均利益率が-0.1%だとか、勝率が45%、PFが0.95倍ではやればやるほど損失になります。そういうトリガーは役にたちません。

成績を知るには「検証」を使います。だが検証によってトレードした回数(買いマークが出た日)はパソコンの性能から約32500回しか表示できません。それを超えると検証は強制的に終了します。東証1部の1873銘柄(2017年末でデータ数が500個以上あり、ETF・REITでない銘柄)について「検証」できればよいのですが、2007年1月〜2016年12月の10年間で、このトリガーが買いマークを出した回数は、なんと109014回もあります。許容の32500回の3倍以上です。1876銘柄についての「検証」は不可能です。

「検証」のよいところは、買いマークが出た銘柄のひとつひとつの内容(成績)がわかることです。

例えば(図5)の1333 マルハニチロは、1)2016年11月29日に買いマークが出た。2)翌日の始値2865円で仕掛けたところ、3)20日間が経過したので翌日の始値3165円で決済すると、4)+10.12%の利益(最終%欄)になったことがわかります。

1377 サカタの種は、1)2007年2月16日に買いマークが出た。2)翌日始値1465円で仕掛けたところ、3)10日間が経過したので翌日始値14655円で決済すると、4)-0.61%の損失(最終%欄)になったことがわかります。

個々の取引内容よりも全体の成績を知りたいのであれば、1873銘柄の10年間の全体の成績を知ることができます。これは《Qエンジン》の「最適化」の機能を使います。

(図6)は《Qエンジン》の「最適パラメータのもとめかた」の画面です。ここで設定しているのは、
1)3線(10日最大値の行)のパラメータを、
2)(10〜10)に変化させるとしています。

(10日〜10日)に変化させるということですから、実際には(10日最大値)だけの検証をすることになります。「最適化」では個々の内容を記憶せず、全体の成績だけを記憶するので、10000回や100000回の検証はへっちゃらです。100万回でもできるがパソコンの計算では丸め誤差が累積します。

(図7)は(10日間の高値を上に突破したら買い)の1873銘柄10年間の成績です。
  1. 利食い(ザラバで+20%の利益がでたら利食いするという売買ルールをつけている)は8768回

  2. 時間切れが100246回
  3. 総トレード数は1090141回
  4. 平均利益率は0.43%
  5. PF(プロフィットファクター)は1.12倍
であることがわかります。

「検証」では32500回の買いで打ち切られますが、32500回の検証では約22分の時間がかかりました。もし109000回の検証ができたとしたら、この3.3倍の72分を要することになります。一方「最適化」で109000回の検証をしたときは7分弱であったので、「検証」は「最適化」の10倍の時間がかかることになります。条件表を設定していく過程では「検証」を繰り返しますが、1回の検証で72分もかかってはたまりません。全体の成績を掴むだけなら「最適化」を使えばよいのです。


■■ (4)サンプリングした銘柄で検証する ■■ 

  トリガーの(パラメータ)や(以上以下)の数値はどうあればよいのかを知るために、これから「最適化」をどしどしやっていきます。この時最適化するためにどのくらいの時間がかかるのかは、大きな問題になります。

例えば(図8)は「最適条件行」の画面ですが(パラメータ)を10日・20日・30日・40日の4通りに変化させ、(以上・以下)の以下欄を-15、-10、-5の3通りに変化させると、1銘柄につき(4×3=)12通りの検証をすることになります。

先ほどパラメータを10日に固定して「最適パラメータ」によって検証をしたら7分を要していました。この例では12通りの検証を行うので、だいた12倍の時間がかかります。1873銘柄・10年間では84分かかります。

最適化とは(パラメータ)や(以上・以下)の数字を少しずつ変えて、最も良い成績をだした数字を見つけることですから、パラメータを10日・20日・30日・40日の4通にしか変えないのは不足です。

少なくとも10日〜300日の間で10日ずつ変化させる(この場合は30通り)とか、5日〜200日の間で5日ずつ変化させる(この場合は40通り)のように、数多く変化させる必要があります。

(10日間の高値を上に突破したら買い)は5日とか9日とかが多く使われているからといって、これに従うことははありません。5日とか9日を持ちだしてくる人は、おそらく大規模な検証はしていません。最近の時期について、適当な銘柄(特に大幅上昇した銘柄を選ぶことが多い)を見て簡単に結論(それも誤っている)を出しているにすぎません。


■■ (5)サンプリング (1873銘柄からサンプリングする) ■■

選挙の調査や世論調査は日本の有権者のすべてを調査するわけではありません。2か月に1回くらいある世論調査はだいたい2000人くらいのサンプル抽出された有権者についてアンケートを取るようですが、これに回答する者は半分の1000人程度、有効回答数は500人くらいです。安倍内閣の支持率が40%そこそこになったといってもわずか500人〜1000人の回答者の意見です。

新聞各社は同じような方法でサンプリングしていると思いますが、内閣支持率・不支持率には突拍子もない数字は出てきません。2018年3月25日の日経新聞の調査による内閣支持率は42%、サンケイの3月11日の調査による内閣支持率は45%、朝日新聞の3月18日の調査による内閣支持率は31%、毎日新聞の3月18日の調査による内閣支持率は33%、共同通信の3月12日の調査による内閣支持率は39%。です。

45%のサンケイから31%の朝日とでは14%の違いがでていますが、これは調査した時期(森友や加計学園に対する財務省の文書改ざん、自衛隊の日報棄却のウソ、財務次官のセクハラなどが起きたときに調査していれば支持率は低下するし)あるいはサンプル数の大小によっても信頼性は変わります。HPで調べたところ、サンプル数がわかったのは、朝日の1010人、日経は1015人、サンケイは不明、毎日は不明、時事通信はだいたい1300人でした。 新聞社によってアンケートの内容が異なるので、知らず知らずには回答者の意見が変わってくることもあるでしょう。しかし最低の31%(朝日)と最高の45%(サンケイ )を比べるとサンケイの支持率は朝日の1.45倍です。サンケイは安倍内閣を応援し、朝日は安倍内閣に批判的なようだから、支持率に違いに差がでたのでしょうか。

この点「検証」や「最適化」をするための銘柄のサンプリングはスッキリしています。同じ日に、同じ方法で、サンプリングするだけです。重要なことは無作為(ランダム)に銘柄を選ぶということです。


《Qエンジン》にランダムにXX銘柄を選択するという機能を追加しました。(Ver.6から)

  1. メニューの「結果」をクリックして

  2. 「ファイル読込」で(標準3)のNo.986「東証1部(除ETF・REIT)」の銘柄を読み込みます。(ユーザーはこの結果ファイルはないので、「東証1部」を読み込んでも構いません。

  3. 1873銘柄が選択されるので、「メニューの結果間引き」をクリック。これがサンプルとする銘柄を決めてくれます。

  4. @選択している銘柄を1/Nにする、A選択している一定の銘柄数にする。の2つから選ぶことができます。

    ここではAの一定銘柄数を選び、サンプル数を(400個)に減らすように指示しました。

  5. ランダムに銘柄を選ぶために、プログラムはランダムに(0〜0.99999999999999999のような)数字を発生させます。ランダムな数字を使って400銘柄が選択されますが、発生させたランダムな数字によっては、400銘柄ピタリとならない場合があります。(右図では403銘柄が選択されています)

    400銘柄ちょうどにしたいなら、適当に3銘柄を選択から外してください。([Ctrl]キーを押しながら、選択から除外したい銘柄をクリック)

  6. 400銘柄になったら、「記憶」ボタンで任意の結果ファイルNo.に記憶します。

    右図のように(拡張4)のNo.987に 「東証1部(ランダム100)」を記憶させ、

    (拡張4)のNo.989に 「東証1部(ランダム400)」を記憶させました。1873銘柄の「最適化」をするときには(ランダム400)または(ランダム100)を使っても似たような最適化ができるはずです。

    新聞社の世論調査で500人のサンプルを使うのに比べれば、はるかに全体の成績に近い成績がでるはずです。(サンプル銘柄を使っても大きな違いがないことは次章で確かめます)

■■  (6)全数(1878銘柄)とサンプリングした銘柄の成績はほぼ同じ ■■ 

 
準備した結果ファイル

後からから思いついて、(拡張4)に(図9)の結果ファイルを登録しました。
  1. No.981は(TOPIX CORE30)の30銘柄
  2. No.982は(TOPIX 100)の100銘柄
  3. No.983は(TOPIX 500)の500銘柄
  4. No.984は(日経225)の225銘柄

  5. No.986は(東証1部・ETFやREITを除く)の1873銘柄
  6. No.987は(東証1部ランダム100)の100銘柄。No.986の1873銘柄からランダム(不作為)に100銘柄を選んでいます。

  7. No.988は(東証1部ランダム225)の225銘柄。No.984の(日経225)の成績と対比してみます。

  8. No.989は(東証1部ランダム400)の400銘柄。No.986の1873銘柄からランダムに400銘柄を選んでいます。

まずNo.987(東証1部ランダム100)を使ってランダムにサンプリングした100銘柄の成績を調べてみましょう。

  1. 銘柄一覧表にある「結果ファイル」ボタンをクリックし、

  2. 「結果ファイル一覧表」のNo987 をクリックしてサンプル銘柄100個を選択します。

  3. メニューの「最適パラメータ」を選ぶと、右のような「最適パラメータのもとめかた」の画面が現れます。
  1. 使う条件表は、(拡張4)No.809の(TRG 10日間突破/順(B))を指示します。(No.809の条件表の内容は下の欄に表示されています)

  2. 検証期間(最適化期間でもある)は2007年〜2016年の10年間とし、

  3. 元の条件表のNo.3行のパラメータを、

  4. (10〜10)とします。この場合はパラメータは10にしか変化しません。10日を固定したのと同じです。


100銘柄の検証時間は16秒でした。通常の「検証」をすると、トレードした内容をすべて記憶するので、所要時間は1分49秒(109秒)かかりました。「最適パラメータ」で成績を調べると「検証」による時間の6〜7倍も速く行えます。

重要な成績の項目は、
  1. 件数(トレード数)
  2. 利益率(トレード1回で何%の利益がでたか)
  3. 勝率(トレードしたうち、利益がでた割合)
  4. Pファクタ(総利益%÷総損失×100。総利益は総損失の何倍利益がでたか)
です。図では6027回のトレードをして、1回あたり0.50%の利益をあげています。勝率は48.8%、Pファクタは1.14倍。勝率は50%を切っていますが、利益率は0.5%あり、Pファクタは1.14倍なので全体としては利益が出るトリガー条件表です。

■■  (7)(10日間突破/順)を使ったサンプリング銘柄の成績は全数の成績とほぼ同じ ■■

(図10)に選択した銘柄数が異なるときの成績をまとめました。使ったトリガー条件表はNo809(10日間突破/順)です。

株価が過去10日間の最高値を上回った日(の翌日始め)に仕掛けたときの成績です。(時間切れは20日間、途中で+20%の利益が出たら利食いする)

注目することは(A)全数・(B)ランダム400銘柄・(C)ランダム100銘柄)の異なる銘柄数によって成績に大きな違いが出るのか出ないのかです。

銘柄数が少ないときはトレード数が少ないのは当たり前です。問題は@平均利益率、A勝率、BPファクタ の数字です。@平均利益率は(A)が0.43%で最も悪く、(B)が0.60%で最もよい。勝率は(A)49.0%・(B)49.9%・(C)48.6%であまり変わりがない。Pファクタは(A)が1.12倍・(B)が1.17倍・(C)が1.14倍で、これもあまり違いがありません。

全数(1873銘柄)の成績が正しいのですが、サンプリングする意味は、検証や最適化の時間を短縮して、数多くの試行錯誤をすることです。サンプリングすると、全数を調べるのに比べて比較にならないほど能率があがります。 @利益率、A勝率。、BPファクタのうちで大きな違いがでる可能性があるのは@利益率とAPFです。ここで採用している売買ルールは「損切り」は採用していません。時によっては-30%とか-50%の損失が出る可能があります。大きな損失は時間切れになったトレードが多ければ、それだけ多く発生すると考えられます。期間切れになったトレードの割合(時間切れ率)を計算すると、
  1. (A)1873銘柄の場合は、91.95%です。(=100246÷109014×100)
  2. (B)ランダム400銘柄の場合は91.85%です。(=25472÷27731×100)
  3. (C)ランダム100銘柄の場合は91.90% です。(=5539÷6027×100)
損切りの割合は(A)(B)(C)はほぼ同じ数字です。ランダム100を使って検証しても大きな違いはないと思われます。

次に日経225銘柄とランダムにサンプリングした225銘柄の成績を対比すると、(D)日経225の(利益率)は0.20%に対し、(E)ランダム225の(利益率)は0.40%です。勝率は(D)50.1 %、(E)49.2%と差はありません。Pファクタは(D)1.06倍、(E)1.12倍と少し差がありますが、大きなものではありません。

時間切れの割合(時間切れ率)は
  1. (D) 日経225銘柄の場合は、94.58%です。(=13162÷13915×100)
  2. (E)ランダム225の場合は92.57%です。(=12225÷132051×100)
この2.01%の差は大きい。日経225銘柄に絞ってトレードするならば、(D)の成績は現実のものなので、否定することはできませんが、日経225銘柄に特化するよりも、日経225以外の銘柄も対象銘柄に取り込んだほうがよいことが解ります。((D)と(E)の利益率の違いでもわかるが・・・)

ある基準(この場合は日経225銘柄とかTOPIX100銘柄とか、JQだけのように制度による基準(業績や増配などを基準にしたものではない)を採用するちすると、案外に成績に差がtyつきます。(図10)の(C)ランダム100銘柄と(F)TOPIX100銘柄の成績を比べると、(利益率)は(C)が0.50%、(F)が0.13%です。(勝率)は(C)48.6%、(F)49.7%と(F)が1.1%高くなっているので勝率はも(C)(F)では差がある感じです。(Pファクタ)は(C)1.14倍、(F)1.04倍で0.1倍の違いがありますがまあ細かな違いです。

(C)と(F)の(時間切れ率)を計算すると、
  1. (C) ランダム100銘柄の場合は、91.90%です。(=5539÷6027×100)
  2. (E)TOPIX100銘柄の場合は95.99%です。(=6062÷6315×100)
この4.09%の差は大き過ぎます。TOPIX100に特化するとわざわざ利益がでない銘柄に特化しているわけです。以上のことは全数調査による実際の成績とサンプリングの成績に違いがあるか、とは関係はありませんが、日経225銘柄で調べた成績を基にして他の銘柄のトレードすることは間違いです。

<先頭へ戻る>


【2】(10日間突破/順)トリガー条件表を最適化してみる


最適化の方法は3つあります。(これ以外に「売買ルールの最適化」もある)

  1. パラメータの最適化。最大8行のパラメータの最適化ができます。

  2. 範囲(以上・以下)の最適化。最大8行の範囲の最適化ができます。

  3. パラメータと範囲の最適化。合わせて最大8行の最適化ができます。

(図12)のような条件表をトリガーとするならば、(A)の6行のパラメータを最適化することができます。また(B)の5行の範囲(以上・以下)を最適化することができます。




(図13)は「最適パラメータ」の指示画面です。5行のパラメータを最適化しようとしています。
  1. 4行目の(10日順位相関)のパラメータを5〜25まで5キザミで変化させます。(5,10,15,20,25 に変化させる)

  2. 6行目の(10日平均)のパラメータを5〜15まで5キザミで変化させます。(55,10,15 に変化させる)

  3. 7行目の(10K相対力)のパラメータを5〜25まで5キザミで変化させます。

  4. 8行目の(40日最大日数)のパラメータを10〜40まで10キザミで変化させます。

  5. 9行目の(40日最大日数)のパラメータは8行目のパラメータと同じとします。

(図14)は「最適以上以下」の指示画面です。4行の(以上・以下)を最適化しようとしています。
  1. 4行目の(10日順位相関)の条件の範囲を-100〜-60(以下)まで10キザミで変化させます。(-100,-90,-80,-70,-60 に変化させる)

  2. 5行目の(1日前過去比率)の条件の範囲を3〜6まで1キザミで変化させます。(3,4,5,6 に変化させる)

  3. 7行目の(10K相対力)の条件の範囲を60〜100(以上) まで10キザミで変化させます。

  4. 10行目の(a-b)の条件の範囲を5〜15まで5キザミで変化させます。
各行の変化させる回数は5行・4行・5行・3行と小さそうに見えますが、延べ300回(=5×4×5×3)の変化をさせることになります。

(図15)は「最適条件行」の指示画面です。パラメータと範囲(以上・以下)を同時に変化させることができます。(パラメータは4行、範囲も4行まで)
  1. 7行目の(5日K相対力)の条件の範囲を60〜90まで10キザミで変化させます。

  2. 4行目の(20日順位相関)のパラメータを5〜20まで5キザミで変化させます。

  3. 8行目の(40日最大日数)のパラメータを20〜50まで10キザミで変化させます。

  4. 9行目の(40日最大日数)のパラメータは8行目のパラメータと同じとします。

■■ (1) (10日間突破/順)トリガー条件表の内容 ■■

(10日間突破/順)のトリガー条件表は(図16)のような内容です。この条件表が何をしようとしているのかを説明しておきます。


  1. は当日を含めたこの10日間の最大値(ザラバ高値)を調べます。

  2. はそれを1日先行させています。というのは、今日を含む10日間の最大値を今日の株価は上抜くことができないからです。今日高値をとったときは今日の最大値はその高値になっているので、永遠に最大値を上抜くことはできません。そこで最大値を(1日先行)させて、昨日までの最大値を今日の位置にずらせば、今日の株価が昨日までの最大値を上抜くことが可能になります。

  3. は今日の株価が昨日までの最大値を上回った(クロス日数が1日目になった)ときに買いとしています。

  4. はやや難解です。No.5線とはクロス日数の数字です。今日のクロス日数が1日になった日に、前日のクロス日数を調べ、昨日のクロス日数が-5以下のときに買いとしています。

(図16)の条件表でグラフを描かせると、右の(図17)のようになります。

(a)(b)(c)(d)の4か所で買いマークが出ています。この条件表では5日間以上デッドクロスしていること、といいう条件がついているので、(a)→(b)→(c)→(d)の間隔は5日間以上あいています。

もし(d)の条件がついていないときは、右の(図18)のような位置で買いマークがでます。

(a)は過去5日以上デッドクロスしていたものが初めてゴールデンクロスした買いマークです。翌日は株価が最大値を下回ったので、この日のクロス日数は-1です。ところが(b)で再び株価が最大値を上回り、クロス日数は+1となったので買いマークがでています。

(b)の翌日はまた株価が最大値を下回り、クロス日数は-1になります。そして(c)でまた株価が最大値を上回ったので買いマークが出ています。条件表の(d)がないときは、買いマークがこのように繰り返し出る可能性があります。

そこで株価が最大値を上抜いたとき、それまで5日以上は買いマークが出ていない(デッドクロスして5日以上が経っている)という条件をつけるなら図の(b)(c)(d)(f)では買いマーはでません。5日以上経過しているのがよいのか、10日以上経過しているのがよいのかはやってみないとわからないので、「最適化」して調べてみましょう。

次に条件表の(b)は最大値を(1日先行)するとしていますが、1日だけ先行するよりも、5日先行あるいは10日先行したほうがよい結果がでることも考えられます。



右の(図19)は最大値を10日先行させたものです。先行させる期間を長くすると、最大値の線も長く伸びます。1日先行した場合は最大値は1日しか伸びませんが、10日先行すると、最大値の線が10日先まで伸びます。

最大値の線が伸びれば、株価が最大値を上抜くことが難しくなります。右図では(a)(b)(c)(d)の4か所で買いマークが出ていますが、(a)以外はやや遅きに失しています。

(図20)は(10日最大値)のパラメータを(20日)に変えてみたものです。(a)(b)(c)(d)の4か所で買いマークが出ています。(a)(c)はよいとしても(b)(d)は当面のピークで買いマークがでています。

20日最大値)は過去20日間の最大値であるので、(10日最大値)よりも最大値は高くなるのが普通です。

(5日最大値)となると、その最大値は低くなるので、株価は最大値を上抜きやすくなりますが、果たしてよい結果がでるのかどうか。

■■ (2) (10日間突破/順)トリガー条件を最適化してみる ■■

ランダム100銘柄について、最適化をしてみましょう。ここでは
  1. No.6行の(-5以下)の範囲(以上・以下)を(-9,-7,-5,-3)に変えてみる

  2. No.3行の(10日最大値)のパラメータを(5,10,15.20)に変えてみる

  3. No.4行の(1日先行)のパラメータを(1,3,5,7,9)に変えてみる
ので、パラメータと範囲(以上以下)が同時に変化できる「最適条件行」(図21)を使います。

図の「ステップ数」欄に表示されているように、1銘柄につき80回の検証をするので、100銘柄では延べ8000回の検証(そのパラメータや以上以下を採用したときの成績を調べる)をすることになります。


なお最適化で使う売買ルールは右の(図22)です。(最適化とは、さまざまなパラメータや以上以下を使った検証に他ならない)
  1. 仕掛けて20日が経過したら「時間切れ」(翌日の始値で決済する)

  2. 途中でザラバで+20%の利益が出たときは「利食い」する。(ザラバで決済の注文を指値で出しておく)

最適化したとき、この条件表は(図23)のような成績になりました。
  1. No.6線の範囲は(-5以下)がよい
  2. No.3線のパラメータは(10日)がよい
  3. No.4線のパラメータは(9日)がよい

  4. このときトレード件数は4889回で、

  5. 平均利益率は0.66%
  6. 勝率は49.6%
  7. Pファクタは1.18倍である

  8. 4889回のトレードのうち4486回は時間切れであった(時間切れ率は91.75%)

  9. 4889回のトレードのうち409回が利食いできた(利食い率は8.36%)
(図10)の(C)ランダム100銘柄の成績は、トリガー条件表のままを検証した成績ですが、平均利益は0.50%→0.66% 、勝率は48.6%→49.6 %、PFは1.14倍→1.14倍へと少し向上しています。時間切れ率は91.90%→91.75%、利食い率は8.09%→8.36%とこれも少し向上しています。わじわずかなアップです。

最適化に要した時間は6分47秒(約400秒)でした。パラメータや以上以下の変化させる個数を絞ったので、早く最適化は終わりましたが、それだけに変化させる数字の範囲が限れており、満足のいく成績ではありません。パラメータや以上以下の変化の範囲を変えると、もっとよいパラメータや以上以下の数字が見つかると思われます。


■■ (3) (10日間突破/順)条件表をより広い範囲で最適化してみる ■■

右の(図24)のような変化をするように指示しました。
  1. No.6行の(-5以下)の範囲(以上・以下)を(-40,-35,-20,・・・-5)の8通りに変える

  2. No.3行の(10日最大値)のパラメータを(10,20,30・・・150,160)の16通りに変えてみる

  3. No.4行の(1日先行)のパラメータを(1,3,5・・・19,21)の11通に変える。これによって1銘柄あたりの検証の回数は1408回(=8×16×11) に増加します。前回の80回の17.6倍の計算量です。

    単純には80回のときの6分47秒(400秒)17.6倍の7040秒(117分)かかると思うでしょうが、160日間の最大値を計算する時間は20日間の最大値を計算する時間の8倍かかります。しかたがって117分の3〜4倍の時間がかかるはずです。 就寝前に最適化をスタートしておいたところ、220分47秒かかっていました。

(図25)のような成績になりました。
  1. No.6線の範囲は(-40以下)がよい
  2. No.3線のパラメータは(110日)がよい
  3. No.4線のパラメータは(21日)がよい

  4. このときトレード件数は872回で、

  5. 平均利益率は2.20%
  6. 勝率は55.5%
  7. Pファクタは1.72倍である

  8. 872回のトレードのうち781回は時間切れであった(時間切れ率は89.56%)

  9. 872回のトレードのうち111回が利食いできた(利食い率は12.72%)
こういう結果です。前回の最適化の成績(図23)と比較すると、@平均利益率は0.66%→2.20%へ、A勝率は49.5%→55.5%へ、BPFは1.18倍→1.72倍へ向上しています。

しかも6線の-40以下の数字は変化させる(-40〜-5)の最小の値です。-50とか-60になればもっとよい成績になるかも知れません 。 同じように4線のパラメータは(21日)になっていますが、これも変化させた(1〜21)の最大の数字です。25日とか27日になればもっとよい成績になるかもしれません。

■■ (4) (10日間突破/順)条件表の変化の範囲を大胆に変えて最適化してみる ■■


右の(図26)のような変化をするように指示しました。
  1. No.6行の(-5以下)の範囲(以上・以下)を(-80,-70,-60,・・・-10)の5通りに変える

  2. No.3行の(10日最大値)のパラメータを(100,110,120・・・190,200)の11通りに変えてみる

  3. No.4行の(1日先行)のパラメータを(20,25,30・・・45,50)の7通に変える。

    これによって1銘柄あたりの検証の回数は385回(=5×11×7) になります。前回の80回の4.8倍の計算量です。この最適化に要した時間は86分でした。

(図27)のような成績になりました。
  1. No.3線のパラメータは(110日)がよい
  2. No.4線のパラメータは(25日)がよい

  3. No.6線の範囲は(-80以下)がよい
  4. このときトレード件数は709回で、

  5. 平均利益率は2.38%
  6. 勝率は56.7%
  7. Pファクタは1.79倍

  8. 709回のトレードのうち617回は時間切れであった(時間切れ率は87.02%)

  9. 709回のトレードのうち93回が利食いできた(利食い率は13.11%)

これまでに最適化した条件表の成績(図23)(図25)と比較すると、
    @平均利益率は0.66%→2.20%→2.38%へ
    A勝率は    49.5%→55.5%→56.7%へ
    BPFは     1.18倍→1.72倍→1.79倍へ向上しています。
No.6線のパラメータは、変化させた数字の最小値の-80日です。これを-100とかに広げるならまだ成績が上がる可能性があります。ただ成績が上がるということは、トレード数が減るということです。1銘柄あたり80回のときのトレード数は(図23)では4889回ありましたが、(図25)の1408回に増やしたときトレード数は872回に減り、今回(図27)は709回になっています。

100銘柄を10年間検証したとき、どれほど買いマークがでるのがよいのかの確かな決め手はありません、今後このトリガー条件表に別のチャートを加えて成績を向上ようとするなら、ある程度のトレード数が必要です。(条件を加えるたびにトレード数は減るので)

まあ乱暴にいえば、100銘柄で10年間なので、1000回程度あればよいのではないか。この半分の500回でもサンプル100銘柄は年間50回の売買マークをだすし、200回では年間20回のトレードができます。延べ(1000銘柄×10年)の数字の20%くらいの数字(200回)を最低限度のトレード数にしてもよいのではないか? と思っています。


■■ (5)トリガー条件表No.810として記憶する ■■

トリガー条件表No.809(10日間突破/順)を最適化してすると、最終的に次の(図28)のトリガー条件表になりました。これをNo.810(110日間突破/順) として保存します。



なおサンプリングした(ランダム100銘柄)と(全数1873銘柄)の成績を比較すると、右図のようになっていました。

平均損益%とPファクターはサンプリングの方が全数よりも少しよくなっています。平均利益やPファクタは成績の変化が大きくなりがちです。例えば翌日大窓を空けて寄り付いたとき、20%の利食いのつもりが+30%の利益がでることがあります。これに応じてPFの値も大きくなります。

若干の成績の差はありますが、その差は小さく、サンプリングした銘柄で条件表を作っても、全数の成績に近いものができることがわかります。

<先頭へ戻る>


【3】最適化したトリガー条件表の買いマーク位置の検証をする

前章で最適化したトリガー条件表(10日間突破/順)は次の(図28)の内容です。
このトリガー条件表は、
  1. トレード数は 709回(100銘柄・10年間で)
  2. 平均利益率は 2.36%
  3. 勝率は 56.7%
  4. PFは 1.79倍
であることがわかっています。100銘柄は1年間に平均して70.9回の買いマークを出しますが、年によって300回の買いマークを出すこともあるだろうし、年に20回しか出さないこともあるでしょう。一番困るのは1年間に売買マークが0〜5回くらいしか出ないことです。

過去10年間に、どういう時期に、どれほどの買いマークがでているのかを調べておく必要があります。買いマークがでる時期が偏っているものは、トリガーとして使えません。

トリガーがどういう時期に買いマークをだしたのかを知るには、「新規検証」をします。
  1. ランダム100銘柄を選択して、

  2. メニューの「検証」→「新規検証」をクリック。

  3. 検証期間を、最適化したときと同じ期間(070101〜161231)にして

    「実行」をクリック。

  4. 検証リストが表示されます。

    各行の末尾に◎がついているイトレードは利食いできたもので、「−」がついているのは時間切れです。

  5. この画面で売買時期に関係あるものは

    @「売買成績」
    A「損益経過」
    B「売買時期」(グラフ)
    の3つのボタンです。

■ ■ (1)(売買成績)の画面 ■■

「売買成績」でわかるのは、@勝ちトレード数 (402回)とA負けトレード数 (307回)
です。

その他に最適化をしたときにわかったもの
  1. 利食い数 (92回)
  2. 時間切れ数(617回)
  3. 平均利益率(2.36%)
  4. 勝率 (56.7%)
  5. PF (1.79倍)
です。

■■ (2)(損益経過)の画面 ■■

ボタンAの「損益経過」の画面に進むには、まず「損益経過の指示」を指定してください。

次のように指示すると、最適化をしたときと同じ成績になります。
  1. 理論金額で売買
  2. 手数料は(0%)
  3. 初期資金は無限大
  4. 仕掛日の制限なし
  5. 仕掛ける銘柄数は無制限
「開始」ボタンをクリック。

損益悔過の画面には、最適化で知った成績と同じもの(@平均利益率、A勝率、BPF)が表示されています。

メニューの「年別成績」をクリック。

か2007年〜2016年の年別の成績が表示されます。
  1. の2008年のトレード数は28回で最も少ない。

    平均して年に70回の買いマークがでるのだから、この20%の(14回)以上のトレードがあれば、極端に少ないとはいえません。この場合は28回あるので合格です。

  2. の2012年のトレード数は93回で最も多い。

    709回のトレードをしているので、トレード数の13%はこの年にあったあったわけです。トレード数の60%や70%がその1年に集中していればともかく、13%では極端に多いとはいえません。80%が集中したときはトレード数は327回になります。93回は327回の1/3以下であるので合格です。
以上の検討によって、最適化したトリガー条件表(10日間突破/順)は使い物になることがわかります。

■■ (3)(売買時期)のグラフ画面 ■■

売買した日をグラフで確かめることができます。
  1. は1回のトレードをし、利食いした(棒グラフ)という意味です。

  2. は1回のトレードをし、時間切れになった(折れ線ラフ)という意味です。

  3. の日には1回の利食いと2回の時間切れの3回のトレードをしています。
トリガー条件表(10日間突破/順)は「順張り」であるので、株価が上昇中に多くの買いマークがでています。株価が下降中のときは買いマークはほとんど出ていません。

<先頭へ戻る>


【4】トリガー条件表に別のチャートを追加すれば成績がよくなる

最適化したNo.810(110日間突破/順)にトリガーとは別のチャートを加えてみましょう。追加するチャートは様々なものが考えられますが、基本は追加したチャートの売買条件によって、トリガー条件表だけを使うよりも成績(@平均利益率、A勝率、BPファクタ)をよくすることです。

■■ (1) 条件表を作ったときのトレード数に注目すること■■

チャートを追加すればするほど成績はよくなるはずですが、それによってトレード数は減少します。勝率を70%とか80%に高めることは可能です。しかしランダム100銘柄の10年間で、50回のトレードしかできないなら、今後の成績は不安定なものになるでしょう。

勝率が80%ということは例え1円でも利益が出る(勝つ確率が0.8)で、(負ける確率が0.2)ということです。

検証をした結果、勝率(確率)は80%となってるが、
  1. はたしてこの80%の勝率は正しいのか?
  2. いつでも勝率が80%あることを期待してよいのか?
  3. 何%から何%の範囲(信頼区間)で信頼すべきなのか?
は、右の(図44) の計算式によって計算できます。次の例の数字は勝率が80%のときの信頼区間です。
  1. 上限  Pu=p+2.58×√p×q/n ( nはデータ数(トレード数))
    勝率80でトレード数が50回のときは、Pu=0.8+2.58×√0.8×0.2/50 = 0.945 (=94.5%)

  2. 下限 Pl=p−2.58×√p×q/n (nはデータ数(トレード数))
    勝率80でトレード数が50回のときは、Pu=0.8-2.58×√0.8×0.2/50 = 0.655 (=65.55%)

    50回のトレードで勝率80%とはいっても、上限の94.5%〜下限の65.5%であるかもしれません。上限と下限の勝率は約30%もの違いがあります。一応80%の勝率となっているが、最悪65.5%であるのかも知れないのです。こういう場合は、80%の勝率ではなく悪いほうの65.5%を考えておくべきです。
トレード数による勝率の信頼区間を次の(図45)に掲げます。



■■ (2) (110日間突破/順)に出来高倍率を追加してみた ■■

(図46)は、No.810(110日間突破/順)の7行目に(5日 出来高倍率)を追加したものです。



(5日)出来高倍率のチャートを追加して、パラメータ(5日)と以上以下の範囲(2以上)を変えて最適化してみましょう。

ランダム100銘柄を選択し、「最適条件行」にいき、次の行の変化の範囲を指示します。
  1. 7線の以上欄は、1から10まで1ずつ変化させる。(1,2,3,4,...,9,10)の10通り

  2. 同じく7線のパラメータは1から25まで2ずつ変化させる。(1,3,5,7,....23,25)の13通り。

  3. 全部で1銘柄につき130通りの検証を行います。

    3行目の(110日最大値)、4行目の(25日先行)、8行目の-80以下)はすでに最適化されているので、ここでは最適化することはしません。


(図48)のような成績になりました。
  1. No.7線の範囲は(5倍以上)がよい
  2. No.7線のパラメータは(11日出来高倍率)がよい

  3. このときトレード件数は114回で、

  4. 平均利益率は4.30%
  5. 勝率は57.9%
  6. Pファクタは2.35倍

  7. 114回のトレードのうち81回は時間切れであった(時間切れ率は71.0%)

  8. 114回のトレードのうち33回が利食いできた(利食い率は28.9%)
これまでに最適化した条件表No.810の成績(図27)と比較すると、
    @平均利益率は2.36%→4.30%へ、
    A勝率は56.7%→57.9%%へ、
    BPFは1.79倍→2.39倍へ向上しています。
平均利益率と勝率はなかなり向上しています。ただトレード数が114回しかありません。これ以上のチャートを追加するならば、そのトレード数は確実に100回以下になります。 114回のトレードで勝率は57.9%です。その57.9%の信頼区間を(図44)の式によって推定すると、

上限(Pu)は、0.579+2.58×(√0.579×0.421/114)、下限(Pl)は、0.579-2.58×(√0.579×0.421/114)、の計算によって、(62.5%〜53.3%)が信頼区間になります。最悪の場合、この条件表による勝率は53.3%です。

そこで少し勝率は劣るが、トレード数が300に近いものを探してみます。ソートをするにはメニューの「ソート」をクリック。


■■ (3) 最適条件行のリストをソートする ■■


上図(図48)のメニューの「ソート」をクリックすると、右の画面が現れます・。ソート(並べ替え)したい成績項目を選択してください。

通常は@平均利益、A勝率、BPファクターを(大→小)の順にソートします。ここでは「Pファクター」を選びました。

  1. Pファクターの数字が大きいほうから順に表示されます。

  2. 件数の欄の数字を見ると、件数は73とか67とか50とかで、100を超えるものがありません。

  3. リスト下に下げていって、件数の数字が大きいものを探すと、226回というものがあります。このパラメータは9で、以上以下は3です。

    このときの利益率は3.99%で、出来高倍率を追加する前のNo.809(110日間突破/順)の利益率2.36%((図27))よりもよくなっています。

    勝率は58.4%、Pファクター2.29倍で、追加する前の56.7%、1.79倍よりもよくなっています。

  4. さらに探すと、460回というものがあります。このパラメータは17で、以上以下は2以上です。

    このときの利益率は3.06%、勝率は57.6%、Pファクターは2.03倍と、上図のトレード数が226回のものより劣りますが、出来高倍率を追加する前のNo.809(110日間突破/順)の利益率2.36%、勝率56.7%、Pファクタ1.79倍よりもよくなっています。

  5. さらに探すと、トレード数が663回というものがあって、その場合の利益率2.49%、勝率は57.2%、Pファクターは1.83倍です。
トレード数が226回のもの、460回のもの、663回のもののどれを採用するかは、これを@最終の条件表とするのか、Aさらにチャートを付け加えて成績の向上を狙うのかによって違います。

@の場合はトレード数が226回の(パラメータが9、3以上)を採用すればよいし、Aの場合はトレード数が460回または663回のものを採用することになります。

ここでは、トレード数が460回の(パラメータが17、2以上)を採用します。次の(図49)の条件表になります。



■■ (4) もうひとつチャートを追加してみる ■■

(図50)のNo.8行に(10日 変動率)を追加しました。


10日変動率は、10日間の高値と安値の値幅(終値ベース)が、 株価水準(10日間の仲値)の何%であるのかを表します。ボラティリティの一種です。 この数字が大きいものほど株価が活発に動き、数字が小さいものほど株価が動いていないことを表現します。


右図のように変化させました。
  1. 変動率の範囲を10〜30まで、2ずつ変化させる(11通り)

  2. 変動率に期間(パラメータ)を10〜50まで5ずつ変化させる(9通り)
1銘柄につき99通りの検証をすることになります。

(図51)最適条件行を実行すると
  1. 変動率は(18以上)
  2. 変動率のパラメータは15日
  3. 成績がよかったのは、

  4. トレード数は101回で
  5. 平均利益率は5.07%と非常に高い、。
  6. 勝率は56.4%であり、変動率を追加する前の57.6%より悪い。
  7. Pファクタは2.15倍とよい。
となりました。トレード数が101回と少ないことや、勝率が56.4%とあまり高くないのは不満ですが、利益率・Pファクの数字はよいものです。

次の(図52)のような条件表ができました。



(図53)にランダム100銘柄、ランダム400銘柄、全数1873銘柄の成績をまとめました。ランダム100銘柄の平均利益率は5.07%でしたが、ランダム400銘柄では3.71%になり、全数では2.97%まで低下しています。

ランダム100銘柄のトレード数101回というのは、ギリギリセーフかと思いましたが、101回では少ないことがわかります。


■■ (5) 最適条件行を検索する ■■

(図51)から(15日変動率が18以上)という条件を追加しましたが、この成績は満足のいくものではありませんでした。(図49)のNo.815(110日突破+出来高倍率)の成績と比べると、以下のような違いがありました。( )はNo.815の成績
  1. トレード数は101回(460回)と極端に少ない。
  2. 平均利益率は5.07%(3.06%)と非常によいが、全数での成績は2.97%と悪い。
  3. 勝率は56.4%(57.6%)とNo.815よりも低い。
  4. PFは2.15倍(2.03倍)とNo.815よりは高いが、わずかの差である。
新しいチャート(変動率)を追加する以上は、その前に作った条件表No.815よりも成績がよくなければなりません。そういう(変動率)があるのか、調べてみましょう。

次図は(図51)の変動率を最適化したときの画面です。ここからNo.815よりも成績がよいものを探ることができます。

  1. 「最適条件行検索」ボタンをクリックすると、

  2. 検索条件を入力することができます。No.815の成績よりもよいことが必須なので、

    @売買回数は200回以上
    A平均利益率は3.06%以上
    B勝率は57.6%以上
    APFは2.03倍以上
    と入力して

  3. 「検索開始」をクリック。


最適行検索の結果は(0行)でした。トレード数が200回以上で、No.815以上の成績をあげる変動率はありませんでした。

念のためにトレード数(売買件数)を90回以上にして、最適行検索を行うと

@トレード数が99回
A平均利益率が5.53%(3.06%)
B勝率が58.6%(57.6%)
CPFが2.34倍(2.03倍)

のものがありました。

(20日変動率)が(20以上)であればよいのですが、トレード数が99回というのは少なすぎます。

(図54)No.816を(20日変動率)が(20以上)に変えて、ランダム100、ランダム400、全数の検証をすると、やはり全数の成績はかなり低下しています。

■■ (6) トリガー条件表にチャートを追加した経過のまとめ ■■

ここまでは、
  1. トりガー条件表を最適化し、
  2. それに別のチャートを追加して
  3. 追加したチャートを最適化する。
  4. さらに成績が向上するだろう別のチャートを追加する
という方法で、成績がよい条件表を設定してきました。条件表がどのように変化し、成績が向上したのかの経過をまとめてみました。
  1. 始めは次のNo.809の(TRG 10日間突破/順)を最適化することでした。最適化できるのは次図の(a)(10日最大値)、(b)(1日先行)、(c)(クロス日数が1以上1以下)、(d)(前日のクロス日数が-5以下)の4か所ですが、(c)の最適化はしませんでした。

  1. 最適化したトリガー条件表は次図のように変わりました。

  1. ランダム100銘柄の2007年〜2016年の成績は、次のように向上しました。(表1)
No. 条件表 件数 利食数 利食率% 平均利益% 勝率 PF
809 10日間突破/順 6027 488 8.1 % 0.43 % 49.0 % 1.12倍
810 110日間突破/順 709 92 13.0 % 2.38 % 56.7 % 1.79倍


  1. 次に(出来高倍率)を追加して最適化すると、条件表は次図のように変わりました。

  1. ランダム100銘柄の2007年〜2016年の成績は、次のように向上しました。(表2)
No. 条件表 件数 利食数 利食率% 平均利益% 勝率 PF
809 10日間突破/順 6027 488 8.1 % 0.43 % 49.0 % 1.12倍
810 110日間突破/順 709 92 13.0 % 2.38 % 56.7 % 1.79倍
815 110日間突破/順+出来高倍率 460 80 17.4 % 3.06 % 57.6 % 2.03倍


  1. 次に(変動率)を追加して最適化すると、条件表は次図のように変わりました。

  1. ランダム100銘柄の2007年〜2016年の成績は、次のように向上しました。(表3)
No. 条件表 件数 利食数 利食率% 平均利益% 勝率 PF
809 10日間突破/順 6027 488 8.1 % 0.43 % 49.0 % 1.12倍
810 110日間突破/順 709 92 13.0 % 2.38 % 56.7 % 1.79倍
815 110日間突破/順+出来高倍率 460 80 17.4 % 3.06 % 57.6 % 2.03倍
816 110日間突破+出来倍率+変動率 110 42 41.6 % 5.07 % 56.4 % 2.15倍


変動率を追加したNo.816はNo.815の成績を上回ることができていないし、トレード数が極端に少なくなっているので、成績は不安定です。変動率を追加しても成績は向上しないと思われます。

最初に選んだチャート(出来高倍率)は何かの根拠があって選んだわけではありません。次のチャート(変動率)も「カン」で選んだだけです。そこでどういう基準でチャートを選び、順次チャートを追加していけばよいのか? を決めることが重要になります。




【5】条件表を分割して追加するチャートを見つける方法

今のところ、トリガー条件表はNo.810がよいことがわかっています。次図(図28)


このトリガーに成績を高めるだろうチャートを見つける1つの方法は、チャートを追加して、それを基準にしてトリガー条件表を分割してみることです。
  1. あるチャート(A)の数値によって、トリガー条件表を分割する。(例えば3つに分割する)
  2. 3つのトリガー条件表のそれぞれに含むチャート(A)を最適化すると、3つの条件表の成績がわかる。
  3. 同様のことをチャート(B)を使って3分割し、チャート(B)を最適化すると、3つの条件表の成績がわかる。
  4. チャート(A)、チャート(B)、チャート(C)・・・によって分割し、最適化をしていけば、どのチャートを使えば最もよい成績がでるのかがわかります。

■■ (1) 分割用の条件表を準備する  ■■

分割する際に分割の基準としたいチャートをトリガー条件表に加えます。(図55)


  1. No.1行〜No.6行はNo.810のトリガー条件表です。

  2. No.7行〜No.21行は、分割する基準にしたいチャートです。

  3. この行の「条件」欄や「以上以下」欄は空白にしておきます。(「買い」や「売り」の条件をつけてもよい)

  4. 必要なものは「印字タイトル」です。ここにNo.10行のように「17rci」のタイトルがあるものが、分割の基準になるチャートです。ここでは12行(12個)のチャートを設定しています。

■■ (2) 分割する@回目  ■■


  1. 「ランダム100銘柄」を選択して、

  2. メニューの「統計」→「条件表を分割する」をクリック。





    「条件表の分割のしかた」の画面が現れるので、

  3. 分割用条件表No.819を指示し、

  4. 検索期間を(070101〜161231)の10年間とし、

  5. 「無条件」を指示します。

  6. 「間引き」は(-10)と入力します。

    10年間のデータ数は1銘柄につき約2500本あるので、100銘柄のときは合計250000本のデータ数になります。計算できるのは32500本までなので、全部を計算することはできません。(-10)と入力しておけば、データは1/10に減らされます。

  7. 「実行」をクリック。

  8. 選択していたランダム100銘柄の計算が行われます。

    (分割の基準になるチャートの数値が計算されています)

  9. 計算が終わると、計算値が表示されます。

    この画面で不要な計算値を削除することができますが、通常は削除することはしません。

  10. 「条件表を分割」をクリック。


条件表を分割の画面が現れます。(「分割画面」と呼ぶ)
  1. 条件表を3分割してみましょう。(「B(33%),A(33%),b(33%)」を指示します。

  2. 3分割すると、3つの異なる条件表ができるので、局面No.1、局面No.2、局面No.3 の欄に保存したい条件表No.を入力します。

    図では(拡張4)の条件表No.901に局面1の条件表を記憶し、条件表No.902に局面2の条件表を記憶し、条件表No.903に局面3の条件表を記憶するように指示しています。

    (拡張5)などを設定するには、@変更したい欄をクリックして、A右上の条件ファイルNo.を「拡張4」から「拡張5」に切り替えて、「拡張5」の文字をクリックします。

  3. 「リスト画面へ」をクリック。

    分割の基準にするチャートの「リスト}の画面が現れます。

  4. は分割用条件表の行番号。

  5. は分割用条件表の基準とするチャートの「印字タイトル」。

  6. より右側には、そのチャートの数値の平均値・SD(標準偏差)・最大値・最小値が表示されています。

  7. 図には12個のチャートが縦に並んでいます。基準としたいチャートの行をクリックして選択します。

  8. 「分割画面」へをクリックすると、先ほどの画面に戻り、何分割するかなどを再設定できます。

  9. 「条件表を保存」をクリックすると、(3分割を指示しているので)3つの条件表がNo.901、No.902、No.903へ保存されます。

  10. 分割が終ると「分割画面」または「リスト画面」に戻ります。

  11. 「ここでは3分割(A(33%) B(33%) c(33%))を選び、

  12.  3つに分割された条件表は、(拡張4)のNo.901、No.902、No.903に保存されています。

  13. 条件表の一覧表をスクロールすれば、それを確認できます。

  14. No.901には[局面1]のタイトルが付加され、No.902には[局面2]のタイトルが、No.903には[局面3]のタイトルが付加され ています。

  15. どのように局面が分割されているのかは、条件表の内容を見ればわかります。この場合は3つの条件表の内容を見る必要があります。

    もっと簡単にどのように分割されたかを知るには、「リスト画面へ」をクリックします。

  16. 条件表No.819 の10行目のチャート(17rci)17日順位相関 を基準にして分割されたこと

  17. [局面1]には8026個のデータがあり、それは( 17rci)が-42.2以下の数値であること

  18. [局面2]には8086個のデータがあり、それは( 17rci)が-42.2以上〜+47.6以下の数値であること

  19. [局面3]には7927個のデータがあり、それは( 17rci)が+47.6以上(超)の数値であること

    を表しています。

  20. 「条件表を保存」をクリックすれば、別のチャートを基準にして「条件表の分割」をすることができます。

  21. 「終了」をクリックすると「条件表の分割」を終わります。



■■ (3) 3つに分割された条件表の成績を調べる  ■■

No.901([局面1])の内容は次のようになっています。


No.1行〜No.6行はNo.810のトリガー条件表(110日間突破/順)と同じものです。
  1. は(17日順位相関(17rci))が(-42.21以下で買い)の買い条件がついています。
  2. は(17日順位相関(17rci))が(-42.21以下で売り)の売り条件がついています。

    これは分割の指示のときに「無条件」としていたので買い・売りのどちらを使うのか不明です。そこで買い・売りの2通りの条件がつけられています。(「売買共」を指示していたときも買い・売りの2行の条件が付きます。)

  3. No.902([局面2]も上図の7行目と8行目は同じですが、(-42.20 以上〜+47.60以下)になっています。

  4. No.903([局面3]も上図の7行目と8行目は同じですが、(+47.61以上)になっています。

No.901の[局面1]、No.902の[局面2]、No.903の[局面3]のどれが一番成績がよいのかを調べてみましょう。いくつかの条件表の検証をするには、「連続検証」が便利です。

  1. 分割用条件表No.901、No.90、No.903 を選択して、

  2. 検索期間を(070101〜161231)の10年間とし、

  3. 「買いだけ」を指示します。

  4. 売買ルールは3条件表とも同じ(20日で時間切れ、20%で利食い)にします。

  5. 検証結果は「条件表ごとに記憶する」として

  6. 「実行」をクリック。

    3つの条件表が次々に検証されていきます。



  7. 「成績対比表」を使うと、条件表ごとの成績が一覧できます。

    メニューの「検証」→「検証結果の成績対比表」をクリック

  8. (拡張4)のNo.901、No.902、No.903 を選択して、

  9. 「OK」をクリック


  10. No.901、No.902、No.903ともだいたい8000個のデータありましたが、トレード数は大いに違っていますNo.903が最もトレード数が多く549回あります。

  11. 平均利益率はNo.901が5.91%あるがトレード数が10回ではアテにできない。No.903は2.64%あるが、No.902は1.09%とよくない。

  12. 勝率はNo.901とNo.903がよいが、No.901のトレード度数は少なすぎる。

  13. PFはNo.903が1.90倍とよい。

    ここからNo.903の(17rci)17日順位相関を最適化するのがよいことがわかります。

■■ (4) 最も成績がよかった条件表を最適化する  ■■


  1. 最も成績がよい分割用条件表No.No.903 の最適化をします。

  2. 検索期間を(070101〜161231)の10年間とし、

  3. 「買いだけ」を指示します。

  4. 分割した[局面3]は、(17日順位相関)が(+47.6以上のときに買い)という条件でした。だいたいこの17日のパラメータや+47.61以上の範囲によい成績がでるものがあるのでしょう。

    そこで7行目の以上欄は(40〜70まで5ずつ増加)させてみます。

  5. 17日順位相関のパラメータは(13〜21まで2ずつ増加)させてみます。


「最適条件行」の最適化結果は、
  1. パラメータは(21日)で(70以上)がよい。(70以上の数字は最 適条件行で与えた最大の数字であるのが、まだこれより成績がよくなる可能性がある)

  2. トレード数は393回
  3. 利益率は3.13%
  4. 勝率は61.6%
  5. PFは2.15%

  6. 393回のトレードのうち57回は利食いした(利食い率は14.5%)
です。
トリガー条件表No.810(110日突破)の成績と比較すると次の(表4)のようになっています。

No. (表4) 条件表 件数 利食数 利食率% 平均利益% 勝率 PF
810 110日間突破 (トリガー) 709 92 13.0 % 2.38 % 56.7 % 1.79倍
903 110日間突破 (17rci)21日で70以上 393 57 14.5 % 3.13 % 61.6 % 2.15倍



■■ (5) 基準とするチャートを切り替えて別の条件表に分割するA回目  ■■


今度は(9日線カイリ)を分割の基準にしてみます。

  1. 「3分割」を指定し、

  2. 分割する条件表をNo.904、No.905、No.906に保存させます。

  3. 基準とするチャートを指定するために、「リスト画面へ」をクリック。

  4. 2行目の(9KD)9日線カイリ をクリックして基準とするチャートを指示し、

  5. 「条件表を保存」をクリック。

  6. すぐにNo.904、No.905、No.906に条件表が保存されます。



この後は
  1. @回目の分割で述べたように、 (3) 3つに分割された条件表の成績を調べる
  2. (4) 最も成績がよかった条件表を最適化する
  3. 成績を表にまとめる
という作業をして、2回目の分割を終わります。



  1. No.904、No.905、No.906ともだいたい8000個のデータありましたが、トレード回数には大きな違いがでました。

    No.904は(9日線カイリ)が(-1.10以下で買い)
    No.905は(9日線カイリ)が(-1.10以上〜+1.19以下で買い)
    No.906は(9日線カイリ)が(1.20%以上で買い)

    の条件が付けられていますが、No.904のようにカイリ率がマイナスの局面では、No.810(110日突破)のトリガー条件表は買いマークを出しません。(ある程度株価が上昇していないと買いマークはでない)

    よってトレード数が最も多いNo.906(9日線のカイリ率がが1.2%以上)を最適化すると、(13日線カイリが+1.4%以上で買い)がよいことがわかりました。その成績は、

  2. No.906の平均利益率は2.34%であまりよくない。
  3. No.906の勝率は56.3%であまりよくない。
  4. No.906のPFは1.76倍であまりよくない。
    ことからこの(パラメータ=13日)や(1.4%以上)ではあまりよい結果がでていません。


一応No.906を最適化するとして、その成績を次表に追加しました。(13日線カイリ)が(+1.4%以上で買い)が最適とされました。この検証結果は(表5)のようになっています。

No. (表5) 条件表 件数 利食数 利食率% 平均利益% 勝率 PF
810 110日間突破 (トリガー) 709 92 13.0 % 2.38 % 56.7 % 1.79倍
903 110日間突破+ (21rci) 393 57 14.5 % 3.13 % 61.6 % 2.15倍
906 110日間突破+ (13KD) 676 89 13.2 % 2.34 % 56.4 % 1.77倍

(図55)で分割用の条件表を用意しましたが、そこには(17日順位相関)(9日線カイリ)(25日線カイリ)(50日線カイリ)(5日変動率)・・・(17日ベクトル)など12種類のチャートを役立つであるとチャートとして設定していました。

この12種類のチャートを3分割すると36本の条件表が作られます。(以上以下)欄は、(xxx以下) (xxx以上〜yyy以下)(yyy以上)の3つの局面に分割されなされますが、No.810(110日間突破)のトリガーでは、(yyy以上)の局面のトレード数が多く、(xxx以下)や (xxx〜yyy)の局面のトレードは極めて少なくなっています。(yyy以上)の条件表だけを最適化すればよいことがわかります。(トリガーによっては(xxx以下)が有効になることもある)

そこで12種類のチャートについて、パラメータは変更せず、(以上以下)の数値だけを最適化したものが、次の(表6)です。(トレード数は300回以上のものに限った。)


■■ (6) チャートを追加したときの成績のまとめ  ■■

No. (表6) 条件表 件数 利食数 利食率% 平均利益% 勝率 PF
810 110日間突破 (トリガー) 709 92 13.0 % 2.38 % 56.7 % 1.79倍
903 110日間突破 (17rci) +66以上 440 63 14.3 % * 3.01 % 60.0 % 2.10倍
906 110日間突破 (9KD) +2.3以上 570 87 15.3 % 2.54 % 56.5 % 1.78倍
909 110日間突破 (25KD) +4.0以上 588 87 14.8 % 2.65 % 57.5 % 1.85倍
912 110日間突破 (50KD) +4.9以上 633 89 14.1 % 2.46 % 56.6 % 1.80倍
915 110日間突破 (5hen) +5.3以上 371 72 19.4 % 2.77 % 55.8 % 1.72倍
918 110日間突破 (9hen) +4.8以上 549 84 15.3 % 2.55 % 56.1 % 1.79倍
921 110日間突破 (17hen) +11.8以上 320 71 22.2 % * 3.64 % 59.7 % 2.07倍
924 110日間突破 (1kako) +2.8以上 326 70 21.4 % 2.85 % 53.7 % 1.77倍
927 110日間突破 (5dekiB) +2.8以上 491 75 15.3 % 2.79 % 57.6 % 1.92倍
930 110日間突破 (5vec) +2.4以上 651 88 13.5 % 2.79 % 56.5 % 1.80倍
933 110日間突破 (9vec) +4.9以上 469 75 16.0 % 2.60 % 55.7 % 1.81倍
936 110日間突破 (17vec) +4.9以上 314 65 20.1 % * 3.72 % 60.2 % 2.19倍


(表6)を見ると
  1. No.903(17rci.17日順位相関)が(+66以上)の条件表
  2. No.921(17vec.17日変動率)が(+11.8以上)の条件表
  3. No.936(17vec.17日ベクトル)が(+4.9以上)の条件表
の成績がよいようです。No.936は平均利益率が3.72%、勝率が60.2%と最も成績がよいので、これをトリガーとして取り込みます。(図56)
  1. (17日ベクトル)が(+4.9以上で買い)の条件を入れ、
  2. 元あったNo.22行から(17日ベクトル)を抹消すると、
  3. 追加するチャートは11種類に減ります。



11種類のチャートについて3分割して、最適化すればよいのですが、No.810(110日間突破)のトリガー条件表では、株価がある程度上昇していないと売買マークはでません。したがって(yyy以上)の最適化をいきなり行いました。


■■ (7) トリガーを増やした後の各チャートの成績  ■■

No. (表7) 条件表 件数 利食数 利食率% 平均利益% 勝率 PF
821 トリガーに17日べクトルを追加 314 65 20.7 % 3.72 % 60.2 % 2.19倍
943 (17rci=17日順位相関)が(+59以上) 294 60 20.4 % * 4.01 % * 60.5 % * 2.40倍
946 (9KD=9日線カイリ)が(+0.8%以上) 307 65 21.2 % * 3.84 % * 60.6 % * 2.22倍
949 (25KD=25日線カイリ)が(+3.8%以上) 312 65 20.8 % * 3.79 % * 60.6 % * 2.22倍
952 (50KD=50日線カイリ)が(+10.0%以上) 261 64 24.5 % * 4.29 % * 61.3 % * 2.37倍
955 (5hen=5日変動率)が(5.2%以上) 215 57 26.5 % * 4.21 % * 60.5 % 2.18倍
958 (9hen=9日変動率)が(5.4%以上) 288 65 22.6 % * 3.76 % 59.0 % 2.14倍
961 (17hen=17日変動率)が(9.8%以上) 300 65 21.7 % * 3.83 % * 60.3 % * 2.20倍
964 (1kako=1日過去比率)が(+1.7%以上) 237 59 24.9 % * 4.45 % * 60.8 % * 2.37倍
967 (5deki=5日出来倍率)が(1.1倍以上) 219 55 25.1 % * 5.48 % * 62.4 % * 2.73倍
970 (5vec=5日ベクトル)が(8.0%以上) 249 62 24.9 % * 4.11 % 60.2 % * 2.20倍
973 (9vec=9日ベクトル)が(3.8%以上) 292 63 21.6 % 3.70 % 57.8 % 2.15倍



チャートを追加することによって、成績がNo.821よりもよくなるものがほとんどですが、

@No952(50日線カイリが10.0倍以上)
ANo967(5日出来高倍率が1.1倍以上)

の成績がよいようです。
  1. No.810(110日突破)に(17日ベクトルが4.9以上で買い)を追加し、
  2. 次に5日出来高倍率が1.1倍以上)で買いを追加し、
  3. 次に50日線カイリを追加した
ときの段階的な成績は(表8)のようになります。トレード数が減少するに連れて、
@利食い率は11.3%→20.2%へ向上し
A平均利益率は1.93%→2.49%へ向上していますが、勝率とPFはほとんど向上していません。 これ以上チャートを追加することは限界だと思われます。

この結果次の(図57)のような条件表ができあがりました。

この条件表を使って全数(1873銘柄)の検証を行うと、次の(表8)のようになりました。トレード数3190回あるので、さらにチャートを追加すれば成績は向上すると思いますが、先にためした12種のチャートでは無理です。どうやって役に立つチャートを見つければよいのか? それは次章の「オートマ」で解決できます。


No. (表8) 条件表 件数 利食数 利食率% 平均利益% 勝率 PF
810 (初期のトリガー) 12876 1457 11.3 % 1.93 % 55.1 % 1.63倍
821 トリガーに17日べクトルを追加 5461 896 16.3 % 2.29 % 55.2 % 1.64倍
822 5日出来高倍率を追加 3658 674 18.4 % 2.31 % 54.4 % 1.60倍
823 50日カイリ率を追加 3190 643 20.2 % 2.49 % 54.9 % 1.63倍

<先頭へ戻る>


【6】オートマを使って追加するチャートを決める方法

【5】ではトリガー条件表にどのようなチャートを追加すればよいのかを「条件表の分割」という方法で行いました。この方法はやや面倒です。《Qエンジン》にはオートマという機能があって、用意したチャートの中から役立つチャートを選び、最適化してくれます。

オートマを実行するときは、次の4つのことを決めておく必要があります。
  1. 使う「トリガー条件表」
  2. 追加するチャートを複数個設定してある「計算用条件表」
  3. どういう日に売買マークを出したいのか(注目点)
  4. どういう日に売買マークを出したくないのか(雑音点)
初めは簡単な指示によってオートマを実行してみます。

■■ (1)トリガー条件表  ■■

トリガー条件表は【5】でも使った(拡張84)No.810を使います。(図28)がトリガー条件表です。 (図28)



■■ (2)計算用条件表(追加するチャート)  ■■

計算用条件表には、役立つかもしれないチャートを数多く設定しておきます。次の(図58)は計算用条件表の一例です。(拡張4)No.13(計算一般銘柄Y)というタイトルをつけています。図は一部分を取り出していますが、この計算用条件表には130個(130行)のチャートが設定されています。
  1. はチャートののタイトルと、買い(または売り)で使うという条件を設定しています。
  2. 「以上以下」欄は空白です。ここにオートマが最適な以上以下の数値を設定してくれます。
  3. チャートのパラメータ(5日平均など)は最適化されません。




■■ (3)オートマ指示書で方針を決める  ■■


  1. 銘柄を選択して(ここでは「ランダム100銘柄」を選択しました)、

  2. メニューの「オートマ」をクリック。

  3. 「オートマ指示書」の一覧表が現れるので、適当なもの(ここではNo91)を選択し、

  4. 「OK」をクリック。

指示書では次のことを指示します。
  1. データは(連結)とする
  2. (買い)の条件表を作る
  3. 2007年1月1日〜2016年12月31日の期間を手本とする

  4. 注目点は(c)トリガーが売買マークを出した日で、
  5. その後(20日間)で
  6. (20%)以上株価が上昇するが、
  7. (-20%)以上は下落していない日

    だけを真の注目点とする

  8. オートマ指示書のタイトルをつけておく

  9. トリガーは(拡張4)No.810(110日間突破)を使う
  10. 注雑ファイルはNo.50に保存する(重要ではない)
  11. 計算用条件表は(拡張4)No.13(計算一般銘柄Y)を使う
  12. できた条件表は(拡張4)のNo.830に記憶させる。

  13. 注目点(売買マークを出したい日)は(当日だけ)とする
  14. 雑音点(売買マークを出したくない日)は(空白)にしておく
  15. 生成ルールは(深層条件)とする
  16. 最小注目数は(20個)とする。
以上のことを指示しますが、ユーザーが決めるのは(c)の対象とする期間と(d,e,f,g)のどれほどの株価上を捉えたいのかくらいです。




■■ (4)オートマが処理していくこと  ■■


注目点は、 @(i)のトリガーの(拡張4)No.810 が売買マークを出し、

なおかつ(e,f,g)で決めてある(株価が20日間で20%以上上昇)したものが真の注目点とされます。

いくらトリガーのNo.810(110日間突破)が買いマークを出していても、(e,f,g)に当てはまらない日は買いマークを出したくない日(雑音点)になります。
  1. 右図では真の注目点の日と、注目点になりそこねた雑音点の日を調べています。
条件表を作るとは、「注目点と雑音点の判別ができるようなチャートを見つける」ことです。

  1. 注目点と雑音点が決まったら、その日のチャートの数字はどうであったのかを調べます。

    調べるチャートは、オートマ指示書の(k)(拡張4)No.13(計算一般銘柄Y)に設定してある130種類のチャートです。

  2. 注目点と雑音点の日のチャートの数値がわかったので、この数値にどういう条件(条件表の「以上以下」欄の数値)をつければ、 注目点と雑音点がうまく判別できるのかを調べます。

    「以上以下」の数字を決めるとは、「以上以下」を最適化するということです。

  3. 130種類のチャートの「以上以下」を最適化していきます。

    前章の【5】「条件表を分割して追加するチャートを見つける方法」 では12種類のチャートを最適化し、もっとも成績がよいチャートをトリガー条件表に取り込んでいきました。

    オートマはだいたいこれと同じことをしていますが、【5】は手作業により、【6】オートマ は自動的に計算や最適化をするので、それに要する時間は比べものになりません。

  4. 最後の段階です。オートマは条件表を設定し始めました。

    6行目の(a)までがトリガーです。(拡張4)No.810の(110日突破)

    (b)7行目からがオートマが最適化し、もっともよく注目点と雑音点を判別できるチャートを設定していきます。

  5. 条件表が生成されました。

    所要時間は(2分27秒)でした。【5】「条件表を分割して追加するチャートを見つける方法」 の原稿を書くのに、実は1週間をかけています。それでも12種類のチャートの最適化しかできませんでした。

    オートマはわずか2分27秒で、1週間分の10倍(130種類のチャート対12種類のチャートだから約10倍)の処理をしたわけです。

  6. できた条件表は(拡張4)No.830に記憶されます。

    No.830のタイトルは数字や記号ばかりなので、例えば(Auto 110日間突破)のようなタイトルに変更してください。

    次の内容の条件表ができていました。


追加された条件表は、
  1. 9日線カイリが13.9%以上
  2. 1日前過去比率が27.7%以下
  3. 50日間の最小値が43日以下(50日間の安値が当日から43日以内にある)
わずかに3つのチャートが役立つことがわかったのですが、そのわずかなことが重要な役割を果たします。

  1. どのような過程で、この条件表ができたのかを知るには、「ログ」をクリック

  2. 「条件生成ログ」の画面を見ると
  1. まではNo.810のトリガー条件表によって決定した真の注目点の数で、72個あります。ランダム100銘柄の過去10年間で、20日で20%上昇したのは、わずかに72例です。

  2. これに(9日線カイリ)が(13.9以上で買い)の条件をつけると、注目点は27個に減ります。

  3. 次に(1日前過去比率)が(27.2以下で買い)の条件をつけると、注目点は1個減って26個になります。

  4. (50日最小日数)の条件を追加すると注目点は21個になります。これ以上の条件をつけると、オートマ指示書の(p)最小注目数の(20個)以下になるので、チャートの追加はここで終わりました。


■■ (5)オートマが作った条件表を検証する  ■■


オートマが作ったNo.830条件表の検証をしてみます。 ランダム100銘柄を選択しておいて「新規検証」をクリック。
  1. (拡張4)No.830を選択する。

    あとで(Auto N810(110日突破)100銘柄)というタイトルに変更します。

  2. 検証期間を(2007年1月1日〜2016年12月31日)とし、

  3. 売買は(買いだけ)

  4. 「実行」をクリック。

  5. 検証が進み、(◎利食い)できたのか(−時間切れ)になったのかなどが表示されます。

  6. 29回のトレードをしています。この内容を知るには「売買成績」をクリック。

  7. 成績(@トレード数、A平均利益、B勝率、CPF)が表にまとめられています。
次図で
  1. トレード数は29回。うち利益がでたのは22回、損失になったのは7回。

  2. 平均利益率は11.28%
  3. 勝率は75.9%
  4. PFは4.36倍




■■ (6)全数での検証をする  ■■

ランダム100銘柄についてオートマで条件表を作ったところ、異常によい成績になっていました。@平均利益率が11.28%、勝率が75.9%、BPFが4.36倍です。このように異常な成績になったのは、トレード数が29回と少ないのが原因です。

【4】「トリガー条件表に別のチャートすれば成績がよくなる」の (1)「条件表を作ったときのトレード数に注目すること」でいったように同じ勝率が60%とはいってもトレード数が30回しかないときの60%とトレード数が500回あるときの60%ではその信頼性に大きな差があります。(図45)で「トレード数と勝率の信頼区間」の表を掲げましたが、トレード数が50回のときの勝率60%の信頼区間は(77.9%〜42.1%)です。29回のトレードで勝率が75%あっても信頼できる下限は50〜55%の間でしょう。

ということで、No.830(110日間突破.ランダム100銘柄)を使って全数(1873銘柄)の検証をしてみました。

No. (表9) 条件表 件数 利食数 利食率% 平均利益% 勝率 PF
830 ランダム100銘柄での検証 29 21 72.4 % 11.28 % 75.9 % 4.36倍
830 全数(1873銘柄)での検証 643 211 32.8 % 2.47 % 52.1 % 1.44倍


全数での検証の勝率は52.1%であり、平均利益率は2.47%になっています。この成績は【5】「条件表を分割して追加するチャートを見つける方法」で手作業によって作った(拡張4)No.823(110日間突破+Vec+Dbai) の勝率54.9%よりも悪いが、利食い率が32.8%(20.2%)とよいところもあります。(( )内はNo.823の全数の成績。)

トレード数を多くして、成績を安定させるには、ランダム100銘柄を対象にするのではなく、ランダム400銘柄とか、全数(1873銘柄)を対象にしてオートマを実行させることです。

<先頭へ戻る>


【7】オートマで全数を対象にした条件表を作る

トレード数を増やすために、全数(1873銘柄)を対象にしてオートマで条件表を作ります。


全数(1873銘柄)を選択して、オートマ指示書の画面に進みます。

右の指示は【6】「オートマを使ってチャートを追加する方法」 の指示(図59)と同じですが、
  1. 注雑ファイルをNo.51にした(重要ではない)

  2. 全数によって作った条件表は(拡張4)No.831に記憶させる

  3. 最小注目数は50〜100まで広げたほううがよいが、ここでは(20個)のままとした。


全数を対象にすると、ランダム100銘柄に比べて、銘柄数(データ数)が18倍になりなるし、条件表を追加すればするほど計算量が増えるので、右図のように91分35秒かかりました。

手作業では到底できないことを1時間半で終えるのだから、オートマの力恐るべしです。


(拡張4)No.831には次(図61)の条件表ができていました。

元のトリガーはNo.6行目まで。No.7からNo.24行はオートマが追加した条件表です。(買い条件)がついている行は8行あります。

条件が付きすぎている気がしますが、果たしてどうなのか。



全数(1873銘柄)の検証を行うと、トレード数は22回しかありませんでした。

「売買成績」でその内容を見ると、
  1. トレード数は22回
  2. 平均利益率は11.15%
  3. 勝率は86.4%
  4. PFは13.38倍
です。22回のトレードをして勝率が86.4%あったといってもアテにはできません。オートマは8つの買い条件を追加したので、絞り過ぎてトレード数が少なくなっています(そのかわり見かけの成績は非常によい)。



トレード数を増やすには、オートマが追加した買い条件を消していけばよいのです。

  1. 「オートマ指示書」の画面に戻って、「ログ」をクリック。

  2. (拡張4)No.831(auto N810突破全数)を選択し、

  3. (深層条件)を指示して、
  4. 「ログ」をクリック。
ログから以下のことがわかります。
  1. 元のトリガーからは1104個の買いマークがでていたが、

  2. (75日線カイリ)が(24%以上で買い)との条件をつけると、注目数は398個に絞られた。

  3. 次に(9日線カイリの最小値)の条件を追加すると233個に減った。

  4. (17日順位相関)の条件を追加すると、55個になった。


注目数が42個のところで、買い条件をカットします。

(No.1行〜No.15行までの条件表にして、No.832(auto N810(110日突破)全C15)として条件表を保存します。

この条件表を使えば最低でも42個の注目点が取り出せるはずですが、トレード数がどれくらいになるのかはわかりません。

また注目数が55個のところで、買い条件をカットします。

(No.1行〜No.13行までの条件表にして、No.833(auto N810(110日突破)全C13)として条件表を保存します。

この条件表を使えば最低でも55個の注目点が取り出せるはずですが、トレード数がどれくらいになるのかはわかりません。

また注目数が233個のところで、買い条件をカットします。

(No.1行〜No.12行までの条件表にして、No.834(auto N810(110日突破)全C12)として条件表を保存します。

この条件表を使えば最低でも233個の注目点が取り出せるはずですが、トレード数がどれくらいになるのかはわかりません。

「連続検証」で、No832,No.833,No.834 の検証を行います。

連続検証は、次々に検証をしていくので、パソコンを操作する必要はありません。

次の(表10)にオートマが生成した条件表の行を少しずつカットしたときの成績をまとめました。

(表10)を見ると、No.833の成績(@トレード数が120回、A平均利益率が8.15%、B勝率が65.0%、CPFが3.10%)となっています。トレード数が120回ではなくて200回あれば申し分ないのですが、残念なことに少しトレード数が見劣りします。

No.834(12行でカット)の成績は、@トレード数が754回(3190回)、A利食い率が38.7%(20.2%)、B平均利益率が4.26%(2.49%)、C勝率が58.5%(54.9%)です(( )内はNo.823の成績)。

【5】「条件表を分割して追加するチャートを見つける方法」の(表8)で作ったNo.823よりもよい成績です。手作業でチャートを見つけるよりもオートマを使ったほうがよりよいチャートが見つかります。

No. (表10) 条件表 件数 利食数 利食率% 平均利益% 勝率 PF
831 オートマの23行条件表の検証 22 19 86.4 % 11.15 % 86.4 % 13.38倍
832 15行でカットした条件表の検証 76 48 63.2 % 11.54 % 73.7 % 6.00倍
833 13行でカットした条件表の検証 120 63 52.5 % 8.15 % 65.0 % 3.10倍
834 12行でカットした条件表の検証 754 292 38.7 % 4.26 % 58.5 % 1.83倍

<先頭へ戻る>


【8】終わりに

成績のよい条件表を作るには、
  1. よいトリガー条件表を見つけること

  2. 役立つチャートを計算用条件表に設定しておくこと
の2点が最も重要です。よいトリガー条件表を決めるために、講座では(拡張4)No.809(10日間突破)を例にして、最適化を行いました。トリガーになるものはほかにもいくつか考えられます。例えば、@(出来高が急に増えた)A(前日比でX%上昇した)、B(3日連続した株価が上昇した)、C(主な株価がボトムを表示した)、などなどです。これらを最適化してトリガーとし、オートマを実行すれば、この講座で作った条件表(No.833ないしNo.834)よりも成績がよいものがあるでしょう。

次に考えることは、
  1. 目的にあった計算用条件表を使うこと
です。講座では(20日間で20%の利益)を目標としました。計算用条件表はNo.13(計算一般銘柄Y)を使いましたが、ある程度パラメータが長めのもの(No.14(計算一般銘柄Z))を使ったほうがよかったかもしれません。

まあやり方がわかればやってみればよいだけのことです。講座では、トリガーの最適化とオートマの動かし方について詳しく述べたので、時間を見つけてやってみてください。

<先頭へ戻る>



2018年5月に執筆 ・・・・  講座目次へ.