Erros, bugs, perguntas - página 106

 
Rosh:

Isto é provavelmente para aqueles símbolos que não estão na MarketWatch, como diz para SymbolName:

Produzir o nome do símbolo pelo qual se obtém um resultado inesperado e comparar com a lista na MarketWatch.
Todos os símbolos estão presentes na MarketWatch, em particular, retorna zero para os instrumentos do tipo #AA, eu ponho especificamente falso no guião
string symbol=SymbolName(i,false);
Se não houver nenhum símbolo na janela do MarketWatch, a função
if(SymbolInfoTick(symbol,last_tick))
retorna erro 4302, a ajuda não especifica que para o funcionamento bem sucedido desta função, o símbolo deve estar presente na janela MarketWatch
 
sergey1294:
...não é mencionado na ajuda, que para o trabalho bem sucedido desta função é necessário que a ferramenta esteja presente na janela do MarketWatch

A ajuda precisa realmente de ser provida de pessoal com exemplos e estrangulamentos normais.

PS

Além disso, há frequentemente situações em que, após efectuar alterações na língua, alguns EAs da base deixam de funcionar (ou geram erros de compilação).

 

Notado hoje...MT5(access.metatrader5.com:443)

EURJPY, Daily:

Por exemplo GBPJPY, Daily: Aqui tudo está bem.

E aqui está um screenshot de EURJPY, Diário de um MT4 DC:

A diferença é visível a olho nu....

Como é que isto pode ser corrigido?

 
Rosh:

Isto é provavelmente para aqueles símbolos que não estão presentes na MarketWatch, como para SymbolName diz:

Produzir o nome do símbolo pelo qual se obtém um resultado inesperado e compará-lo com a lista da MarketWatch.

Para símbolos que não estão presentes na MarketWatch, SymbolInfoTick() devolve um erro ERR_MARKET_SELECT_ERROR "Símbolo não seleccionado na MarketWatch" (código 4302). Apenas EURUSD e GBPUSD são seleccionados na MarketWatch. Uma execução elementar mostra que SymbolInfoTick() retorna um erro ERR_MARKET_SELECT_ERRORpara símbolos não seleccionados :

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 propósito, o último bloco de dados em sergey1294 é diferente dos outros: primeiro, SymbolInfoTick() devolve o mesmo código de erro desta vez, e segundo, - não acha que o instrumento, moeda base e moeda margem têm alguns nomes estranhos neste bloco de dados?

Isto é um insecto? Já notou esta esquisitice de todo?

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
 
Quanto ao último bloco de dados, isto é apenas uma pequena falha no laço, e na última consulta de dados acedeu a um instrumento inexistente, pelo que todos os campos, excepto a moeda de depósito, estão vazios
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете - Документация по MQL5
 
sergey1294:
Quanto ao último bloco de dados, é apenas o laço de força bruta que se rasgou um pouco e na última consulta de dados acedeu a um símbolo inexistente, pelo que todos os campos, excepto a moeda de depósito, estão vazios

Como é isto? Quer dizer, o registo não é da versão do código que foi dado?

A julgar pelo código, aí tudo está bem.

Ou SymbolsTotal() retornou um valor, mas durante a execução do script, algures no meio do ciclo, por um terrível acidente, o corretor, definindo a parte do servidor, removeu um símbolo do disponível, e o SymbolsTotal() - se o script o pedisse - retornaria um novo valor, um a menos, mas, uma vez que a condição de fim de loop era baseada no valor antigo armazenado na variável Total, então as funções correspondentes na última iteração ao aceder ao símbolo agora inexistente retornaram linhas vazias? :)

Até agora, apenas este cenário surgiu para que isto acontecesse. :)

 
Não sei como aconteceu, mas ainda não aconteceu
 
simpleton:

... Depois o valor calculado é explicitamente convertido em ulong. Exactamente ao ulong, porque há uma garantia de que o valor a ser fundido não é negativo.

Ao ser lançada a um tipo inteiro, a parte fracionária do tipo real é descartada. Não é o arredondamento para o mais próximo, mas precisamente o deitar fora a parte fracionária que garante o não aumento do valor máximo dos lotes, que a margem livre permite. É exactamente o que precisamos.

Simpleton, também tenho seguido um caminho semelhante, mas utilizando uma conversão explícita para int tipo. Assumi que o tamanho máximo possível do lote será limitado, quer pelo corretor/negociante, quer pelo tamanho dos meus próprios fundos. Assim, a utilização de int deve ser suficiente. Acha que existem algumas armadilhas com esta abordagem (arredondamento "a partir de baixo" usando int)?
 

Desenvolvedores.

Como faço aparecer parâmetros nos guiões (sou demasiado preguiçoso para mudar constantemente o código para novas condições)?

 
Interesting:

Desenvolvedores.

Como faço aparecer parâmetros nos guiões (sou demasiado preguiçoso para mudar constantemente o código para novas condições)?


#property script_show_inputs