ご訪問ありがとうございます。
ひろしです。
前回
こんなコメントを頂きました。
pips表示削除で決済。。。。
ラベルのイベントが取れることができれば
できそうです。
やることは2つ
- ラベル削除のイベントを判別
- 削除されたラベルに該当するチケットNoをクローズ(決済)する
では、やってみましょう。
ラベル削除のイベントを判別
ラベル削除時には 、OnChartEvent()で第1引数(id)が
「CHARTEVENT_OBJECT_DELETE」で
入ってきます。
なので
1 2 3 4 5 |
void OnChartEvent(const int id, const long & lparam, const double & dparam, const string & sparam) { if(id == CHARTEVENT_OBJECT_DELETE) // オブジェクトが削除された |
これで、ラベルの削除が判別できます。
オーダーNoの取得
OnChartEvent()の第4引数(id)sparamは、”ProConx_オーダーNo” の
文字列が入ってきました。
なので、’_’をデリミタとして分割すればオーダーNoが取得できます。
1 2 3 4 5 |
//オーダー番号を切り出す string sep_str[]; StringSplit(sparam, '_', sep_str); //バッファの2個目にはオーダー番号 int norderno = StrToInteger(sep_str[1]); |
決済処理
あとは、取得したオーダーNoで
OrderSelect()してOrderClose()すればできあがりです。
1 2 3 4 5 6 7 8 9 10 11 |
if(!OrderSelect(norderno, SELECT_BY_TICKET, MODE_TRADES)) { Print("OrderSelect失敗 オーダーNo=", norderno); return; } if(!OrderClose(norderno, OrderLots(), OrderClosePrice(), 0)) { Print("OrderClose失敗 オーダーNo=", norderno); return; } } |
実は最初、ともさんからのコメントをよく読まず、
pipsのラベル削除時ではなく、ラベルのダブルクリック時に
クローズ(決済)処理を行おうとしていました。
OnChartEvent()では、ダブルクリックが取得できなくて、
ちょっと暗雲が立ち込めてきました。
でも、そこで再度コメントを読み、ラベルの削除時ということに
気づきました^^
最終形(コメントもそのまま)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
void OnChartEvent(const int id, const long & lparam, const double & dparam, const string & sparam) { AppWindow.ChartEvent(id, lparam, dparam, sparam); Event.OnEvent(id, lparam, dparam, sparam); // --- コレだけ追加 if(id == CHARTEVENT_OBJECT_DELETE) // オブジェクトが削除された { /* Print("id =", id); Print("sparam =", sparam); Print("lparam =", lparam); Print("dparam =", dparam); Print("sparam =", sparam); */ if(StringFind(sparam, Str_dsppip) == 0) { //オーダー番号を切り出す string sep_str[]; StringSplit(sparam, '_', sep_str); //バッファの2個目にはオーダー番号 int norderno = StrToInteger(sep_str[1]); if(!OrderSelect(norderno, SELECT_BY_TICKET, MODE_TRADES)) { Print("OrderSelect失敗 オーダーNo=", norderno); return; } /* Print("norderno =", norderno); Print("OrderLots() =", OrderLots()); Print("OrderClosePrice() =", OrderClosePrice()); Print("OrderOpenPrice() =", OrderOpenPrice()); */ if(!OrderClose(norderno, OrderLots(), OrderClosePrice(), 0)) { Print("OrderClose失敗 オーダーNo=", norderno); return; } // PlaySound("Ok.wav"); } } } |
–2020/12/28追記–
PIPS削除で決済を行わない
しばらくブログを見ていなかったのですが
見るとこんなメッセージが
おー、確かに!
これは、よろしくないですね。
非選択状態は、調べないと行けないのと
個人的には、表示後すぐにドラッグしたいので
とりあえず、そのままに(ご要望があれば対応するかもしれません)
まず、フラグを追加(ファイル読み込み対応のため2箇所)
1 |
input bool input_DspSetting = false; //この画面の設定で動作する |
1 |
bool DelClose = false; //Pips表示削除で決済する |
あとは、イベント処理に一発判別処理を入れればできあがり!
1 2 3 4 5 6 7 8 9 10 11 |
void OnChartEvent(const int id, const long & lparam, const double & dparam, const string & sparam) { AppWindow.ChartEvent(id, lparam, dparam, sparam); Event.OnEvent(id, lparam, dparam, sparam); // --- コレだけ追加 if((id == CHARTEVENT_OBJECT_DELETE) // オブジェクトが削除された &&(DelClose)) //PIP表示削除で決済 { if(StringFind(sparam, Str_dsppip) == 0) |
この追加により、デフォルトでは、PIPSラベルの削除で決済されません。
一旦、起動時の「パラメーターの入力」で
①[PIPS表示削除で決済する]で[true]を選択する
②[この画面の設定で動作する]で[true]を選択する
③「OK」ボタンをクリックする
を行ってください。
最後までご覧いただきありがとうございます。
つぎはこちら
ダウンロードはこちら→「TrimPipsプロトダウンロード申請」