[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 308

 
Que horas são agora nos EUA? Que horas abrem/fecham nos EUA? Que horas abrem/fecham no Japão? Só com a abolição do inverno é um pouco incerto... e a Europa, a Ásia, os Estados Unidos estão colocando seus relógios?
 
Elenn:
A solução é realmente original, devemos experimentá-la. Mas quando a matriz for reinicializada, os dados não serão perdidos devido à reinicialização?

Se você aumentar o tamanho da matriz, os dados inseridos anteriormente não serão perdidos. E as células "capturadas" (novas) conterão lixo de RAM. E se você encolher a matriz, os dados que estavam nas células encolhidas serão irremediavelmente perdidos. Este é o básico da programação.
 
vilard:

Quanto tempo leva para que uma ordem MODE_TRADE_TRADE pendente se torne uma ordem MODE_HISTÓRIA?

Em pouco tempo. As ordens pendentes não são armazenadas no histórico.

Assim que for transformada em uma ordem de mercado e for fechada - então se tornará história, mas com um tipo de ordem de mercado.

Por exemplo:

Se havia OP_BUYSTOP, então ele foi convertido para OP_BUY. Após seu fechamento, ele será colocado na história.

MAS, após a conversão de OP_BUYSTOP para OP_BUY, o OP_BUYSTOP original não ficará na história.

 
001:

Boa noite, por favor, avise. Há dois valores indicadores em barras diferentes. Como traçar uma linha através deles e como trabalhar com ele no indicador? Obrigado!

A linha entre eles pode ser traçada usando o objeto OBJ_TREND. A primeira coordenada é a hora e o preço da primeira barra, a segunda coordenada é a hora e o preço da segunda barra.

Função:

//+----------------------------------------------------------------------------+
void SetTLine(color cl, string nm, datetime t1=0, double p1=0, datetime t2=0, double p2=0, int st=0, int sz=0) {
   if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TREND, 0, 0, 0, 0, 0);
   ObjectSet(nm, OBJPROP_TIME1    , t1);
   ObjectSet(nm, OBJPROP_PRICE1   , p1);
   ObjectSet(nm, OBJPROP_TIME2    , t2);
   ObjectSet(nm, OBJPROP_PRICE2   , p2);
   ObjectSet(nm, OBJPROP_COLOR    , cl);
   ObjectSet(nm, OBJPROP_STYLE    , st);
   ObjectSet(nm, OBJPROP_WIDTH    , sz);
   ObjectSet(nm, OBJPROP_RAY      , 0);
}
//+----------------------------------------------------------------------------+

Espero que tudo esteja claro nele.

cl - cor do objeto, nm - nome do objeto, t1, p1 - coordenadas de origem, t2, p2 - coordenadas finais, st - estilo de linha, sz - tamanho.

Você também pode adicionar raio: 1 - raio, 0 - segmento. A última linha desta função define um segmento. Ao invés de 0 você pode colocar o nome do parâmetro a ser passado.

Quanto a como trabalhar com ele (esta linha) no indicador - você precisa saber o que precisa dele. Mas os dados sobre ela (a linha) podem ser obtidos usando a função padrão

ObjectGet("nome do objeto", propriedade do objeto requerido);

 
artmedia70:

Você pode traçar uma linha entre eles usando o objeto OBJ_TREND. A primeira coordenada é a hora e o preço da primeira barra, a segunda coordenada é a hora e o preço da segunda barra.

Função:

Espero que tudo esteja claro nele.

cl - cor do objeto, nm - nome do objeto, t1, p1 - coordenadas de origem, t2, p2 - coordenadas finais, st - estilo de linha, sz - tamanho.

Você também pode adicionar raio: 1 - raio, 0 - segmento. A última linha desta função contém um segmento. Ao invés de 0 você pode colocar o nome do parâmetro a ser passado.

Quanto a como trabalhar com ele (esta linha) no indicador - você precisa saber o que precisa dele. No entanto, os dados sobre ela (a linha) podem ser obtidos usando a função padrão

ObjectGet("nome do objeto", a propriedade do objeto necessário);


Muito obrigado! Outra pergunta, se possível. Como trabalhar (preciso saber qual o valor que a tendência assume em uma determinada barra), como trabalhar a tendência na EA. Quero transferir uma parte do indicador para o Consultor Especialista (cálculos).
 
Bom dia!!! Não posso entrar na conta! Que porra é esse "erro comum"?
 
Há algo errado com o computador novamente?
 
Elenn:
A solução é realmente original, devemos experimentá-la.


Vou citar apenas um pequeno texto do tutorial da Delphi. Não vai doer saber disso.

"Matrizes dinâmicas" são estruturas de dados dinâmicas, portanto o programa deve prever explicitamente a sua remoção da memória do computador quando você terminar de usá-las. O processo de remoção de variáveis dinâmicas desnecessárias da memória do computador é às vezes chamado de coleta de lixo".

Uma variante que funcionará na MQL4 é redimensionar uma matriz dinâmica para comprimento zero usando a função ArrayResize() https://docs.mql4.com/ru/array/ArrayResize quando o programa terminar de trabalhar com ela.

 
drknn:


Acho que vou citar um pequeno trecho do tutorial da Delphi. É bom saber.

"Matrizes dinâmicas" são estruturas de dados dinâmicas, portanto o programa deve prever explicitamente a sua remoção da memória do computador quando você terminar de usá-las. O processo de remoção de variáveis dinâmicas desnecessárias da memória do computador é às vezes chamado de coleta de lixo".

Uma variante adequada para a linguagem MQL4 é redimensionar uma matriz dinâmica para comprimento zero usando a função ArrayResize() https://docs.mql4.com/ru/array/ArrayResize depois que você terminar de trabalhar com ela.

Isso é tudo verdade: limpar o lixo é uma boa regra de ouro.

Mas neste contexto, como determinar se devemos limpar o "lixo" agora ou vice-versa: não é lixo, mas dados necessários para os cálculos posteriores.

Como eu entendo, deinit() deve ser usado para limpar o lixo, mas... é executado não apenas quando o gráfico de um instrumento comercial é apagado e a EA é removida, mas também quando a TF é alterada. Neste caso, todos os dados acumulados para a TF serão perdidos e o Consultor Especialista começará a trabalhar novamente com uma matriz zero quando retornar ao cronograma anterior. O mesmo acontecerá se alterarmos qualquer um dos parâmetros da EA.

Acontece que, em algumas situações, a 'limpeza' é um processo lógico complexo, ao invés de simplesmente mudar o tamanho de uma matriz.

 
001:

Muito obrigado! Outra pergunta, se me permitem. Como trabalhar(preciso saber qual o valor que a tendência assume em uma determinada barra), como trabalhar com a tendência na EA. Quero transferir uma parte do indicador para o Consultor Especialista (cálculo).

ObjectGetValueByShift() para ajudar você

E como você vai trabalhar com ele - só você sabe...

Razão: