どうも!和菓子職人トレーダー潤奈です( ゚Д゚)
今回はpointからpipsに変換値を取得する為のオリジナル関数を紹介します。
概要
MQL4を使用して取引におけるポジションの調整を行う方法について解説します。
特に、通貨ペアの価格表記の桁数に応じて、1pipの価値を適切に調整する関数としてAdjustPoint関数の実装を紹介します。
これは、様々な通貨ペアでEA(エキスパートアドバイザー)を動作させる際に、ポジションサイズを正確に管理するために非常に重要です( ゚Д゚)
コード全文
まずグローバル変数として使用出来るようにpointValue変数として宣言しておきます。
1 2 3 4 5 6 7 8 9 10 |
//グローバル変数として宣言 double pointValue; //OnInit関数内で関数を呼び出して変数へ値を入れる int OnInit() { pointValue = AdjustPoint(_Symbol); return(INIT_SUCCEEDED); } |
次にAdjustPoint関数のコードは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 |
// ポジション調整 double AdjustPoint(string Currency){ int SymbolDigits = (int)MarketInfo(Currency, MODE_DIGITS); switch(SymbolDigits){ case 2: return(0.01); break; case 3: return(0.01); break; case 4: return(0.0001); break; case 5: return(0.0001); break; } return(0.0); } |
コード説明
OnInit関数
OnInit関数は、EAがチャート上で初期化される時に呼び出されます。
この関数内でAdjustPoint関数を呼び出し、グローバル変数pointValueに1pipの価値を格納して、ポジションサイズの調整に使用出来るようにします。
AdjustPoint関数の宣言
double型で宣言をして、引数に通貨ペア名を渡します。
1 2 3 4 5 6 |
// ポジション調整 double AdjustPoint(string Currency){ //この中にコードを記述 } |
通貨ペアの小数点以下の桁数取得
MarketInfo関数を使用して、指定された通貨ペアの価格の小数点以下の桁数を取得します。
1 |
int SymbolDigits = (int)MarketInfo(Currency, MODE_DIGITS); |
これは通貨ペアの価格表記の特性を理解するために必要です。例えば、USDJPYのようなペアは通常2桁または3桁の小数点以下桁数を持ち、EURUSDのようなペアは4桁または5桁の小数点以下桁数を持ちます。
桁数に基づく調整値の取得
switch文を用いて、桁数に応じて1pipの価値を取得します。
2桁または3桁の通貨ペアでは0.01を、4桁または5桁の通貨ペアでは0.0001の値を返します。
1 2 3 4 5 6 |
switch(SymbolDigits){ case 2: return(0.01); break; case 3: return(0.01); break; case 4: return(0.0001); break; case 5: return(0.0001); break; } |
return文とデフォルトの返り値
前項に繋がりますが、各case文の後には該当する値をreturn文を用いて返します。
もし、上記のケースに一致しない桁数が指定された場合、関数はデフォルト値として0.0を返すように記述します。
1 |
return(0.0); |
使用事例
AdjustPoint関数は、トレードの際のポジションサイズを計算する上で役立ちます。以下はこの関数を使用する具体的な事例ですので、上手く組み込んで下さい( ゚Д゚)
事例:ストップロスとテイクプロフィットの設定
パラメーターで〇〇Pipsで設定したいと思った時、価格の値と価値単位が違うのでそのまま使用出来ません。EAによってはpointで記述している物もありますが、出来ればPipsで揃えたいと思う方もいらっしゃると思います。
1 2 3 4 5 6 7 8 9 10 |
double stopLossPips = 20.0; // ストップロスを20pipsに設定 double takeProfitPips = 40.0; // テイクプロフィットを40pipsに設定 double pointValue = AdjustPoint(_Symbol); // 1pipの価値を取得 //買いの場合 double stopLossPrice = Ask - stopLossPips * pointValue; double takeProfitPrice = Ask + takeProfitPips * pointValue; // OrderSend関数を用いて、計算されたストップロスとテイクプロフィットでオーダーを送信 |
この例ではAdjustPoint関数を使用して、特定の通貨ペアの1pipの価値を計算し、それを基にストップロスとテイクプロフィットの価格を設定しています。
これにより通貨ペアの価格桁数に関係なく、一貫したトレード戦略を適用できます。
まとめ
いかがでしたでしょうか。
この記事では異なる通貨ペアの価格表記の桁数に基づいて調整値を取得する方法を解説しました。
AdjustPoint関数は、EAの開発においてポジションサイズの管理を行う為の基礎として活用することで、EAが多様な通貨ペアに対応する事が出来ると思います。
では、少しでも参考になれば( ゚Д゚)
コメント