Errori, bug, domande - pagina 106

 
Rosh:

Questo è probabilmente per quei simboli che non sono in MarketWatch, come dice per SymbolName:

Emetti il nome del simbolo per il quale ottieni un risultato inaspettato e confrontalo con la lista in MarketWatch.
Tutti i simboli sono presenti in MarketWatch, in particolare, restituisce zero per gli strumenti di tipo #AA, ho appositamente messo false nello script
string symbol=SymbolName(i,false);
Se non c'è nessun simbolo nella finestra di MarketWatch, la funzione
if(SymbolInfoTick(symbol,last_tick))
restituisce l'errore 4302, la guida non specifica che per il buon funzionamento di questa funzione, il simbolo deve essere presente nella finestra di MarketWatch
 
sergey1294:
...non è menzionato nell'aiuto che per il buon funzionamento di questa funzione è necessario che lo strumento sia presente nella finestra di MarketWatch

L'aiuto ha davvero bisogno di personale con esempi normali e colli di bottiglia.

PS

Inoltre, ci sono spesso situazioni in cui, dopo aver apportato modifiche al linguaggio, alcuni EA della base smettono di funzionare (o generano errori di compilazione).

 

Notato oggi...MT5(access.metatrader5.com:443)

EURJPY, Quotidiano:

Per esempio GBPJPY, Daily: Qui tutto va bene.

Ed ecco uno screenshot di EURJPY, giornaliero di un MT4 DC:

La differenza è visibile a occhio nudo....

Come si può rimediare a questo?

 
Rosh:

Questo è probabilmente per quei simboli che non sono presenti in MarketWatch, poiché per SymbolName dice:

Emetti il nome del simbolo per il quale ottieni un risultato inaspettato e confrontalo con la lista in MarketWatch.

Per i simboli che non sono presenti in MarketWatch, SymbolInfoTick() restituisce un errore ERR_MARKET_SELECT_ERROR "Symbol not selected in MarketWatch" (codice 4302). Solo EURUSD e GBPUSD sono selezionati in MarketWatch. Un'esecuzione elementare mostra che SymbolInfoTick() restituisce un errore ERR_MARKET_SELECT_ERRORper i simboli non selezionati :

IS      0       1 (EURUSD,M15)  01:53:21        ************************************************
MF      0       1 (EURUSD,M15)  01:53:21        Инструмент - EURUSD
RR      0       1 (EURUSD,M15)  01:53:21        Валюта депозита = USD
RG      0       1 (EURUSD,M15)  01:53:21        Базовая валюта = EUR
QM      0       1 (EURUSD,M15)  01:53:21        Валюта маржи = EUR
CH      0       1 (EURUSD,M15)  01:53:21        Маржа для покупки = 1271.23
QG      0       1 (EURUSD,M15)  01:53:21        Маржа для продажи = 1271.05
CQ      0       1 (EURUSD,M15)  01:53:21        ************************************************
JQ      0       1 (EURUSD,M15)  01:53:21        Инструмент - GBPUSD
HQ      0       1 (EURUSD,M15)  01:53:21        Валюта депозита = USD
EH      0       1 (EURUSD,M15)  01:53:21        Базовая валюта = GBP
RN      0       1 (EURUSD,M15)  01:53:21        Валюта маржи = GBP
MI      0       1 (EURUSD,M15)  01:53:21        Маржа для покупки = 1553.53
DP      0       1 (EURUSD,M15)  01:53:21        Маржа для продажи = 1553.25
MG      0       1 (EURUSD,M15)  01:53:21        ************************************************
LR      0       1 (EURUSD,M15)  01:53:21        Инструмент - USDCHF
NG      0       1 (EURUSD,M15)  01:53:21        Валюта депозита = USD
NJ      0       1 (EURUSD,M15)  01:53:21        Базовая валюта = USD
EQ      0       1 (EURUSD,M15)  01:53:21        Валюта маржи = USD
RI      0       1 (EURUSD,M15)  01:53:21        SymbolInfoTick() failed, error = 4302
GL      0       1 (EURUSD,M15)  01:53:21        ************************************************
PE      0       1 (EURUSD,M15)  01:53:21        Инструмент - USDJPY
DL      0       1 (EURUSD,M15)  01:53:21        Валюта депозита = USD
DF      0       1 (EURUSD,M15)  01:53:21        Базовая валюта = USD
OL      0       1 (EURUSD,M15)  01:53:21        Валюта маржи = USD
HL      0       1 (EURUSD,M15)  01:53:21        SymbolInfoTick() failed, error = 4302
QH      0       1 (EURUSD,M15)  01:53:21        ************************************************

...

A proposito, l'ultimo blocco di dati nel logdi sergey1294 è diverso dagli altri: primo, SymbolInfoTick() restituisce lo stesso codice di errore questa volta, e secondo, - non pensate che lo strumento, la valuta di base e la valuta di margine abbiano dei nomi strani in questo blocco di dati?

È un bug? Avete notato questa stranezza?

CE      0       OrderCalcMargin (EURUSD,M1)     20:44:27        ************************************************
IG      0       OrderCalcMargin (EURUSD,M1)     20:44:27        Инструмент - 
LS      0       OrderCalcMargin (EURUSD,M1)     20:44:27        Валюта депозита = USD
DD      0       OrderCalcMargin (EURUSD,M1)     20:44:27        Базовая валюта = 
CL      0       OrderCalcMargin (EURUSD,M1)     20:44:27        Валюта маржи = 
RG      0       OrderCalcMargin (EURUSD,M1)     20:44:27        SymbolInfoTick() failed, error = 4302
 
Per quanto riguarda l'ultimo blocco di dati, questo è solo un piccolo inconveniente nel ciclo, e nell'ultima query di dati ha avuto accesso a uno strumento inesistente, quindi tutti i campi tranne la valuta di deposito sono vuoti
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете - Документация по MQL5
 
sergey1294:
Per quanto riguarda l'ultimo blocco di dati, è solo che il ciclo di forza bruta ha avuto un piccolo intoppo e nell'ultima richiesta di dati ha avuto accesso a un simbolo inesistente, quindi tutti i campi tranne la valuta del deposito sono vuoti

Come è possibile? Cioè, il log non è della versione del codice che è stata data?

A giudicare dal codice, lì è tutto a posto.

Oppure SymbolsTotal() restituiva un valore, ma durante l'esecuzione dello script, da qualche parte nel mezzo del ciclo, per un terribile incidente, il broker, impostando la parte server, rimuoveva un simbolo dalla disponibilità, e la SymbolsTotal() - se lo script lo richiedeva - restituiva un nuovo valore, uno in meno, ma, poiché la condizione di fine ciclo era basata sul vecchio valore memorizzato nella variabile Total, allora le funzioni corrispondenti all'ultima iterazione quando accedevano al simbolo ora inesistente restituivano righe vuote? :)

Finora, è venuto fuori solo questo scenario per farlo accadere. :)

 
Non so come sia successo, ma non è ancora successo
 
simpleton:

... Poi il valore calcolato viene esplicitamente convertito in ulong. Esattamente a ulong, perché c'è la garanzia che il valore da lanciare sia non negativo.

Durante il cast in un tipo intero, la parte frazionaria del tipo reale viene scartata. Non è l'arrotondamento all'uno più vicino, ma proprio il buttare via la parte frazionaria che garantisce il non aumento del valore dei lotti massimi, che il margine libero permette. Questo è esattamente ciò di cui abbiamo bisogno.

Simpleton, ho anche seguito un modo simile, ma usando una conversione esplicita al tipo int. Ho supposto che la dimensione massima possibile del lotto sarà limitata o dal broker/dealer, o dalla dimensione dei miei fondi. Quindi usare int dovrebbe essere sufficiente. Pensi che ci siano delle insidie con questo approccio (arrotondamento "dal basso" usando int)?
 

Sviluppatori.

Come faccio a far apparire i parametri negli script (sono troppo pigro per cambiare costantemente il codice per nuove condizioni)...?

 
Interesting:

Sviluppatori.

Come faccio a far apparire i parametri negli script (sono troppo pigro per cambiare costantemente il codice per nuove condizioni)...?


#property script_show_inputs
Motivazione: