Top Page



OrderSend()とOrderClose()処理が異常だった時のエラー処理をいれてみる

実際に自動売買をしていて放置していた場合には、エラーが出たとしても対処のしようがないような気もします。サーバーが落ちたり、指標発表などであまりにも値が飛んだり、スプレッドが広がりすぎた場合などイレギュラーなケースはたくさん考えられます。そういうものに対処するには、プログラムで常にポジションのチェックをするような処理を入れる必要があると思います。そうすることによって被害を最小限にする努力が必要でしょう。
ただし今回は、エラーが起きましたよと知らせる処理をいれるだけです。
これは売買の観点からすると解決策にはならないかもしれませんが、まずは第一歩として少なくともエラーが起きたということを知らせようということです。

①グローバル変数にエラー情報を格納する変数を3つ定義しました。
 int G_Er_Code;
 string G_Er_Alert;
 string G_Er_Point;
書籍を読んだところ、エラーが発生した時にエラーコードを取得する関数を呼ぶと次に呼んだときには「0」が返ってきてしまうということです。簡単に言うと1回呼ぶとそのエラーについての情報は、消えてしまうということだと思います。よってグローバル変数にエラーコードを格納する変数を定義しています。他の2つはグローバルに定義する意味はあまりないかもしれません。

②エラー通知処理としては、アラートとログ出力です。
 G_Er_Point = "任意の文字列";
 G_Er_Code = GetLastError();
 G_Er_Alert = StringConcatenate(G_Er_Point,G_Er_Code);
 Alert(G_Er_Alert);
 Print(G_Er_Point);
GetLastError()というやつが、エラーコードを取得する関数です。
まあ、特に説明は必要ないと思います。
文字列をAlertとPrintの関数に渡してやるだけです。
この処理を、OrderSendとOrderCloseの異常時に組み込むだけです。

(注)このEAは、動作確認できていません。つまり正しくエラー通知できたか確認していません。
  調べながらプログラムしてみただけです。ご注意ください。










FX投資家のためのMetaTrader4逆引きハンドブック [ FXPG ]