エラー、バグ、質問 - ページ 1550

 

24時間働く複雑なロジックがあるが、ある時点でフリーズしてしまう。ソースコードが編集できないEX5では、このような現象が起こることがあります。インジケーターやExpert Advisorがハングアップしていることを外から判断することは可能ですか?特定の指標の計算部分について統計を取る?

インジケーターの場合、ハングアップした状態で、そのシンボルのチャートの更新を停止させることが可能なようです。Expert Advisorは、どのインジケータがホバーを引き起こしたかを特定しないものの、それを追跡することができます。

 
禁止事項の記録を更新中。禁止されている間、フォーラムに返信が来るが、読むことしかできない。そして、また解禁された後、続けるために誰がどこで答えたかを思い出すのはとても大変なことです。この問題を解決することは可能でしょうか(これ以上BANされないようにというアドバイスなしで)。また、一般的には、読んでもすぐに返事をする時間がない場合もあります。リマインダーフラグを「後で返信」に設定することは可能ですか?
 
comp:
禁止事項の記録を更新中。禁止されている間、フォーラムに返信が来るが、読むことしかできない。そして、また解禁された後、続けるために誰がどこで答えたかを思い出すのはとても大変なことです。この問題を解決することは可能でしょうか(これ以上BANされないようにというアドバイスなしで)。また、一般的には、読んでもすぐに返事をする時間がない場合もあります。リマインダーフラグを「後で返信」に設定することは可能ですか?
まず考えること、そして実行すること。その逆はない。そうすれば、メモリに問題が生じることはありません。
 
Karputov Vladimir:
まず考えて、それから実行すべきです。その逆はない。そうすれば、メモリに問題が生じることはありません。
金言!!!!
 
Vladimir Pastushak:
金言!!!!
完全対応!!!質問-提案に答えることは可能ですか?
コンプ
読んでもすぐに返信する時間がないこともあります。自分に対して「後で返信する」というリマインダーのようなフラグを立てることは可能でしょうか?
 
comp:
後で返信する」というリマインダーのフラグを自分に立てることは可能でしょうか?
あなたのことは一部理解しています。誰もが目の前の問題を解決したいのです。あなたの場合、やりすぎです。風呂場に座ってまで、開発者を育てようとしているのか。
 

MQL4のMathRound() で「指定した数値の最も近い整数に丸めた値を返す」ことについて質問です。

コード

#property strict
void OnStart()
  {
   Print("1) MathRound(10.50001) = ",MathRound(10.50001));  // 11.0
   Print("2) MathRound(10.49999) = ",MathRound(10.49999));  // 10.0
  }

結果


なぜそうなるのか、親切な皆さんは説明してくれますか?もし、このようにするのであれば、フルストップ以降の1桁目のみを考慮することをドキュメントに追加してください。

MathRound - Математические функции - Справочник MQL4
MathRound - Математические функции - Справочник MQL4
  • docs.mql4.com
MathRound - Математические функции - Справочник MQL4
 

同僚、助けてください。自分の脳みそが足りないんだよ。

指値注文を出したロボットは、オープンポジションをクローズする際、残りの注文を削除する必要があります(ストップでもプロフィットでも構いません)。ただし、すべての注文ではなく、マジックナンバーがクローズポジションのチケットと等しいものを削除します。したがって、削除のトリガーはポジションクローズ・イベントでなければならない。私にとっては、この場合、このポジションがどのようにクローズしたかは重要ではありません(ただ、条件によって、SLでクローズした場合、制限がないことが判明し、それを取り除く必要があります)。でも、ディテールアップしてちゃんとやれば、トリガーはTPなんですよ。

そこで、ロボットは注文を削除するのですが、ポジションがクローズされた後ではなく、オープンされるとすぐに削除されます。そして、常に保留中の注文を 出したり消したりして、自分自身と戦うようになるのです。何が問題なのかをご覧ください。

input double   lot                  = 0.2;
input double   TakeProfitPips       = 50;
input double   StopLossPips         = 200;

int               bar=0;
int               shift=1;
int               tiket;
int               otkt;
double            price;
int               cnt;
double            TPp,SLp;
int               tkt;
int               n;
int               type;

    int _OrdersTotal = 0;
    // кол-во позиций, соответствующих критериям (текущий инструмент и заданный MagicNumber),
    // состоянием на текущий тик
    int now_OrdersTotal = 0;
    // кол-во позиций, соответствующих критериям (текущий инструмент и заданный MagicNumber),
    // состоянием на предыдущий тик
    static int pre_OrdersTotal = 0;
    // массив открытых позиций состоянием на текущий тик
    int now_OrdersArray[][2]; // [№ в списке][№ тикета, тип позиции]
    // текущий номер позиции в массиве now_OrdersArray (для перебора)
    int now_CurOrder = 0;
    // текущий номер позиции в массиве pre_OrdersArray (для перебора)
    int pre_CurOrder = 0;
    // массив для хранения количества закрытых позиций каждого типа
    int now_ClosedOrdersArray[6][3]; // [тип ордера][тип закрытия] 
 
    // временные флаги
    bool OrderClosed = true, PendingOrderOpened = false;
    // временные переменные
   

    int pre_OrdersArray[][2]; // [количество позиций][№ тикета, тип позиции]
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }


void OnTick()

  {

        if(OrdersTotal()== 0 && iTime(Symbol(),PERIOD_M1,1)==D'14.01.16 16:30')

        {
        
         price=Open[shift];

         tiket=OrderSend(Symbol(),OP_SELLLIMIT,lot,price,3,price+StopLossPips*Point,price-TakeProfitPips*Point);
         if(tiket<0)
           {
            Print("Ошибка OrderSend № - ",GetLastError());
           }
        }

     

   if(OrdersTotal()!=0)
     {
      for(cnt=0; cnt<OrdersTotal(); cnt++)

         OrderSelect(cnt,SELECT_BY_POS); // Если есть следующий
        {                                    // Анализ ордеров:
         price=OrderOpenPrice();
         otkt = OrderTicket();
         n=otkt;
         //--------------------------------------------------------------

 
         if(OrderType()==OP_SELL && OrderMagicNumber()==0)

           {
            tiket=OrderSend(Symbol(),OP_SELLLIMIT,lot*3,price+100*Point,1,price+StopLossPips*Point,price-TakeProfitPips*Point,"My order",n);
            tiket=OrderSend(Symbol(),OP_SELLLIMIT,lot*9,price+200*Point,1,price+StopLossPips*Point,price-TakeProfitPips*Point,"My order",n);
           }
        }

     }

  
        _OrdersTotal = OrdersTotal(); // запоминаем общее количество позиций
        ArrayResize( now_OrdersArray, _OrdersTotal ); // изменяем размер массива открытых позиций под текущее кол-во
        ArrayInitialize( now_OrdersArray, 0.0 ); // обнуляем массив
        now_OrdersTotal = 0; // обнуляем количество позиций, соответствующих критериям
        ArrayInitialize( now_ClosedOrdersArray, 0.0 ); // обнуляем массивы закрытых позиций и сработавших ордеров
       
 
        //+------------------------------------------------------------------+
        //| Перебираем все позиции и записываем в массив 
        //+------------------------------------------------------------------+
        for ( int z = _OrdersTotal - 1; z >= 0; z -- )
        {
            if ( OrderSelect( z, SELECT_BY_POS ) )
           
            {
                now_OrdersArray[now_OrdersTotal][0] = OrderTicket();
                now_OrdersArray[now_OrdersTotal][1] = OrderType();
                now_OrdersTotal ++;
            }
        }
        
        ArrayResize( now_OrdersArray, now_OrdersTotal ); // изменяем размер массива открытых позиций под кол-во позиций, соответствующих критериям
 
        //+------------------------------------------------------------------+
        //| Перебираем список позиций предыдущего тика, и считаем сколько закрылось позиций и
        //| сработало отложенных ордеров
        //+------------------------------------------------------------------+
        for ( pre_CurOrder = 0; pre_CurOrder < pre_OrdersTotal; pre_CurOrder ++ )
        {
            tkt = pre_OrdersArray[pre_CurOrder][0]; // запоминаем тикет и тип ордера
            type   = pre_OrdersArray[pre_CurOrder][1];
            
            OrderClosed = true; // предпологаем, что если это позиция, то она закрылась
           
            for ( now_CurOrder = 0; now_CurOrder < now_OrdersTotal; now_CurOrder ++ ) // перебираем все позиции из текущего списка открытых позиций
            {
                if ( tkt == now_OrdersArray[now_CurOrder][0] ) // если позиция с таким тикетом есть в списке,
                {   OrderClosed = false; // значит позиция не была закрыта (ордер не был удалён)
                    break;
                }
            }
           
            if ( OrderClosed )  // если была закрыта позиция (удалён ордер),
            {
                
                if (OrderSelect( tkt, SELECT_BY_TICKET )) // выбиаем ее
               
                    n = tkt; // присваеваем n номер тикета
                
            }   
      }  
     
        //+------------------------------------------------------------------+
        //| Удаляем ордер с магическим номером = тикету закрытой ранее позиции 
        //+------------------------------------------------------------------+
     for ( int z = _OrdersTotal - 1; z >= 0; z -- )
        {
            if ( OrderSelect( z, SELECT_BY_POS ) )
            otkt = OrderTicket();
            if (n == OrderMagicNumber ())
             {OrderDelete( otkt );}
         }
         
         return;
      }
Помогите отредактировать код, пожалуйста
Помогите отредактировать код, пожалуйста
  • www.mql5.com
И начинает бороться сам с собой, постоянно выставляя и удаляя отложенные ордера. - - Категория: общее обсуждение
 
取引ロボットがどの市場で稼働しているかを判断するメカニズムが組み込まれているかどうか教えてください。FOREXとFORTSの市場を識別する必要があります。
 

ヘルプ、みんな、MacbookのMT4にロシア語を置くことができない、それは存在するようだが、それは象形文字で表示されていますが、メタエディタでは正常です。macのPlayで全て構築しました。

Wine 1.9.4はとてもありがたいです。