ブログトップ

こんなFXの日記

konnafx.exblog.jp

システムトレーダーとして、日々研鑽を重ねていく…

VST化のプログラム

本日は、VST化のサンプルプログラムを紹介します。非常に簡単です。


まず、損切りと利食い((逆)指値)の幅が固定値になっているEAは、通常は、以下のように記述されていると思います。


a0204254_2147122.gif



外からパラメーターを変更できるように、extern という文字をつけて、(逆)指値の幅を指定し、SL,TPなどの任意の変数に置き換えてあります。「65」「45」というのは、それぞれ、「65pips」「45pips」という意味です。


そして、新規発注をするための OrderSend()関数の中へ、SL,TPという変数を代入することによって、(逆)指値が指定され、サーバーへ送信されます。


a0204254_21553181.gif



Point というのは、その通貨ペアの最小取引単位を返す予約変数で、たとえば、USD/JPY=83.25円 のように、下2桁表示のチャートなら、Point = 0.01 で、USD/JPY=83.257円 のように、下3桁表示のチャートなら、Point = 0.001を返します。ここで、わざわざ Point を掛けているのは、先ほどの外部パラメーターでは、「65pips」「45pips」というようにピップス単位で、(逆)指値の幅を指定しているのに対して、OrderSend() 関数の中の(逆)指値については、チャート上の表示単位(USD/JPYなら「円」)で指定しなければならないため、単位を補正しているだけです。めんどくさいという人は、はじめから全部「円」単位で指定すればよいわけで、その場合には以下のようになっていると思います。


a0204254_22152312.gif




さて、ここまでは、(逆)指値の幅を固定値にした通常のEAの説明でした。次に、標準偏差を利用して、これをVST化してみますが、いろんなやり方があるので、以下は、あくまでもサンプルだと思ってください。


まず、外部パラメーターとして、標準偏差の計算期間を SD_Periodという変数で宣言します。そして、(逆)指値幅の代わりに、SLR,TPRという倍率定数を指定します。


a0204254_22193655.gif



あとは、標準偏差を割り出す iStdDev() 関数を呼び出して、計算期間を SD_Period と指定して、割り出された標準偏差を SD という変数に置き換えて、


SL = SD*SLR
TP = SD*TPR


という具合に、標準偏差×倍率定数を算出し、その結果をそれぞれを、SL,TPとして(逆)指値幅とします。そして、最終的には、SLR,TPRという外部パラメーターを最適化することになります。


しかし、ここで注意することがあります。


たとえば、チャート上の表示単位が下2桁であるのに、SL,TPの値が下3桁であったりすると、送信エラーとなります。そこで、SL,TPの下3桁を四捨五入して、下2桁に丸める必要があります。このとき使用するのが、NormalizeDouble() 関数です。


たとえば、0.1234 を下4桁で四捨五入して下3桁に丸めたいときは、


NormalizeDouble( 0.1234,3); と記述します。すると、0.123 という数値が返されます。


同様に、0.567 を下3桁で四捨五入して下2桁に丸めたいときは、


NormalizeDouble( 0.567,2); と記述します。すると、0.57 という数値が返されます。


ところが、丸める桁数をいちいち数えるのもめんどうですし、数え間違えたりしないために、Digits という予約変数を使用すると便利です。たとえば、チャートが、「83.257円」のように下3桁表示の場合は、Digits は「3」を、また、「83.25円」のように下2桁表示の場合は、Digits は「2」を自動的に返してくれます。


したがって、0.567 を下3桁で四捨五入して下2桁に丸めたいときは、


NormalizeDouble( 0.567,2); とする代わりに、NormalizeDouble( 0.567,Digits); とすれば、0.57という数値を返してくれます。


結局、プログラムは以下のようになります。


a0204254_22293249.gif




なお、標準偏差の代わりにATRを使用したVST化のプログラムは以下のようになります。


a0204254_23304744.gif



このように、VST化のプログラムは非常に簡単で、普段プログラムをしない人でも、ちょっと頑張れば市販のEAを改造することくらいはできると思います。



しかし、



このVST化には、非常に危険な罠があります。もう気づいていらっしゃる方もみえるでしょう。


そうです。標準偏差やATRが極端に大きくなったときに、損切りの幅も大きく広がってしまい、想定外の損失を出してしまうという問題があります。007.gif


もちろん、損切りの幅にリミットを設定すればいいわけですが、それでは、せっかくVST化した意味が半減します。


次回は、この問題をもっとスマートに解決する方法を紹介します。034.gif



応援よろしくお願いします。
   ↓
にほんブログ村 為替ブログへ
にほんブログ村
[PR]
by xchsshzo | 2011-07-03 11:00 | メタトレーダー