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

 
RaptorUK:

Functionは全く必要ありません ..............................捨てましょう。



こんにちは、Raptorです。

この関数は、EAが非常に複雑なものであり、また、多くのバージョンでこの関数を使用しているため、必要です。

ご理解いただけると幸いです。

Y.

 
onewithzachy:

もう一回やり直そう その2 :(


ありがとうございます。しかし、前に回答したように、この関数は 多くのバージョンの条件で閉じるために必要なので、各条件の中に閉じるコードコマンドを入れるのは複雑すぎます。

ありがとうございます。

Y.

 
RaptorUK:

これをやって ... ...( ここからの繰り返し: https://www.mql5.com/en/forum/139543 )

..そうすれば、ファンクションは全く必要なくなる。


ラプター、REQUATEの状況を克服するためには、ご覧のようにこの機能が必要なんです。

Y.

 
onewithzachy:

RaptorUKさん、ヘルメットをかぶれば、今よりもっと先のことを考えられると思うんですけどね。そうですね、ドライバーは先を読むものですからね。


Y. @ skaboy, 丁寧にお願いなのですが、もし差し支えなければ、SRCボタンでコードを投稿していただけませんか?このスレッドだけで何度もそれをお願いしています。

crossyさん、最初の投稿からもうすぐ1週間ですね。確かに4000番台になると頭が真っ白になるのはわかります、今は私自身もそうです。それでも理解できない場合は、私たちにクローズコードを書いてもらうこともできます。でも、ちょっとでもいいからコードを書いて、私たちに見せてください :D 上のRaptorUKのコードの方が、私のより直接的です。

あなたの書き方だと、不必要な繰り返しが多すぎて、4000行のコードでは、EAの動作が遅くなったり、EAがティックを逃したりしないか、少し心配になるはずです。数ポイントのミスならまだしも、10ピップスもミスしたらどうなるのでしょう? 4000行のコードは400行に減らせるかもしれません。そして、あなたのEAは、より軽く、より速くなることでしょう。


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

私のEAには、こんな小さなミスがあります。

1) 関連するチケットを閉じてしまい、そのチケットも探してしまう。

2) このミスは、すべてのクローズ・オーダーに現れるわけではなく、時にはうまくいくこともあります。

他の3,950行のコードについては、非常によく動作します。

私は再び、関連するコード行を添付します。

Y.

...
   for(int cnt = OrdersTotal()-1; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
      if ( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
      }   
      if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
    
         CLOSE_Single_P(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;
      }
      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);
   }
   return;
}
//-----------------------------------------------+
 
crossy:



こんにちは、Raptorです。

EAが複雑なため、この関数が必要で、多くのバージョンでこの関数を使っています。

ご理解いただけると幸いです。

Y.

あなたがどこかからコピー&ペーストしたコードを理解しているとは思えません ... ... そして、それは再クオート用ではありません .......あなたは、あなたが得たエラーが再クオートであるかどうかをチェックさえしません。
 
RaptorUK:
あなたがどこかからコピーして貼り付けたコピーを理解しているとは思えません ... ... そして、それはrequoteのためではありません ....このような場合、「root.com」をご利用ください。


Raptorではありません。チケット番号は見つかりませんでした。そして、私は共鳴がチケットはすでに1秒前に閉じていたことを伝えることができます。

私はそれがどのようにチケットを閉じて、それを検索を継続する方法を理解していない...

 
crossy:


チケットを閉じて検索を 続けるというのがよくわからないのですが・・・。

必要ないと言ったループが、必要ない関数の 中にあるからです。

" なぜClose_Single_P関数にループがあるのですか? " 1ページ目の3番目の投稿から

" なぜループがあるのですか?" 4ページ目、2番目の投稿より

 

私の勘違いでしょうか、この機能では SHORT注文をクローズすることはないのでしょうか?

...
   for(int cnt = OrdersTotal()-1; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
      if ( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
      }   
      if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
    
         CLOSE_Single_P(Pair1,"LONG",OrderT,OrderL);
                               ^^^^ - You always pass LONG to variable TREN, so variable PRC (below) is always equal taken from LONG, but NEVER from SHORT.

//-----------------------------------------------+
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;
      }
      Check = false;
      if ( TREN == "LONG" )
         PRC = MarketInfo(SYMB,MODE_BID);
      else
      if ( TREN == "SHORT" )
         PRC = MarketInfo(SYMB,MODE_ASK);
         ^^^   Never executed
         
      Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow);
   }
   return;
}
//-----------------------------------------------+
 
Waidas:

私が間違っているのか、それともこの関数がSHORT注文を閉じることはないのでしょうか?


Waidasさん、その通りです。しかし、これはLONGとSHORTをクローズするEAからの小さなピースに過ぎません。

ありがとうございます。

 
RaptorUK:

必要ないと言った関数の中に、ループがあるからです.

"Close_Single_P Function の中にループがあるのはなぜ? " 1ページ目の3番目の投稿から

"なぜ ループがあるのですか? " 4ページ目の2番目の投稿より


Raptorさん、あなたの言う通り、ループを消したので、ループのない関数に なりました。

もう一度添付します。

Y.

...
   for(int cnt = OrdersTotal()-1; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
      if ( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
      }   
      if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
    
         CLOSE_Single_P(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;
      }
      if ( TREN == "LONG" )
         PRC = MarketInfo(SYMB,MODE_BID);
      else
      if ( TREN == "SHORT" )
         PRC = MarketInfo(SYMB,MODE_ASK);
         
      Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow);
   }
   return;
}
//-----------------------------------------------+