私のツールは、東証一部用と新興用の一軍、二軍の3種類があります。 銘柄が違うだけで、どれも殆ど同じ構造になっています。 それぞれ約200銘柄の、直近20日間の4本値、出来高を保存する部分があります。 毎日1回、大引け後に「バッチ処理」を行い、最古の日のデータ捨て、直近20日分のデータを保存し直します。 こう書くとややこしい感じがしますが、実際には「Ctrlキー+B」を押すだけ。 バッチ処理用のマクロが全てを3秒ほどで完了させます。 しかも殆どは「マクロの記憶」機能で自動作成されたものですから、ほんとにエクセルは良くできています。 これだけのデータから、それぞれの銘柄について、
20MA(=Moving Average=20日移動平均)と5MAの位置を算出します。
これにより、翌日の株価が20MAと5MA両方の上に位置するものをロング(買出動)候補。 両方の下方に位置するものをショート(売出動)候補とする事が出来ます。 トレンドフォローにおいて、例えば数時間のエントリー時間しかない短期のものであっても、より長期間のトレンドに沿う方向に仕掛ける事が、勝率を良くします。 数百銘柄あれば、必ず20MAと5MA両方の方向が揃っている銘柄が含まれます。 これらは、例えば銘柄名のセルをロング=青、ショート=赤、その他=白に色づけする事で、簡単に見分けられるようにし、エントリー判断の重要な要素としています。
出来高の推移を加重平均し、最近出来高が増加したものを重視します
出来高が大きい方が、スリッページが少なくなるというメリットもありますが、なによりボラティリティの増加により、利幅が得やすくなります。
出来高x株価=売買代金の算出
一定基準を満たさないものは、二軍落ちさせ、二軍で基準を満たすようになったものを、一軍のファイルに引き上げます。
ボラティリティ=(1日の最高値 - 1日の最安値)/その日の株価
上記の式から、各株が平均して1日に何円動くかを把握します。 例えば、株価1000円で、1日に平均して100円動く株があるとしましょう。 既に始値から80円上昇した株に、今更買いエントリーするのがあまり効率的でない事が解ります。 また、100円のギャップアップ(窓を開けて始値を点けた)をした場合、既に危険水域にある事がわかりますね?
前日が、大陽線又は大陰線かどうか
前日のローソク足が、平均ボラティリティを超える長さである場合、同方向に仕掛けるのは、リスクが高く利幅が薄い傾向が、かなり顕著に見られます。「見送り」の重要な要因です。
何日間高値、又は安値を超えた位置にあるか
a)ローソク足の本体部分で、何日ぶりの高値、または安値か、 b)同じく、ローソク足のヒゲまで含めて、何日ぶりの高値、又は安値か。 リアルタイム株価が、a)又はb)の条件を満たすとき、a)かb)か、また何日ぶりであるかによって点数をつけてソート(並び替え)を行い、ブレイクアウトの強度によってランキング表示します。
妥当な押目からの反発かどうか
単に上げ続けている株を買うより、適度な押目から反発してきた株を買う方が効率が良い事がわかっています。この値動きを感知するロジックを組み込み、有望銘柄のセルを色付けし、なお且つ表示順位も上に来るように、設定しています。
リアルタイム株価を20秒刻みで上記各項目に反映させる
同じく表示順位も20秒毎に更新させ、エントリーポイントに入った株を見つける。 ランキングに入った株は、全て1分足チャートや5分足チャートでチェックし、出動の可否を判定する。
以上で、私のツールの80%程度の内容が含まれます。残り20%は補足的なもので、私には「有った方が便利」という程度です。 とにかく、「エントリーしがいのある銘柄」が上位に表示され、ロングかショートかはセルの色で直感的にわかるようにしています。 寄付き直後から、これら優先順位の高い株のチャートを確認し、機械的にエントリーしていきます。始値がつくまで10分以上かかる銘柄は、何か材料が出た可能性が高いですが、そうした株も、「値がついていない」状態である事がわかるので、予めチャートでチェックしておく事が可能です。
さて、一杯書きましたが、これを読者の方がどう有効に使えるようにするか?が問題ですよね。考えてみます。 既にこの記事が、殆ど意味を成さない読者の方もいらっしゃるかもしれません。 でしたら、この「マイ・ツール」カテゴリの記事は読み飛ばされた方が良いのかも? 他の「カテゴリ」も平行して書いて行きますので、全部見捨てないで下さいね。 エクセル+VB+RSSが使える方は、ぜひ20~30日分の過去データの蓄積とバッチ処理について、作りこんでみて下さい。 これができれば、一つ一つ自分の好きな機能を追加していけるので、楽しいですよ。 私のツールの場合、25日分しか蓄積していませんが、比較用セルなどVBの再計算量を軽減するセルが結構あって、10%程度の未使用セルを含めて250列近くまで使っています。途中で「列」をインサートで追加すると、マクロやVBのコードもそれに合わせて書き換えないといけなくなるので、表示させる項目と過去データ格納セルの間には50~100列の未使用列を入れておくと、後々苦労が減ります。 私の場合、設計も無く思いつくままに作り始めたので、この「列インサート」問題にはかなり苦労しました。 銘柄が200を超えると、RSSに予告無くエラーが発生するようになるので、要注意です。 厳密には理由がわからないので、150銘柄くらいにしておくのが無難かもしれません。 マクロによる再計算も軽くなりますしね。 それ以上は、私のように二軍のグループを用意して、週一くらいで銘柄のトレードを行うのも良い方法と思われます。ではまた。





コメント (12)
内容を公開していただき感激です。
さっそく数銘柄の4本値をペーストして
気になる内容を加工してみました。
今まで感覚的にやっていた部分が
計算してみるとよく分かりますね。
どうやって活用すれば良いか
考えてみたいと思います。
「Ctrlキー+B」のやり方を自分なりに
考えてみました。
19日分をカットして1行ずらして
ペーストする原始的な方法しか思い浮かびませんでした。
最古のデータを捨て保存し直すって
まったく違う方法なんでしょうね。
投稿者: ティダ | 2006年07月23日 20:38
日時: 2006年07月23日 20:38
私もティダさんの方法でやってます。
19日分をコピーして、1日分右にずらせてペーストし、次に当日の4本値の部分をコピーして、最新の日のところに「形式を選択して貼り付け」-->「値」でペーストします。そうしないと、RSSの「=RSS|'4839.t'!高値」なんてのをコピーしちゃいますからね。RSSから引用する部分も、1日前、2日前、、、、、最古の日まで、全て始値、高値、安値、終値の4本値をこの順で並べて、ワンセットです。
出来高はまた別のところでまとめて保存してますが、4本値と一緒に5番目のデータとして保存しても良いでしょう。それは作者の自由です。難しく考える必要は全然ありませんよ。
投稿者: traderspage | 2006年07月23日 23:15
日時: 2006年07月23日 23:15
エクセルVBで「エレガント」なプログラムコードを作成しても、大した意味はありません。逆にどんな泥臭いコードでも、人間の数百万倍のスピードのコンピューターが「エレガント」な結果としてあなたに返してくれます。
「原始的」大いに結構。それをVBに実行させた段階で、あなたのライバルを何人ごぼう抜きにしたか知れません。
更にそれを何ヶ月も続けたなら?
やってみるだけの価値は、あると思います。
投稿者: traderspage | 2006年07月23日 23:57
日時: 2006年07月23日 23:57
traderspageさん、こちらも分かりやすい
回答ありがとうございます。
自分で勝手に壁を高くしていたんですね。
もう一人自分が欲しいなぁと思ったことや
何回も繰り返していることをPCに
替わってやってもらうという基本を
忘れるところでした。
まずは単純に時間を短縮できることを
エクセルで作りこんでみたいと思います。
投稿者: ティダ | 2006年07月24日 21:23
日時: 2006年07月24日 21:23
知識不足で全くアイデアが出ないことに
ついて教えてください。
20秒毎に更新させるにはどんな命令を
学べば良いのでしょうか?
もしくはどんな言葉で検索すれば
ヒントにたどりつくでしょうか?
よろしくお願いします。
投稿者: ティダ | 2006年07月24日 21:29
日時: 2006年07月24日 21:29
確かに、私もそれを見つけるのにちょっと苦労した記憶があります。
タイマーとかしか思いつきませんものね。
後日書きますので、ちょっとお待ち下さい。もしその前に見つけられたら、答え合わせですね。
投稿者: traderspage | 2006年07月24日 23:11
日時: 2006年07月24日 23:11
私のエクセルVBの知識は、殆どエクセルVBのヘルプで得た情報に基づいています。だから、このブログを見たら、「なんて泥臭い」と感じる方がいるかもしれません。
だとしたら、できましたらぜひ、「泥臭くない方法」を教えて下さい。私も含め、大変参考にさせて頂けると思います。
「泥臭く」ても、チャレンジしないよりはずっと良いと思いますが、「エレガント」なコードは、やっぱり生産性が高いですから。
よろしくお願い致します。
投稿者: traderspage | 2006年07月25日 00:06
日時: 2006年07月25日 00:06
こんにちは、久しぶりにコメントします。
こちらのマイナーコーナーも掘り返してみたいと思いますw
少し前からこちらの記事を参考にして、マイツール作りに挑戦中です。
どなたかが書いていましたが、まったくイメージが出来ないような状態からの手探りなので、常に頭を悩ませています。そこで一つ質問をさせてください。
元記事中の
>>出来高の推移を加重平均し、最近出来高が増加したものを重視します
というのは、何を「重み」として考えればよいのでしょうか?例えば「出来高加重平均価格(VWAP)」ですと、価格の重み付けとして出来高を使ったものと解釈しているんですが。
難しく考えすぎですか?
投稿者: もち | 2007年08月23日 17:42
日時: 2007年08月23日 17:42
難しく考えて悪いという事は決して無いと前置きした上で、私のマイツールのその部分に限って言えば、そんなに難しく考えてません。
例えば平均値を出す場合、10日前の出来高と、昨日の出来高を「平等」に評価する事が果たして本当に「平等」なのか?という疑問が出てきます。
10日前より9日前、9日前より8日前、、、、、一昨日より昨日の値の方が重要度が高いから、重みをつけるのが自然。
という事に思い当たります。
でも、そこから「どういうルールで重みをつけるか」に解答はありません。いろいろ自分で考えて、試して、どこかで妥協する事になります。
いろいろ試して結局、「単純平均が一番良い」という結果に終わるかもしれません。いろいろ試して、全然別の発見があるかもしれません。だから面白いんですよ。
いろいろなアイディアを盛り込みながら改善を続けていると、3ヶ月もすると「片腕」に育ってきます。
半年もすると「無くてはならない存在」になるでしょう。
楽しみながら、頑張って下さい。
投稿者: たかやん | 2007年08月23日 21:19
日時: 2007年08月23日 21:19
ありがとうございます。
間違っているかもわかりませんが、データに新鮮度の順位をつけるという発想でしょうか。
とにかくシンプルなところから始めて、難しそうなところは後回しでも徐々にくっつけていけば、何とかなりそうな気がしてきました。
また発掘しに来ます。ありがとうございました。
投稿者: もち | 2007年08月24日 01:57
日時: 2007年08月24日 01:57
たかやんさん、はじめまして。
ブログいつも拝見してます。とても参考になります。
列インサート問題に関しては同じように悩んだクチですので列挙体を使った対処法を参考までに。
Enum 列の種類
銘柄コード = 1
銘柄名称
現在値
End Enum
これで上から 1,2,3と連続した定数になるので、
列の種類.現在値 と入力すれば3と入力したことと同じに。
RSSなどの式をマクロで記述する際は数字を使わずに、
Cells( row, 列の種類.現在値).Formula = "hogehoge"
といった感じに作っていけば、
後になって列を追加、変更、削除したくなっても、
列挙体のところだけを変えればOKです。
投稿者: TM | 2008年04月15日 17:04
日時: 2008年04月15日 17:04
なるほど、洗練された感じが良いですね。
知らなかったスタイルです。
(なので、直ちには理解できてませんが、、、)
今度ゆっくり試してみます。
また気が向いたら、他にも教えて下さい。
よろしくお願いします。
投稿者: たかやん | 2008年04月16日 00:19
日時: 2008年04月16日 00:19