[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 38

 
ikatsko >> :

esquerda (por simplicidade) apenas o que constitui o problema no código. Colocar o indicador e ver o problema, por assim dizer.




Se não estou enganado, a função init é chamada apenas uma vez, quando você desliga em um gráfico. Seria lógico forçar a reinicialização quando o tf muda - para evitar "coisas estranhas" com o trabalho do gerente de memória.

if( CurrentPeriod!=Period())
{
    ReInitParam();
    CurrentPeriod=Period();
}

>> Boa sorte.

 
ikatsko писал(а) >>

esquerda (por simplicidade) apenas o que constitui o problema no código. Colocamos o indicador e vemos o problema, por assim dizer.



//+------------------------------------------------------------------+
//| Função de inicialização do indicador personalizado |
//+------------------------------------------------------------------+
int init()
{
//...........................................................
Set_SL[History*Depth]=1.0*Level*Point;
Alerta("Init:"," Set_SL[",History*Depth,"]=",Set_SL[History*Depth]);//suspendeu para ver: mostra (digamos) 0,0001
//--------------------------------------------------------------------//----
retorno(0);
}

Você não deve se referir a arrays do init(). O mais provável é que as matrizes ainda não tenham sido inicializadas. Faz sentido mover a parte problemática para começar()

 
Vinin >> :

É suficiente verificar a última transação fechada. Mas você tem que prever quando ainda não há história

Que função você pode usar para fazer isso?

 
xruss писал(а) >>

Que função pode ser usada para fazer isso?

Você tem que escrever uma função ou procurar por uma já feita.

 
VladislavVG >> :

Se não estou enganado, a função init é chamada apenas uma vez, quando você desliga em um gráfico. Seria lógico forçar a reinicialização quando se muda o t\f - para evitar "coisas estranhas" com a operação do gerenciador de memória.


Boa sorte.

Do tutorial:

Função init() especial.
Nos indicadores personalizados a função init() especial é chamada (e executada) imediatamente após o início do terminal do cliente, após uma mudança de um símbolo e/ou de um período gráfico, após a recompilação do programa no MetaEditor e após a mudança dos parâmetros de entrada a partir da janela de configuração de indicadores personalizados.

 
ikatsko >> :

Do livro didático:

Função init() especial.
Nos indicadores personalizados, a função especial init() é chamada (e executada) imediatamente após o início do terminal do cliente, após a mudança do símbolo e/ou período gráfico, após a recompilação do programa no MetaEditor e após a mudança dos parâmetros de entrada a partir da janela de configuração de indicadores personalizados.

Leva no máximo cinco minutos - declarar uma função e transferi-la para lá do anexo init e chamá-la como eu lhe escrevi.

Boa sorte.

SZ o valor int máximo que sua função lhe dá é muito provavelmente VAZIO_VALOR.

Sim, mais uma coisa: a variável Período Atual deve ser declarada como uma variável estática ou global para o arquivo. Normalmente atribuo um valor de -1 a tais variáveis.

 
Como faço referência à barra anterior (já formada)?
 
RocketTrend >> :
Como se referir à barra anterior (já formada)?

Close[1]/Open[1]/High[1]/Low[1]/.... Dependendo do valor necessário.

 
VladislavVG >> :

Close[1]/Open[1]/High[1]/Low[1]/.... Dependendo do valor necessário.

Obrigado

 
VladislavVG >> :

Close[1]/Open[1]/High[1]/Low[1]/.... Dependendo do valor necessário.

Obrigado

Razão: