Fehler, Irrtümer, Fragen - Seite 708

 

Hallo OpenCL! Im Debug-Modus funktioniert der Code hervorragend.... Aber in Tester gibt es Fehler 5100 beim Aufruf von CLContextCreate... Service Desk?

Terminal CPU: GenuineIntel Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz with OpenCL 1.1 (4 units, 2095 MHz, 5990 Mb, version 2.0)

Terminal-GPU: Advanced Micro Devices, Inc. Türken mit OpenCL 1.1 (6 Einheiten, 725 MHz, 1024 Mb, Version CAL 1.4.1703 (VM))

Build 619 Windows 7 SP1 64-x

...

Ich wiederholte es auf dem PC mit einem anderen Videospiel - es half nicht...

Dateien:
 
MigVRN:

Im Debug-Modus funktioniert der Code hervorragend.... Aber in Tester es erzeugt Fehler 5100, wenn CLContextCreate aufgerufen wird... Service Desk?

Ich glaube nicht, dass es ein Fehler ist, ich glaube, OpenCL funktioniert nicht im Tester - die Unterstützung ist deaktiviert. Vorübergehend deaktiviert oder dauerhaft, das ist eine offene Frage.
 
MigVRN:

Hallo OpenCL! Im Debug-Modus funktioniert der Code hervorragend.... Aber in Tester gibt es Fehler 5100 beim Aufruf von CLContextCreate... Service Desk?

...

Ich wiederholte es auf dem Desktop mit einem anderen Videospiel - es half nicht...

Ich kann mich nicht daran erinnern, dass ich angekündigt habe, dass OpenCL im Tester aktiviert ist, vielleicht habe ich etwas übersehen.

Solange die Funktionalität im Terminal debuggt wird, wird die Unterstützung im Tester angeschlossen, sobald sie fertig ist.

Es müssen auch Ferntests unterstützt werden.

 
MetaDriver:
Ich glaube nicht, dass es ein Fehler ist, sondern dass OpenCL im Tester nicht funktioniert - die Unterstützung ist deaktiviert. Vorübergehend deaktiviert oder dauerhaft, das ist eine offene Frage.
Urain:

Ich kann mich nicht erinnern, dass angekündigt wurde, dass OpenCL im Tester aktiviert ist, vielleicht habe ich etwas verpasst.

Während die Funktionalität im Terminal getestet wird, wird, sobald sie fertig ist, die Unterstützung im Tester eingeschaltet.

Sie müssen auch Fernprüfungen unterstützen.

Danke! :( Ich freue mich schon darauf... Ich möchte es wirklich schon ausprobieren.
 

Ich beschloss , einen EA zu schreiben. Wenn ich etwas von Grund auf neu schreibe, prüfe ich jede Phase auf Fehler und den Code auf Effizienz. Ich mochte die Art und Weise, wie der Expert Advisor mit so etwas wie einem neuen Bar-Ereignis arbeitete, nicht. Ich habe lange gesucht, um den Grund dafür zu finden - ich bin nur auf den Grund gekommen, wenn der Code nur Zeilen enthält

//+------------------------------------------------------------------+
//| Experten-Tick-Funktion|
//+------------------------------------------------------------------+
void OnTick()
{
Alert("Neuer Tick",TimeCurrent());
}
//+------------------------------------------------------------------+

Als Ergebnis erhielt ich eine 100%ige Simulationsqualität, 38242987 Ticks simuliert, aber es gibt wilde Auslassungen im Protokoll des Testers (ganze Tage), ich habe nur 13259 Ticks gezählt...
Was könnte der Grund dafür sein?

Dateien:
20120408.log  2074 kb
 

Renat, Slava, es ist möglich, sich der Parametrisierung anzunähern, indem man (einfach) eine speziellePräprozessoranweisung erstellt, die ähnlich wie #include funktioniert, aber wiederholte Kompilierungen desselben Insluders erlaubt. Beispiel:

#define ArrayType double
#include "ISTemplate.mqh"
#define ArrayType float
#include "ISTemplate.mqh"
#define ArrayType int
#include "ISTemplate.mqh"
#define ArrayType uint
#include "ISTemplate.mqh"
#define ArrayType long
#include "ISTemplate.mqh"
#define ArrayType ulong
#include "ISTemplate.mqh"
#define ArrayType short
#include "ISTemplate.mqh"
#define ArrayType ushort
#include "ISTemplate.mqh"
#define ArrayType char
#include "ISTemplate.mqh"
#define ArrayType uchar
#include "ISTemplate.mqh"
#define ArrayType string
#include "ISTemplate.mqh"

Im Moment wird es zwar kompiliert, funktioniert aber nicht (oder nur für das erste #include). Eine spezielle Direktive (#reinclude, #Include oder #template) könnte das Problem lösen. Übrigens würde es auch viel Zeit sparen, wenn man Funktionsüberladungen für Standardtypen schreibt.Und die Standardbibliothek könnte kompakt und ansehnlich werden. Und Sie könnten "normalen" parametrisierbaren Klassen nahe kommen - fügen Sie einfach eine neue Syntax zur Sprache hinzu und automatisieren Sie das versteckte #reinclude.

// Arbeitsbeispiel, bei dem dieser Einschluss von meinem eigenen Präprozessor hier eingesetzt wird.

Dateien:
ISort.mqh  2 kb
 

Dies ist auch eine Variante der Klassenparametrisierung.

#define _MyContainer(name,type,size) class name {public: type array[size]; virtual type At(int i){return array[i];}}
#define  ASize 8
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   _MyContainer(MyClass,int,ASize);
   MyClass MyVar;
   Print(sizeof(MyVar)); 
   for(int i=0;i<ASize;i++)
     {
      MyVar.array[i]=i*i;
     }
   for(int i=0;i<ASize;i++)
     {
      Print(MyVar.At(i));
     }
  }

Es funktioniert. Sie können sogar Vererbung hinzufügen. ;)

Um diese Option jedoch mehr oder weniger zuverlässig nutzen zu können, müssen Sie zumindest Zeilen in Makros verschieben.

// Und dieses Gimmick sieht (wenn man es nicht gewohnt ist?) ziemlich seltsam aus. :))

Dateien:
DefTest.mq5  2 kb
 
MetaDriver:

Renat, Slava, Sie können sich der Parametrisierung annähern, indem Sie (einfach) eine speziellePräprozessoranweisung erstellen, die ähnlich wie #include funktioniert, aber wiederholte Kompilierungen desselben Insluders erlaubt. Beispiel:

Die Idee ist klar, aber es ist besser, die Vorlagen gleich umzusetzen.

Wir werden später darauf zurückkommen.

 
Renat:

Die Idee ist klar, aber es ist besser, die Vorlagen gleich zu implementieren.

Wir werden später darauf zurückkommen.

Juhu!!! Vielen Dank.
 

Der Versuch, den EA mit dem Diagramm zu verbinden, führt zu einem Fehler.

int OnInit()
  {
   hPerCros=iCustom(_Symbol,0,"\\Каналы\PercentageCrossoverChannel",Percent,Shift) ;
   if( hPerCros < 0)
      Print("Ошибка создания индикатора=  ",GetLastError());
   return(0);
  }