Erros, bugs, perguntas - página 2932
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Erro na descrição:
Estrutura de uma transacção comercial (MqlTradeTransaction)
Este campo é chamado: time_type
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.
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)))
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...
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.
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
O resultado deve ser o seguinte:
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:
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?