Erros, bugs, perguntas - página 651

 
mql5:
Não, não se trata apenas de um problema de um terminal de 32 bits. Mas a solução para o terminal de 32 bits está pronta para hoje enquanto que no terminal de 64 bits ainda existe uma limitação de pilha em 256Kb.
Mas se o programador não especificar manualmente o tamanho da pilha necessária utilizando uma propriedade, o EX5 no terminal funcionará com o tamanho de pilha predefinido ( 256Kb).

Sobre o grande tamanho.
Cada declaração de variável dentro de uma função (excepto para variáveis estáticas) atribui espaço na pilha, e a atribuição de espaço na pilha para variáveis locais ocorre em cada chamada.

Portanto, se uma função tem 64Kb variáveis locais, o espaço da pilha é suficiente para 3 chamadas, e o transbordo da pilha ocorre em 4 chamadas (como parte da pilha é utilizada para as necessidades internas do terminal). Portanto, se houver necessidade de grandes dados locais, é melhor usar memória dinâmica - quando se entra na função, a memória para necessidades locais é atribuída no sistema (novo, ArrayResize) e quando se sai da função, a memória é apagada (delete, ArrayFree).

Obrigado pela explicação detalhada. Mas esse não é definitivamente o meu problema. Tentarei escrever um consultor de testes para detectar este erro, uma vez que a função onde as pernas estão a crescer já é encontrada e não existem tais volumes (64Kb - 256Kb). Enviarei então um perito ao Service Desk com a função de problema à noite.

 

Mais uma pergunta (e um pedido de explicação na ajuda) sobre o trabalho da mesma função(CLBufferWrite()).

Se eu escrever informação directamente do buffer de indicadores com a bandeira ArrayIsSeries (==verdadeiro), em que direcção será lida a matriz de entrada?

Suspeito que a bandeira será ignorada, e além disso não é claro de que lugar será lida? O turno será contado a partir do fim físico da matriz ou desde o início?

Claro, vou soprar na água por precaução (vou trabalhar com o ArrayIsSeries== falso), mas mesmo assim ?

 
A funcionalidade de trabalhar com o buffer OpenCL está actualmente incompleta e será adicionada/descrita.
offset - estas funções são realmente offsets em bytes desde o início do buffer OpenCL e o array passado para a função será copiado do item nulo sem ter em conta a bandeira ArrayIsSeries.
 
mql5:
1) Actualmente, a funcionalidade de trabalhar com o buffer OpenCL não está completa e será adicionada/actualizada.
2. offset - estas funções são na realidade um offset em bytes desde o início do buffer OpenCL enquanto um array passado para a função será copiado do elemento zero sem ter em conta a bandeira ArrayIsSeries.

1. Eu suspeito assim... :)

Portanto, não há maneira de escrever directamente do tampão indicador em partes (por agora).

Uma boa ideia é, evidentemente, tornar as posições de partida móveis tanto na fonte como no receptor. Como aqui:

int  ArrayCopy(
   void  dst_array[],       // куда копируем
   void  src_array[],       // откуда копируем
   int   dst_start=0,       // с какого индекса пишем в приемник
   int   src_start=0,       // с какого индекса копируем из источника
   int   cnt=WHOLE_ARRAY    // сколько элементов
   );

Com indexação (direcção e unidades (bytes/elementos)) por favor tenha mais cuidado na ajuda. :)))

--

Obrigado pela resposta, aprecio muito os vossos esforços para melhorar a funcionalidade.

Aguardarei com paciência a continuação do banquete. Entretanto, terei de dançar na borda de uma adaga. :)

 

Construir 597 x64, acabado de instalar.

2012.02.23 21:43:24 OpenCLTest (EURUSD,M30) SaveBitmapToFile abertura de erro 'Mandelbrot.bmp
2012.02.23 21:43:13 OpenCLTest (EURUSD,M30) SaveBitmapToFile abertura de erro 'Mandelbrot.bmp
2012.02.23 21:43:12 OpenCLTest (EURUSD,M30) SaveBitmapToFile abertura de erro 'Mandelbrot.bmp
2012.02.23 21:43:10 OpenCLTest (EURUSD,M30) SaveBitmapToFile abertura de erro 'Mandelbrot.bmp
2012.02.23 21:43:09 OpenCLTest (EURUSD,M30) SaveBitmapToFile abertura de erro 'Mandelbrot.bmp
2012.02.23 21:43:08 OpenCLTest (EURUSD,M30) SaveBitmapToFile abertura de erro 'Mandelbrot.bmp
2012.02.23 21:43:07 OpenCLTest (EURUSD,M30) SaveBitmapToFile abertura de erro 'Mandelbrot.bmp
2012.02.23 21:43:06 OpenCLTest (EURUSD,M30) SaveBitmapToFile abertura de erro 'Mandelbrot.bmp

Isto nunca tinha acontecido antes.

// Win7 x64

 
MetaDriver:

Construir 597 x64, acabado de instalar.

Não era assim antes.

// Win7 x64.

Tente recompilar o exemplo. Verifiquei-o - funciona para mim.
 
Renat:
Tente recompilar o exemplo. Verifiquei-o - funciona para mim.

Já o recompilei uma centena de vezes. Vou reiniciar novamente.

 
MetaDriver:

... Vou reiniciar novamente.

Não, não ajudou.

Renat:

...... Verifiquei - funciona para mim.

Também funciona para mim, mas a cada dez ou quarenta ciclos recebo a mesma porcaria:

2012.02.23 23 16:44 OpenCLTest (EURUSD,M30) SaveBitmapToFile abertura de erro 'Mandelbrot.bmp
2012.02.23 23 16:16:43 OpenCLTest (EURUSD,M30) SaveBitmapToFile abertura de erro 'Mandelbrot.bmp
2012.02.23 23 16:16:42 OpenCLTest (EURUSD,M30) SaveBitmapToFile abertura de erro 'Mandelbrot.bmp
2012.02.23 23 16:16:36 OpenCLTest (EURUSD,M30) SaveBitmapToFile abertura de erro 'Mandelbrot.bmp
 
MetaDriver:

Não, não ajudou.

Isto também funciona para mim, mas a cada dez ou quarenta ciclos recebo esta porcaria:

Também descoberto.

Isto porque o ficheiro especificado é tratado em dois tópicos diferentes sem sincronização e ocasionalmente o ficheiro fica bloqueado:

  1. o ficheiro de script sobrepõe-se 10 vezes por segundo (depende da velocidade do cartão)
  2. o gráfico recarrega a imagem no seu fio a pedido do guião

Uma vez que o exemplo com a imagem foi feito apenas para demonstrar o princípio de trabalhar com OpenCL, não é um problema.

Документация по MQL5: Файловые операции / FileMove
Документация по MQL5: Файловые операции / FileMove
  • www.mql5.com
Файловые операции / FileMove - Документация по MQL5
 
Renat:

Uma vez que o exemplo com o quadro foi feito apenas para demonstrar o princípio de trabalhar com OpenCL, não é um problema.

Concordo. Além disso, está na altura de fazer uma transferência directa para o buffer do objecto GraphLabel de qualquer maneira. :)