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
postou uma nova versão 3.09 no Code Base, você pode baixá-la.
Você pode aprimorá-la um pouco mais.
if(ObjectFind(0,nm)<0) ObjectCreate(0,nm,OBJ_VLINE,0,t1,2);
Em tais construções, ObjectFind() é obviamente desnecessário. Ao criar por ObjectCreate(), será semelhante à pesquisa na lista por nome e à criação de um novo objeto ou à alteração dos parâmetros dos pontos de ancoragem do objeto existente.
.
ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,false);
Para objetos criados a partir do programa MQL, essa propriedade é forçada a ser falsa.
Da mesma forma, não faz sentido alterar o valor de OBJPROP_WIDTH, pois ele será igual a 1 de qualquer forma.
De acordo com minhas medições, essas edições reduzem o tempo de construção em cerca de 10%.
Obrigado, vou pensar nisso. Estou trabalhando em algo agora, mas há uma falha.
Tenho 8 gráficos abertos com apenas a grade neles.
Simulei a desconexão da rede por 5 minutos. Esta é a imagem depois de ligar a rede. 2 gráficos estão travando.
Anexei uma nova versão da grade, a versão 4.01.
Obrigado, vou pensar nisso. Estou trabalhando em algo agora, mas há uma falha.
Tenho 8 gráficos abertos com apenas a grade neles.
Simulei a desconexão da rede por 5 minutos. Esta é a imagem depois de ligar a rede. 2 gráficos estão travando.
Anexei uma nova versão da grade, a versão 4.01.
Isso é uma consequência da arquitetura do terminal e do algoritmo do indicador. O indicador é executado no fluxo de símbolos, ou seja, durante seu cálculo, muitas operações com o histórico são impossíveis: processamento de ticks, cálculo de outros indicadores, sincronização do histórico com o servidor, criação ou carregamento do histórico por períodos de tempo de símbolo etc.
Como o indicador Grid é calculado por um longo período e usa dados de outros períodos de tempo do símbolo, é desejável interromper seu cálculo em caso de erro. Se for sério não reescrever o código, você pode fazer isso dessa forma:
bool isNewBar_i(datetime date,ENUM_TIMEFRAMES timeFrame,bool& error)
{
...
else
{
Print("Timeframe ",fTimeFrameName(timeFrame)," is not ready");
error=true;
}
e assim:
//--- определимся с цветом линии
if(_Period<PERIOD_H1) if(isNewBar_i(time[i],PERIOD_H1,error) && _Period<PERIOD_M30) line_color=new_hour;
if(_Period<PERIOD_D1) if(isNewBar_i(time[i],PERIOD_D1,error) && _Period<PERIOD_H4 ) line_color=new_day;
if(_Period<PERIOD_W1) if(isNewBar_i(time[i],PERIOD_W1,error) && _Period<PERIOD_D1 ) line_color=new_week;
if(_Period<PERIOD_MN1)if(isNewBar_i(time[i],PERIOD_MN1,error)&& _Period<PERIOD_MN1) line_color=new_mon;
//---
if(error) return(0);
Isso é uma consequência da arquitetura do terminal e do algoritmo do indicador. O indicador é executado no fluxo de símbolos, ou seja, no processo de seu cálculo, muitas operações com o histórico são impossíveis: processamento de ticks, cálculo de outros indicadores, sincronização do histórico com o servidor, criação ou carregamento do histórico por períodos de tempo de símbolo etc.
Não consigo entender essa noção de fluxo, e já li a ajuda sobre acesso a dados 50 vezes (( o script é fornecido como exemplo. E ele leva cerca de um minuto para ser executado (muito tempo), mas parece que comecei a entender. Será que entendi corretamente que, enquanto o indicador está sendo calculado, ou seja, a função começou a ser executada
int OnCalculate () {
todos os recursos do computador (terminal) são dados a essa tarefa, e até que ela seja executada (concluída)
return(rates_total); }
Você não deve fazer nenhuma das ações a seguir:
- tentar ler o histórico por esse símbolo se ele estiver faltando
- solicitar um período de tempo diferente
- solicitar outro símbolo
Acho que entendi como refazer o programa, você precisa definir todas as linhas na primeira chamada e esquecê-las até if(prev_calculated==0).
Certo ?
S.Y.
De acordo com a avaliação de Renat, tenho o nível 5 :-)) https://www.mql5.com/ru/forum/1165/page3 foi um passo além )))
reescrevi completamente o código. Não solicitamos outros prazos.
Se você não se importar. Defina as barras mac. na janela Unlimit e passe por M15, M5 e M1. Publique o resultado no registro aqui. Tenho algo errado em M1 - escrevi para o serviço. Só quero saber se é só comigo ou com todo mundo.
Aqui está o meu registro.
2010.06.17 11:39:55 Grid (EURUSD,M1) Falha ou primeira execução Tempo= 1,2 seg para 1293476 barras ObjectsTotal= 48010 _time= 2002.10.25 06:41:00
2010.06.17 11:39:52 Grid (EURUSD,M5) Falha ou primeira execução Tempo= 0.0 seg para 847192 barras ObjectsTotal= 423 _time= 2010.06.02 21:35:00
2010.06.17 11:39:48 Grid (EURUSD,M15) Falha ou primeira execução Time= 0.0 seg para 285186 barras ObjectsTotal= 962 _time= 2010.05.04 22:00:00
Agradecemos antecipadamente. versão 4.11 da grade
Não consigo entender esse conceito de thread, e já li a ajuda 50 vezes sobre acesso a dados (( o script é fornecido como exemplo. E ele leva cerca de um minuto para ser executado (muito tempo), mas acho que estou começando a entender. Entendi corretamente que, enquanto o cálculo do indicador está em andamento, ou seja, a função começou a ser executada
int OnCalculate () {
todos os recursos do computador (terminal) são dados a essa tarefa e até que ela seja executada (concluída)
return(rates_total); }
Você não deve fazer nenhuma das ações a seguir:
- tentar ler o histórico desse símbolo se ele estiver faltando
- solicitar outro período de tempo
Você pode solicitá-lo, mas se os dados estiverem faltando ou forem insuficientes, não faz sentido esperar em OnCalculate(). Da mesma forma, com os dados de outros indicadores para o símbolo atual.
- Solicitar outro símbolo
.
Acho que entendi como refazer o programa: você precisa definir todas as linhas na primeira chamada e esquecê-las se (prev_calculated==0).
se não for muito trabalhoso. Defina as barras mac. na janela Unlimit e passe por M15, M5 e M1. O resultado que estará no registro, poste aqui. Tenho algo errado em M1 - escrevi para o serviço. Só quero ver se é comigo ou com todo mundo.
2010.06.17 11:58:54 6op0k (EURUSD,M5) Falha ou primeira execução Time=0.0sec para 847196 barras ObjectsTotal=605_time=2010.06.02 21:55:00
2010.06.17 11:58:44 6op0k (EURUSD,M15) Falha ou primeira execução Time=0.0sec para 285187 barras ObjectsTotal=1108_time=2010.05.04 22:15:00
2010.06.17 11:58:59 6op0k (EURUSD,M1) Falha ou primeira execução Tempo=0,1sec para 4009008 barras ObjectsTotal=403_time=2010.06.15 07:45:00
2010.06.17 11:58:54 6op0k (EURUSD,M5) Falha ou primeira execução Time=0.0sec para 847196 barras ObjectsTotal=605_time=2010.06.02 21:55:00
2010.06.17 11:58:44 6op0k (EURUSD,M15) Falha ou primeira execução Time=0.0sec para 285187 barras ObjectsTotal=1108_time=2010.05.04 22:15:00
Obrigado. Isso significa que finalmente escrevi tudo corretamente e que o "indicador" realmente funciona como eu pretendia. A falha que tive é um problema do terminal (você tem tudo normal). _time=2010.06.15 07:45:00). é uma pena que os desenvolvedores sejam omissos no dex do serviço. pelo menos eles escreveriam algumas palavras (( como
problema reproduzido... achamos que... obrigado
Obrigado. isso significa que finalmente escrevi tudo corretamente e o "indicador" realmente funciona como eu pretendia. a falha que tive foi um problema com o terminal (você está indo bem. _time=2010.06.15 07:45:00). é uma pena que os desenvolvedores sejam omissos no dex do serviço. pelo menos eles escreveriam algumas palavras (( como
problema reproduzido... achamos que... obrigado.
e pode ser corrigido:
Se o gravador H1 carregar uma linha vertical ou horizontal e depois mudar para outro intervalo de tempo, as linhas não relacionadas ao indicador serão excluídas.
Esse é um indicador muito conveniente para verificar o histórico e determinar visualmente a etapa do preço, mas, devido ao fato de que as marcas (linhas verticais e horizontais) colocadas nos intervalos de tempo mais antigos desaparecem quando se muda para um intervalo de tempo menor, ele se torna desconfortável.
O indicador resolveu perfeitamente o problema da exibição utilizável da escala de preços nas janelas do terminal.
A compilação em compilações até 3021, inclusive, não mostra erros e tudo é desenhado corretamente (e mesmo se você jogar a versão compilada anteriormente em uma nova compilação do terminal).
A compilação em compilações subsequentes não mostra nenhum erro, mas, no terminal, o somador não desenha a marcação vertical e, nos registros, escreve: 1 leaked strings left
Depois de comentar a linha:
StringConcatenate(line_name,IntegerToString(str.hour,2,'0'),":":":",IntegerToString(str.min,2,'0'),"_N",line_counter);
o erro nos registros do terminal desaparece (embora as linhas não sejam desenhadas).
Para que lado cavar? Como reanimar uma ótima ferramenta?