初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1025

 

オプティマイザーが悪態をついているのが解らないのですが?

2019.04.10 13:26:50.177 Core 8  genetic pass (13, 498) tested with error "critical runtime error 502 in OnTick function (array out of range, module Experts\xxxxxx.ex5, xxxxxx.mq5, line 384, col 73)" in 0:00:00.102

その非難しているコード

            if(profit_level == EMPTY_VALUE
               && ((pos_set.order_direction == trend_up && (buffer_HMA7C[2] <= buffer_HMA7C[1] && buffer_HMA7C[1] >= buffer_HMA7C[0]) && buffer_HMA7C[0] > pos_set.order_price)
               ||  (pos_set.order_direction == trend_dn && (buffer_HMA7C[2] >= buffer_HMA7C[1] && buffer_HMA7C[1] <= buffer_HMA7C[0]) && buffer_HMA7C[0] < pos_set.order_price))
              )

これはカスタムインジケータの バッファで、ハンドルは正しく受信され、データも正しくコピーされています

      handle_HMA7C = iCustom(Symbol(),0,"my_used\\my_HMA7C_121",period_HMA7C);
      if(handle_HMA7C == INVALID_HANDLE)                                   // проверяем наличие хендла индикатора
      {
         Print("Не удалось получить хендл индикатора handle_HMA7C");       // если хендл не получен, то выводим сообщение в лог об ошибке
         return(INIT_FAILED);                                              // завершаем работу с ошибкой
      }
      else
      {
         Print("Получен хендл индикатора handle_HMA7C");
         ChartIndicatorAdd(ChartID(),0,handle_HMA7C);                      // подключаем индикатор к графику
      }
.........................................
//+------------------------------------------------------------------+
bool copyBuffers()
{
   int   nbars = 11;
   
   ArrayFree(rates);
   ArrayFree(buffer_HMA7C);
      
   ResetLastError();
   
   if(CopyRates(Symbol(),0,0,nbars,rates) < nbars) return(false);
   
      if(CopyBuffer(handle_HMA7C,0,1,nbars,buffer_HMA7C) < nbars )         // копируем данные из индикаторного массива в массив buffer_HMA7C
      {                                                                                         // если не скопировалось
         Print("Не удалось скопировать данные из индикаторного буфера в buffer_HMA7C");         // то выводим сообщение об ошибке
         Print("LastError = "+string(GetLastError()));
         return(false);                                                                         // и выходим из функции
      }
}


 
こんにちは!MQL5InfoStringやMQL5InfoIntegerとは 何ですか?ヘルプに載っていないのですが、どこに載っているのですか?
 
Tango_X:
こんにちは!MQL5InfoStringやMQL5InfoIntegerとは何ですか?ヘルプに載っていないのですが、どこに載っているのですか?
よくもまあ、見つからないように探したものだ。
Документация по MQL5: Проверка состояния / MQLInfoString
Документация по MQL5: Проверка состояния / MQLInfoString
  • www.mql5.com
Проверка состояния / MQLInfoString - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:
見つからないというのは、どのように検索したのでしょうか?

エディターでこの機能に対してF1を押しても何も表示されないので不思議です...ありがとうございました。

 
#include <Trade\Trade.mqh>

CTrade trader;
int OnInit()
  {

   trader.SetExpertMagicNumber(1);

   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason)
  {
//---
  
  }
void OnTick()
  {
      Print("тикет ",OrderGetTicket(0));
      Print("магик ",OrderGetInteger(ORDER_MAGIC));
      if (OrderGetInteger(ORDER_MAGIC)==1)
      {
         trader.OrderDelete(OrderGetTicket(0));
      }
  }

注文を削除した後 magik=1.どうすればいいのか?

 
ascerdfg:

注文のmagic=1 を削除した後。どうすればいいのか?

LOCALの注文を削除 しました。マジックが「1」であることと、どのような関係があるのでしょうか?もっと正確に言うと、具体的に何が嫌なのか、迷っているのか。

 
Vladimir Karputov:

LOCALの注文を削除 しました。マジックが「1」であることと、どのような関係があるのでしょうか?もっと正確に言うと、具体的に何が嫌なのか、迷っているのか。

         trader.OrderDelete(OrderGetTicket(0));
存在しない注文を削除し続ける
 
ascerdfg:
存在しない注文を削除し続ける

あなたのコードによると、これはまさに起こることです:あなたは、「0」ティックでREPLACEMENT注文を削除 するために各ティックで コマンドを強制的に実行します。

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Vladimir Karputov:

つまり、ティック "0 "のLOCKされた注文を削除 するコマンドを各ティックで 強制的に発行するのです。

いいえ、そんなことはありません、magik=1 の場合のみです。

 
ascerdfg:

いいえ、Magik=1 のときだけです。

ポイントは変わりません。あなたは、すべてのティックでチケット「0」を持つ 保留中の注文を削除 しようとしているのです。

あと、全てのティックに「0」のティックがついた保留注文があるとか言ってる人?保留中の注文がいくつあるか確認しましたか?そして、なぜそれを知っているのか......?

理由: