Erros, bugs, perguntas - página 2932

 

Erro na descrição:

Erro

Este campo é chamado: time_type

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
  • www.mql5.com
Структура торговой транзакции - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
x572intraday:

Estou a tentar permitir que o utilizador seleccione tanto os prazos como o seu número a partir do menu da janela de configuração do indicador:

e quero que os períodos seleccionados vão directamente para PArray. Mas a partir do exemplo acima, acontece que atribuo à matriz os valores pré-definidos no programa e não os valores introduzidos por um utilizador. Além disso, o compilador gera avisos:

Quando tento substituir a última linha por:

o compilador gera um erro no seu conjunto:

Além disso, NO_PERIOD=0 significaPERIOD_CURRENT, e eu não preciso disso, preciso de algo como falso ou VAZIO_VALOR, mas eles não cabem de todo.

Como é que o arranjo?

Quase que a arranjou.

 
As configurações dos símbolos no testador não se mantêm, os horários das sessões de negociação são cortados na quinta e sexta-feira, por isso há sempre um mercado de erros fechado, as posições não são abertas, a optimização é impossível, o robô não funciona correctamente, outros corretores estão bem, mas eu preciso deste, o que devo fazer? Não sei, mas nunca tive este tipo de problema antes. Não sei, não sei se já registei o robô comercial, mas nunca fui capaz de abrir posições. Quem sabe o que fazer? Registou uma nova conta, limpou o terminal de ficheiros temporários, tentou outro terminal, sem ajuda. problemas de vídeo https://radikal.ru/video/1HA3UfUNVZt
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
  • www.mql5.com
SymbolInfoSessionQuote - Получение рыночной информации - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Poderia dizer-nos que métodos de combate ao erro "array out of range" estão disponíveis? Em primeiro lugar, não posso utilizar o Print para imprimir um elemento de matriz que tenha ficado fora de alcance porque o erro está demasiado à sua frente e nunca chega à impressão. Em segundo lugar, este erro não aparece sistematicamente, mas como lhe apraz: apareceu uma vez e o indicador não funcionou (no entanto está presente na lista de indicadores no gráfico), todas as vezes seguintes não ocorreu, sem recompilar o indicador, nada a dizer sobre a sua modificação.
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
x572intraday:
Diga-me, que métodos de luta existem para apanhar e corrigir o erro "array out of range"?

ArrayResize() faz antes de escrever um elemento de matriz, conta e introduz aí o número de elementos que devem estar na matriz, ou utiliza uma matriz dinâmica que por sua vez engorda. Vai apenas para fora da matriz, por exemplo, especifica um tamanho de 100 elementos, mas como o primeiro elemento é #0 algumas pessoas ficam confusas, se escrever os números numa fila, caberá 0-99. Não sou um programador profissional se alguma coisa (mas posso), a primeira coisa que me vem à cabeça, funciona)))

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Объект динамического массива - Типы данных - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
freelancerAntonyan:

Faça ArrayResize() antes de escrever um elemento do array, conte e introduza aí o número de elementos que devem estar no array, ou utilize um array dinâmico que cresça por si mesmo.

Na verdade, é dinâmico de qualquer forma. Da ajuda:"A função só pode ser aplicada a arrays dinâmicos. Note-se que as matrizes dinâmicas atribuídas como amortecedores indicadores pela função SetIndexBuffer() não devem ser redimensionadas. Para amortecedores indicadores, todas as operações de redimensionamento são realizadas pelo subsistema de execução do terminal. "Mas não é um tampão indicador, por isso é preciso pensar com as mãos e a cabeça...

 
x572intraday:

Na verdade, já é dinâmico. Da ajuda:"A função só pode ser aplicada a arrays dinâmicos. Deve ter em conta que as matrizes dinâmicas atribuídas como amortecedores indicadores pela função SetIndexBuffer() não podem ser redimensionadas. Para amortecedores indicadores, todas as operações de redimensionamento são realizadas pelo subsistema de execução do terminal. "Mas não é um tampão indicador, por isso terá de pensar com as mãos e a cabeça.

O problema de apanhar tais erros só é resolvido utilizando "camadas", tais como uma classe de matriz personalizada que intercepta a abordagem.

MQL's OOP notes: rubber arrays, safe numbers, exceptions handling and other tricks: part 1
MQL's OOP notes: rubber arrays, safe numbers, exceptions handling and other tricks: part 1
  • 2016.11.08
  • www.mql5.com
Today we're starting a patchy subject, which will combine many different things. This is why I decided to split it into parts. Out final goal is exception handling, but before we can address it, we
 

Ao lançar o EA quando o algotrading é desactivado e depois ligar o algotrading:

De acordo com o código de erro, a proibição de comércio permanece, embora a propriedade TERMINAL_TRADE_ALLOWED seja verdadeira

#include <Greshnik\\ErrorDescription.mqh>
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
     {
      return;
     }
   MqlTradeRequest tr;
   MqlTradeResult r;
   ResetLastError();
   if(!OrderSend(tr,r))
     {
      int err=GetLastError();
      Print(err,"  ",cLng::CodeDescription(err));
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
2020.12.30 15:25:38.629 Experts automated trading is enabled
2020.12.30 15:25:39.159 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.297 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.397 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.499 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.725 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:42.781 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:43.129 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:43.758 Experts automated trading is disabled

O resultado deve ser o seguinte:

2020.12.30 15:29:58.406 Experts automated trading is enabled
2020.12.30 15:30:02.247 Test1 (EURUSD,M1)       4756  Не удалось отправить торговый запрос
2020.12.30 15:30:02.368 Test1 (EURUSD,M1)       4756  Не удалось отправить торговый запрос
2020.12.30 15:30:02.486 Test1 (EURUSD,M1)       4756  Не удалось отправить торговый запрос
2020.12.30 15:30:04.320 Experts automated trading is disabled
 
CopyTime(_Symbol,tf,0,1,Arr);
Obviamente, deve sempre ArraySize(Arr)=1. Isto é no caso de cópia bem sucedida. Mas em que casos a cópia do bar pode falhar? Porque quandoo erro "array out of range" ocorre, o terminal aponta para Arr[0].
 
x572intraday:
Obviamente, deve ser sempre ArraySize(Arr)=1. Isto é no caso de cópia bem sucedida. Mas em que casos a cópia do bar pode falhar? Quando oerro "array out of range" ocorre, o terminal aponta para Arr[0].

Afinal de contas, citação da ajuda:

4401

História solicitada não encontrada.

Imprimiu-o para o Diário de Bordo - consegui-o:

2020.12.31 14:45:20.474 test (EURUSD,H2)        ArraySize(Arr)=0; copied=-1; TF=PERIOD_H2
2020.12.31 14:45:20.474 test (EURUSD,H2)        Error Code = 4401

O que faço com ele agora, para onde vou? Sou uma mão má ou...? Afinal, só estou a copiar uma barra de 0 a 1. Como pode não ser (história)? Mais ainda, o erro nem sempre se revela. Ou é necessário verificar e carregar à força o histórico antecipadamente?