So-net無料ブログ作成
システム作成講座 ブログトップ
前の10件 | -

明日のために~その6~ [システム作成講座]

前回までで、システムシートから株価データファイルを参照する方法を考えました。
システムシートの参照元である株価データファイルを自由に変更できれば、同一のシステムを様々な銘柄で利用することができます。

それを行なうためには、いくつかの方法があるのですが、今回はそれらについて考えてみることにしましょう。
まず最初に、前回作成したシステムシートを開いてください。

さて、ご使用中のエクセルのバージョンが2003の場合は、最も簡単な方法で参照元を変更することができます。
そのためには、リンクの編集機能を用います。

システムシートにおいて、上部の編集メニューから「リンクの設定」を実行してください。すると、「リンクの編集」というポップアップメニューが現れます。
その中にある「リンク元の変更」をクリックし、現れたエクスプローラで、新たに参照したい株価データファイルを選択します。

操作方法は通常のエクスプローラと同様です。開いた箇所に目的にファイルが見つからない場合は、左側の「マイコンピュータ」を実行して、ドライブ選択から順に目的のフォルダを開いていって下さい。
そして、目的のファイルを選択したら、OKボタンを押します。

エクスプローラが消え、しばらく画面が固まったような状態になりますが、数秒~数10秒ほど(パソコン能力等に依存します)でリンク元(参照元)の変更が完了します。
「リンクの編集」メニューに変更後のリンク元が表示されたら、「閉じる」ボタンを押してください。

エクセルシートには、変更後の株価データが表示されていることと思います。
このように、「リンク元の変更」を行なうことで、システムシートに取り込む株価データファイルを、自由に変更できるようになります。

ただし、これは最初にお断りしましたように、エクセル2003の場合です。エクセル2007やエクセル97では、やり方がちょっと違ってきます。
ちなみに、エクセル2000やエクセル2010に関しましては、残念ながら手元にアプリケーションがありませんので、確認できておりません。

エクセル2007の場合は、「データ」タブを開き、その中にある「接続」メニュー(リボンというのでしょうか)中の「リンクの編集」を実行します。
それ以降は、エクセル2003の場合と同様です。「リンク元の変更」を実行して、変更したい株価データファイルを選択してください。

なお、最近は改善されているかもしれませんが、リンク元を変更するのに非常に時間が掛かったり、場合によってはハングアップすることがありました。
そのような場合には、先に変更したいリンク元を開いておき、その後「リンク元の変更」を実行すれば、短時間で変更することができます。

さて、エクセル97ですが、「リンク元の変更」を行なうと、非常に時間が掛かってしまいます。その場合は、エクセル2007の場合と同様に、リンク元をあらかじめ開いておけば、比較的短時間で変更が可能です。

ただし、大規模なブックから「リンク元の変更」を行なうと、「・・・・・・開いているワークシートを参照してください。」というエラーメッセージが出ることがあります。
そこで、リンク元を開いてから実行すると、今度は「数式に不正な外部参照が含まれています。・・・・・・」というエラーが表示されます。

そのような場合は、A1セルを選択した状態で、編集メニューの「置換」を実行し、「検索する文字列」に現在のリンク元のファイル名を、「置換後の文字列」に変更したいリンク元のファイル名を入力して、「すべて置換」を実行すれば、比較的短時間でリンク元を変更することができます。

しかし、上記のエラー表示が出ない場合(「リンク元の変更」が機能する場合)は、置換を完了するまでに、非常に長い時間が掛かってしまう場合があります。
結局のところ、使っているエクセルのバージョンや、パソコンの処理能力、作成したシステムの規模に応じて、リンク元の変更方法を使い分けてやる必要があります。

「データ部」につきましては、とりあえず今回で終了となります。次回からは、「ロジック部」について考えていきたいと思います。

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:

明日のために~その5~ [システム作成講座]

これまで4回に渡って、ワークシート(ブック)から他のブックのセルを参照する方法について述べてきました。
しかし、参照先を変更したい場合、いちいちセルの内容を書き換えていたのでは面倒です。そこで、参照先を簡単に変更する方法について、考えたいと思います。

その前に、前回までのおさらいとして、もう一度、株価データシートを参照するブックを作成してみましょう。
ただし、今回は株価データシートの一部をそのまま反映させるのではなく、シートの全体を、列や行をちょっとずらして参照することにします。

具体的には、日付や始値などと表示されているラベル行を16行に設定します。そして、18行目から実際のデータを参照するようにします。
また、データ日数は別途計算可能ですので、参照対象から除外し、C列以降を左に一つずつずらします。

と言いましても、いきなりそのようにブックを作成するのは難しいかもしれませんので、先ずは前回までに作成した40行までしか参照していないブックを用いましょう。
ブックを保存していない方は、これまでのコラムを参考に、もう一度作成してみてください。

ブックを用意しましたら、ファイル名は何でも構いませんが、とりあえず「システムシート01.xls」とでもして保存してください。
準備ができましたら、それを上述したフォーマットに加工していきましょう。

まずは、全ての行に渡って株価データを参照する必要があります。システムシートのG3セルを見てください。そこには、株価データシートの直近行の値が記されています。
そこで、40行全体を選択し、それを直近行までコピーすることにします。そうすれば、株価データシート全体を参照することができるはずです。

システムシート左端の"40"という数字をクリックしてください。すると、行全体が反転表示されるかと思います。
そのまま、上部の編集メニューから「コピー」を実行します。すると、行全体が点線で囲まれるかと思います。

続いて、編集メニューから「ジャンプ」を選択し、参照先欄に"Axxxx"(xxxxは直近行の値)と入力して、OKボタンを押します。
すると、Axxxxセルが選択された状態になります。

その状態で右端のスクロールバーを一番上に持っていき、ワークシートの最上部を表示します。その後、Shiftキーを押しながらA41セルを選択すると、A41セルからAxxxxセルまでが選択された状態になります。

そこで、編集メニューから「貼り付け」を実行すると、株価データシート全体がシステムシートから参照されます。
実際にスクロールバーを移動させて、全てのデータが表示されているかどうか確認してみましょう。なお、選択範囲をクリアするために、例えばA1セルを選択してください。

次に、データ開始行を18行に変更します。システムシートの4行全体(シート左端の"4")を選択し、その後、Shiftキーを押しながら16行全体(シート左端の"16")を選択します。
すると、4行から16行までが反転表示されますので、その状態で挿入メニューから「行」を実行してください。

4~16行に空白行が挿入され、17行目にラベル、18行目以降に株価データが表示されたことと思います。それらを確認すると、株価データシートの5行目以降が、システムシートの18行目以降に、そのままシフトしていることが分かります。

まだこれで完了ではありません。続いて、ラベル行(17行)の移動を行ないましょう。これを16行に移動します。
慣れてくればドラッグするだけで良いのですが、ここではきちんとした手順でやってみましょう。

まず、17行全体を選択します。方法は今までと同じです。続いて編集メニューから「切り取り」を実行します。コピーの時と同じように、選択範囲が点線で囲まれます。
そして、A16セルを選択した後、編集メニューから「貼り付け」を実行します。すると、ラベル行が16行に移動したかと思います。

同様に、F1~G3セルおよびB2~C2セルの内容も移動させましょう。
まず、F1~G3セル全体を選択します。やり方はこれまでと同じです。F1セルを選択した状態で、Shiftキーを押しながらG3セルを選択します。すると、選択範囲が反転表示されます。

続いて、編集メニューから「切り取り」を実行し、その後、F5セルを選択してください。そして、編集メニューから「貼り付け」を実行すれば、F1~G3セルの内容が、F5~G7セルに移動します。
同様に、B2~C2セルの内容を、C5~D5セルに移動してみてください。

最後に、データ日数(B列)を削除します。まず、B列全体を選択します。シート上端の"B"をクリックしてください。
続いて、編集メニューから「削除」を実行します。すると、B列全体が削除され、C列以降が1列ずつ左にシフトします。見やすいように、A1セルを選択しましょう。

冒頭で述べたようなフォーマットになっているかどうか、確認してみてください。もしもおかしなところがありましたら、もう一度最初から順番に作成してみてください。
内容に問題なければ、この状態でシステムシートを一旦保存しておいてください。

これでようやく、トレーディングシステムを作成するための下準備が整いました。
今回は思いの外、内容が多くなったため、参照先を変更するところまでは辿りつけませんでした。それについては、次回以降で考えていきたいと思います。

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:

明日のために~その4~ [システム作成講座]

株価データファイル(参照元)へのセル参照を行なうことで、任意のブック(参照先)上に株価データを反映させることができます。
しかし、参照元のセルが空欄の場合、参照先のセルでは"0"と表示されてしまうことが分かりました。これでは、何かと不便です。

エクセルでトレーディングシステムを作成するに当たって、空欄にも意味を持たせる場合が多々あります。
例えば、システムの起点日を全ての銘柄で統一した場合、比較的最近上場した銘柄では、共通の起点日における株価データが存在しない可能性があります。

そのような時に、株価データ欄が空欄であれば、データが存在しないことを示せますが、それが"0"であったとすると、0円という株価データが存在することになってしまいます。
これは、システムを構築する上で、非常に厄介な問題です。もちろん、銘柄毎に起点日を変えてもいいのですが、そうした場合でも次のような問題が生じます。

例えば、株価の移動平均をインジケータとするシステムを考えた場合、最初に移動平均が算出されるまでには、(移動平均期間-1期間)分の空白期間が生じます。
これを、空欄で表現するのか、"0"で表現するのかでは、その後のシステム構築に大きな違いが生じてきます。

そのように考えると、データが存在しない場合は全て空欄とした方が、システム全体の整合性が取りやすくなります。
すなわち、参照元にデータが存在しない(空欄)場合は、参照先も空欄にするべきです。

そこで、参照先に表示された"0"を、空欄として表す方法を考えます。

ここで、参照先の書式を変更すれば、"0"を空欄にできそうに思えますが、実はその方法は上手くいきません。
参照元の空欄を参照した時点で、参照先には数値としての"0"が設定されてしまうからです。"0"はどのように書式をいじっても、"0"以外にはなりません。

ではどうすればいいかと言いますと、参照元が空欄の場合は参照先も空欄にし、参照元が空欄ではない場合は、参照先が参照元と同じになるようにしてやれば良いのです。
そんなこと言われても、具体的にどうすればいいか分からない、と思われる方がいらっしゃるかもしれませんが、実は上記の内容が答えそのものなんです。

もう一度繰り返して記しますと、「もし参照元が空欄の場合は参照先を空欄にし、そうでない場合は参照先を参照元と同じにする」ということになります。
これは、エクセルのif関数で表現できることと、全く同じことを言っているに過ぎません。

if関数は、エクセルでトレーディングシステムを作成するに当たって、恐らく最も使用頻度の高い命令です。
基本的には、if関数とoffset関数、そして四則演算を使いこなせるようになれば、大抵のシステムは作成することができるようになります。

今、参照先のA2セルから、参照元のA2セルを参照することを考えます。先回作成した参照先のブックを開くと、A2セルには"01/00/00"と表示されていることと思います。
これを空欄にしてみましょう。そのためには、A2セルに入力された数式をもう一度確認する必要があります。

そこには例えば、「='D:¥株式¥株価データ2¥[1301極洋01.xls]Sheet1'!A2」と入力されているものとします。なお、''内の表記は、皆さんのファイル環境によって異なります。
ここで、上記の数式の「=」以降が参照元を表しているわけです。

したがって、参照元が空欄ということは、「'D:¥株式¥株価データ2¥[1301極洋01.xls]Sheet1'!A2」が空欄ということです。
エクセルで空欄を表すには、""を用います。そうすると、上記の「」内が空欄である、というのは、次のように表されます。

 'D:¥株式¥株価データ2¥[1301極洋01.xls]Sheet1'!A2="" ・・・条件

そして、参照先のA2セルが空欄ということは、同様に次のようになります。

 A2="" ・・・分岐1:条件が正しい場合

更に、参照先のA2セルが参照元と同じ、というのは、次のようになるわけです。

 A2='D:¥株式¥株価データ2¥[1301極洋01.xls]Sheet1'!A2
                        ・・・分岐2:条件が正しくない場合

これらを、if関数でつなぎ合わせてみましょう。if関数の使い方については、今更述べるまでもないでしょうが、次のようになります。

 =if(条件, 分岐1, 分岐2)

したがって、上式にそれぞれの数式を当て嵌めてやれば、参照先のA2セルに記述する数式は、次式のようになるわけです。
ただし、通常、自分のセルを表す「A2=」は省略します(入力すると循環参照エラーになるのでご注意ください)。

 =if('D:¥株式¥株価データ2¥[1301極洋01.xls]Sheet1'!A2="",""
      ,'D:¥株式¥株価データ2¥[1301極洋01.xls]Sheet1'!A2)

非常に長ったらしくなりましたが、このように表記することで、参照元が空欄ならば、参照先も空欄にすることができるようになります。
あとは、この数式をA1~G40の全てのセルにコピーしましょう。

最初にA2セルを選択した状態で、編集メニューの「コピー」を実行し、続いてA1~G40セルを選択した状態で、編集メニューから「形式を選択して貼り付け」をクリックし、「数式」にチェックを入れて「OK」ボタンを押します。

これで、選択した全てのセルに、対応した数式(if関数)が設定され、参照元にデータがあるセルではその内容が、参照元が空欄のセルには空欄が表示されたことと思います。
これで、ようやく株価データファイルを、そのまま参照することができるようになりました。

しかし、銘柄を変更する度に、コピーを繰り返していたのでは面倒です。そこで、次回は、エクセルの機能を用いて、簡単に参照元を変更する方法について考えてみます。

nice!(0)  コメント(4)  トラックバック(0) 
共通テーマ:

明日のために~その3~ [システム作成講座]

先回、ブックやワークシートのセルを参照する方法について考え、その具体例として、株価データファイルのA1~G40セルを実際に参照してみましたが、その結果、いくつかの疑問点が生じたことかと思います。

一つは、日付欄の数値です。株価データファイルでは日付として表示されていましたが、それを参照すると、何やら得体のしれない数字になっています。
実は、これはシリアル値というもので、エクセル内部で日付や時刻を管理するために用いられている数値です。

1900年1月1日0時0分0秒を1とし、そこから1日進む毎に1ずつ増えていきます。日付のみを表す場合はシリアル値は整数になり、時刻を表す場合は小数になります。
すなわち、日付欄の最初に表示されている34274は1993年11月1日を表し、1900年1月1日から数えて34273日目に当たるわけです。

でも、元の株価データファイルでは最初から日付として表示されていたのに、それを参照するとシリアル値になってしまうのは、何だか納得できませんね。
でも、それがエクセルの仕様なので、そういうものだと割り切るしかありません。要するに、セルを参照した場合、書式までは参照できない、ということです。

では、どうすれば良いのかと言いますと、別途書式を設定する、ということになります。今回の事例ですと、参照先のA列全体を選択し(シート最上部の"A"と表示されている箇所をクリックします)、書式メニューの「セル」をクリックして、表示形式の「日付」から参照元と同じ形式を選びます。

でも、よく見ると他の列の書式も違っていますし、そもそも列幅まで違っていたりします。これらを一つ一つ設定するのは大変ですね。
そこで、ちょっと"ズル"をしてみましょう。

参照元の株価データファイルを開いていない方は、それをもう一度開いてみてください。参照元を開く際には、現在参照先を開いているエクセル上から、開くようにしてください。
エクスプローラなどから、参照元のファイルをダブルクリックするなどして直接開くと、別のエクセルが起動して、その上で実行されてしまいますのでご注意ください。

参照元を開いたら、そのワークシートの一番左上の部分(行番号と列番号が交わる部分)をクリックしてみてください。
すると、ワークシート全体が反転表示されることと思います。

その状態で、編集メニューから「コピー」を選択します。すると、反転表示した部分が点線で囲まれます。これで、その部分がクリップボードに取り込まれたことになります。
続いて、参照先ブックに移動してください(ウィンドウメニュー内の参照先ファイル名をクリックします)。

そこでA1セルを選択し、編集メニューから「形式を選択して貼り付け」を実行します。表示されるポップアップメニューで「書式」にチェックを入れ、「OK」をクリックします。
すると、参照元の書式のみがコピーされ、日付などが正しく表示されたと思います。

これでめでたしめでたし、と言いたいところですが、参照元ではセルをスクロールしても、最初の4行とA列は常に表示された状態であるのに対し、参照先はそれらもスクロールされてしまいます。
これでは、データ数が増えると、日付やラベル(項目名)などが見えなくなってしまい、不便です。

書式はきちんとコピーされているのに、何故なんでしょう?
実はこの設定は書式ではないんです。これは、ウィンドウメニューから「ウィンドウ枠の固定」を実行することで、設定することができます。

最初に、参照先ブックにおいて、B5セルを選択してみてください。その状態で、ウィンドウメニューから「ウィンドウ枠の固定」を実行します。
すると、参照元の株価データファイルと同じように、最初の4行とA列が常に表示された状態になります。

「ウィンドウ枠の固定」を実行すると、直前に選択したセルを一番左上としたセル範囲のみが、スクロールできるようになります。
それ以外の部分はスクロールできずに、常に表示された状態にあるわけです。

ちなみに、行のみをスクロールしたい場合はどうすればいいのでしょう?
その場合は、例えばA5セルを選択した状態で、「ウィンドウ枠の固定」を実行すればいいのです。A列にあるセルを選択すれば、行のみのスクロールにすることができるわけです。

これで、ようやくセル参照ができるようになりました・・・。
と思いきや、何か参照先の最初の3行の様子が、参照元のそれと違って見えますね。参照元で空欄だったところが、"0"になっているようです。

これは困りました。何でこんなことになるのでしょう?
また、それを解消する手段はあるのでしょうか?
次回は、この問題について考えてみたいと思います。


PS.うっかり書き忘れましたが、本日、日産順張り正逆合成システムに買いシグナルが点灯しました。明日の寄付きで買い建てとなります。
北アフリカ・中東情勢不安が再び拡大する中、はたしてどうなることでしょう。

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:

明日のために~その2~ [システム作成講座]

前回は、異なるブックやワークシートのセルを、参照する方法について考えましたが、参照したいセルがたくさんある場合はどうしたらいいでしょう?
例えば、株価データファイルの内容を全て、別途作成したブックから参照するような場合です。

そこで、前回作成したブックをもう一度利用してみます。既に削除してしまった方は、もう一度作成してみてください(簡単ですよね)。
Sheet1のA1セルに、株価データファイルのSheet1のA1セルを参照する数式が入力された状態から始めます。

さて、株価データファイルの全領域を参照してもいいのですが、いろいろと大変なので、A1セルからG40セルまでを参照することにしましょう。
これら全てのセルに一つ一つ数式を入力していくのは、どう考えても非効率ですよね。

こんな時のために、エクセルには「コピー」という便利な機能があります。A1セルの内容をA1~G40セルの範囲にコピーすれば、株価データファイルの同じ範囲の内容を参照できるはずです。
では、早速やってみましょう。

コピーのやり方は、ご存知ですよね。最初にA1セルを選択した状態で、編集メニューから「コピー」をクリックします。これで、A1セルの内容がメモリ(クリップボード)に保管されます。
続いて、キーボードの「Shift」キーを押しながら、G40セルを選択します。すると、A1~G40セルが反転表示されますので、その状態で編集メニューから「貼り付け」をクリックします。

すると、A1~G40セルに株価データファイルの同一セルの内容が表示されるはずです・・・・・・
???・・・表示されませんね・・・???
A1~G40セル全てに、銘柄名がびっしりと表示されてしまいました。これはいったいどうしたことでしょう?

試しに、各セルの内容を見ると、全て同じ数式が入力されていることと思います。そしてそれらは、株価データファイルのSheet1のA1セルを参照しているはずです。
一旦、元の状態に戻してみましょう。編集メニューから、「元に戻す」をクリックしてください。貼り付け前の状態に戻ったことと思います。

そこでもう一度、A1セルの数式を見てみることにします。A1セルを選択してください。上部の関数窓に数式が表示されましたね。
数式で参照しているセル名をよく見てみると、「A1」ではなく「$A$1」となっていることが分かります。

実は、このような参照方法を「絶対参照」と言います。それに対して、「A1」のように「$」が付いていないものは、「相対参照」と呼ばれます。

絶対参照にすると、参照先のセルをどこにどれだけコピーしようが、参照元のセルは変わりません。株価データファイルのA1セル(参照元)を参照しているセル(参照先)を、どこにどれだけコピーしても、それらのセルでは全て参照元の内容を表示するわけです。

一方、相対参照の場合は話が違ってきます。相対参照にすると、参照先のセルが移動した分だけ、参照元のセルも移動します。
例えば、参照先のA1セルをG40セルにコピーした場合、参照元のセルもA1セルからG40セルに替わります。これは参照先の数式が変わるだけで、参照元のセルそのものが移動するわけではありません。

なお、これはあくまで移動量が同じになる、ということです。必ずしもセル番地が同じになるわけではありませんので、注意する必要があります。
参照先が行方向に39行、列方向に6列だけ移動すれば、参照元も行方向に39行、列方向に6列だけ移動することになります。

そうすると、最初に参照先のA1セルをA1~G40セルにコピーした際、銘柄名だけがずらっと表示された理由がお分かりになるかと思います。
エクセルでは、前回行なったような方法でセルを参照すると、必ず絶対参照になってしまうということです。

では、それを相対参照にするにはどうしたらいいのでしょう?
そのためには、数式から「$」のみを削除すればいいのです。具体的には、数式を表示している関数窓のセル番地部分をクリックし、「$」のみを削除します。

あるいは、セル番地部分をクリックしてカーソルを表示させた状態で、キーボードの「F4」キーを押しても、相対参照に変更することができます。
ただし、この場合「F4」キーを1回押すごとに「A$1」⇒「$A1」⇒「A1」と変化しますので、「A1」にするためには、「F4」キーを3回押す必要があります。もう一度押せば、「$A$1」に戻ります。

ここで、「A$1」や「$A1」などという表記が出現しましたが、あまり難しく考える必要はありません。要するに、「$」が付いた部分だけが絶対参照になる、ということです。
すなわち、「A$1」であれば、行方向のみが絶対参照で、列方向は相対参照ということになります。これをコピーすれば、列だけが変化して、行は変わらないわけです。

さて、それでは最初に戻って、A1セルの数式を相対参照に修正した上で、もう一度そのセルをA1~G40セルにコピーしてみましょう。
今度は、株価データファイルのA1~G40セルの内容が表示されたことと思います(一部変な表示になりますが、それについては次回以降で説明いたします)。

これで、任意のブックやワークシートから、自由にセルの内容を持ってくることができるようになりました。
参照先のブックをシステムファイルに設定する場合、この参照元を変更するだけで、自由に銘柄の入れ替えができるようになるわけです。

でも、銘柄を変更する度に、いちいち参照先(システムファイル)のセルの内容を書き換えていたんでは、結構大変ですよね。
エクセルには、そんな時のための便利な機能があるんです。それについては、次回以降で考えてみましょう。


PS.今朝買建てた日産ですが、早くも手仕舞いシグナル点灯です。明日の寄付きで手仕舞い売りとなります。利益か損失かは、明日の寄付き次第です。

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:

明日のために~その1~ [システム作成講座]

エクセルを使いこなすための第一歩は、「等号(=)」です。これは、エクセルで関数を記述するために、必ず必要となるものです。
等号は、それが入力されたセルと、等号の先にある数式等とを結びつける働きがあります。

それでは、ちょっとエクセルのワークシートをいじってみましょう。

最初に、KFデータマネージャで作成した株価データファイルを開いてみてください。銘柄は何でも構いませんが、話を分かりやすくするために、KFシステムクリエイター用のフォーマットで作成されたシートを使います。

それを開いた状態で、上部にあるファイルメニューから「新規作成」を選び、空白のブックを作成してください。
すると、まっさらのワークシートが表示されることと思います。

最初はA1セル(一番左上のセル)が選択されているかと思いますが、その状態でキーボードから「=」と入力(小文字で「」内のみ入力:以下同)してみてください。
すると、「=」の右側で、カーソルが点滅した状態になります。これで、セルに数式を入力する準備が整いました。

あとは、その状態から数式を打ち込んでいけばいいのですが、これは四則演算を用いた計算式に限定されません。
単に数字を入力しただけでも、それはれっきとした数式です。セルに「=」で結びつけられてさえいれば、何でもいいのです。

それは文字列であっても構いません。ここでは述べませんが、文字列同士を演算することもできます。それらを数式と呼ぶのはちょっと変なような気もしますが、全体を統一する意味で、ここではセルと「=」で結ばれてさえいれば、全て数式と呼ぶことにします。

もしも入力した数式がおかしい場合は、エクセルが勝手にエラーを出してくれます。したがって、間違っていたらどうしよう、などとは考えずに、どんどん「数式」を入力してみてください。
習うよりも慣れろ、です。どんなものがエクセルにおいて数式として認められているか、とにかくいろいろと確認してみることです。

さて、話をちょっと戻します。

A1セルに「=」を入力した状態で、ウィンドウメニューを開いてみてください。すると、そこには最初に開いた株価データファイルのファイル名が、表示されていると思います。
その箇所をクリックしてみましょう。当たり前ですが、株価データファイルのワークシートが表示されましたね。

続いて、そのシートのA1セル(銘柄名が表示されているセル)をクリックしてみましょう。そのセルが点線で囲まれて、上部の関数窓に「=[そのファイル名]Sheet1!$A$1」と表示されたのではないでしょうか。
もしもそのようにならなかったら、もう一度最初からやり直してみてください。

その状態で、キーボードから「Enter」キーを押してみてください。すると、先ほど作成したブックに戻り、そのA1セルに、株価データファイルのA1セルと同じ内容が、表示されていることが分かるかと思います。

その状態で、再びA1セルを選択してみましょう。先ほど株価データファイルのA1セルを選択した時に、関数窓に表示された数式が、A1セルに入力されていることと思います。
これは、選択した株価データファイルのSheet1のA1セルの内容を参照しなさい、という数式になっているわけです。

同じように、適当なセルから、株価データファイルの任意のセルを、参照してみてください。そのセルの内容が、作成したブックに表示されるでしょう。
このテクニック(というほどのものではありませんが)を用いると、複数のワークシートやブックに散在するデータなどを、一つのブックやワークシートに統合することができます。

でもそのためには、全ての参照先となるブックを、いちいち事前に開かなくてはならないようで、かなり面倒に思えるかもしれません。
実は、エクセルは結構賢くて、参照先のブックを開かなくても、勝手にデータを持ってきてくれるのです。

試しに、現在参照している株価データファイルを閉じてみましょう。ウィンドウメニューから株価データファイルを選択し、それが開いた状態で、ファイルメニューから「閉じる」を選択してみてください。あるいは、シートの右上の小さい「×」(赤い「×」ではありません)をクリックしてもOKです。

「~変更を保存しますか?」というメッセージボックスが現れますが、「いいえ」を選択してください。
すると、株価データファイルは閉じられましたが、作成したブックには参照先の内容が残ったままになっていると思います。

A1セルの内容をよく見ると、先ほどとちょっと違っていることに気付きます。最初は参照先がファイル名だけの表示だったのですが、参照先のブックを閉じた後は、フルパス(ドライブ名+フォルダ名+ファイル名)で表示されています。

このように、参照先がフルパスで記録されることで、いちいち参照先のブックを事前に開いておかなくても、その内容を表示することができるのです。
参照先をフルパスに変換する処理は、エクセルが勝手にやってくれるので、最初の内は面倒な数式を覚える必要はありません。

さて、今回はここまでにいたします。必要がある方は、作成したブックに適当な名前を付けて、保存しておいてください。
次回は、セル参照について、もう少し考えてみたいと思います。


PS.本日、日産順張り正逆合成システムに、買いシグナルが点灯しました。明日の寄付きで新規買建てとなりますが、市場が高値更新を続ける中、果たして吉と出るのでしょうか?

nice!(0)  コメント(4)  トラックバック(0) 
共通テーマ:

ロジック出力の定義 [システム作成講座]

トレーディングシステムを構成する各ブロック間のインターフェースを定義し統一することは、システムの汎用性や拡張性を担保するために重要です。
特に重要となるのが、ロジック部とシグナル部とを結ぶインターフェースです。

システムのデータ部やシグナル部、そして評価部は、一度作成してしまえば、それ以降はあまり変更することはありません。
一方、ロジック部は、頻繁に内容を書き換える必要が生じます。

例えば、ロジック部だけを独立させて個別管理し、それを必要に応じてシステムに組み込むようにすれば、システムに大きな拡張性と汎用性をもたらすことができます。
ちなみに、データ部も銘柄毎に変更が必要になるように思われるでしょうが、これはエクセルのリンク機能を用いれば、容易に実現することができます。

したがって、ここではロジック部とシグナル部とを結ぶインターフェースについてのみ、考えることにします。
なお、シグナル部は本来、ロジック部の一部として捉えることができますが、シグナル部が完全に固定されていることから、ロジック部とは分離して考えています。

さて、シグナル部が売買シグナルを発するためには、どのような情報が必要となるでしょうか?
それは、日々の売買ポジションです。
結局のところ、私たちが得られる状態は、ある日において株式を買い保有しているか、売り玉を持っているか、ノーポジションかのいずれかしかないわけです。

ただし、より厳密に言えば、建玉をどれだけ保有しているか、という情報を用いることもできます。それだけ、後のブロックにおける処理が複雑になりますが、その状態を記述できれば、考え得る全ての状態を網羅することができます。

では、買い玉や売り玉をどのように表現すればいいでしょうか?
その答えは割と簡単です。
買い玉をプラスの数値、売り玉をマイナスの数値とすれば良いのです。

例えば、保有状態が"+1"なら1単位の買い玉、"-1"なら1単位の売り玉です。こう考えると、キャッシュポジション(ノーポジション)の場合は、保有状態として"0"を設定すれば良いことになります。

このように決めると、整数ポジションだけではなく、任意の実数ポジションを定義することができるようになります。
実数ポジションなんて、一体どう使うのかと思われるかもしれませんが、例えばうねり取りシステムを考える場合などに有用となります。

以上をまとめると、ロジック部の出力としては、任意の実数値の時系列データ、ということになるわけです。
そして、その符号がプラスならば買い玉、マイナスならば売り玉、ゼロならばキャッシュになります。また、その大きさは建玉数に比例します。

実は、ここでもう一つだけ出力値を付け加えたいと思います。それは、""(空白)です。空白は、システムに必要なデータが存在しないことを表します。
エクセルを用いたシステムにおいて、空白の存在は大きな意味を持ちます。それは、有意なデータが存在する領域と、それが存在しない領域とを、明確に分離することができるからです。

例えば、システム上の日付が1990年から始まっているにも関わらず、2000年以前の株価データが存在しないような場合は、その部分の保有状態は空白となります。
また、ロジックの演算に当たって、ある統計値を求めるに必要な期間が存在する場合は、その期間に満たない部分は空白になります。

以上、今回はロジック出力の定義について考えました。
次回からは、いよいよ具体的なシステムの作成に、取り掛かりたいと思います。最初は、データ部の作成方法について、考えていく予定です。

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:

トレーディングシステムの基本構成 [システム作成講座]

トレーディングシステムの基本的な構成は、データ部、ロジック部、シグナル部、そして評価部の4つからなります。これらの基本構成の上に、評価結果をまとめたサマリーや、視覚的に評価するチャート、などが追加されます。
先ずは、データ、ロジック、シグナル、評価の4つの部分をエクセルで作成してみましょう。

でも、これらを一度に行なおうとすると、混乱してしまいます。そこで、これらを別々に作成し、後から組み合わせることを考えます。
そのためには、それぞれの構成ブロックにおける入力と出力を、しっかりと定義しておく必要があります。

まずはデータ部ですが、入力は株価データということになります。これはデータの提供元から直接システムに取り込むこともできますが、システムの汎用性を考慮すると、データファイルは別途用意しておいた方が便利です。

ここでは、株価データとしてKFデータマネージャのデータシートを用いることにします。KFデータマネージャをお持ちでない方は、左上の研究所サイトへのリンクから同サイトへ移動し、その中にあるダウンロードページの無償ダウンロードコーナーから、KFデータマネージャをダウンロードしてください。

なお、KFデータマネージャの使用方法につきましては、同サイトの解説をご覧ください。
ちなみに、本講座では、KFシステムクリエイター向けに作成された、株価データファイルを用います。そのためには、KFデータマネージャ上で、H列のデータ修正欄に"1"を設定した上で、データを取得してください。

なお、独自の株価データを用いたい場合は、それを用いても基本的なやり方は変わりません。ただし、最低限、日付と始値、そして終値の各時系列データは必要になります。
それらを、日付に対して昇順となるように揃えておいてください。

さて、データ部の入力は日付と株価の時系列データということになりますが、では出力はといいますと、ここでは入力をそのまま出力とします。
システム上、株価そのものよりも、株価の対数変化率を用いた方が良いと言われていますが、ここでは分かりやすいように株価そのものを用います。

続いてロジック部の入力ですが、そこにはデータ部の出力が対応します。
システムの処理の流れは、データ部⇒ロジック部⇒シグナル部⇒評価部となるわけですが、途中で処理の逆流がない限り、ある処理の入力は、その前段部の出力になります。すなわち、シグナル部の入力はロジック部の出力に、評価部の入力はシグナル部の出力になるわけです。

では、評価部の出力はどうなるかというと、それは私たちシステム運用者への入力になるわけです。あるいは、途中にサマリーやチャートなどが介在する場合もあります。
ちなみに、完全自動売買システムになりますと、シグナル部の出力が証券会社の発注システムの入力に直結することになります。

各処理を結ぶ入出力部分は、いわゆるインターフェースです。これは、パソコンのUSBやSATAなどといった接続規格と同様のものです。
規格が統一されていないと、汎用性が維持できないことは明らかです。

トレーディングシステムにおいても、各処理を結ぶインターフェースの規格は統一されている方が、将来的にシステムの拡張が容易になります。
そこで、実際のシステムの作成に入る前に、それらのインターフェースを定義しておきましょう。

次回は、各処理を結ぶインターフェースの定義について、考えたいと思います。


PS.相撲協会が、年内の地方巡業開催の中止を決めました。個人的には、地方巡業は相撲ファンとの交流を深め、理解を得るための最良の機会だと思います。
むしろ、本場所を中止する分を、積極的に地方巡業に振り分けて欲しいところです。

謹慎も大事かもしれませんが、角界とファンとを結ぶインターフェースを、切断するべきではないと思います。
今最も重要なのは、全国の相撲ファンに対し、生身の自分たちの姿をさらけ出すことなのではないでしょうか。

昔はテレビもほとんど普及していませんでしたが、熱心な相撲ファンは地方にも多くいたのではないかと思います。
彼らは、地方巡業を通じて力士の実物に触れ、憧れと尊敬の念を抱いてきたのではないかと想像します。

ファンとのインターフェースは、本場所やそのテレビ中継だけではありません。今こそ初心・原点に戻るべきではないかと思う次第です。
ちなみに、私は相撲ファンではありませんが、多くの人(特に高齢者)が落胆している姿を見ると、いたたまれない気持ちになります。

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:

システムトレードに必要なもの [システム作成講座]

システムトレードを行なうに当たって、必要なものは何でしょう?

もちろん、トレードに掛ける情熱と努力(そして資金)が第一義であることは間違いありませんが、それだけでは精神論で終わってしまいます。
また、トレードに関する様々な知識や技能の修得も大前提ですが、それを如何にして実際のトレードに落とし込むかは、また別の問題となります。

トレードに関するアイデアは、自分で考えるか、様々な書籍やサイト、セミナーなどからヒントを掴むしかありません。
あるいは、資金力が豊富であるか、人間関係が良好であれば、第三者から重要な情報を入手することができるかもしれません。

トレードのアイデアを他人任せにし、その結果のみを享受しようとする人もいるかもしれませんが、それを運用し続けるためには、トレードに対する深い洞察力が必要となります。
それなしに他人のトレードのただ乗りを繰り返していくと、いつしかシステム難民と化してしまう恐れがあります。

さて、このようにトレードのアイデアそのものは、最終的には自分自身で考えていかなければいけないのですが、そのアイデアが実際に通用するかどうかを確認するためには、そのトレード手法を評価する手段が必要になります。
その評価手段を客観化・普遍化したものが、システムトレードであると言えます。

これは、トレードアイデアとは異なり客観的・普遍的なものですから、原則として、あるアイデアに対応する評価結果は一通りしかありません。
もちろん、評価条件やさまざまな誤差などによって、結果に若干の違いが生じる場合もあるでしょうが、本質的には1対1の関係です。

しかし、トレードアイデアを評価する手法(システム)は、無限に存在することになります。これをトレーディングシステムと呼ぶことにします。
厳密には、「トレーディングシステム=評価手法」ではないのですが、ここではそのような前提で話を進めます。

では、トレーディングシステムを作成するには、何が必要となるでしょう?

実は、「記録が残るものなら何でもよい」が答えとなります。極端に言えば、紙と鉛筆だけでも良いですし、記憶力に自信のある人ならば、「脳みそ」だけでも良いかもしれません。
しかし、効率と正確性(信頼性)を考えると、やはりコンピュータアプリケーションに頼らざるを得ません。

その中には、市販のトレーディングシステムのように、基本的な枠組みが提供されていて、簡単な条件設定や簡易言語だけでトレードアイデアを評価できるものもありますし、Cなどのプログラム言語のように、自分でプログラムを書いて評価するものもあります。

そんな中で、エクセルなどの表計算ソフトは、時系列データの扱いが容易であることなどから、トレーディングシステムの作成に適しています。
高度なシステムを構築するには、かなりの労力を必要としますが、トレードアイデアを検証する程度であれば、比較的簡単に実行することができます。

次回以降は、エクセルを用いたトレーディングシステムを作成する方法について、順次考えていきたいと思います。

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:

投資システム作成講座~おまけ2:損益の取引毎更新~ [システム作成講座]

昨日のコラムで、株価とその移動平均線との交差判定による売買システムの作成について説明しました。しかし、HOLD中の株価変動分を資産に反映させる手法については、ロバスト性の評価に対しては有効に作用しますが、勝率や損益レシオ等のシステム指標を求めるには不都合があります。

そこで急遽、取引毎に損益を更新する機能をシステムに追加しました。今回はその方法について説明します。
まずは、前回作成したエクセルシートを開いてください。データはU列まで入っているという前提で、説明を行ないます。

なお、今回も途中の説明は省き、結果だけを示します。式の意味等について興味のある方は、お手数ですが各自で書籍等を確認願います。前回同様、これといって難しい関数等は使っていません。

最初に、V2セルに「損益累計」、W2セルに「保有期間」、X2セルに「取引回数」、Y2セルに「勝数」、Z2セルに「負数」、AA2セルに「損益」と入力します。
続いて、V3セルとAA3セルに「[取引毎]」と入力します。

次に、V5セルに「=IF(H5<=0,V4,SUM(H$5:H5))」、W5セルに「=N5」、X5セルに「=IF(H5=0,0,1)」、Y5セルに「=IF(V5>V4,1,0)」、Z5セルに「=IF(V5<V4,1,0)」、AA5セルに「=V5-V4」と入力します。

続いて、V5セルからAA5セルまでを選択して(反転表示させ)コピーした後、同列の6行目から最終行まで貼り付けます。

これで、株価移動平均交差判定システムにおいて、取引毎に資産を更新する機能が追加されました。V列の取引毎損益累計をグラフに追加すると、資産カーブに実現損益の階段状グラフが追加されます。

次に、K列からP列の最下行(ここでは2561行とします)の下3行(ここでは2562~2564行とします)にある、総トレード数~損益レシオの18個のセル(K2562~P2564セル)をまとめて選択~コピーし、V列からAA列までの最下行の直下(V2562~AA2564セル)に貼り付けます。

続いて、総トレード数の計算式(W2562セル)を「=INT(SUM(X5:X2561)/2)」と書き換えます。更に、勝トレード数の計算式(W2563セル)のZをYに、総利益の計算式(Y2562セル)のZをAAに、総損失の計算式(Y2563セル)のZをAAに置換します。
これで、取引毎の損益に基づいた各種システム指標が得られたことと思います。

なお、これらのシステム指標はあくまで実現損益に基づいたものであり、現在、株式をHOLD中で評価益があったとしても、それは反映されません。
現時点の評価益も反映させたい場合は、判定の列(L列)の最下行の1つ上の行に手作業で「0」と入力すれば、評価益を反映した結果が表示されます。確認が終わったら、編集メニューの”元に戻す”で、「0」の入力をクリアしておきましょう。

さて、今回は以上です。最後に、シートを上書き保存しておきましょう。

なお、すでにお気づきのことと思いますが、このシステムの根幹はK列とL列にあります。他のA列からF列までのデータ領域を除いた部分は、取引の結果を分かりやすく示すためのデータ処理を行なっているに過ぎません。

今回は、K列に株価移動平均という指標を、L列に「株価が移動平均を上回ったら買い持ち」という売買基準を用いましたが、この指標と売買基準を変更することで、様々な指標を用いた投資システムを作成することが出来ます。また、複数の指標を組み合わせて判定を行なうことも可能です。
これらについては、いずれ機会があれば紹介したいと思います。


前の10件 | - システム作成講座 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。