Fehler, Irrtümer, Fragen - Seite 2898

 

Nachricht an die Entwickler. Das Python-Skript bleibt unter bestimmten Umständen beim Empfang von Daten über copy_rates_from_pos hängen.

Lassen Sie mich die Situation erklären. Der Broker hat etwa 4k Instrumente.
Ich treffe eine Vorauswahl der Instrumente, indem ich sie nach bestimmten Regeln suche und filtere.

Für eines der Instrumente im Terminal gibt es keine Historie (d.h. in der Marktbeobachtung und in der Liste der Symbole ist das Instrument vorhanden, aber die Daten sind leer).

Beim Versuch, das Skript auszuführen: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 1, analysis_days),
bleibt das Skript einfach hängen. Es hilft nicht, nach None zu suchen, da der Fehler selbst nicht auftritt, sondern alles an dieser Zeile hängen bleibt.

Wenn ich versuche: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 0, analysis_days),
auszuführen, d.h. die Starttaktnummer ab 0 anzugeben, bleibt er nicht hängen und liefert eine leere Tabelle.

Nachtrag. Ich fand auch ein ähnliches Problem, wenn ich FIRST abrufen Daten über copy_rates_from_pos mit der Anzahl der Bars angefordert, mehr als es in der Geschichte ist. Außerdem bleibt das Skript hängen. Beim zweiten Antrag liegt kein solcher Fehler vor. Deshalb scheint es schwierig zu sein, den Fehler zu wiederholen (vielleicht nur durch Löschen des gesamten Verlaufs für das Symbol).

Ich kann mich irren oder etwas übersehen haben, aber es scheint ein Fehler zu sein, da die Funktion entweder die Daten zurückgeben oder einen Fehler ausgeben sollte.

 
Alexander Mikheev:

Liebe Entwickler, sollte ich mich irren oder etwas nicht bedacht haben, korrigieren Sie mich bitte.

Möchten Sie, dass sich jemand die Zeit nimmt, einen Quellcode auf der Grundlage Ihrer Daten zu schreiben und ihn auf verschiedenen Handelsservern zu testen?

Das wird nicht passieren. Respektieren Sie die Zeit anderer: Stellen Sie alle Daten zur Verfügung, um das Problem zu reproduzieren - Quelle, Server, Rechnerkonfiguration und so weiter.


Die Quelle ist übersichtlich und mit Kommentaren versehen, so dass Sie keine Zeit damit verschwenden müssen, das Geschriebene zu analysieren. Sagen Sie, was Sie bekommen wollten und was Sie bekommen haben.

 
fxsaber:

Ein passwortgeschütztes ZIP-Archiv.

Werden gesperrte Archive in MQL unterstützt?

 
Stanislav Korotky:

Werden gesperrte Archive in MQL unterstützt?

Ich weiß es nicht.

 
suncrypto:

Nachricht an die Entwickler. Das Python-Skript bleibt unter bestimmten Umständen beim Empfang von Daten über copy_rates_from_pos hängen.

Lassen Sie mich die Situation erklären. Der Broker hat etwa 4k Instrumente.
Ich treffe eine Vorauswahl der Instrumente, indem ich sie nach bestimmten Regeln suche und filtere.

Für eines der Instrumente im Terminal gibt es keine Historie (d.h. in der Marktbeobachtung und in der Liste der Symbole ist das Instrument vorhanden, aber die Daten sind leer).

Beim Versuch, das Skript auszuführen: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 1, analysis_days),
bleibt das Skript einfach hängen. Es hilft nicht, nach None zu suchen, da der Fehler selbst nicht auftritt, sondern alles an dieser Zeile hängen bleibt.

Wenn ich versuche: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 0, analysis_days),
auszuführen, d.h. die Starttaktnummer ab 0 anzugeben, bleibt er nicht hängen und liefert eine leere Tabelle.

Nachtrag. Ich fand auch ein ähnliches Problem, wenn ich FIRST abrufen Daten über copy_rates_from_pos mit der Anzahl der Bars angefordert, mehr als es in der Geschichte ist. Außerdem bleibt das Skript hängen. Beim zweiten Antrag liegt kein solcher Fehler vor. Deshalb scheint es schwierig zu sein, den Fehler zu wiederholen (vielleicht nur durch Löschen des gesamten Verlaufs für das Symbol).

Vielleicht habe ich mich geirrt oder etwas übersehen, aber es scheint ein Fehler zu sein, da die Funktion entweder die Daten zurückgeben oder einen Fehler machen muss.

Vervielfältigt, korrigiert.

 
TesterHideIndicators(false) funktioniert nicht mehr;
 
suncrypto:

Nachricht an die Entwickler. Das Python-Skript bleibt unter bestimmten Umständen beim Empfang von Daten über copy_rates_from_pos hängen.

Lassen Sie mich die Situation erklären. Der Broker hat etwa 4k Instrumente.
Ich treffe eine Vorauswahl der Instrumente, indem ich sie nach bestimmten Regeln suche und filtere.

Für eines der Instrumente im Terminal gibt es keine Historie (d.h. in der Marktbeobachtung und in der Liste der Symbole ist das Instrument vorhanden, aber die Daten sind leer).

Beim Versuch, das Skript auszuführen: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 1, analysis_days),
bleibt das Skript einfach hängen. Es hilft nicht, nach None zu suchen, da der Fehler selbst nicht auftritt, sondern alles an dieser Zeile hängen bleibt.

Wenn ich versuche: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 0, analysis_days),
auszuführen, d.h. die Starttaktnummer ab 0 anzugeben, bleibt er nicht hängen und liefert eine leere Tabelle.

Nachtrag. Ich fand auch ein ähnliches Problem, wenn ich FIRST abrufen Daten über copy_rates_from_pos mit der Anzahl der Bars angefordert, mehr als es in der Geschichte ist. Außerdem bleibt das Skript hängen. Beim zweiten Antrag liegt kein solcher Fehler vor. Deshalb scheint es schwierig zu sein, den Fehler zu wiederholen (vielleicht nur durch Löschen des gesamten Verlaufs für das Symbol).

Ich kann mich irren oder etwas übersehen haben, aber es scheint ein Fehler zu sein, da die Funktion entweder die Daten zurückgeben oder einen Fehler ausgeben sollte.

Behoben, wird in der nächsten Beta sein
 
Aleksey Vyazmikin:
TesterHideIndicators(false) funktioniert nicht mehr;

TesterHideIndicator setzt das Sichtbarkeitskennzeichen für Indikatoren, die nachträglich erstellt werden.

Das Sichtbarkeitskennzeichen von zuvor erstellten Indikatoren wird nicht geändert.

Sie können sich an den folgenden Experten wenden

//+------------------------------------------------------------------+
//|                                     TestTesterHideIndicators.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

int ExtHandleMacd;
int ExtHandleEma;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   TesterHideIndicators(true);
   ExtHandleMacd=iMACD(NULL,0,12,26,9,PRICE_CLOSE);
   TesterHideIndicators(false);
   ExtHandleEma=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  }
//+------------------------------------------------------------------+

Im Visualizer und in dem nach dem einfachen Test geöffneten Diagramm ist der MACD-Indikator nicht sichtbar, der gleitende Durchschnitt ist sichtbar

Es funktioniert also wie vorgesehen

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
  • www.mql5.com
Комбинация флагов видимости объекта определяет таймфреймы графика, на которых объект отображаем. Для установки/получения значения свойства OBJPROP_TIMEFRAMES можно использовать функции ObjectSetInteger()/ObjectGetInteger...
 
DMITRII PECHERITSA:
Bug - inkonsistente Bedienung von Zeigern (5.00, 2650)

Kompilierungsfehler. Haben Sie eine Idee?



Verwenden Sie die Dereferenzierungsanweisung explizit

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   C201022_090654 c_1(* new C201022_090641); //works
   C201022_090654 c_3(* new C201022_092325(1)); //works
//---'new' - parameter passed as reference, variable expected
   C201022_090654 c_2(* new C201022_090641(1)); //not works
                      ^
  }
 

A100:
Ошибка при компиляции:

typedef void (*fn)();
void f() {}
fn g() { return f; }
oid OnStart()
{
        g()(); //Error: ')' - expression expected
}

Ich habe diese Frage bereits recherchiert und folgendes herausgefunden:

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

Sergey Dzyublik, 2020.04.04 21:46

Bug MT5(build 2375) Kompilierungsfehler beim Aufruf einer Funktion über ihren Zeiger, wenn ein Array von Zeigern auf eine Funktion verwendet wird:

#define  PRINT(x) ; Print(#x, ":", string(x))

void test(){
   PRINT(__FUNCSIG__);
}

template<typename T>
void call(T f_ptr){
   f_ptr();
}


template<typename T>
class A{
public:
   T arr_1[1];
   
   typedef void (*ff)();
   ff arr_2[1];  
   
   
   T test_1(){
      return arr_1[0];
   } 
   
   ff test_2(){
      return arr_2[0];
   } 
   
   T operator[](int index){
      return arr_1[index];
   }
};

void OnStart(){
   typedef void (*ff)();
   ff arr[1];
   arr[0] = test;   
   
   ff f_ptr = arr[0];
   f_ptr();             //Ok
   call(arr[0]);        //Ok
   arr[0]();            //Compile Error: ')' - expression expected   
   
   
   A<ff> a;             
   a.arr_1[0] = test;
   a.arr_2[0] = test;
   
   
   a.arr_1[0]();        //Compile Error: ')' - expression expected   
   a.arr_2[0]();        //Compile Error: ')' - expression expected   
   
   a.test_1()();        //Compile Error: ')' - expression expected   
   a.test_2()();        //Compile Error: ')' - expression expected   
   
   a[0]();              //Ok ???
}