アラート:MT4ターミナルがエキスパートから送信された注文を複製しています。 - ページ 6

 

の違いがあります。

bool Buy_Ticket = OrderSend(........)

とあなたのしていることに違いがあります。

bool Buy_Ticket = Ordersend > 0;   //SIMPLIFIED CODE FOR EASIER READING

最初の例では、注文が失敗すると -1 という値が返されますが、bool はこれを TRUE と解釈します。

では、条件 (Ordersend>0) を使って真偽値をブール値に代入しています。

 
GumRai:


の違いがあります。

とあなたのしていることに違いがあります。

最初の例では、注文が失敗すると -1 という値が返されますが、bool はこれを TRUE と解釈します。

では、条件 (Ordersend>0) を使って真偽値をブール値に代入しています。



というのは本当でしょうか? 今デモ口座(ライブトレード)では試せないのですが、バックテストでわざとストップロス=アスク(市場価格)を無効にしてOrderSend()を中断し、ロングトレードで簡単な検証をしてみました。 結果は、OrderSend()は予想通り「-1」を返し、私のbool var Buy_Ticketも同様にfalseを返しました。


** EDIT **

OrderSend()の後ろの条件">0 "を見逃していませんか? 私の元のコードは示しています。

bool Buy_Ticket = OrderSend(........) > 0;
 
BigFisherman:



そうなのでしょうか? 今デモ口座(ライブトレード)で試せないのですが、ロングトレードでストップロス=アスク(市場価格)を無効にしてOrderSend()をわざと中断してバックテストで簡単に検証してみました。 結果は、OrderSend()は予想通り「-1」を返し、私のbool var Buy_Ticketも同様にfalseを返しました。


** EDIT **

OrderSend()の後ろの"> 0 "の条件を見逃しましたか? 私の元のコードではそうなっています。


すみません、そうなんです、>0を見落としました。

そんな変なやり方だから、気づかなかっただけなんでしょうね。

 

BigFishermanは以下のコードを確認します。

   bool Buy_Ticket;
   int TicketNo = 123456789;
   Buy_Ticket = TicketNo > 0;
   Alert(Buy_Ticket);

こちらを ご覧ください

代入演算子は、式の中で複数回使用することができます。この場合、式の処理は左から右へ行われます。

y=x=3;

まず、変数xに値3が代入され、次に変数yにxの値、つまり3が代入されます。

 
GumRai:


すみません、そうです、>0を見落としました。

そのような奇妙な方法なので、気がつかなかったのだと思います。


問題ありません。

私はMQLを学んだ初期の段階でその部分をコーディングしましたが、私にはそれが正しく見えたので、この重複取引問題が起こるまでそのままにしておきました。 しかし、どうやら、今は、混乱しながらも私のオリジナルのコードが有効であるように「思える」のですが、その後、このスレッドの最初のトピック「Duplicate trades...」に戻ります。これは、mt4の重大かつ非常に好ましくない「レア」バグかもしれませんが、残念ながら、そのまれな出現(500以上のトレードに1つ)ゆえに再現することができないのです。

ご参考までに、私のEAをどのようにコーディングしたかというと(pg5の最初の投稿を参照)、SLとTPはOrderSend()の成功を検出した後にのみ割り当てられました(IMHOは今までむしろ馬鹿にできないことだと考えています)。 そして、私の前の重複した取引に起こったことは、SLとTPの設定に至らなかったという ことです;OrderSend()が"-1 "を返すがとにかく取引を開始したとか、1つのOrderSend()で2つの同時取引を開始したとか。 幸いなことに、そのとき私はPCの前にいたので、手動で決済することができましたが、もし私が休暇で不在だったらどうなるか想像してみてください。

 
qjol:

BigFishermanは、以下のコードをチェックしてください。

   bool Buy_Ticket;
   int TicketNo = 123456789;
   Buy_Ticket = TicketNo > 0;
   Alert(Buy_Ticket);


Buy_Ticketは期待通りtrueを返します。 何を言いたいのですか?

 

ということではなく、「そうなんだ!」ということです。

このような使い方をすれば

bool Buy_Ticket = OrderSend(........) > 0;

もちろん、OrderSend()が実行されればtrueが返されます。

なぜなら、まず OrderSend の結果が > 0 であるかどうかが調べられるからです。

に渡されるからです。

Buy_Ticket

ということになりますが、それでも正しい処理方法とは言えません。

 
qjol:

ということではなく、「そうなんだ!」ということです。

このような使い方をすれば

もちろん、OrderSend()が実行されればtrueが返されます。

なぜなら、まず OrderSend の結果が > 0 であるかどうかが調べられるからです。

に渡されるからです。

ということになりますが、それでも正しい処理方法とは言えません。



これで、mql4で誰の投稿をフィルターにかけるかわかりました。とにかくご意見ありがとうございました。
 
y=x=3;
私もそれをやろうとしたのですが、MetaEditorはコンパイルしようとすると必ず止まってしまうのです。
 
BigFisherman:


これで、mql4で誰の投稿をフィルタリングすればいいのかがわかるようになりました。

注:mql5のユーザー名も同じです。