Errori, bug, domande - pagina 708

 

Ciao OpenCL! In modalità debug il codice funziona benissimo.... Ma nel tester dà errore 5100 quando chiama 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)

Terminale GPU: Advanced Micro Devices, Inc. Turks con OpenCL 1.1 (6 unità, 725 MHz, 1024 Mb, versione CAL 1.4.1703 (VM))

Build 619 Windows 7 SP1 64-x

...

Ripetuto su PC con un altro videogioco - non ha aiutato...

File:
 
MigVRN:

In modalità debug il codice funziona benissimo.... Ma nel tester genera l'errore 5100 quando viene chiamato CLContextCreate... Service Desk?

Non penso sia un bug, penso che OpenCL non funzioni nel tester - il supporto è disabilitato. Disabile temporaneamente o permanentemente, è una questione aperta.
 
MigVRN:

Ciao OpenCL! In modalità debug il codice funziona benissimo.... Ma nel tester dà errore 5100 quando chiama CLContextCreate... Service Desk?

...

Ripetuto sul desktop con un altro videogioco - non ha aiutato...

Non ricordo di aver annunciato che OpenCL era abilitato nel tester, forse mi sono perso qualcosa.

Finché la funzionalità viene debuggata nel terminale, non appena è pronto il supporto nel tester verrà attivato.

Dovranno anche supportare i test a distanza.

 
MetaDriver:
Non credo che sia un bug. Credo che OpenCL non funzioni nel tester - il supporto è disabilitato. Disabile temporaneamente o permanentemente, è una questione aperta.
Urain:

Non ricordo che sia stato annunciato che OpenCL fosse abilitato nel tester, forse mi sono perso qualcosa.

Mentre la funzionalità è in fase di debug nel terminale, non appena è pronta, il supporto nel tester sarà attivato.

Dovranno anche supportare i test a distanza.

Grazie! :( Non vedo l'ora di vederlo... Voglio già provarlo.
 

Ho deciso di scrivere un EA. Quando inizio a scrivere qualcosa da zero, controllo sempre ogni passo per gli errori, e controllo l'efficienza del codice. Non mi piaceva il modo in cui l'Expert Advisor lavorava con una cosa come l'evento "nuova barra". Ho cercato a lungo e duramente di trovare la ragione - sono arrivato in fondo solo quando il codice contiene solo linee

//+------------------------------------------------------------------+
//| Funzione tick esperto|
//+------------------------------------------------------------------+
void OnTick()
{
Alert("New tick",TimeCurrent());
}
//+------------------------------------------------------------------+

Come risultato ho ottenuto una qualità di simulazione del 100%, 38242987 ticks simulati, ma ci sono omissioni selvagge nel log del tester (giorni interi), ho contato solo 13259 ticks...
Quale potrebbe essere la ragione?

File:
20120408.log  2074 kb
 

Renat, Slava, è possibile avvicinarsi alla parametrizzazione facendo (facilmente) una direttiva speciale delpreprocessore che funziona in modo simile a #include, ma permette compilazioni ripetute dello stesso insluder:

#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"

Al momento compila ma non funziona (o meglio, funziona solo per il primo #include). Una direttiva speciale (#reinclude, #Include o #template) potrebbe risolvere il problema. A proposito, ti farebbe anche risparmiare un sacco di tempo, quando scrivi overload di funzioni per tipi standard.E la libreria standard potrebbe diventare compatta e bella da vedere. E si potrebbe arrivare vicino a classi parametrizzabili "normali" - basta aggiungere una nuova sintassi al linguaggio e automatizzare il #reinclude nascosto.

// esempio di lavoro, dove questa inclusione è distribuita dal mio preprocessore qui.

File:
ISort.mqh  2 kb
 

Anche questa è una variante della parametrizzazione delle classi.

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

Funziona, puoi anche aggiungere l'ereditarietà. ;)

Ma per poter utilizzare questa opzione in modo più o meno affidabile, dovete almeno spostare le linee nelle macro.

// E questo espediente (quando non ci sei abituato?) sembra piuttosto strano. :))

File:
DefTest.mq5  2 kb
 
MetaDriver:

Renat, Slava, puoi avvicinarti alla parametrizzazione facendo (facilmente) una direttiva speciale delpreprocessore che funziona in modo simile a #include, ma permette compilazioni ripetute dello stesso insluder:

L'idea è chiara, ma è meglio implementare subito i template.

Torneremo su questo punto più tardi.

 
Renat:

L'idea è chiara, ma è meglio implementare subito i modelli.

Torneremo su questo punto più tardi.

Evviva!!! Grazie.
 

Questa voce nel tester passa a pieni voti, il tentativo di attaccare l'EA al grafico dà un errore.

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