Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1236

 
Andrey Sokolov:

Saudações. Você poderia me dizer algo?

É possível obter o nome de uma variável em vez de seu valor? Por exemplo, imprima um nome variável.

#define PRINTVAR(x) Print(" " ##x); Print(x)
void OnStart()
  {
      long anyvar=(long)TimeLocal();
      PRINTVAR(anyvar);
  
  }

resultado:

2020.08.24 14:46:05.394    test (USDCHF,H1)     anyvar
2020.08.24 14:46:05.394    test (USDCHF,H1)    1598280365

Possivelmente uma característica de inédito :-) semelhante ao "C", mas ainda não utilizável

 
Andrey Sokolov:

Você precisa obter o nome da própria variável.

Sem conhecer o nome, e sem nenhuma característica distintiva, isto não pode ser feito. Você pode, por exemplo, obter os nomes de todas as variáveis iguais a 5 e imprimir seus nomes, encontrados, impressos. Ou nomes de todas as variáveis das cordas. Mas em qualquer caso, é uma enumeração variável.

 
Maxim Kuznetsov, obrigado
 
Andrey Sokolov:
Maxim Kuznetsov Obrigado


Sim, é também uma questão de selecionar uma variável pelo nome.

Por exemplo, existem variáveis a1, a2, a3, a4, a5, etc. Você tem que pesquisar também através destas variáveis, escolher qual delas tem "a" e 5, e usá-la.

então quase não há como. Os nomes variáveis só são acessíveis a partir do pré-processador (#macros).

Devemos mudar a lógica interna, por exemplo, usar uma matriz de nomes de hash de objeto em vez de variáveis. Então, tanto a chave como o valor estão disponíveis de uma só vez. Ou use SQLite em caso de armazenamento a longo prazo. Ou combiná-los :-)

Mas é assim, sem conhecimento de algoritmo, conselhos em vão.

 
Andrey Sokolov:

Sim, é também uma questão de selecionar uma variável pelo nome.

Por exemplo, existem variáveis a1, a2, a3, a4, a5, etc. Precisamos enumerar também estas variáveis, escolher qual delas tem "a" e 5, e usá-la.

Escreva os nomes em uma matriz e passe através da matriz.

 

Bom dia a todos! Minha pergunta é sobre o testador MT4, linguagem mql4
Por favor, me diga qual é o meu erro ao inicializar uma matriz. Eu criei uma matriz unidimensional com 750 elementos. Inicializei todos os 750 elementos com valor 50,0.

Isso significa que no primeiro e seguintes ticks, o primeiro item de matriz com índice 0 deve ter valor 50,0 e o último item de matriz com índice 749 deve ter valor 50,0.

De fato, acontece que o último item da matriz tem valor 0. E a primeira, como deveria ser, é 50,0.

A pergunta. Como fazer com que todos os valores da matriz (incluindo o último) tenham valor 50,0 após a inicialização

Aqui está meu código

duplo S_L[750]={50.0};

nulo OnTick()
{
if (Day()==4&&Month()==1&&Year()==2010&&Hour()==0&&Minute()==0)

Print("========================= 749======= ",S_L[749]," =0= ",S_L[0]);

}

Na parte inferior do valor de impressão() do diário

2020.08.24 17:43:55.427 GBPUSD,M1: 52255 tick events (1440 bars, 53256 bar states) processados em 0:00:00.047 (tempo total 0:00:02.422)

2020.08.24 17:43:55.407 2010.01.04 00:00:00:53 TESTER(B.ORG) GBPUSD,M1: ========================= 749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:00:52 TESTER(B.ORD) GBPUSD,M1: ======= 749========================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:00:50 TESTER(B.ORD) GBPUSD,M1: ======= 749========================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:00:47 TESTER(B.ORD) GBPUSD,M1: ======= 749 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:00:45 TESTER(B.ORD) GBPUSD,M1: ========================= 749 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:43 TESTER(B.ORD) GBPUSD,M1: ========================= 749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:00:41 TESTER(B.ORD) GBPUSD,M1: ======= 749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:00:40 TESTER(B.ORD) GBPUSD,M1: ======= 749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:00:37 TESTER(B.ORD) GBPUSD,M1: 749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:00:35 TESTER(B.ORD) GBPUSD,M1: ======= 749 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:00:32 TESTER(B.ORD) GBPUSD,M1: 749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:00:30 TESTER(B.ORD) GBPUSD,M1: ======= 749 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:28 TESTER(B.ORDENS) GBPUSD,M1: ======= 749 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:00:26 TESTER(B.ORD) GBPUSD,M1: ========================= 749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:00:25 TESTER(B.ORD) GBPUSD,M1: ======= 749 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:00:22 TESTER(B.ORD) GBPUSD,M1: ========================= 749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:00:20 TESTER(B.ORD) GBPUSD,M1: ======= 749========================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:00:17 TESTER(B.ORD) GBPUSD,M1: ======= 749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:00:15 TESTER(B.ORD) GBPUSD,M1: ========================= 749 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:00:13 TESTER(B.ORD) GBPUSD,M1: 749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:00:11 TESTER(B.ORD) GBPUSD,M1: ========================= 749 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:00:10 TESTER(B.ORD) GBPUSD,M1: ======= 749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:00:07 TESTER(B.ORD) GBPUSD,M1: ======= 749 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:00:05 TESTER(B.ORD) GBPUSD,M1: ========================= 749======= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:02 TESTER(B.ORD) GBPUSD,M1: ========================= 749========================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00 TESTER(B.ORDENS) GBPUSD,M1: 749======= 0 = 0= 50

2020.08.24 17:43:55.385 2010.01.01.01 00:00:00 Teste(B.ORD.) iniciado


Obrigado pela ajuda


Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные должны быть объявлены перед их использованием. Для идентификации переменных используются уникальные имена. Описания переменных используются для их определения и объявления типов. Описание не является оператором. Индексом массива может быть только целое число. Допускаются не более чем четырехмерные массивы. Нумерация элементов массива...
 
ANDREY:

Aqui está o meu.

Onde?))

 
Alexey Viktorov:

Onde?)))

Na parte superior do meu posto editado. Obrigado pela resposta.

 

ANDREY:

Pergunta. Como posso fazer com que todos os valores da minha matriz (incluindo o último) tenham um valor de 50,0 após a inicialização?

int OnInit()
{
   ArrayInitialize(S_L, 50.0);
}
 
Igor Makanu:

Obrigado pela dica. A propósito, eu queria esclarecer..... No tutorial de Kovalev ele diz que a matriz pode ser inicializada simultaneamente com sua declaração (como eu fiz), sem nenhuma função especial. Eu sei que o tutorial de Kovalev está um pouco ultrapassado. P. Eu entendo corretamente que agora em mql4, os arrays devem ser inicializados apenas usando uma função?

ArrayInitialize(S_L, 50.0)

Obrigado.

Документация по MQL5: Операции с массивами / ArrayInitialize
Документация по MQL5: Операции с массивами / ArrayInitialize
  • www.mql5.com
Функция ArrayResize() позволяет задать для массива размер с некоторым запасом для его будущего увеличения без физического перераспределения памяти. Это сделано для улучшения быстродействия, так как операции по распределению памяти...
Razão: