TrimPips MT5対応 TrimPips PIPS消去による決済機能(MQL4からMQL5へ)

MT5対応

TrimPips MT5対応の一覧

01.02.構成要素
※本記事は、FXism及川デイトレ大百科スタディ時のメモです。メモの一覧はコチラ 前回 構成要素 MTF(マルチタイムフレーム)それぞれ(10MA) 黄緑のカクカク15分足の移動平均線 青のカクカク1時間足の移動平均線 赤のカクカク4時間足...

今回は、画面上のPIPS消去による決済機能です。

 

まずは、MQL4のソースをそのままインプリメントします。

 

エラーは以下の通り

 

 

 

 MQL4  MQL5
int StrToInteger(string value) long StringToInteger(string value) StrToInteger
値文字表記を含むストリングをint (整数)タイプに変換します。
StringToInteger

簡単簡単。

 

新規にチケット番号クローズを追加

MQL4の場合は、ピンポイントで
クローズできたのだが

ポジション数分ループさせ
チケット番号と一致しているものを
クローズする。

さらに非同期のため
確実にクローズが終わるまで回す。

 

できたー

と思いきや。

PIPS整理ですべてクローズされてしまう。

一旦、画面のPIPSを削除するため
クローズ処理が走ってしまうのだ。

あれ、MQL4のときは?

と思ってMQL4のログを見ると
* ワイルドカードになっている。

その結果、IDと一致しないので
クローズされないのだ。

MQL5の場合は、すべてのIDが入ってくるので
すべてクローズ処理が走ってしまう。

 

やり方としては2つ

  1. PIPS整理でPIPSを消さずに整理する
  2. PIPS整理時フラグを立て、フラグが立っているときはクローズしない

1.実は面倒くさい。
単純にアクティブなポジションを整理するだけならいいが、
クローズされたボジションを消すすべがない。

やるとすれば、現在のポジションを管理する
テーブル的なものを作り、クローズポジションを
把握する必要がある。

2.フラグ作戦は、簡単にできるが。。。ダサい
(プログラミングにおいてフラグを使うのはバグの元であり、最後の手段)
それにオフするタイミングがわからない

というか、複数プロコンが動いていると
おそらくうまくいかないタイミングがでる

とはいえ、右クリックして削除するまでに

1秒以上かかるので、1秒後にフラグをOFFでいいかも。

 

 

できました。

まずフラグの追加

 

セッターとゲッター

 

PIPS整理処理でフラグの設定

 

OnTick()の一番最後(PIPS表示完了後)にフラグをオフ

 

イベント処理にフラグの判別処理を追加

 

 

完了です。

 

 

とおもいきや、

1個の削除で、複数クローズしてしまう

なるほど、一つ削除すると
チケット番号が塗り替わるのだ。

266350396を削除しても
また、266350396が出現するので
結局全てのポジションを削除してしまう。

 

うーん、力技で行きます。
1回めに残り個数を保持し
2回め以降に数が減っていれば、メインループを抜ける

 

ログを確認。

いい感じです。

完成!

MQL4では、

これだけの処理が、

非同期になったためにこれだけ冗長に
なってしまった。

 

 

MQL4のOrderClose()をMQL5への置き換えする際のポイント

  • 非同期なので、何度かチェックする必要がある
  • クローズが成功すると、使用していたチケット番号が再利用される

 

一つずれて決済される

できたと思って、決済したら
なぜだか一つずれて決済されていた。

これがいけないらしい。

うーーーーーーーーーーーーーん。

再度仕様を見ると。

PositionClose

指定されたシンボルでポジションを決済します。

bool  PositionClose(
  const string  symbol,                  // シンボル
  ulong        deviation=ULONG_MAX      // 偏差値
  )

Closes a position with the specified ticket.

bool  PositionClose(
  const ulong   ticket,                  // Position ticket
  ulong        deviation=ULONG_MAX      // Deviation
  )

あれ?

引数にチケットを指定すればいいだけじゃね?

というわけで、これだけでOKでした。

 

一応、非同期なのでできるのを
確認できるまでぐるぐる回します。

 

つぎはこちら

TrimPips MQL4とMQL5ソースの共通化(ストレージの使用)
TrimPips MT5対応の一覧 前回 おおかたTrimPipsのMT5対応が完成したのですが ここで問題が。。。 MT5対応でソースをかなり変更したため 元のMT4のソースからだいぶかけ離れて しまったのです。 これは由々しき問題です。

TrimPips MT5対応の一覧

コメント

タイトルとURLをコピーしました