エクセルと漸化式(1) [システムトレード]
エクセルでは様々な統計関数を用いることができます。それを単なる集計に用いるのであれば、あまり神経を使うことはありませんが、例えば、ある列における行方向の全てのセルにおいて、統計関数を用いるような場合は、注意が必要です。
トレーディングシステムにおいては、上記のような処理を行う場合が少なくありません。例えば、移動平均システムにおいては、過去n日間の株価の平均値を求める必要がありますが、普通にエクセルで計算を行う場合、各行においてAVERAGE関数を用いることが一般的であると思われます。
しかし、このように行方向の一定期間の平均を、全ての行にわたって計算する場合、AVERAGE関数を用いると演算の多くの部分が重複してしまいます。
その重複部分を再計算しないで済む方法はないのでしょうか?
実は、そのような場合に役立つのが、漸化式の考え方です。例えば25日移動平均の場合、最初に過去25日間の株価の平均を求める必要がありますが、26日目には、前日までの25日間の平均に26日目の株価と1日目の株価との差を25で割った値を加えれば、26日目における25日移動平均が求まります。
これを数式で表すと、次のようになります。
a[26]=a[25]+(x[26]-x[1])/25
一般式は、次の通りです。
a[i]=a[i-1]+(x[i]-x[i-n])/n
ここで、a[i]はi日目のn日移動平均、x[i]はi日目の株価終値、nは移動平均期間です。すなわち、前日の移動平均と当日の株価、そして、n日前の株価が分かれば、当日の移動平均を求めることができるわけです。
このように、移動平均(AVERAGE関数)のような線形関数の場合は、容易に漸化式を求めることができるのですが、回帰直線の傾き(SLOPE関数)などのような非線形関数の場合は、直接的に漸化式を求めることはできません。
しかし、ちょっとした工夫によって、複雑な関数の場合でも漸化式を用いて計算負荷の低減を図ることができます。
今日はちょっと時間が押していますので、この続きは明日のコラムで考えたいと思います。
トレーディングシステムにおいては、上記のような処理を行う場合が少なくありません。例えば、移動平均システムにおいては、過去n日間の株価の平均値を求める必要がありますが、普通にエクセルで計算を行う場合、各行においてAVERAGE関数を用いることが一般的であると思われます。
しかし、このように行方向の一定期間の平均を、全ての行にわたって計算する場合、AVERAGE関数を用いると演算の多くの部分が重複してしまいます。
その重複部分を再計算しないで済む方法はないのでしょうか?
実は、そのような場合に役立つのが、漸化式の考え方です。例えば25日移動平均の場合、最初に過去25日間の株価の平均を求める必要がありますが、26日目には、前日までの25日間の平均に26日目の株価と1日目の株価との差を25で割った値を加えれば、26日目における25日移動平均が求まります。
これを数式で表すと、次のようになります。
a[26]=a[25]+(x[26]-x[1])/25
一般式は、次の通りです。
a[i]=a[i-1]+(x[i]-x[i-n])/n
ここで、a[i]はi日目のn日移動平均、x[i]はi日目の株価終値、nは移動平均期間です。すなわち、前日の移動平均と当日の株価、そして、n日前の株価が分かれば、当日の移動平均を求めることができるわけです。
このように、移動平均(AVERAGE関数)のような線形関数の場合は、容易に漸化式を求めることができるのですが、回帰直線の傾き(SLOPE関数)などのような非線形関数の場合は、直接的に漸化式を求めることはできません。
しかし、ちょっとした工夫によって、複雑な関数の場合でも漸化式を用いて計算負荷の低減を図ることができます。
今日はちょっと時間が押していますので、この続きは明日のコラムで考えたいと思います。
コメント 0