私のEAに問題があります。

親愛なる専門家、

私は自分のアカウントのすべてのポジションをクローズしたいとき、最初の価格変更でポジションをクローズすることができませんでした。たとえば、10ポジションある場合、EAをオンにすると、価格は1.9864から1.9865(1回目の実行サイクル)に変更され、5ポジションのみがクローズされました。価格が1.9865から1.9866(2回目の実行サイクル)に変わると、3ポジションがクローズされました。最後に、価格が1.9866から1.9865(3回目の実行サイクル)に変わると、最後の2つのポジションはクローズされました。したがって、私の10のポジションは同時にクローズされていません。

詳細なデバッグの後、最初の実行では、forループは4ループだけ実行されていましたが、ここではOrdersTotal()= 10でした。そして、2番目のサイクルでは、OrdersTotal()= 5とはいえ、実行されたループは3つだけでした。最後のサイクルでは 、フルループが実行され、それは2ループでした。

しかし、MQL4チュートリアルによると、start関数は1行ずつ実行されるべきであり、MetaTraderがreturnキーワードを見つけた場合に限り、新しい引用符でstart()関数を再度呼び出すことができます。つまり、EAは1サイクル以内にすべてのポジションを決済する必要があります。ただし、直近の入札価格と売呼値によって決済価格が変わる可能性があります。

以下は私のコードです、少し読んでください。そして私のEAの愚かなエラーの理由を見つけます。

事前に感謝します。

int start()
{
int ticket = 0。
ダブルボリューム= 0。
bool close = true;

印刷(「10のポジションをクローズするのに必要な価格変更の回数を説明できます」)。

for(int i = 0; i <OrdersTotal(); i )
{

Ord erSelect(i、SELECT_BY_POS、MODE_TRADES);

if(OrderType()== 0)
{
ticket = OrderTicket();
volume = OrderLots();
close = OrderClose(チケット、ボリューム、入札、10、CLR_NONE);
印刷( "位置の順番は#"、i);
if(close == false)
{
Print( "OrderCloseがerror1#で失敗しました"、GetLastError());
}

}
そうでなければ(OrderType()== 1)
{
ticket = OrderTicket();
volume = OrderLots();
close = OrderClose(チケット、ボリューム、Ask、10、CLR_NONE);
印刷( "位置の順番は#"、i);
if(close == false)
{
Print( "OrderCloseがerror2#で失敗しました"、 GetLastError());
}
}

それ以外の場合(OrderType()> = 2)
{
ticket = OrderTicket();
close = OrderDelete(ticket);
印刷( "位置の順番は#"、i);
if(close == false)
{
Print( "OrderDeleteがerror3#で失敗しました"、GetLastError());
}
}

Print( "これはEAが実行するループの数をテストすることです"、i);

}
(0)を返します。
}


また、エラーコードは4051です。

何か助けがありますか?ありがとうございます。


ERR_INVALID_FUNC TION_PARAMVALUE

4051関数パラメータ値が無効です。

もう一度構文を確認してください。


そしてまたエラー129 。しかし、価格設定は正しいはずです。あなたが私を見つけるのを手伝っていただけますか?



2000: https://www.mql5.com/en/forum/107912


Originally posted 2019-08-03 00:51:31.

Translate »