ライブラリとそれに基づくプログラムにはさまざまなサービス関数が必要です。ライブラリのルートディレクトリに新しいインクルードファイルを作成します。ライブラリクラス自体とライブラリベースのプログラムの両方で使用できるサービス関数のライブラリファイル「DELib」を作成します。
Order.mqhファイルのincludeディレクティブを置き換えます。Defines.mqhからDELib.mqhに置き換えます。また、Defines.mqhファイルのマクロ置換として、日本語の定義を追加します。この関数はターミナルの言語を確認し、それがCOUNTRY_LANGマクロ置換で指定された言語と一致する場合は、最初の関数パラメータで渡されたテキストが表示されます。それ以外の場合は、2番目の関数パラメータに含まれているテキスト(英語)が表示されます。
DELib.mqhファイルに、2つの言語のいずれかでメッセージを返すための関数を追加します。
ミリ秒で時間を表示する関数も追加します。秒単位で時間を計算するには、関数に渡される値を1,000で割る必要があります。ミリ秒を計算するには、この除算の残りを取ります。受け取った値はすべて文字列としてフォーマットされ、呼び出し側プログラムに返されます。
銘柄ロットの小数桁数を取得する必要がある場合もあるかもしれません。この関数をサービス関数のファイルに入力しましょう。
//+------------------------------------------------------------------+ //| 銘柄ロットの小数桁数を返す | //+------------------------------------------------------------------+ uint DigitsLots(const string symbol_name) { return (int)ceil(fabs(log(SymbolInfoDouble(symbol_name,SYMBOL_VOLUME_STEP))/log(10))); } //+------------------------------------------------------------------+
サービス関数に加えて、操作ログにメッセージを表示するために注文の理由、方向、取引の種類を返す3つのメソッドが必要になります。COrderクラスの保護されたセクションに3つのメソッドを追加します。
//--- (1)理由、(2)方向、(3)取引の種類を返す string GetReasonDescription(const long reason) const; string GetEntryDescription(const long deal_entry) const; string GetTypeDealDescription(const long type_deal) const;
以下、使用されているのがMQL4かMQL5であるかが確認され、検証後にその説明が返されます。
- 入力で渡された注文理由が注文状態に従って検証される。
- 入力で渡された取引方向が注文状態に従って検証される。
- 入力で渡された取引の種類が注文状態に従って検証される。
コメントを残す