資金管理の集大成プログラム~PART6
前回の続きです。
まず、外部パラメーターの設定は今までと同じです。
次に、スタート関数内で、現在の必要証拠金を返す AccountMargin()関数 を呼び出して、これをAMという変数に置き換えます。
最適枚数は、今までと同じです。
そして、いよいよ補正枚数の算出です。まず、前回の方程式の解をおさらいすると、
でしたよね。そこで、いきなり方程式の解をあてはめる前に、まず下線部の部分のみ算出するプログラムを先に書いておきましょう。
変数として、
約定価格、損切り価格、ロット数、損切り損失額、損切り損失額の合計をそれぞれ宣言します。
次に、for()文とOrderSelect()関数を使って、通貨ペアとマジックナンバーの一致するポジションを順に探し出してきて、それぞれの約定価格、損切り価格、ロット数を特定し、それぞれのポジションの損失額を、
ロングなら、損失額=(約定価格-損切り価格)×ロット数×100000
ショートなら、損失額=(損切り価格-約定価格)×ロット数×100000
というように計算します(最後に100000を掛けているのは、1ロット=10万通貨を前提としているからです)。そして、算出されたそれぞれの損失額をすべて合算し、ELSumという変数に渡します。
さて、これで方程式の解の下線部の計算が完了しました。
あとは、各変数をこの方程式の解にあてはめるだけです。
たとえば、ロングの場合の補正枚数は、基本的には、
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です。
次回は、ポートフォリオを組んだ場合の処理について考えたいと思います。基本的には、今回とほぼ同じで、プログラムの仕方が少し異なるだけです。
応援よろしくお願いします。
↓
にほんブログ村
まず、外部パラメーターの設定は今までと同じです。
次に、スタート関数内で、現在の必要証拠金を返す AccountMargin()関数 を呼び出して、これをAMという変数に置き換えます。
最適枚数は、今までと同じです。
そして、いよいよ補正枚数の算出です。まず、前回の方程式の解をおさらいすると、
補正枚数=(口座残高+口座クレジット-既存のポジションの損切り損失額の合計-1.5×既存の必要証拠金額の合計)÷(新規のポジションの損切り幅+1.5×新規のポジションの約定価格÷レバ)÷10000
でしたよね。そこで、いきなり方程式の解をあてはめる前に、まず下線部の部分のみ算出するプログラムを先に書いておきましょう。
変数として、
約定価格、損切り価格、ロット数、損切り損失額、損切り損失額の合計をそれぞれ宣言します。
次に、for()文とOrderSelect()関数を使って、通貨ペアとマジックナンバーの一致するポジションを順に探し出してきて、それぞれの約定価格、損切り価格、ロット数を特定し、それぞれのポジションの損失額を、
ロングなら、損失額=(約定価格-損切り価格)×ロット数×100000
ショートなら、損失額=(損切り価格-約定価格)×ロット数×100000
というように計算します(最後に100000を掛けているのは、1ロット=10万通貨を前提としているからです)。そして、算出されたそれぞれの損失額をすべて合算し、ELSumという変数に渡します。
さて、これで方程式の解の下線部の計算が完了しました。
補正枚数=(口座残高+口座クレジット-既存のポジションの損切り損失額の合計-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です。
次回は、ポートフォリオを組んだ場合の処理について考えたいと思います。基本的には、今回とほぼ同じで、プログラムの仕方が少し異なるだけです。
応援よろしくお願いします。
↓
にほんブログ村
by xchsshzo
| 2011-07-17 22:32
| メタトレーダー