Errori, bug, domande - pagina 2201

 

Stasera ha deciso di tradurre una pagina dall'inglese -

"Il sito utilizza i cookie. Scopri di più sulla nostra politica dei cookie".

Ho digitato il link in Yandex Translator e ho letto la traduzione. Quando sono entrato nel sito web di MQL5 ho ottenuto quanto segue:

Qual è il modo corretto di tradurre qui le pagine da altre lingue, per non avere questo tipo di cose?
 
Vladimir M.:

Stasera ha deciso di tradurre una pagina dall'inglese -

"Il sito utilizza i cookie. Scopri di più sulla nostra politica dei cookie".

Ho digitato il link in Yandex Translator e ho letto la traduzione. Quando sono entrato nel sito web di MQL5 ho ottenuto quanto segue:

Qual è il modo corretto di tradurre le pagine da altre lingue per evitare questo?

In qualche modo dubito che il testo contenga caratteri jolly invisibili in combinazione unica per identificare gli utenti che usano il copia-incolla.
Ma potrebbe essere ....

 

Amici, mi appello alla vostra esperienza e chiedo la vostra guida per trovare la giusta soluzione.

Ho un EA che a certi intervalli (ogni pochi minuti) scarica i dati in un file, esegue un programma esterno e legge i dati dal file. L'intero ciclo dura ~600 millisecondi.

Come fare quando si testa una strategia, in modo che il programma attenda fino alla fine del programma esterno (cioè, durante questo tempo, il flusso dei prezzi dovrebbe essere messo in pausa, o idealmente, saltare i tick per 600 millisecondi)?

Altrimenti ora durante l'esecuzione di un programma esterno diversi giorni di tick volano via quando si testa una strategia :-(. Nel tester visivo l'EA funziona. Ma testare una strategia su diversi anni di storia richiederebbe una quantità incredibile di tempo.

 
fxsaber:

Non lo capisco affatto. Ecco il codice

In qualche modo si lamenta di passare un puntatore per riferimento. Allo stesso tempo, la funzione f riceve tranquillamente il puntatore per riferimento.


Il risultato è

L'operatore int è stato chiamato senza problemi, mentre l'operatore pointer no.

Sì, c'è un problema di questo tipo. Si verifica un errore quando si passa un puntatore per riferimento in un operatore sovraccaricato. Questo è apparso nelle ultime build, prima era tutto ok. Ho inviato una domanda all'help-desk già da alcuni mesi, ma continuano a tacere come al solito: nessuna risposta o addio.

Questo è particolarmente critico per gli array di puntatori, dato che non c'è altro modo per inviarli, tranne che per riferimento:

class A
{
 public: 
  A* operator+(const A*const& array[]) { return NULL; }
};

Quindi sono ancora seduto sulla build 1554.

 
romachandr:

Bene come lavoro d'accetta (non significa che sia brutto):

Esperto:

1. viene invocato un file di script di shell

2. è previsto un file che segnala il completamento delle azioni esterne

3. cancellazione del file del segnale


Script di shell di comando:

1. eseguire un programma esterno

2. creazione del file di segnale

Quindi: il link è stato inserito automaticamente, non si tratta affatto di questo.

A proposito, come si esegue un programma esterno? Se attraverso qualche ProcessCreate() o ShelExecute(), allora potete dare l'handle risultante a WaitForSingleObject(), ma questo è ballare con la dichiarazione del tipo winapi.

 
pavlick_:

Bene come lavoro d'accetta (non significa che sia brutto):

Esperto:

1. viene invocato un file di script di shell

2. è previsto un file che segnala il completamento delle azioni esterne

3. cancellazione del file del segnale


Script di shell di comando:

1. eseguire un programma esterno

2. creazione del file di segnale

Quindi: il link è stato inserito automaticamente, non si tratta affatto di questo.

A proposito, come si esegue un programma esterno? Se attraverso qualche processCreate() o ShelExecute(), allora potete dare l'handle risultante a WaitForSingleObject(), ma questo è un ballo con la dichiarazione del tipo winapi.

Il programma esterno viene lanciato usando ShellExecuteW().

All'uscita dell'esecuzione del programma viene generato un file. In effetti, può essere un file di segnale.

Ma non capisco come sospendere il tester in questo momento?

Non ho praticamente familiarità con winapi. Se aiuta davvero, sono pronto ad andare più a fondo.

 
romachandr:

Il programma esterno viene avviato con ShellExecuteW().

Un file viene generato all'uscita dell'esecuzione del programma. Può essere essenzialmente un file di segnale.

Ma non capisco come mettere in pausa il tester in questo momento?

Non ho molta familiarità con winapi. Se aiuta davvero, sono disposto ad andare più a fondo.

La winapi ha il seguente meccanismo:

Gli oggetti che sono descritti dalla HANDLE restituita alla creazione (thread, processi, mutex, ...) hanno un flag di segnale. Nel caso di un processo, lo imposterà quando terminerà. WaitForSingleObject() ferma l'esecuzione del thread corrente (il tuo EA) fino a quando il flag è impostato, cioè l'EA uscirà da WaitForSingleObject() dopo che il programma esterno finisce.

ShellExecuteW() restituisce HINSTANCE invece di HANDLE, non sono sicuro che funzionerà per la funzione WaitForSingleObject(), ma vale la pena provare. Se fallisce, dovreste usare ShellExecuteEx, per esempio (ma al suo interno vengono passati argomenti non banali).

http://fkn.ktu10.com/?q=node/633

https://msdn.microsoft.com/en-us/library/windows/desktop/ms687032(v=vs.85).aspx

 
pavlick_:

Winapi ha il seguente meccanismo:

Gli oggetti che sono descritti dalla HANDLE restituita alla creazione (thread, processi, mutex, ...) hanno un flag di segnale. Nel caso di un processo, lo imposterà quando terminerà. WaitForSingleObject() ferma l'esecuzione del thread corrente (il tuo EA) fino a quando il flag è impostato, cioè l'EA uscirà da WaitForSingleObject() dopo che il programma esterno finisce.

ShellExecuteW() restituisce HINSTANCE invece di HANDLE, non sono sicuro che funzionerà per la funzione WaitForSingleObject(), ma vale la pena provare. Se fallisce, dovreste usare ShellExecuteEx, per esempio (ma al suo interno vengono passati argomenti non banali).

http://fkn.ktu10.com/?q=node/633

https://msdn.microsoft.com/en-us/library/windows/desktop/ms687032(v=vs.85).aspx

Grazie per il suggerimento!

Mi informerò in merito.

 
romachandr:

Ma non capisco come mettere in pausa il tester in questo momento?

#import "Kernel32.dll"
 void Sleep(int milliseconds);
#import


void OnTick()
{
  while(! Condition()) Kernel32::Sleep(10);
}
 
Cosa c'è di così difficile? Tieni d'occhio il file dei risultati + il nativo Sleep risolve il problema.
Motivazione: