ヘルプEAが取引を終了しない理由 - ページ 3

 
crossy:


ここでOrderselectがFALSEの場合、EAはどのようにコードラインに戻ることができます:for(int cnt=OrdersTotal(); cnt > 0; cnt-- )

?・・・?

ループ内の次の値に移動するには、continue を使用します。.またはbreakで ループから抜け出すことができます ... それぞれの説明はリンクをクリックしてください。
 
crossy:

ここで、OrderselectがFALSEの場合、EAはどのようにコードラインに戻ることができます:for(int cnt=OrdersTotal(); cnt > 0; cnt-- )


???

そのコードは間違っています ... ...

cntはOrdersTotal() - 1で始まり、cnt >= 0までデクリメントされる必要があります ... ... 最初のエントリは1ではなく0です

これが、私がコードを見るように頼んだ理由です。そして、あなたは問題を特定するのに十分なものを示しました ... ... たぶん。)

 
RaptorUK:

そのコードは間違っています ... ...

cnt は OrdersTotal() - 1 で開始し、cnt >= 0 までデクリメントする必要があります ... ... 最初のエントリは 1 ではなく 0 です。

これが、私がコードを見るように頼んだ理由です。そして、あなたは問題を特定するのに十分なものを示しました ... ... たぶん。)


とても正しいです。ウィズマンさん、ありがとうございました。
 
crossy:

大正解です。Wizemanさん、ありがとうございます。


そして、もう一つのアイデア。

条件がたくさんある場合は、次のように書いてもよい。

If( X>b && B>S && NB<F......)と書くこともできます。

{

BBB= 5;

}f.e.

この場合、EAは括弧内のすべての条件を計算しなければならない。

しかし、効率性(4,000行)を重視するならば、次のようにするのがよいでしょう。

もし( X>b )

{

while (B>S)

{

While (NB<F...)

{

BBB=5;

}

ブレーク

}

break

}

2つのバリエーションは同じものですか?

Y.

 

クロッシー、コードを書くときは、SRCボタンを使ってください。

ということで、このように表示されます。

   //--- first code
   If(X>b && B>S && NB<F......)
     {
      BBB=5;
     }
   
   // --- second code
   If(X>b)
     {
      while(B>S)
        {
         while(NB<F..)
           {
            BBB=5;
           }
         break;
         }
      break;
     }

mql4のif, while, forループの説明はこちらhttps://book.mql4.com/operators/assign

2番目のコードでは、breakを使用しているので問題ありませんが、BBB = 5を得るために長い道のりがあります。

 
crossy:


そして、もう一つのアイデア。

条件がたくさんある場合は、次のように書いてもよい。

If( X>b && B>S && NB<F......)と書くこともできます。

{

BBB= 5;

}f.e.

この場合、EAは括弧内のすべての条件を計算しなければならない。

しかし、もしあなたが効率(4,000行のコード...)を求めるのであれば、私はその方が良いと思います。

whileを使うと、無限ループに陥る可能性があります。
 
お二人ともありがとうございます!。
 
onewithzachy:

読みやすくするために、SRCボタンを使ってコードを表示させてください :)

OrderSelect() のコードが間違っています。あなたのコードをこれと比較してみてください。 そして、まだ問題があるかどうかを書き込んでください :)


onewithzachyに特別感謝します。

私はORDERSELECTがキャッチできないことを知らなかったので、あなたは未知のエラーを持っているかもしれません。

4016行だった私のコードは、ほぼ4500行になりました - しかし、エラーなしで。

皆さん、ありがとうございます。

Y.

 

こんにちは、友人たち。

長い間、私のEAを使用してきましたが、もう一つ問題があります。

次のコードラインを持っています。

CLOSE_Single_P(Pair1, "LONG",OrderT,OrderL);

とします。

Pair1 はシンボルです。

LONG"はロングトレードのサインです。

OrderTは 注文チケット 番号です。

OrderLは 注文ロットサイズです。

関数は以下の通りです。

void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
double PRC;
bool Check = false;
for ( int cntt=0; cntt<20000; cntt++ )
{
if ( Check )
{
Check_Ini().
return;
}
for ( int vvv = OrdersTotal()-1; vvv >= 0; vvv-- )
{
if ( OrderSelect(vvv, SELECT_BY_POS, MODE_TRADES) )
{
Check = false;
if ( TREN == "LONG" )
PRC = MarketInfo(SYMB,MODE_BID);
else
if ( TREN == "SHORT" )
PRC = MarketInfo(SYMB,MODE_ASK);

Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow);
if ( Check )
break;
} }.
}
}
return;
}

私の問題点はEAがうまく取引を終了させることもありますが、EAが取引を終了させても、すでに終了しているにもかかわらず、終了させるためのチケットを探し続けていることもあります。

(エラー: "Unknown ticket number..." が出ます。

ロジックを間違えてしまったようです。

よろしくお願いします。

Y

 

お願い ... ... ... ... ... ...