読みやすくするために、SRCボタンを使ってコードを表示させてください :)
OrderSelect() のコードが間違っています。あなたのコードをこれと比較してみてください。 そして、まだ問題があるかどうか、返事を書いてください :)
for(int cnt=0; cnt<OrdersTotal(); cnt++) { if (OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES) == true && OrderSymbol()==Pair && OrderType()==OP_BUY) { // code to close } }
ハロー、フレンズ。
私はあなたの助けを必要としています。
あるEAを作ったのですが、そのEAのプロセスの一部が、あるファクションを使ってトレードをクローズしなければなりません。ここに関連するkodの行があります。
なぜEAがトレードをクローズしないのか、どなたか教えていただけませんか?ありがとうございます。
ループがあり、注文を閉じたり削除したりするときは、カウントダウンしなければならず、カウントアップしてはいけません。
なぜClose_Single_P関数にループがあるのですか? これは単一の注文を閉じるように設計されていないのですか? 関数を呼び出すときに、シンボル、チケット番号、注文タイプ、ポジションサイズを渡します ... それだけで、注文は閉じられます ... ほぼ、閉じるための価格が必要ですが、それにはOrderClosePrice()を使用すれば、それが買いか売りかを気にする必要はありません ... 実際、関数は取り除き、関数呼び出しに代わるこの行を使ってください ... ... ....
OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, Yellow);
ところで、Slippageはどこに設定していますか? また、4/5桁のブローカーを補償していますか?
注文関数を使用するとき、彼らは値を返します ... この戻り値は、関数が動作したかどうかを教えてくれます ... この戻り値を使用することを学ぶと、問題があったことを伝える場合は、ログにリリース情報を報告するプリント文を使用 ... その後、推測ではなく、何が間違っていた知っているだろう ... ... 。
注文をキャンセルしますか?
if ( MarketInfo(Pair,MODE_BID) >= Open_P_BUY + MarketInfo(Pair,MODE_POINT)*factor*TP )
......は本当ですか?
なぜその行が真である場合に実行されるprintステートメントを追加しない . ... その後、あなたはそれがあるかどうか知っているだろう ... ...
if ( MarketInfo(Pair,MODE_BID) >= Open_P_BUY + MarketInfo(Pair,MODE_POINT)*factor*TP ) { Print("Trying to close Order: ", OrderTicket()); // <---- tells you that the if returned true if (!OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, Yellow) Print("OrderClose failed, error # ", GetLastError()); // <------- reports the error if the OrderClose failed . . }
読みやすくするために、SRCボタンを使ってコードを表示してください :)
GetLastError()のリターンは何ですか?
約4000行のコードですが・・・。
とにかく、エラーメッセージが出ないのです。
ループがあり、注文の決済や削除(保留)を行う場合、カウントダウンしなければならず、カウントアップしては いけません ....
なぜClose_Single_P関数にループがあるのですか? これは単一の注文を閉じるように設計されていないのですか? 関数を呼び出すときに、シンボル、チケット番号、注文タイプ、ポジションサイズを渡します ... それだけで、注文は閉じられます ... ほぼ、閉じるための価格が必要で、それにはOrderClosePrice()を使用し、それが買いか売りかを心配する必要はありません ... 実際、関数がなくなって、関数呼び出しに代わってこの行を使ってください ... ....
..ところで、Slippageをどこに設定していますか? そして、4/5桁のブローカーを補償していますか?
注文関数を使用するとき、彼らは値を返します ... この戻り値は、関数が動作したかどうかを教えてくれます ... この戻り値を使用することを学ぶと、問題があったことを伝える場合は、ログにリリース情報を報告するプリント文を使用 ... その後、推測ではなく、何が間違っていた知っているだろう ... ... 。
注文はキャンセルされるべきでしょうか?
.... が真実であることを確認しましたか?
その行が真である場合に実行されるprint文を追加してはどうでしょうか ... ... そうすれば、それが真であるかどうかがわかります ... ....
Raptorの賢明な提案に感謝します。いつも、賢明で分かりやすく助けてくれます。
今ご提案いただいたことを試してみます。
よろしくお願いします。
あなたの努力に感謝します。
私はいくつかの変更を行いましたが、WHRoederのコメントを見るまで、何も役に立ちませんでした。
あなたは天才です、私はあなたが正しいと思います。
私は月曜日に修正したEAを試してみるつもりです。
良い週末をお過ごしください。
さて、私の友人たちよ。
あなたの提案をすべて実行しましたが、EAが失敗しました。
他に何かアイデアはありますか?
もう一度やろう
#include "..\libraries\stdlib.mq4" // drag and drop from libraries to very top of your code for(int cnt = OrdersTotal(); cnt >= 0; cnt--) // from RaptorUK, count it down to zero { if (OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES) == true && OrderSymbol() == Pair) // this is how to write OrderSelect() { if(OrderType()== OP_BUY) // the code below is to close buy position only { //--- if(MarketInfo(Pair,MODE_BID) >= Open_P_BUY + MarketInfo(Pair,MODE_POINT) * factor * TP) // from RaptorUK, is this statemement true ? { //CLOSE_Single_P(Pair,"LONG",OrderTicket(),OrderLots()) // From RaptorUK & WHRoeder, you don't have to do OrderSelect() twice Print("Trying to close buy position : ", OrderTicket()); if (!OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, Yellow)) // From Raptor UK, are you doing the slippage correctly ? Print("failed to close buy position ", ErrorDescription(GetLastError()) ); } else { Print ("Not qualify to close buy position ", OrderTicket()); // from RaptorUK, is this statemement true ?, if not this print will tell you } //--- } /* else { if (OrderType() == OP_SELL) { } } */ } }
バレンティーノ・ロッシのMotoGPル・マン2回目の表彰台をまだ読んでいる間に、これを正しく書けるといいのですが... :)
もう一度やろう
バレンティーノ・ロッシのMotoGPル・マン2位表彰台を読みながら、この文章が正しく書かれていることを祈ります :)
ありがとうonewithzachy。
まず、小さな間違いがあると思います。
for(int cnt = OrdersTotal()-1 ; cnt >= 0; cnt--)
緑色と太字の訂正を追加する必要があります。
しかし、次の行がどのように役立つのか理解できません?
#include "..\libraries ╱dlib.mq4" です。
ありがとうございます、Yです。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
ハロー、フレンズ。
私はあなたの助けを必要としています。
あるEAを作ったのですが、そのEAのプロセスの一部が、あるファクションを使ってトレードをクローズしなければなりません。ここに関連するkodの行があります。
なぜEAがトレードをクローズしないのか、どなたか教えていただけませんか?ありがとうございます。
(多分、メイン部分でORDERSELECTを使って いるので、関数でもORDERSELECTを使うことができないのでしょうか?)
for(int cnt=0; cnt < OrdersTotal(); cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if ( OrderSymbol() == Pair && OrderType() == OP_BUY ) )
{
if ( MarketInfo(Pair,MODE_BID) >= Open_P_BUY + MarketInfo(Pair,MODE_POINT)*factor*TP )
{
CLOSE_Single_P(Pair, "LONG", OrderTicket(), OrderLots());
}
}
}
...
...
...
//-----------------------------------------------+
void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
int Code, sig;
double PRC;
if ( TREN == "LONG" )
コード = 0;//OP_BUY
さもなくば
if ( TREN == "SHORT" )
コード = 1;//OP_SELL(売り)
for ( int k=0; k < オーダートータル(); k++ )
{
OrderSelect(k, SELECT_BY_POS, MODE_TRADES);
if( OrderSymbol() == SYMB && OrderType() == Code && OrderLots() == LOTT && OrderTicket() == TICKET )
{
if ( オーダータイプ() == OP_BUY )
PRC = MarketInfo(OrderSymbol(),MODE_BID);
さもなくば
if ( OrderType() == OP_SELL ) )
PRC = MarketInfo(OrderSymbol(),MODE_ASK)。
オーダークローズ(TICKET,LOTT,PRC,スリッページ,黄);
ブレーク
}
}
を返します。
}