Nuovo MetaTrader 4 Client Terminal 387 e MetaTrader 4 Data Center build 387 - pagina 15

 
joo:

Tutti hanno diritto a un'opinione personale, ma nessuno ha il diritto di insultare gli altri.

In questo caso, è tutto perfettamente trasparente - due membri del forum hanno espresso le loro opinioni molto negative sul post di nen, che è stato seguito da un ban, e Renat ha spiegato chiaramente per cosa era il ban.

+100
 
joo:

.... Il divieto è seguito, e Renat ha spiegato chiaramente il motivo del divieto.

Ti ho solo chiesto di fare due cose:

1) per informare il visitatore del profilo di un membro del forum che questo stesso membro del forum è stato bandito.

2) quando il divieto viene emesso - per specificare il motivo (non dopo la spiegazione intelligibile, ma al momento dell'annuncio del divieto).

Questa è solo roba tecnica, che non ha niente a che vedere con la moralità, o l'educazione, o qualsiasi altra cosa.

Mi permetto ancora di suggerire il modo corretto di bannare un utente: un utente non dovrebbe essere bannato dal forum, ma solo per creare nuove discussioni e post. in modo che il bannato almeno potrebbe fare una domanda (in privato) e non per disseminare la lista degli utenti con nuovi nickname.

È puramente una richiesta/suggerimento tecnico/tecnologico per migliorare il motore del forum.

 
f.t.:

Ti ho solo chiesto di fare due cose:

1) per informare il visitatore del profilo di un membro del forum che questo stesso membro del forum è stato bandito.

2) quando il divieto viene emesso - per specificare il motivo (non dopo la spiegazione intelligibile, ma al momento dell'annuncio del divieto).

Questa è solo roba tecnica, che non ha niente a che vedere con la moralità, o l'educazione, o qualsiasi altra cosa.

Mi permetto anche di suggerire il modo corretto di bannare un utente: un utente non dovrebbe essere bandito dal forum, ma solo la creazione di nuove discussioni e post. che bannato almeno potrebbe fare una domanda (in privato) e non ha disseminato la lista degli utenti di nuovi nickname.

questa è puramente una richiesta/proposta tecnica/tecnologica per migliorare il motore del forum.

Personalmente non ho nulla contro quello che hai detto, al contrario, lo sostengo. È solo che il tuo esempio con nen è stato sfortunato e ho postato con un accenno a questo.
 
ANG3110:

OK, darò un'occhiata all'articolo a cui si riferisce.

A proposito dei dati sotto carico... Ora, a causa del passare del tempo, non posso citare i registri. Ma aveva un aspetto simile a questo.

Su American broker ATC, EA è stato lasciato acceso e il terminale è stato chiuso. Il giorno dopo il terminale è stato aperto e dopo l'apertura e il login automatico c'è stata una pausa senza quotazioni. L'Expert Advisor ha inviato un'ulteriore richiesta di aprire una posizione e la cronologia ha iniziato ad essere scambiata e la posizione è stata aperta secondo i calcoli del giorno precedente nella zona in cui avrebbe dovuto essere chiusa ma è stata appena aperta e immediatamente persa contro il mercato che si stava muovendo nella direzione opposta. La posizione finì per essere chiusa con una profonda perdita, non ricordo quanto fu persa ma molto.

Un altro caso. Ho lasciato un Expert Advisor con un calcolo del canale nel suo algoritmo, qualcosa di simile a Bollinger, ma che richiedeva molte barre perché aveva un algoritmo di adattamento. Non ho visto il momento in cui è iniziato lo scambio, ma l'ho visto circa 20 minuti dopo. Si è scoperto che le deviazioni dalla media adattata non sono state considerate e il canale si è rotto nella linea, come se si trovasse sulla media. Il mio Expert Advisor apriva e chiudeva una posizione dopo l'altra e ha perso circa 4.500 dollari in 20 minuti per 0,2-0,3 lotti. 4.500$ in un mercato totalmente vincente. Questo potrebbe accadere se ci fossero pochi dati o se mancasse qualcosa per il disegno che ho citato sopra.

Ora spengo sempre gli EA dopo il trading. Ora disabilito sempre Expert Advisors dopo la prima volta che riapro il terminale e aspetto che i dati vengano pompati e solo allora li attivo.

Dal mio punto di vista

un EA richiede la disponibilità di dati (di solito qualsiasi dato).

Per tutti gli errori si dividono in errori nel codice ed errori nei dati!

Il problema si risolve analizzando la disponibilità dei dati. Il problema si risolve analizzando la disponibilità dei dati richiesti

e la loro correttezza prima di usarli!


Per esempio: prima di dividere, è elementare controllare se stiamo cercando di dividere per zero.

questo sarà il tono corretto in quasi tutte le situazioni, anche se siete sicuri ... che una variabile ... non può essere = 0

il controllo darà il 100% di certezza che il programma non andrà in crash quando si divide! QUINDI CONTROLLA I DATI!




per evitare questo tipo di cose!

l'Expert Advisor dovrebbe sapere esattamente di quante barre ha bisogno!

un algoritmo semplice ma efficace

dovreste partire dalla candela attualmente in funzione sul o sui timeframe necessari

e vedere se ci sono delle barre mancanti - non è molto difficile

non darò il codice ... qui c'è chi può facilmente scrivere un codice del genere!


Poi, l'Expert Advisor semplicemente non strappa o chiude, ma si rompe!!! che non c'è la STORIA COMPLETA!

voi !!! tenetene conto - prendete provvedimenti per riempire le barre mancanti!

e solo dopo gli permetti di commerciare!

--

il tuo problema è che il tuo algoritmo non ha questo controllo!

sommalo! perché è più facile che perdere 4.500 dollari...

--

Per coloro che non possono scrivere un tale codice, lo scriveranno qui per 100-200 dollari

è meno di 4.500 dollari!

 
YuraZ:

dalla candela di lavoro corrente sul timeframe o sui timeframe desiderati

correre alla giusta profondità e vedere se ci sono delle barre mancanti - non è troppo difficile

Grazie Yura per il suggerimento.

Ma cosa devo fare se ho appena aperto il terminale e la barra zero è ancora vecchia, per esempio del giorno precedente. Certo, possiamo correre fino a una certa profondità da esso contando le barre mancanti, ma sarà un errore. Come fa l'EA a sapere se questa è l'ultima barra o no? Ho detto prima che in linea di principio si può confrontare TimeLocal() e TimeCurrent() tenendo conto della differenza di tempo e aggiungendo un piccolo delta, perché a volte non c'è una quotazione per 3-5 minuti, soprattutto a coppie CAD, e probabilmente può essere considerato un errore. Forse, è sufficiente farlo durante l'entrata e la correzione delle barre mancanti dopo, per esempio, quando la comunicazione è interrotta per diversi minuti, e probabilmente non è necessario ricalcolare ad ogni barra perché ci vorrebbe troppo tempo per ricalcolare. L'Expert Advisor che ho scritto sulle perdite richiede fino a 20 mila barre per l'adattamento statistico iniziale. Per un tale numero sarebbe penoso eseguire dei cicli su ogni barra e probabilmente non è necessario. Naturalmente, non è il modo migliore e dipende anche dall'orologio del computer. Forse puoi pensare a qualcosa di meglio? Tuttavia, come ho osservato ultimamente, se la funzione IsConected() si attiva, la barra zero di solito appare quasi immediatamente.

 
ANG3110:

Grazie, Yura, per il suggerimento.

Ma cosa devo fare, se il terminale è appena aperto e la barra zero è ancora vecchia - diciamo del giorno precedente. Naturalmente possiamo correre fino a una certa profondità da esso contando le barre mancanti, ma sarà un errore. Come fa l'EA a sapere se questa è l'ultima barra o no? Ho detto prima che in linea di principio si può confrontare TimeLocal() e TimeCurrent() tenendo conto della differenza di tempo e aggiungendo un piccolo delta, perché a volte non c'è una quotazione per 3-5 minuti, soprattutto a coppie CAD, e probabilmente può essere considerato un errore. Forse, è sufficiente farlo durante l'inserimento e la correzione delle barre mancanti dopo, per esempio, quando la comunicazione è interrotta per diversi minuti, e probabilmente non è necessario ricalcolare ad ogni barra perché ci vorrebbe troppo tempo per contare. L'Expert Advisor che ho scritto sulle perdite richiede fino a 20 mila barre per l'adattamento statistico iniziale. Per un tale numero sarebbe angosciante cercare i cicli su ogni barra e probabilmente non è necessario. Naturalmente, non è il modo migliore e dipende anche dall'orologio del computer. Forse puoi pensare a qualcosa di meglio? Tuttavia, come stavo osservando ultimamente, se la funzione IsConected() si è attivata, la barra zero di solito appare quasi immediatamente.

Beh, a me sembra tutto semplice... La procedura int start() è chiamata solo ad un nuovo tick, ed è al 100% significa che la funzione TimeCurrent() (restituisce l'ultimo tempo conosciuto del server (tempo dell'ultimo arrivo della quotazione)) sarà già attuale indipendentemente dalla disponibilità delle barre...

Penso che tutto sia chiaro dopo questo...

 
Renat:

Sfortunatamente, non hai specificato alcun dato iniziale, parametri di test o log.

Inoltre, ti riferisci a librerie (DLL) che non solo richiedono un sacco di installazioni, ma anche non funzionano a causa della mancanza di librerie aggiuntive (questo è per l'autore delle librerie, che ha dimenticato i file DLL aggiuntivi).

Contattate l'autore di queste biblioteche per informazioni.


Se hai seguito il link da me fornito, vedresti che solo un parametro di input ha un valore ed è impostato come descritto: StopLoss=100...1 000 passo 10; x=1...1 000 000 passo 1. Inoltre, ho detto che la build precedente non ha generato questo errore, quindi l'errore è tuo. Tutto funziona davvero. Dà solo questo strano messaggio. Quindi, potrebbe essere solo questo messaggio per me e potrebbe non funzionare per qualcun altro a causa delle conseguenze di questo errore.
 
ANG3110:

Grazie, Yura, per il suggerimento.

Ma cosa devo fare, se il terminale è appena aperto e la barra zero è ancora vecchia - diciamo del giorno precedente. Naturalmente possiamo correre fino a una certa profondità da esso contando le barre mancanti, ma sarà un errore. Come fa l'EA a sapere se questa è l'ultima barra o no? Ho detto prima che in linea di principio si può confrontare TimeLocal() e TimeCurrent() tenendo conto della differenza di tempo e aggiungendo un piccolo delta, perché a volte non c'è una quotazione per 3-5 minuti, soprattutto a coppie CAD, e probabilmente può essere considerato un errore. Forse, è sufficiente farlo durante l'inserimento e la correzione delle barre mancanti dopo, per esempio, quando la comunicazione è interrotta per diversi minuti, e probabilmente non è necessario ricalcolare ad ogni barra perché ci vorrebbe troppo tempo per contare. L'Expert Advisor che ho scritto sulle perdite richiede fino a 20 mila barre per l'adattamento statistico iniziale. Per un tale numero sarebbe penoso eseguire dei cicli su ogni barra e probabilmente non è necessario. Naturalmente, non è il modo migliore e dipende anche dall'orologio del computer. Forse puoi pensare a qualcosa di meglio? Anche se, come stavo osservando ultimamente, se la funzione IsConected() si è attivata, la barra zero di solito appare quasi immediatamente.

Ciao!


anche questo può essere controllato logicamente!

In primo luogo, si ottengono alcuni tick e si cronometra il TimeCurrent() e se è lontano dalle barre, lo si carica - ma bisogna anche tener conto del fine settimana.

il lunedì è necessario conoscere l'ora di inizio presso il vostro broker, e il venerdì l'ora di fine (a questo, su piccole ff hanno un piccolo errore di poche barre

( l'ora di inizio il lunedì e l'ora di fine il venerdì possono essere calcolate automaticamente con il metodo della media per un periodo più grande )

esempio di logica

// простой пример контроля истори, просто логика 
 
int ФЛАГпроверкиИСТОРИ =0; // 0-история не проверена или не загружена

void init()
{
    ФЛАГпроверкиИСТОРИ   =0; // ставим флаг
}


void start()
{
     // читаем историю на предмет пропущеных баров
    if ( ФЛАГпроверкиИСТОРИ   == 0)
    {
// проверяем а вся ли нужна история есть и если нет то она загружается
      // загружаем
       если загружена ФЛАГпроверкиИСТОРИ=1;
       return;
    }
}


 
Akkarin:

Se hai seguito il link da me fornito, vedresti che solo un parametro di input ha valore ed è stato impostato, come è detto nella descrizione: StopLoss=100..1 000 passo 10; x=1..1 000 000 passo 1. Inoltre, ho detto che la build precedente non ha generato questo errore, quindi l'errore è tuo. Tutto funziona davvero. Dà solo questo strano messaggio. Quindi può essere solo questo messaggio per me, mentre qualcun altro può non funzionare affatto a causa delle conseguenze di questo errore.


Ho diligentemente risolto tutto, letto tutto, capito la logica, ma mi sono imbattuto esattamente in quello che ha detto - non abbastanza libreria dll di terze parti, che l'autore del set di librerie non ha steso (anche se ha persino fatto il programma di installazione).

Apparentemente, una banale dimenticanza. Ma non posso setacciare internet alla ricerca di qualche file dll.