Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1025

 

Ich kann nicht herausfinden, worauf der Optimierer schimpft?

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

Der Code, den sie beschuldigt

            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))
              )

Dies ist der Puffer des benutzerdefinierten Indikators, dessen Handle korrekt empfangen wurde und dessen Daten auch korrekt kopiert werden

      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);                                                                         // и выходим из функции
      }
}


 
Hallo! Was ist MQL5InfoString oderMQL5InfoInteger? Wo kann ich darüber lesen? Ich konnte es in der Hilfe nicht finden!
 
Tango_X:
Hallo! Was ist MQL5InfoString oder MQL5InfoInteger? Wo kann ich darüber lesen? Ich habe es in der Hilfe nicht gefunden!
Wie könnten Sie danach suchen, wenn Sie es nicht finden könnten?
Документация по MQL5: Проверка состояния / MQLInfoString
Документация по MQL5: Проверка состояния / MQLInfoString
  • www.mql5.com
Проверка состояния / MQLInfoString - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:
Wie haben Sie gesucht, dass Sie es nicht finden konnten?

Es ist seltsam, im Editor drücke ich F1 für diese Funktion und es wird nichts angezeigt... Danke!

 
#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));
      }
  }

Nach dem Löschen des Auftrags magik=1. Was ist zu tun?

 
ascerdfg:

Nach der Löschung des Auftrags magic=1. Was ist zu tun?

Sie haben einen LOKALEN Auftrag gelöscht. Was hat die Magie mit der "1" zu tun? Genauer gesagt, was genau gefällt Ihnen nicht oder verwirrt Sie?

 
Vladimir Karputov:

Sie haben einen LOKALEN Auftrag gelöscht. Was hat die Magie mit der "1" zu tun? Genauer gesagt, was genau gefällt Ihnen nicht oder verwirrt Sie?

         trader.OrderDelete(OrderGetTicket(0));
Löscht immer wieder nicht vorhandene Aufträge
 
ascerdfg:
Löscht immer wieder nicht vorhandene Aufträge

Ihrem Code zufolge wird genau das passieren: Sie erzwingen bei jedem Tick einen Befehl zum Löschen eines REPLACEMENT-Auftrags mit einem "0"-Tick.

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

In Ihrem Code wird genau das passieren: Sie werden bei jedem Tick einen Befehl erzwingen, um einen GESPERRTEN Auftrag mit einem Tick "0" zu löschen.

nein, das stimmt nicht, nur wenn magik=1

 
ascerdfg:

Nein, nur wenn Magie=1 ist

Das ändert nichts daran, dass Sie versuchen, einen schwebenden Auftrag mit einem Ticket "0" auf jedem Tick zu löschen.

Und wer sagt, dass Sie einen schwebenden Auftrag mit einem "0"-Tick auf jedem Tick haben? Haben Sie überprüft, wie viele ausstehende Aufträge es gibt? Und woher wissen Sie das ....?