ご訪問ありがとうございます。
元スーパー店員で不労所得生活を目論むひろしです。
前回
今回は、とっても価値の高い方法をお伝えします。
これを知ることであなたは、
MQL5を使用して確実に
決済することができるようになります。
逆に、知らないと
あなた:「えーーー、なんでーー」
Close()成功しているのに
決算されへんやん。
てなことになります。
PositionClose()ってのをやれば、
簡単に決済できます。
しかしながら、PositionClose()というのは、
命令を出すだけで、この命令自体が
成功したからと言って、オーダーが通るとは限らないのです。
PositionClose(…)メソッドの正常な完了は、常に取引実行の成功を意味するものではありません。ResultRetcode()メソッドの呼び出しで取引リクエスト(取引サーバーのリターンコード)の実行結果を確認する必要があります。
なので、適当に時間を開けて
リトライする必要があるのです。
あなた:「適当ってどれくらい?」
ひろし:「そこなんですよね。」
とりあえず、以下のようにしました。
Step1.
10msのスリープを入れながらすべてのポジションに対して
PositionClose()していく
Step2.
250msスリープ後、Step1に戻る
Step3.
最大6回ループを行う
※6回の根拠なし
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 |
bool CExitCurrency::exit() // --- 3 { Print(__FUNCTION__, " 1 start"); CTrade ExtTrade; //トレードの設定 Print(_Symbol); uint retcode; for(int s = 0; s < 6; s++) { int ncount = PositionsTotal(); Print(s,"回目め 残り回数 -> ",ncount); for(int i = 0; i < ncount; i++) { PositionGetTicket(i); if(! ExtTrade.PositionClose(PositionGetString(POSITION_SYMBOL))) { Print("PositionClose失敗"); } Print("ResultRetcode -> ", ExtTrade.ResultRetcode()); Sleep(10); } Sleep(250); } return true; } こ |
こんな感じでかなり
失敗しています。
今後、もう少し
回数を変更します。
マインドセットします。
通貨ペア決済には気をつけろ
MQL5になり、細かいことがいろいろ
できるようです。
なので、決済注文を出してもうまく
行くとは限らないんだよ。
といった大人の世界も教えてくれています。
うーん、正直、「知らんがな」って気もします。
結果的に、MQL5が浸透しないもの
小回りが効きすぎて、簡単にプログラム
できなくなっているからだと思います。
微妙な世界ですね。
結局最大10回回し途中でなくなれば
ループから抜けるようにしました。
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 |
bool CExitCurrency::exit() // --- 3 { Print(__FUNCTION__, " 1 start"); CTrade ExtTrade; //トレードの設定 Print(_Symbol); uint retcode; for(int s = 0; s < 10; s++) { int ncount = PositionsTotal(); Print(s, "回目め 残り回数 -> ", ncount); if(!ncount) break; for(int i = 0; i < ncount; i++) { PositionGetTicket(i); if(! ExtTrade.PositionClose(PositionGetString(POSITION_SYMBOL))) { Print("PositionClose失敗"); } Print("ResultRetcode -> ", ExtTrade.ResultRetcode()); Sleep(10); } Sleep(250); } return true; } |
そして「現通貨ペア」の場合。
残り個数をカウントし
残り個数が0ならループを抜けるようにしました。
1回ムダにループしますが、よしとします。
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 |
//+------------------------------------------------------------------+ //|現通貨ペアを決済する | //+------------------------------------------------------------------+ bool CExitCurrency::currentexit() // --- 4 { CTrade ExtTrade; Print(__FUNCTION__, " 1 start", _Symbol); int leftcount = 0; //現通貨の残り個数 for(int s = 0; s < 10; s++) { leftcount = 0; //現通貨の残り個数 int ncount = PositionsTotal(); Print(s, "回目め 残り回数 -> ", ncount); for(int i = 0; i < ncount; i++) { PositionGetTicket(i); if(PositionGetString(POSITION_SYMBOL) == _Symbol) { leftcount++; if(! ExtTrade.PositionClose(_Symbol)) { Print("PositionClose失敗"); } Print("ResultRetcode -> ", ExtTrade.ResultRetcode()); Sleep(10); } } if(!leftcount) //現通貨がなかったらループを抜ける break; Sleep(250); } return true; } |
では、今回の不労所得で月額100万への究極の方法です。
PositionCloseをクリックする
Step2.
取引実行の成功を意味するもので
ないことを理解する
Step3.
ResultRetcodeをクリックする
Step4.
さらにリターンコードをクリックし
コードを確認する
では、早速PositionCloseをクリックしてください
今すぐです。
とにかく、MQL5における決済処理が
完成しました。
最後までご覧いただきありがとうございます。
つぎはこちら
コメント