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

 
crossy:

O.K.同じミスをした修正版を紹介します。

Y.

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

 

またやろうねパート2 :(

 ...
   for(int cnt = OrdersTotal()-1; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
      if ( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         // Do the selection and OrderClose() INSIDE HERE ..., please
         
         
         /*
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
         */
      }   
      //if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... ) // this selection goes up there
    
         //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); // close it up there, and you have to rewrite the parameters
   }
   */
 

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

if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
   {
   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 . . 
   } 

......そうすれば、「機能」はまったく必要なくなる。

 
onewithzachy:

もう一度やり直そうパート2 :(


私は休みを取っているので、日曜の 夜に戻ってくるので、お願いします。

提案されたことを実行し、成功させたいと思います。

お二人ともありがとうございました。

Y.

 
crossy:


休みを取っているので、日曜の夜には戻ってくるので、よろしくお願いします。


では、休暇をお楽しみください。)
 
crossy:


私は休日を持っているので、私は日曜日の夜に戻ってくるので、あなたのexussを、お願いしたい。

ご提案いただいたことを実行し、成功させたいと思います。

お二人ともありがとうございました。

Y.

楽しい時間を過ごしてください :D

私はこの日曜日にF1モナコを見るために持っている :D

 
onewithzachy:

楽しい時間をお過ごしください :D

私はこの日曜日にF1モナコを見る予定です :D

そして明日はFP3と予選;-)
 
crossy:


ありがとうonewithzachy。

まず、小さな間違いがあると思います。

for(int cnt = OrdersTotal()-1 ; cnt >= 0; cnt--)

緑色と太字の訂正を追加する必要があります。

しかし、次の行がどのように役立つのか理解できません?

#include "..\libraries ╱dlib.mq4" です。

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

私はこのはるかに単純で、私のために動作します。

//---------------------------------------------+

void CheckForClose()
{
int i, res, order_id;

//-------+
for(i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
order_id= OrderTicket();


//--トレーリングとクローズ
if (OrderType() == OP_BUY)
{
if (Is_Close_Buy==true) //-- クローズするためのシグナル
{
RefreshRates();// レート更新
res= 0;
res= OrderClose(order_id,Lots,Bid,3,Gold)。
while(IsTradeAllowed() == false) Sleep(100); //--サーバからの応答を得るために少し待つ。
if (res>0){
PlaySound("cash_register.wav");}を実行します。 //--ハッピーな音、うまくいけばお金を稼ぐことができます !!!
if (res<0)
{
PlaySound("creak.wav")。
Print("OrderSend failed with error #",GetLastError()).Print("OrderSend with error #",GetLastError());
return(0);
}
を返します。
}
}//end close 買い注文の確認
//---
if (OrderType() == OP_SELL)
{
if (Is_Close_Sell==true) //--引けの合図
{
RefreshRates();// レート更新
res= 0;
res= OrderClose(order_id,Lots,Ask,3,Gold)。
while(IsTradeAllowed() == false) Sleep(100); //--サーバからの応答を得るために少し待つ。
if (res>0){
PlaySound("cash_register.wav");}を実行します。
if(res<0)
{
PlaySound("creak.wav")。
Print("OrderSend failed with error #",GetLastError()).Print("OrderSend with error #",GetLastError());
return(0);
}
を返します。
}
}//終了 売り注文のチェック
}//--------+
を返します。
}

//----------------------------------------------+

 
RaptorUK:
そして明日は、FP3、予選です;-)

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


もし、あなたが気にしないのであれば、SRCボタンを使ってコードを投稿していただけませんか?このスレッドだけでも何度もお願いしているのですが、


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

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

 
skaboy:

私はこの方がシンプルでいいと思いますし、自分にも合っています。


複数の注文をクローズする場合は、この方法は使えません。 ループと注文の取り消し・削除について