I forgot:
double Dist = 1000000.0;
どなたか助けてください。
1.これはコードの一部ですが、例えば関数CheckFirstOP()を見せてください。
2.forループはインクリメントしています。ループの中で注文を閉じると正常に動作しませんので、→https://www.mql5.com/en/forum/119840 をご覧ください。
3.3. 変数の命名規則が...あまりよくありません。
4.4. フォーマットを保持するために、SRCボタンを使用してコードを投稿してください。このようなコードを読むのは非常に困難です。
1.これはコードの一部です。例えば関数CheckFirstOP()を見せてください。
2.forループがインクリメントしている。ループ内で注文を閉じる場合、正しく動作しませんので、→https://www.mql5.com/en/forum/119840 をご覧ください。
3.3. 変数の命名規則が...あまりよくありません。
4.4. フォーマットを保持するために、SRCボタンを使用してコードを投稿してください。このようなコードを読むのは非常に困難です。
double Dist=1000000.0; if ( CheckFirstOP(OP_BUY) > 1) { for ( l_pos_44 = 0; l_pos_44 < OrdersTotal(); l_pos_44++) { OrderSelect( l_pos_44, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber || OrderType() != OP_BUY) continue; double Price = OrderOpenPrice(); if (NormalizeDouble(MathAbs(Bid - Price), Digits) > NormalizeDouble( Dist, Digits)) { Dist = MathAbs(Bid - Price); int Ticket = OrderTicket(); double Lot = OrderLots(); OrderClose( Ticket, Lot, OrderClosePrice(), 3); } } } int CheckFirstOP(int a_cmd_0) { int l_count_4 = 0; for (int l_pos_8 = 0; l_pos_8 < OrdersTotal(); l_pos_8++) { if (OrderSelect( l_pos_8, SELECT_BY_POS)) { if (OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol()) { if (OrderType() == a_cmd_0) { l_count_4++; break; } } } } return ( l_count_4); }
my fault...i'm very new to this stuf...
3.変数の命名規則が...あまり良くないですね。
デコンパイラの命名規則みたいだ.
"彼はこの種のものに慣れていない"
デコンパイラの命名規則みたいです。
"彼はこの種のものに慣れていない"
私は買ったEAを改造したいのですが、そのコードも送られてきました(手違いだそうです)。
こんにちは
選択された注文は、次の式で完全に閉じることができます: "OrderClose(OrderTicket (),OrderLots (),OrderClosePrice (), 0 );"
よろしくお願いします。
は私の問題を解決していません...
2.forループがインクリメントしている。ループの中で注文をクローズするとうまくいきませんので、→https://www.mql5.com/en/forum/119840。
なぜインクリメントが効かないのか、MQL4の本には書いていない(と思う)のですが・・・とりあえずやってみました。
if ( CheckFirstOP(OP_BUY) > 1) { for(int i = OrdersTotal() - 1; i >= 0; i--) { OrderSelect( i, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber || OrderType() != OP_BUY) continue; double Price = OrderOpenPrice(); if (NormalizeDouble(MathAbs(Bid - Price), Digits) > NormalizeDouble( Dist, Digits)) { Dist = MathAbs(Bid - Price); int Ticket = OrderTicket(); double Lot = OrderLots(); OrderClose( Ticket, Lot, OrderClosePrice(), 3); } } }
it doesn't work, don't know why
今すぐこの行を確認してください
もちろん、試してみましたが、何も変わりません...このプログラムには不思議なことがあります :) 単純なクロージングオーダーを書くのは難しくないでしょう...
it doesn't work, don't know why注文インデックス5をクローズすると、注文インデックス6はインデックス5となり、7は6となる、など。 数え上げると、他のすべての未決済注文が欠落していることになります。
注文指数5を決済すると、注文指数6が指数5、7が6になります。カウントアップすると、他のすべてのオープンオーダーを見逃すことになります。
。
ああ、わかりました...とにかく、コードは1つのオープンオーダーだけを維持し、2つのオーダーが開かれたときに即座に動き始め、それらすべて(つまり2つのオーダー)を選択し分析した後にそれらのうちの1つをクローズします...従って、私はそれがオーダー選択における 大きな間違いであるとは思いません...インクリメント...とにかく、私はどんな結果も減少する方法を試してみました...多分私は間違った方法で試しています...わからない...誰か私のコードを試して、それが本当に取引を閉じるかどうか見ることができますか...または誰かが前に開いた順序(すなわち、買いのために高いオープンプライスと低いオープンプライスのもの)を選択して閉じるための簡単なコードを書くことができますか?
ありがとうございます。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
皆様へご挨拶です。成行注文を決済するコードを(他のコードを改造して)作りました。
int l_pos_44 = 0;
if (CheckFirstOP(OP_BUY)>1)の場合{。
for (l_pos_44 = 0; l_pos_44 < OrdersTotal(); l_pos_44++) {。
OrderSelect(l_pos_44, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber || OrderType() != OP_BUY) continue;
double Price = OrderOpenPrice();
if (NormalizeDouble(MathAbs(Bid - Price), Digits) < NormalizeDouble(Dist, Digits)) { { (NormalizeDouble(Bid - Price), Digits) < NormalizeDouble(Dist, Digits))
Dist = MathAbs(Bid - Price);
int Ticket = OrderTicket();
double Lot = OrderLots();
OrderClose(Ticket, Lot, Bid, 3);
}
}
(売りポジションを閉じるための同じコード(明らかにOP_BUYの代わりにOP_SELL変数を使用))
int CheckFirstOP(int a_cmd_0) { { { { { int l_count_4
int l_count_4 = 0;
for (int l_pos_8 = 0; l_pos_8 < OrdersTotal(); l_pos_8++) { { (int l_pos_8 = 0; l_pos_8 < OrdersTotal(); l_pos_8++ )
if (オーダーセレクト(l_pos_8, SELECT_BY_POS)) { { {.
if (OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol()) { { { (OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol())
if (OrderType() == a_cmd_0){
l_count_4++;
ブレーク
}
}
}
}
return (l_count_4);
}
1つ以上のポジションがオープンされている場合、ロングまたはショートのポジションをクローズするコードが必要です...合計2つのポジション(1つの買いと1つの売り)を保持するために...私は、最新のオープンポジション、すなわちこの場合、買いポジションのオープン価格が高いものと売りポジションのオープン価格が低いものを保持する必要もあります。問題は、このコードがポジションをクローズしていないことです。
when: "if (CheckFirstOP(OP_BUY) == 1)" then the code is closes the first positions imidiately after they are opened...i.e. after a buy and asell order are opened they are closed with the next tick.このコードは、最初のポジションが開かれた直後に閉じられます。そして、「if (CheckFirstOP(OP_BUY) > 1)"」では、どのポジションもクローズされることはありません。何が間違っているのかわかりません。
どなたか教えてください。