Структура торговой транзакции - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
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.
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
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.
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 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
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.
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
2020.12.3015:25:38.629 Experts automated trading is enabled
2020.12.3015:25:39.159 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:40.297 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:40.397 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:40.499 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:40.725 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:42.781 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:43.129 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:43.758 Experts automated trading is disabled
O resultado deve ser o seguinte:
2020.12.3015:29:58.406 Experts automated trading is enabled
2020.12.3015:30:02.247 Test1 (EURUSD,M1) 4756 Не удалось отправить торговый запрос
2020.12.3015:30:02.368 Test1 (EURUSD,M1) 4756 Не удалось отправить торговый запрос
2020.12.3015:30:02.486 Test1 (EURUSD,M1) 4756 Не удалось отправить торговый запрос
2020.12.3015:30:04.320 Experts automated trading is disabled
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.3114:45:20.474 test (EURUSD,H2) ArraySize(Arr)=0; copied=-1; TF=PERIOD_H22020.12.3114: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?
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?