長期的な資産の増加を目指している方向けに増田丞美のメルマガを配信しています。米国株式マーケットの制度を利用するものの通常の株式投資ではありません。本メルマガでお届けする方法の利点は以下のとおりです。
・米国制度によって守られている。
・管理が比較的容易。
・長期的な収益。
詳細はこちらからご覧ください。
投資で稼ぐチカラがつくメディア
システムトレーダーの斉藤正章です。私は、会社員時代に元手30万円から株式投資を始めました。その後、システムトレードという手法に出会い、現在は主にシステムトレードで得られる収益で生活しています。
システムトレードとは、簡単にいうと、予め決めた売買ルールで機械的に取引を繰り返して利益を積み重ねるトレード手法です。
この記事を読むことで、次のノウハウを得ることができます。
一度マスターすれば継続して利益をあげられる手法ですので、この記事を参考にして、ぜひ取り組んでみて下さい。
目次
まず始めに、私のシステムトレードの実績をお伝えします。
下のグラフをご覧下さい。これは、私が今の形でシステムトレードを行うようになった2007年から現在までの、過去11年間の利回りの推移を表したものです。
その年によって利回りにバラツキがありますが、安定的に資産を増やすことができています。
この成績を出すために日々行っていることは、朝の8時台にシステムが出してくれるシグナルを確認して、証券会社のツールで発注しているだけです。その後はずっとパソコンの前にいる必要はなく、趣味のマラソンの練習をしたり、自宅のリフォームなどをして過ごしています。
注文に費やしている時間は1日20分から30分程度なので、ほとんど時間をかけずに利益を生み出すことができています。お金を増やすことはもちろん大切ですが、それ以上に自由な時間というのは何ものにも代えがたいものです。
この章では、数ある投資手法の中で、私がどのような経緯でシステムトレードに辿り着いたのかを説明します。
私は元々プログラマーやシステムエンジニアの仕事をしており、主に大企業向けのシステム設計や開発をしていました。株とは全く関係のない仕事でしたので、世の中の出来事や経済の動きにも全く無頓着で、ごく平凡なサラリーマンでした。
では、私がなぜ株式投資に興味を持ったのかというと、損害保険会社に派遣された時に、有価証券の管理のシステム開発を任されたことがきっかけでした。その会社で、勉強のために株式や債券に関する本を渡され、面白そうだと思いました。
当時はあまり収入が多いほうではなく、給料の20万円を超える分は全て貯金に回して節約しながら生活をしていました。そのような事情もあり、興味を持ったとしても株式投資に回せるお金はあまりなく、なんとか30万円を貯めて売買を始めました。
しかし、明確なルールを決めずに自分の勘で売買をしていたため、安定した成績を残すことはできませんでした。
もっと損益を安定させる必要があると思い、仕事で培ったシステム開発のスキルを活かして、売買ルールをシステム化できないかと考えました。そして、色々と試行錯誤していくうちに、システムトレードの原型が出来上がりました。
このような経緯を経て、ようやくシステムトレードで売買を開始できたのは、株式市場が好調な2003年でした。
ここで、2003年から2006年までのトレード成績をご覧いただきたいと思います。ちなみに、小数点以下は切り捨てで、年末時点でまだ決済していない銘柄は、年末の株価で計算しています。
2005年までは相場の波に上手く乗れたことが大きく、正直なところ出来過ぎといえる成績でした。しかし、2006年にライブドアショックが起こって株式市場全体が急落し、一時は50倍以上に膨らんだ運用資産をピークから40%以上も減らしてしまいました。
2006年のライブドアショックでは-42%の損失を出してしまいましたが、今思えば、この時の損失が良い教訓になりました。なぜなら、その後は利益率だけでなく、安定性も考慮して売買システムの改良を行い、2016年までは年間ベースで負けることなく安定的に利益あげられるようになったからです。
今度は、システム改良後の2007年以降のトレード成績をご覧下さい。
2017年に初めてマイナスになってしまったのですが、これは、日銀の大規模な買い入れにより株式市場全体が人工的な値動きになってしまったことが影響していると分析しています。しかし、それでもマイナス1%の最小限の損失に抑えることができました。
年ごとの成績を振り返ると、2008年のリーマンショックの時には+11%でさすがに苦戦を強いらました。しかし、2011年の東日本大震災の年も+84%の結果を残すことができ、システム改良後の2007年から2017年までの11年間の平均利回りは+40%となっています。
このように、システムトレードのお陰で年間ベースで安定したトレード成績を残していますが、私自身は現状に満足することなく、現在も運用を継続しながら新たな売買ルールの研究を続けています。
以上が、私の自己紹介とシステムトレードの実績です。
次からは、システムトレードとはどういう投資手法なのかをわかりやすく解説していきます。
この章では、いよいよシステムトレードについて具体的に説明します。
繰り返しになりますが、 システムトレードは、一定のルールに基づいて機械的に売買を繰り返すことで継続的に利益を積み上げていく投資手法です。
この投資手法では、過去の株価データを基にしてバックテストという検証を行い、統計的に優位な売買ルールを探し出します。そのため、将来も継続的に勝てる確率が高い投資手法であるといえます。
実際に私は、システムトレードで10年以上に渡って利益をあげ続け、専業トレーダーとして生計を立てています。まずは、このシステムトレードのメリットを知ることから始めましょう。
私が実感しているシステムトレードのメリットはたくさんあるのですが、ここでは3つお伝えします。
システムトレードでは、予め設定した売買ルールに従って、機械的に売買を行います。そのため、人間の判断を入れる必要がありません。人間の判断に基づくトレードを裁量トレードといいますが、様々な判断要素が絡んでくるため、大きな労力が必要になります。
しかし、システムトレードは、システムが出すシグナルに従って売買するだけなので、このような労力は不要になります。
システムトレードでは、過去のデータを検証して、利益になる確率が高いルールで取引します。優位性が確認できた売買ルールを使用しますので、繰り返し売買することで将来に渡っても再現性が高くなり、収益が安定します。
システムトレードでは、売買シグナルという形で条件に当てはまった銘柄を抽出してくれます。そのため、裁量トレードのように銘柄分析をしたり、チャート分析をする必要がないので、ほとんど時間がかかりません。
続いて、システムトレードのデメリットについても説明します。しっかり把握しましょう。
システムトレードはシステムが売買シグナルを出してくれますが、このシグナルに従い続けるためには、強い意思が必要です。
例えば、市場が暴落した時にシステムが買いのシグナルを出したとします。そのような時に、ここで買って更に下落したらどうしよう、という恐怖心でシグナル通りに売買するのをためらってしまう方もいます。
また、シグナル通りに売買して負けが続くと、「自分の判断のほうが正しいのではないか」と考えて、自分の裁量を入れてしまうケースも考えられます。
しかし、システムトレードでは、このような判断を一切入れてはいけません。ある時はシステムトレードを行い、別の時は裁量トレードをしていたら、システムトレードをやる意味がありません。
システムトレードは、全く同じルールを使う人が多くなると、みんなが同じタイミングで売買しますので、利益が減ってしまいます。
例えば、買いシグナルが出た時に同じシステムを使っているシステムトレーダーが一斉に買い注文を出すと、その注文で株価を釣り上げてしまい、バックテスト通りの利益にならないことがあります。
したがって、これに対処するためには、ベースとなるルールは同じでも、細かい数値までは他の人と完全に同じにならないように調整する必要があります。
繰り返しになりますが、システムトレードは、過去のデータに基づいて優位性がある売買ルールを使用します。そのため、過去になかった相場状況に直面した場合、機能しづらくなる可能性があります。
しかし、そのような状況になったとしても、いずれは正常な相場に戻るはずですので、ルールを変えずに継続してトレードを繰り返したほうが良い結果につながると考えています。
システムトレードには、メリットもあればデメリットもあることをお分かりいただけたと思います。しかし、私は、デメリットを差し引いてもメリットのほうが断然大きいと思っていますので、今後もシステムトレードを続けていくつもりです。
それでは、次の章から、私のシステムトレードの代表的な3つの戦略を具体的にご紹介します。なお、ここでご紹介するトレード戦略は、私が使用している売買ルールに限りなく近いものですが、実際に運用で使用しているものとは異なることをご了承下さい。
最初にご紹介するのは、株価のブレイクアウトを利用して収益をあげる「順張り買い」戦略です。まず、この戦略で運用した場合の資産推移をご覧下さい。
資産曲線を見てわかるように、右肩上がりで資産が増えていることがおわかりいただけると思います。
ちなみに、順張りとは、株価のトレンドに沿って、上昇していたら買い、下落していたら売る投資方法です。また、ブレイクアウトとは、株価が一定のレンジ(もみ合い)を抜けると、その方向に株価が動いていく傾向を利用して売買する手法をいいます。
次のチャートで、イメージをつかんで下さい。
●ブレイクアウトのチャート
この順張り買いの前提条件を説明すると、初期運用資金は300万円で、利益は再投資していません。また、売買手数料は往復1,000円として検証しています。
資産推移グラフをご覧いただくと、300万円でスタートした運用資金は、2018年6月時点で1,200万円以上になっていることがわかります。しかも、その間に大きな損失は発生しておらず、安定的に資産が増加しています。
この戦略の成績は、勝率は46.45%とあまり良くありません。しかし、平均利益は47,690円に対して、平均損失はマイナス12,515円となっています。利益が損失を上回っているので、繰り返し売買することで、トータルではプラスになります。
この状態のことを、投資では「損小利大」といい、「大きく勝って小さく負ける」ことを意味します。この損小利大は、株式投資で成功しているほとんどの人が意識しているほど重要な概念なので、しっかり覚えておいて下さい。
それでは、具体的なルールを確認してみましょう。
私が実践している順張り買い戦略の最初のルールは、次の2つです。
1.過去500日間のボラティリティがX%以上
2.過去100日間のボラティリティがY%より小さい
ここで、X%、Y%と明確な数値は開示していません。これはシステムトレードのデメリットのところでも書いた通り、多くの人が全く同じ数値で取引すると利回りが低下してしまうためです。
目安として、X%の部分は10%~20%、Y%の部分は1%~9%の数値と考え、各自で調整して最適な数値を見つけてみて下さい。
ちなみに、ボラティリティとは、株価の値動きの大きさを表すものとお考え下さい。この2つの条件で、「もともと値動きがあった銘柄が、直近2~3ヶ月間は値動きが乏しく、もみ合いの状態が続いている」銘柄を探すことができます 。
次に、レンジを上抜けした銘柄を選ぶために、次の条件を加えます。
3.終値が過去50日間の最高値を更新
この3つの条件を設定することで、「売りと買いが拮抗して狭いレンジで行ったり来たりを繰り返していたが、ある日均衡が破れて直近の高値を更新する銘柄」を抽出することができます。
ただし、3つの条件に当てはまったらすぐに買い付けるのではなく、さらに一定の状況になった場合にだけ買い付けます。その一定の状況とは、
4.終値が過去50日間の終値の最高値を更新した銘柄が、市場全体で50銘柄以上ある場合
です。この4つ目の条件を加えることで、市場全体の状況が良い場合に限定することになり、統計的に成績が良くなります。ちなみに、私はこのような市場全体の状況を捉えるための条件を「シグナル数フィルター」と呼んでいます。
このように、順張り買い戦略では、この4つの条件を満たした銘柄を指値注文で買い付けます。
順張り買い戦略で買い付けた銘柄は、次のどちらかの条件に当てはまった場合に売却して決済します。
利食いの場合は、「株価がブレイクアウトした後に思惑通りに株価が上昇した場合」の決済条件です。また、損切りの場合は、「株価がブレイクアウトしたものの、その後失速して損切りになった場合」の決済条件です。
このどちらかの条件に当てはまった場合、翌日の9時の寄り付きで成行き注文で売却します。
順張り買い戦略は、以上のような売買を淡々と繰り返すことで、理論上は300万円の資金を1,200万円以上に増やすことが可能です。
このように、システムトレードは、過去のデータを基に統計的に優位性があるパターンを見つけ出し、あとはそれを地道に繰り返すだけです。相場観やトレード技術に頼ることがないので、誰でも同じように利益をあげ続けることができます。
そして、慣れてくれば、「多少リスクを取っても高い利回りを追求するシステム」や「多少の利回りは犠牲にしても安全性を最優先したシステム」など、自由自在に取引ルールを作り出すことができます。
以上、順張り買い戦略についてご紹介しましたが、実際にどのようにプログラミングしているのか、気になる方も多いと思います。そこで、ソースコードの一部をサンプルとして公開しますので、参考にして下さい。
/* * ボラティリティ(標準偏差) * ボラティリティ●日が●%「以上、以下、より大きい、より小さい、と等しい」 * * @param days 移動平均●日 * @param per ●% * @param comp <判定条件>参照 * @param date 対象の日付(例:20150901) * return なし * * 取得できる追加キー(本関数を複数コールした場合は、下記の後ろに「_2」や「_3」など番号が付与される) * volatility * * e.g.) addkeystr = "" の場合 * 1回目コール時:volatility * 2回目コール時:volatility_2 * * e.g.) addkeystr = "2" の場合 * 1回目コール時:volatility2 * 2回目コール時:volatility2_2 */ public function SetWhereVolatility($days, $per, $comp, $date, $addkeystr = "") { set_error_handler(function($errno, $errstr, $errfile, $errline) { throw new Exception($errstr, $errno); }); try{ // 指定日前の市場営業日を取得 $dbCalcUtil = new DBCalcUtil(); $stdate_str = $dbCalcUtil->GetStockPriceOpenDate($days, $date); // 取得対象日の情報を作成 $target_dt = new DateTime($date); $target_dt->setTimeZone(new DateTimeZone('Asia/Tokyo')); // サブクエリの使用を宣言する $key = 'stdvol'; $reg = $this->SetSubQueryTableName('get_subsql_standard_volatility_per', $key, array($target_dt->format('Ymd'), $stdate_str)); if($reg){ $subsql = $dbCalcUtil->get_subsql_standard_volatility_per($target_dt->format('Ymd'), $stdate_str, $key); $this->SetJoinWithInner($subsql); } // 本関数の呼びもとから指定された条件で検索 $this->SetSelectField("truncate(" . $key . ".volatility, 2)", "volatility" . $addkeystr); $this->SetWhereWithAnd("(" . $key . ".dat_date_min = ? AND t1.dat_date = ? AND " . $key . ".volatility " . $comp . " ?)"); $this->prms[] = $stdate_str; $this->prms[] = $target_dt->format('Ymd'); $this->prms[] = $per; } catch(Exception $err){ LogIF::GetInstance()->ErrorLog(__FUNCTION__ . ":" . __LINE__, $err->getMessage(), basename(__FILE__)); } restore_error_handler(); } /* * ボラティリティ(標準偏差) * ボラティリティ●日の情報 * * @param days 移動平均●日 * @param date 対象の日付(例:20150901) * return なし * * 取得できる追加キー(本関数を複数コールした場合は、下記の後ろに「_2」や「_3」など番号が付与される) * volatility_info * * e.g.) addkeystr = "" の場合 * 1回目コール時:volatility_info * 2回目コール時:volatility_info_2 * * e.g.) addkeystr = "2" の場合 * 1回目コール時:volatility_info2 * 2回目コール時:volatility_info2_2 */ public function SetInfoFieldVolatility($days, $date, $addkeystr = "") { set_error_handler(function($errno, $errstr, $errfile, $errline) { throw new Exception($errstr, $errno); }); try{ // 指定日前の市場営業日を取得 $dbCalcUtil = new DBCalcUtil(); $stdate_str = $dbCalcUtil->GetStockPriceOpenDate($days, $date); // 取得対象日の情報を作成 $target_dt = new DateTime($date); $target_dt->setTimeZone(new DateTimeZone('Asia/Tokyo')); // サブクエリの使用を宣言する $key = 'stdvol'; $reg = $this->SetSubQueryTableName('get_subsql_standard_volatility_per', $key, array($target_dt->format('Ymd'), $stdate_str)); if($reg){ $subsql = $dbCalcUtil->get_subsql_standard_volatility_per($target_dt->format('Ymd'), $stdate_str, $key); $this->SetJoinWithInner($subsql); } // 本関数の呼びもとから指定された条件で検索 $this->SetSelectField("truncate(" . $key . ".volatility, 2)", "volatility_info" . $addkeystr); } catch(Exception $err){ LogIF::GetInstance()->ErrorLog(__FUNCTION__ . ":" . __LINE__, $err->getMessage(), basename(__FILE__)); } restore_error_handler(); }
次にご紹介する「空売りデイトレ」戦略は、「一時的に株価が急騰した銘柄が、短期的に反落するのを狙って空売りを仕掛ける」戦略です。条件に合致した銘柄に予め指値注文を出しておき、当日の15時の大引けで決済するので、1日で売買が完結するデイトレード系の戦略となります。
まず、この戦略で運用した場合の資産推移をご覧下さい。
最初の順張り買い戦略以上に、右肩上がりで資産が増えていることがおわかりいただけると思います。
それでは、具体的なルールを確認してみましょう。
まず、空売りデイトレ戦略では、対象銘柄を「東証1部の貸借銘柄」に絞ります。なぜなら、上場されている全ての銘柄が空売りができるわけではなく、貸借銘柄に指定されているものだけだからです。
そして、私が実践している空売りのルールは、次の通りです。
①終値が前日比で一定以上高くなっていて当日が陽線
この条件で、「一時的に株価が吹き上がっている銘柄」を抽出します。
そして、株価がやや横ばいか上昇傾向にある銘柄を空売りの対象としたほうが成績が良いと判明したので、「株価位置」という指標を加えてトレンド判定します。次の条件です。
②株価位置が40%以上の銘柄
株価位置を詳しく説明すると、過去一定期間の水準と比べて株価がどのくらいの水準にあるかを判定するための指標のことです。私は、株価位置が50%を以上だと上昇トレンド、50%以下だと下降トレンドだと判断して使っています。
また、過去約15年間のデータを検証した結果、このデイトレ戦略は金曜日だけ成績が良くないことが判明したので、金曜日以外の平日にだけ取引を行う条件を加えました。
③金曜日以外の平日
そして、さらに利回りを高めるために、株価位置に絡んだ次のルールを追加しました。
⑤終値基準の200日株価位置が100%より小さい場合:「50日間の株価変動率が30%以上 」
⑥終値基準の200日株価位置が100%と等しい場合:「50日間の株価変動率が40%以上で終値が500円以下 」
この2つの条件は多少わかりにくいかもしれませんが、簡単にいうと、高値を更新している場合は株価500円以下の銘柄に絞りましょう、ということです。過去の検証の結果、この2つの条件を加えたほうがパフォーマンスが良かったので追加しました。
以上の条件に合致する銘柄が抽出されたら、翌日に空売りでエントリーします。
空売り戦略はデイトレ戦略なので、その日の「引け成り」で買い決済します。ちなみに、引け成りとは、その日の取引が終了する15時に、成行で売買する注文方法です。決済の条件を記載しておきます。
⑦「当日に引け成り買い」
空売りデイトレ戦略は、以上のような売買を淡々と繰り返すことで、理論上は300万円の資金を2,500万円近くまで増やすことが可能です。
また、先ほどの資産曲線をもう一度ご覧いただくと、滑らかな右肩上がりの曲線が描けて、資産が着実に増えていることがわかります。さらに、この戦略は損失の発生が少ないので、比較的安心して運用できる点もメリットです。
デイトレ系の戦略は、1日で売買が完結するので資金効率がよく、利回りも高くなる傾向があります。ぜひ、チャレンジしてみて下さい。
最後に、空売りデイトレ戦略のサンプルソースコードも公開しますので、参考にして下さい。
if( ($breakout['date_num'] == 40) && ($breakout['criteria'] == 1) && !empty($breakout['first_update_num']) ) { // 直近○日間で初めての更新 $this->sdi->SetWhereNothing40BreakOutLow($breakout['first_update_num']); } } // 株価位置(ザラバ基準) if( isset($sp_position['check']) ) { $this->sdi->SetWhereStockPricePosition($sp_position['date_num'], $sp_position['val_num'], $sp_position['comp']); } // 株価位置(終値基準) if( isset($sp_position_cp['check']) ) { $this->sdi->SetWhereStockPricePositionWithEndPrice($sp_position_cp['date_num'], $sp_position_cp['val_num'], $sp_position_cp['comp']); } // ローソク足 if( isset($yinyang['check']) ) { $this->sdi->SetWhereCandleStickType($yinyang['val']); } // 陰線・陽線前日比 if( isset($yinyang_ratio['check']) ) { $this->sdi->SetWhereCandleStick($yinyang_ratio['yinyang'], $yinyang_ratio['val_num'], $yinyang_ratio['comp'], $screening_date); } // 平均売買代金 if( isset($trading_value['check']) ) { $this->sdi->SetWhereTradingValueAvg($trading_value['date_num'], $trading_value['val_num'], $trading_value['comp'], $screening_date); } // 移動平均値比較 if( isset($ave_comp['check']) ) { $this->sdi->SetWhereMovingAvg($ave_comp['date_num'], $ave_comp['comp']); } // 60日移動平均値比較 if( isset($ave60_comp['check']) ) { $this->sdi->SetWhereMovingAvg60PrevXDays($ave60_comp['date_num'], $ave60_comp['comp']); } // 移動平均乖離率 if( isset($deviation_rate['check']) ) { if( !empty($deviation_rate['date_num']) && !empty($deviation_rate['start_val']) && !empty($deviation_rate['end_val']) ) { $this->sdi->SetWhereMovingAvgDivergence($deviation_rate['date_num'], $deviation_rate['start_val'], $deviation_rate['end_val'], $screening_date); } } // 移動平均乖離率2 if( isset($deviation_rate2['check']) && ($deviation_rate2['check'] == "on") ) { if( !empty($deviation_rate2['date_num']) && !empty($deviation_rate2['start_val']) && !empty($deviation_rate2['end_val']) ) { $this->sdi->SetWhereMovingAvgDivergence2($deviation_rate2['date_num'], $deviation_rate2['start_val'], $deviation_rate2['end_val'], $screening_date); } } // 株価変動率 if( isset($change_rate['check']) ) { if( !empty($change_rate['date_num']) && !empty($change_rate['val_num']) && !empty($change_rate['comp']) ) { $this->sdi->SetWhereMovingRaito($change_rate['date_num'], $change_rate['val_num'], $change_rate['comp'], $screening_date); } } // 株価変動率2 if( isset($change_rate2['check']) && ($change_rate2['check'] == "on") ) { if( !empty($change_rate2['date_num']) && !empty($change_rate2['val_num']) && !empty($change_rate2['comp']) ) { $this->sdi->SetWhereMovingRaito2($change_rate2['date_num'], $change_rate2['val_num'], $change_rate2['comp'], $screening_date); } } // 株価変動率3 if( isset($change_rate3['check']) && ($change_rate3['check'] == "on") ) { if( !empty($change_rate3['date_num']) && !empty($change_rate3['val_num']) && !empty($change_rate3['comp']) ) { $this->sdi->SetWhereMovingRaito3($change_rate3['date_num'], $change_rate3['val_num'], $change_rate3['comp'], $screening_date); } } // ボラティリティ if( isset($volatility['check']) ) { if( !empty($volatility['date_num']) && !empty($volatility['val_num']) && !empty($volatility['comp']) ) { $this->sdi->SetWhereVolatility($volatility['date_num'], $volatility['val_num'], $volatility['comp'], $screening_date); } } // ボラティリティ2 if( isset($volatility2['check']) && ($volatility2['check'] == "on") ) { if( !empty($volatility2['date_num']) && !empty($volatility2['val_num']) && !empty($volatility2['comp']) ) { $this->sdi->SetWhereVolatility2($volatility2['date_num'], $volatility2['val_num'], $volatility2['comp'], $screening_date); } } // 曜日 if( isset($week['check']) ) { $weekends = array(); for($i = 1; $i <= 7; $i++){ $wkey = "val" . $i; if( isset($week[$wkey]) ){ $weekends[] = $i; } } $this->sdi->SetWhereWeekends($weekends); }
3つ目の戦略は、「逆張り」戦略です。この戦略は、私がメインとして使用しているもので、投資収益に大きく貢献しています。ちなみに、逆張りとは、株価のトレンドに逆らって、下落していたら反発を狙って買い、上昇していたら下落を狙って空売りする投資方法です。
まず、この戦略で運用した場合の資産推移をご覧下さい。
それでは、具体的なルールを確認してみましょう。
逆張り戦略で、どのような判断基準でエントリーしているのかというと、私は「移動平均乖離率」という指標を使っています。この移動平均乖離率とは、ある移動平均線(設定した期間の終値の平均株価を線で結んだもの)と終値がどの程度離れているかをパーセント(%)で表したものです。
この移動平均乖離率がマイナスが大きいほど、直近の株価より大きく下落していることを表し、反発を期待した買いのチャンスになります。また、プラスが大きいほど、直近の株価より大きく上昇していることを表し、反落を期待した空売りのチャンスになります。
私の逆張り戦略は、この移動平均乖離率がカギとなり、その他に株価位置やシグナル数フィルターなどを組み合わせてルール化しています。
私が実践している逆張り戦略の基本ルールは、次の通りです。
①当日の株価の終値が、25日移動平均線から25%以上下落、かつ、5日移動平均線から10%以上下落した銘柄
②翌日の成行で買い
しかし、この2つのルールは個別銘柄の値動きにしか注目していないので、もっとパフォーマンスを良くするために市場全体の値動きを把握する条件を加える必要があります。
そこで登場するのが、「動的シグナル数フィルター」です。
動的シグナル数フィルターは、簡単にいうと、「急落している銘柄の数が、過去の平均と比べて極端に多くなった時にだけ買い付ける」ための指標です。
具体的な数字で説明すると、次の条件になります。
③急落している銘柄数が、過去100営業日の平均と比べて7倍以上
これだけ見てもわかりにくいと思いますので、例を使って説明します。
例1:過去100営業日で、急落している銘柄数が1日平均2銘柄の場合は、2銘柄×7倍=14銘柄が急落した日の翌日に逆張りで買う。
例2:過去100営業日で、急落している銘柄数が1日平均10銘柄の場合は、10銘柄×7倍=70銘柄以上が急落した日の翌日に逆張りで買う。
逆にいうと、急落した銘柄数が普段の7倍以上にならない限りは、逆張りで買いません。要は、暴落時して急落銘柄数が多くなった時がチャンスですよ、ということです。
この動的シグナル数フィルターを加えることで、リーマンショックなどの荒れている相場では、暴落が終わりそうになるまでは買わないという選択も可能になります。
一般的に、逆張りは怖いと言われがちですが、システムトレードにこのような工夫を加えることで、慎重に運用することができます。
逆張り戦略でエントリーした銘柄は、次のどちらかの条件に当てはまった場合に成行で売却します。
①含み益が10%以上
②エントリーした日から60日以上経過
これは比較的分かりやすいですよね。
さて、先ほどのが逆張り資産曲線をもう一度ご覧いただくと、きれいな右肩上がりになっていることがわかります。そして、理論上は300万円の資産を1,200万円まで増やすことができました。
注目すべきは、途中で大きく資産を減らしていないことです。途中でマイナスが発生して資産曲線が下に曲がることを「ドローダウン」というのですが、このドローダウンが少ないことが、逆張り戦略が優れた戦略だということを表しています。
最後に、逆張り戦略のサンプルソースコードも公開しておきますので、参考にして下さい。
// 移動平均乖離率 //------------------------------------------------------------------------------------------------------------------ if( isset($data['static_filter']['deviation_rate']['check']) ) { if( $data['static_filter']['deviation_rate']['date'] == "" ) { $this->error++; $this->error_messages['static_filter_deviation_rate'] = "日数を入力してください。"; } if( ($data['static_filter']['deviation_rate']['start']['val'] == "") && ($data['static_filter']['deviation_rate']['end']['val'] == "") ) { $this->error++; $this->error_messages['static_filter_deviation_rate'] = "乖離率を入力してください。(どちらか一方のみ可)"; } if( !isset($this->error_messages['static_filter_deviation_rate']) ) { // エラーがない if( $data['static_filter']['deviation_rate']['start']['val'] != "" ) { $data['static_filter']['deviation_rate']['start_val'] = ($data['static_filter']['deviation_rate']['start']['plusminus'] == "minus") ? floatval(str_replace(",","",$data['static_filter']['deviation_rate']['start']['val']))*-1 : floatval(str_replace(",","",$data['static_filter']['deviation_rate']['start']['val'])); if( ($data['static_filter']['deviation_rate']['start_val'] < -99.99) || ($data['static_filter']['deviation_rate']['start_val'] > 999.99)) { $this->error++; $this->error_messages['static_filter_deviation_rate'] = "乖離率は-99%~999%で入力してください。"; } } else { $data['static_filter']['deviation_rate']['start_val'] = -99.99; } if( $data['static_filter']['deviation_rate']['end']['val'] != "" ) { $data['static_filter']['deviation_rate']['end_val'] = ($data['static_filter']['deviation_rate']['end']['plusminus'] == "minus") ? floatval(str_replace(",","",$data['static_filter']['deviation_rate']['end']['val']))*-1 : floatval(str_replace(",","",$data['static_filter']['deviation_rate']['end']['val'])); if( ($data['static_filter']['deviation_rate']['end_val'] < -99.99) || ($data['static_filter']['deviation_rate']['end_val'] > 999.99)) { $this->error++; $this->error_messages['static_filter_deviation_rate'] = "乖離率は-99%~999%で入力してください。"; } } else { $data['static_filter']['deviation_rate']['end_val'] = 999.99; } if( !isset($this->error_messages['static_filter_deviation_rate']) && ($data['static_filter']['deviation_rate']['start_val'] > $data['static_filter']['deviation_rate']['end_val']) ) { $this->error++; $this->error_messages['static_filter_deviation_rate'] = "乖離率の上限値よりも下限値の方が大きな値が入力されています。"; } $data['static_filter']['deviation_rate']['date_num'] = intval(str_replace(",","",$data['static_filter']['deviation_rate']['date'])); if( ($data['static_filter']['deviation_rate']['date_num'] > 500) || ($data['static_filter']['deviation_rate']['date_num'] < 1) ) { $this->error++; $this->error_messages['static_filter_deviation_rate'] = "日数は1日間~500日間で入力してください。"; } } }
私は、システムトレードのお陰で時間や金銭的な余裕ができ、ストレスのない生活を送ることができています。
また、何よりシステムトレードを続けることで毎日様々な発見があったりと、システムトレードが私のライフワークになっています。そして、システムトレードそのものが私の日々の生活に充実感を与えてくれています。
一度マスターすれば、ストレスも少なく継続的に利益をあげることも可能ですので、ぜひ、チャレンジしてみて下さい。
長期的な資産の増加を目指している方向けに増田丞美のメルマガを配信しています。米国株式マーケットの制度を利用するものの通常の株式投資ではありません。本メルマガでお届けする方法の利点は以下のとおりです。
・米国制度によって守られている。
・管理が比較的容易。
・長期的な収益。
詳細はこちらからご覧ください。
あなたは、公募増資、売出(PO)というイベントに参加したことがありますか? もし参加していないとすると、せっかくの収益チャンスを逃しているかもしれません。 この公募増資や売出では、市場価格よりも安い価格で、株式を入手することができるので、公募増資、売出
成長株とは、今より株価が高くなる、つまり、チャートが右肩上がりになる株のことです。 これから株価が上がると分かっていれば、誰でもその株を買い、株価が高くなったところで売って利益を得ることができますよね。 投資をする目的は色々あると思いますが、資産を増や
【実例解説】上方修正=株価上昇ではない?株価変動を見極めるポイント
企業は、通期(1年間)の予想を、決算書で投資家に向けて公開します。 その計画した数字から上振れることを「上方修正(じょうほうしゅうせい)」といい、投資家に向けて決算書とは別の形で公開することがあります。 本記事では、企業が業績の上方修正を行った場合、株
IPO(新規公開株)投資 とは|公募申込みとセカンダリー投資の方法
IPO投資とは、これから上場する株式(新規公開株)を上場前に購入し、上場する際の大きな値上がりを狙って投資する方法です。 人気のIPO銘柄(プラチナチケット)をゲットするためには、証券会社への抽選申し込みが必要です。非常に高い倍率ですが、このプラチナチケ
専業トレーダーのGomatarouといいます。私は会社員時代から株式トレードを始めて、2017年10月時点で4億1千万円まで増やしています。そして、現在はサラリーマンを辞めてトレードのみで生活しています。 私は、サラリーマン時代から何事にも無理なことは「
株式投資の神様といえば「ウォーレン・バフェット」と応える投資家がほとんどだと思われます。 もし株の長期投資で成功したいのであれば、投資家としてもビジネスマンとしても長期投資で超一流の実績を残したバフェットの方法をすこしでも取り入れたうえで
投資の基本は長期・分散による積立投資です。そして、初心者の方には100円から始めることができる、投資信託での積立投資をおすすめします。さらに、積立投資を始める際は、非課税枠が使える「つみたてNISA」と「iDeCo(イデコ)」を利用しましょう。 この記事
システムトレードで11年間で10勝1敗の実績をあげている私の投資手法
システムトレーダーの斉藤正章です。私は、会社員時代に元手30万円から株式投資を始めました。その後、システムトレードという手法に出会い、現在は主にシステムトレードで得られる収益で生活しています。 システムトレードとは、簡単にいうと、予め決めた売買ルールで機
外国株を買うのは難しい 米国株は手数料が高そう と思っている方は多いと思います。しかし、外国株(米国株)は、以前と比べて、ネット証券で気軽に低コストで売買できるようになりました。 この記事では、米国をはじめとした外国株に投資をしようか検討して
私は、証券会社で株式ディーラーとして7年間、会社の自己資金を超短期で運用する業務を行っていました。現在は、会社員として仕事の傍ら、日本株の中長期投資を日々研究しながら実践している兼業トレーダーです。 証券会社で働いていた時は、目先の株価の値動きだけで売買