SSブログ
システム作成講座 ブログトップ
前の5件 | 次の5件

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


nice!(0)  コメント(4)  トラックバック(0) 
共通テーマ:
前の5件 | 次の5件 システム作成講座 ブログトップ

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