FC2ブログ

OrdersTotal()の罠

EAを作成していると、最大ポジション数を制限したりしたい場合が良くありますね。

このような要求を実装する為には「OrdersTotal()」関数を使用する事が多いのですが、この関数にはちょっとした落とし穴があって、戻り値となる値には接続している口座のポジション数の合計数が返ってきます。

これは、「呼び出したEAのポジション数」とは必ずしもイコールにはならないのです。

つまり、自分自身のEA以外のポジション数もひっくるめて合算された値が返ってくるという事です。

EAを単体稼働する事しか想定しないのでしたら、これで全く問題無いのですが、複数のEAを同時に稼働するような運用を想定する場合には、かなり危険な状態と言えます。

例えば、自分自身のEAが決まった時刻に決済するような動作を行いたい時、

全てのポジションを決済した処理の後に、

if (OrdersTotal() == 0)
{
// 決済完了なので、これ以降の新規エントリーはしないようにする。
:
:
}

と書きたくなります。

ところが、もし別EAがポジションを保持していた場合、「OrdersTotal()」は0を返してくれません。

その為、本来は新規エントリーを抑止したいのにもかかわらず、新規エントリーと決済を延々と続けてしまう結果になってしまいます。

mq4ファイルが存在するEAでしたら、ソースの内容を確認する事でこの問題は回避出来ます。ところが、野良EAのようなex4ファイルしか存在しないEAの場合、どのような実装方法になっているかは確認する術がありません。

野良EAに限らず、どのようなEAでも、デモ口座でテスト運用する事は誰しも行う事ですが、複数のEAを同時にテスト運用する事はあまり無いのではないでしょうか?

この問題は、複数EAを同時運用して初めて発覚する問題です。

大事な運用資金ですから、用心するに越したことは無いですね。

スポンサーサイト

コメントの投稿

非公開コメント

アクセスカウンター
プロフィール

大和

Author:大和
フリーランスのプログラマーです。

EA作成代行承ります
最新記事
カテゴリ
広告
最新コメント
最新トラックバック
月別アーカイブ
リンク
メールフォーム

名前:
メール:
件名:
本文:

ランキング参加中
応援よろしくお願いします。
検索フォーム
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード