Errori, bug, domande - pagina 1747
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Come posso rimuovere l'incollaggio visivo degli oggetti NOT LABEL alle coordinate temporali delle barre?
Ho impostato la coordinata temporale dell'oggetto su secondi, ma si visualizza come se la impostassi sul timeframe.
Ho scavato la domanda
Forum sul trading, sistemi di trading automatico e test di strategia
Errori, bug, domande
Andrew Petras, 2014.11.26 13:34
Sono molto bravo a spostare oggetti come triangolo, ellisse o rettangolo, e i punti di ancoraggio sono sproporzionatamente "fluttuanti".
Non dipende da queste impostazioni
Creo
trascinare e rilasciare
Il rettangolo è "alla deriva" del secondo punto, il triangolo e l'ellisse hanno il terzo punto.
Si può rimediare a questo? Ho bisogno di "misure" precise.
Quando seleziono "Precise time scale", il binding menzionato scompare e tutto viene mostrato come dovrebbe essere. Tuttavia, non ho trovato da nessuna parte in MQL5 come abilitare/disabilitare questo parametro. Non è previsto?
Ho davvero bisogno di aiuto! Sto cercando di capire la causa di questo strano comportamento da qualche ora. Alla fine ho scritto un EA con un risultato abbastanza inaspettato
string TimeToString( const ulong Time )
{
return(TimeToString(Time / 1000, TIME_DATE|TIME_SECONDS) + "." + ::IntegerToString(Time % 1000, 3, '0'));
}
void OnTick()
{
static MqlTick PrevTick = {0};
MqlTick NowTick;
if (SymbolInfoTick(_Symbol, NowTick) && (PrevTick.time_msc > NowTick.time_msc))
Alert(TOSTRING(TimeToString(PrevTick.time_msc)) + TOSTRING(TimeToString(NowTick.time_msc)));
PrevTick = NowTick;
}
Il risultato (bottom-up)
2016.10.31 11:55:51.031 Test10 (Si-12.16,M1) TimeToString(PrevTick.time_msc) = 2016.10.31 12:58:10.702
2016.10.31 11:55:50.979 Test10 (Si-12.16,M1)
2016.10.31 11:55:50.979 Test10 (Si-12.16,M1) TimeToString(NowTick.time_msc) = 2016.10.31 12:58:10.654
2016.10.31 11:55:50.979 Test10 (Si-12.16,M1) TimeToString(PrevTick.time_msc) = 2016.10.31 12:58:10.656
2016.10.31 11:55:45.792 Test10 (Si-12.16,M1)
2016.10.31 11:55:45.792 Test10 (Si-12.16,M1) TimeToString(NowTick.time_msc) = 2016.10.31 12:58:05.458
2016.10.31 11:55:45.792 Test10 (Si-12.16,M1) TimeToString(PrevTick.time_msc) = 2016.10.31 12:58:05.464
2016.10.31 11:53:45.807 Test10 (Si-12.16,M1)
2016.10.31 11:53:45.807 Test10 (Si-12.16,M1) TimeToString(NowTick.time_msc) = 2016.10.31 12:56:05.474
2016.10.31 11:53:45.807 Test10 (Si-12.16,M1) TimeToString(PrevTick.time_msc) = 2016.10.31 12:56:05.476
SymbolInfoTick a volte restituisce (bisogna aspettare) un tick con un tempo inferiore al precedente!
Che diavolo è tutto questo? Configurazione
Terminal C:\Program Files\BCS Broker MetaTrader 5 Terminal
Terminal Windows 7 Ultimate (x64 based PC), IE 09.00, Intel Core i7-2700K @ 3.50GHz, RAM: 11327 / 16301 Mb, HDD: 4346 / 30000 Mb, GMT+02:00
Terminal MetaTrader 5 x64 build 1455 started (MetaQuotes Software Corp.)
Ho davvero bisogno di aiuto! Sto cercando di capire la causa di questo strano comportamento da qualche ora. Alla fine ho scritto un EA con un risultato abbastanza inaspettato
string TimeToString( const ulong Time )
{
return(TimeToString(Time / 1000, TIME_DATE|TIME_SECONDS) + "." + ::IntegerToString(Time % 1000, 3, '0'));
}
void OnTick()
{
static MqlTick PrevTick = {0};
MqlTick NowTick;
if (SymbolInfoTick(_Symbol, NowTick) && (PrevTick.time_msc > NowTick.time_msc))
Alert(TOSTRING(TimeToString(PrevTick.time_msc)) + TOSTRING(TimeToString(NowTick.time_msc)));
PrevTick = NowTick;
}
Il risultato (bottom-up)
2016.10.31 11:55:51.031 Test10 (Si-12.16,M1) TimeToString(PrevTick.time_msc) = 2016.10.31 12:58:10.702
2016.10.31 11:55:50.979 Test10 (Si-12.16,M1)
2016.10.31 11:55:50.979 Test10 (Si-12.16,M1) TimeToString(NowTick.time_msc) = 2016.10.31 12:58:10.654
2016.10.31 11:55:50.979 Test10 (Si-12.16,M1) TimeToString(PrevTick.time_msc) = 2016.10.31 12:58:10.656
2016.10.31 11:55:45.792 Test10 (Si-12.16,M1)
2016.10.31 11:55:45.792 Test10 (Si-12.16,M1) TimeToString(NowTick.time_msc) = 2016.10.31 12:58:05.458
2016.10.31 11:55:45.792 Test10 (Si-12.16,M1) TimeToString(PrevTick.time_msc) = 2016.10.31 12:58:05.464
2016.10.31 11:53:45.807 Test10 (Si-12.16,M1)
2016.10.31 11:53:45.807 Test10 (Si-12.16,M1) TimeToString(NowTick.time_msc) = 2016.10.31 12:56:05.474
2016.10.31 11:53:45.807 Test10 (Si-12.16,M1) TimeToString(PrevTick.time_msc) = 2016.10.31 12:56:05.476
SymbolInfoTick a volte restituisce (bisogna aspettare) un tick con un tempo inferiore al precedente!
Che diavolo è tutto questo? Configurazione
Terminal C:\Program Files\BCS Broker MetaTrader 5 Terminal
Terminal Windows 7 Ultimate (x64 based PC), IE 09.00, Intel Core i7-2700K @ 3.50GHz, RAM: 11327 / 16301 Mb, HDD: 4346 / 30000 Mb, GMT+02:00
Terminal MetaTrader 5 x64 build 1455 started (MetaQuotes Software Corp.)
Linea magica
virtual int f( const ABCDEFGHIJK ) const { return ABCDEFGHIJK; }
Sequenza di azioni (rigorosa)
Risultato:
Impostazioni qui: https://www.mql5.com/ru/forum/1111/page1127#comment_795376
Sì, non sei l'unico che ha bisogno di aiuto qui. È da qualche settimana che cerco di arrotolare bene i miei tic in una candela. Quindi... i tic sono ancora grezzi. Offerta in SD#1598238
Tiki rotola nella candela normalmente.
Davvero? E i volumi sono gli stessi? E avete eseguito i controlli? E puoi anche mostrare i registri?
Ha fatto il controllo - guarda il codobase. Non preoccupatevi della mancata corrispondenza tra i volumi delle candele e quelli calcolati, perché si tratta di un tick di confine, che può cadere in una barra o nell'altra. Questo non è il principio. Ho anche postato l'indicatore di rotazione degli scambi sul forum. Quindi non c'è nessun problema.
Nel tuo caso, se diventi molto nerd, puoi prendertela con il meccanismo di creazione delle barre, ma non con CopyTicks.
Errore di compilazione
protected:
void f( int ) {} //(*)
};
class B : public A {
public:
void f( uint ) {}
};
void OnStart()
{
B b;
b.f( 1 ); //'A::f' - cannot call protected member function
}
E se si rimuove la linea (*), tutto è a posto. Cosa c'è di sbagliato in B::f(uint)? Se si guarda la situazione dall'altro lato
public:
void f( int ) {} //(**)
};
class B : public A {
public:
void f( uint ) {}
};
possiamo vedere gli svantaggi fondamentali dell'algoritmo MQL di ricerca di una funzione corrispondente. Nel 2° esempio, B::f(uint) sarà chiamato fino a quando non ci sarà nessuna stringa (**). Non appena appare la linea (**), A::f(int) sarà chiamato. Significa che i cambiamenti nella classe base influenzano il risultato finale, mentre in C++ B::f(uint) sarà sempre chiamato indipendentemente dai cambiamenti nella classe base, il che garantisce la stabilità del risultato finale.
In MQL, si scopre che lo sviluppatore della classe A ha appena inventato una nuova funzione pubblica-protetta-privata e per questo l'utente della classe B ha smesso di compilare il codice e/o, cosa più critica, il risultato finale è cambiato
Linea magica
virtual int f( const ABCDEFGHIJK ) const { return ABCDEFGHIJK; }
Sequenza di azioni (rigorosa)
Risultato:
Impostazioni qui: https://www.mql5.com/ru/forum/1111/page1127#comment_795376
Errore di compilazione
protected:
void f( int ) {} //(*)
};
class B : public A {
public:
void f( uint ) {}
};
void OnStart()
{
B b;
b.f( 1 ); //'A::f' - cannot call protected member function
}
E se si rimuove la linea (*), tutto è a posto. Cosa c'è di sbagliato in B::f(uint)? Se si guarda la situazione dall'altro lato
public:
void f( int ) {} //(**)
};
class B : public A {
public:
void f( uint ) {}
};
possiamo vedere gli svantaggi fondamentali dell'algoritmo MQL di ricerca di una funzione corrispondente. Nel 2° esempio, B::f(uint) sarà chiamato fino a quando non ci sarà nessuna stringa (**). Non appena appare la linea (**), A::f(int) sarà chiamato. Significa che i cambiamenti nella classe base influenzano il risultato finale, mentre in C++ B::f(uint) sarà sempre chiamato indipendentemente dai cambiamenti nella classe base, il che garantisce la stabilità del risultato finale.
In MQL, si scopre che lo sviluppatore della classe A ha appena inventato una nuova funzione pubblica\protetta\privata e per questo l'utente della classe B ha smesso di compilare il codice e/o, più criticamente, il risultato finale è cambiato.
Solo la costante "1" nella chiamata b.f( 1 ) è interpretata come int. Fate una conversione esplicita e tutto funzionerà:
b.f( (uint)1 );