人気ブログランキング | 話題のタグを見る
ブログトップ

こんなFXの日記

konnafx.exblog.jp

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

資金管理の集大成プログラム~PART6

前回の続きです。


まず、外部パラメーターの設定は今までと同じです。


資金管理の集大成プログラム~PART6_a0204254_7111567.gif



次に、スタート関数内で、現在の必要証拠金を返す AccountMargin()関数 を呼び出して、これをAMという変数に置き換えます。


資金管理の集大成プログラム~PART6_a0204254_721870.gif



最適枚数は、今までと同じです。


資金管理の集大成プログラム~PART6_a0204254_72727100.gif



そして、いよいよ補正枚数の算出です。まず、前回の方程式の解をおさらいすると、


補正枚数=(口座残高+口座クレジット-既存のポジションの損切り損失額の合計-1.5×既存の必要証拠金額の合計)÷(新規のポジションの損切り幅+1.5×新規のポジションの約定価格÷レバ)÷10000



でしたよね。そこで、いきなり方程式の解をあてはめる前に、まず下線部の部分のみ算出するプログラムを先に書いておきましょう。


変数として、


約定価格、損切り価格、ロット数、損切り損失額、損切り損失額の合計をそれぞれ宣言します。


資金管理の集大成プログラム~PART6_a0204254_194148100.gif



次に、for()文とOrderSelect()関数を使って、通貨ペアとマジックナンバーの一致するポジションを順に探し出してきて、それぞれの約定価格、損切り価格、ロット数を特定し、それぞれのポジションの損失額を、


ロングなら、損失額=(約定価格-損切り価格)×ロット数×100000
ショートなら、損失額=(損切り価格-約定価格)×ロット数×100000


というように計算します(最後に100000を掛けているのは、1ロット=10万通貨を前提としているからです)。そして、算出されたそれぞれの損失額をすべて合算し、ELSumという変数に渡します。


資金管理の集大成プログラム~PART6_a0204254_20104569.gif



さて、これで方程式の解の下線部の計算が完了しました。


補正枚数=(口座残高+口座クレジット-既存のポジションの損切り損失額の合計-1.5×既存の必要証拠金額の合計)÷(新規のポジションの損切り幅+1.5×新規のポジションの約定価格÷レバ)÷10000



あとは、各変数をこの方程式の解にあてはめるだけです。


たとえば、ロングの場合の補正枚数は、基本的には、


double BestLots2 = (AB+AC-ELSum-LFR*AM)/(Ask/AL*LFR+SL)/10000;


となりますが、1ロット=10万通貨で千通貨単位の業者用に端数処理をすると、


double BestLots2 = MathFloor((AB+AC-ELSum-LFR*AM)/(Ask/AL*LFR+SL)/1000)/100;


と記述するんでしたよね。あとは、MathMin()関数で、BestLots1 と BestLots2 のうちより小さい方を選択し、if(Lots>=0.01) によって「0」ロット発注を防止すればOKです。


資金管理の集大成プログラム~PART6_a0204254_12372398.gif




次回は、ポートフォリオを組んだ場合の処理について考えたいと思います。基本的には、今回とほぼ同じで、プログラムの仕方が少し異なるだけです。034.gif



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

by xchsshzo