SSブログ

エクセルのちょっといい話(13) [システムトレード]

エクセルには、特定の値を検索するための関数が数多くあります。一連のデータベース関数はその際たるものですし、検索・行列関数もその一例です。
また、COUNTIF関数やSUMIF関数も、特定の値に合致するセルの個数や合計を求めるための関数です。

実は、これらの関数の検索値には、ワイルドカードを使用することができます。ワイルドカードとは、MS-DOSの時代からパソコンに勤しんでいる方にはお馴染みでしょうが、文字列の中に"*"や"?"マーク等を含めることによって、例えばその文字列を含む全ての文字列を表すための記号です。

例えば、"あか*"とすれば、"あか"で始まる任意の文字列を表し、"*あお"とすれば、"あお"で終わる任意の文字列を表します。
また、"*"の代わりに"?"を用いると、1文字のみ任意である文字列を表します。

さて、今、トレーディングシステムにおいて、テスト期間の一番最初に買いシグナルが出た時の株価を求めたいとします。
例えば、純粋なドテンシステムの場合なら、買いシグナルを"買いドテン"で表し、それをMatch関数で完全一致検索すれば、一番最初に"買いドテン"が表示された行番号を返します。

しかし、キャッシュポジションを含んだシステムの場合だと、買いシグナルは"買いドテン"だけではなく、キャッシュポジションからの新規買い("買い新規"とします)も必要になります。
このような場合、どうやって一番最初に買いシグナルが出た行を見つければいいのでしょうか?

答えはすでに明らかですが、もちろんOR関数などを使っても上手く行きません。ここでは、上述のワイルドカードを用いればOKです。
すなわち、Match関数において、検索値を"買い*"としてやれば、"買いドテン"もしくは"買い新規"が最初に現れた行番号を求めることができます。

ちなみに、それら以外にも"買い増し"や"買い手仕舞"などといったシグナルが出ることもありそうですが、これらのシグナルの前には必ず"買いドテン"や"買い新規"がありますので、"買い増し"などが検索に引っかかることはありません。

ここでは、ワイルドカードをMatch関数に適用した場合について述べましたが、それ以外の関数にも適用できる場合がありますので、興味のある方はお調べください。
ちなみに、COUNTIF関数やSUMIF関数にはワイルドカードを適用可能ですが、IF関数には適用できません。

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

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

トラックバック 0

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