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).
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 01 (EURUSD,M15) 01:53:21 ************************************************
MF 01 (EURUSD,M15) 01:53:21 Инструмент - EURUSD
RR 01 (EURUSD,M15) 01:53:21 Валюта депозита = USD
RG 01 (EURUSD,M15) 01:53:21 Базовая валюта = EUR
QM 01 (EURUSD,M15) 01:53:21 Валюта маржи = EUR
CH 01 (EURUSD,M15) 01:53:21 Маржа для покупки = 1271.23
QG 01 (EURUSD,M15) 01:53:21 Маржа для продажи = 1271.05
CQ 01 (EURUSD,M15) 01:53:21 ************************************************
JQ 01 (EURUSD,M15) 01:53:21 Инструмент - GBPUSD
HQ 01 (EURUSD,M15) 01:53:21 Валюта депозита = USD
EH 01 (EURUSD,M15) 01:53:21 Базовая валюта = GBP
RN 01 (EURUSD,M15) 01:53:21 Валюта маржи = GBP
MI 01 (EURUSD,M15) 01:53:21 Маржа для покупки = 1553.53
DP 01 (EURUSD,M15) 01:53:21 Маржа для продажи = 1553.25
MG 01 (EURUSD,M15) 01:53:21 ************************************************
LR 01 (EURUSD,M15) 01:53:21 Инструмент - USDCHF
NG 01 (EURUSD,M15) 01:53:21 Валюта депозита = USD
NJ 01 (EURUSD,M15) 01:53:21 Базовая валюта = USD
EQ 01 (EURUSD,M15) 01:53:21 Валюта маржи = USD
RI 01 (EURUSD,M15) 01:53:21SymbolInfoTick() failed, error = 4302
GL 01 (EURUSD,M15) 01:53:21 ************************************************
PE 01 (EURUSD,M15) 01:53:21 Инструмент - USDJPY
DL 01 (EURUSD,M15) 01:53:21 Валюта депозита = USD
DF 01 (EURUSD,M15) 01:53:21 Базовая валюта = USD
OL 01 (EURUSD,M15) 01:53:21 Валюта маржи = USD
HL 01 (EURUSD,M15) 01:53:21SymbolInfoTick() failed, error = 4302
QH 01 (EURUSD,M15) 01:53:21 ************************************************
...
A proposito, l'ultimo blocco di dati nel logdisergey1294 è 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 0OrderCalcMargin (EURUSD,M1) 20:44:27 ************************************************
IG 0OrderCalcMargin (EURUSD,M1) 20:44:27 Инструмент -
LS 0OrderCalcMargin (EURUSD,M1) 20:44:27 Валюта депозита = USD
DD 0OrderCalcMargin (EURUSD,M1) 20:44:27 Базовая валюта =
CL 0OrderCalcMargin (EURUSD,M1) 20:44:27 Валюта маржи =
RG 0OrderCalcMargin (EURUSD,M1) 20:44:27SymbolInfoTick() 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
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. :)
... 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)?
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
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....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?
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 :
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?
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. :)
... 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.
Sviluppatori.
Come faccio a far apparire i parametri negli script (sono troppo pigro per cambiare costantemente il codice per nuove condizioni)...?
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