Pergunte! - página 176

 

PS: apenas para lembrar - o 3º parâmetro na chamada iCustom() é o nome do indicador. O primeiro parâmetro é o símbolo e o segundo parâmetro é o período de tempo desejado.

mladen:
Faça-o assim:
array[0]=iClose("EURUSD",0,0); [/PHP]

and so on. That way array will be filled with close prices for symbols you select. If you are using a custom indicator then the form is the following :

[PHP]array[0]=iCustom("EURUSD",0,"indicator name",0,0);
 

MLaden

Estou chamando um indicador personalizado usando icustom em um loop para vários pares. Posso ver na guia dos especialistas que o indicador é descarregado e depois recarregado para o próximo par. Isto significa que a chamada iCustom está recalculando os valores para todas as barras máximas no gráfico cada vez que é carregado? Também se você chamar a Barra N e depois a Barra N+1 como chamadas sucessivas separadas, a segunda chamada requer um recálculo completo? E finalmente, se as chamadas sucessivas são para buffers diferentes, cada uma delas é recalculada.

Lembro que você disse que cada chamada iCustom gera uma instância separada, então minha presunção é que cada uma é recalculada em sua totalidade.

Obrigado pela resposta,

Tzuman

 

Tzuman,

Metatrader cria uma nova instância de indicador para cada novo conjunto de valores de parâmetro (exceção: número e índice tampão ).

Um exemplo - as duas chamadas seguintes :

iCustom(NULL,0, "nome",1,0,0);

iCustom(NULL,0, "nome",2,0,0);

criará duas instâncias de um indicador (mesmo que você use por exemplo "n" em vez de 1 e 2 e atribua valores diferentes a n antes de uma nova chamada ao iCustom(), ele criará instâncias separadas. É por isso que alguns indicadores adaptativos não podem ser escritos usando iCustom(), mas devem ser feitos em uma forma de funções)

Agora se trata de instâncias. Mas se o indicador é carregado e depois descarregado é geralmente um problema com parâmetros (a parte de descarregamento geralmente indica isso). Se os tipos de parâmetros não corresponderem, então ele fará a proeza "carregar - descarregar". Verifique se por acidente alguns dos parâmetros passados ao iCustom não são do tipo esperado (ou alguns dos parâmetros são omitidos acidentalmente e isso pode causar a confusão dos tipos de parâmetros).

Tzuman:
MLaden

Estou chamando um indicador personalizado usando icustom em um loop para vários pares. Posso ver na guia dos especialistas que o indicador é descarregado e depois recarregado para o próximo par. Isto significa que a chamada iCustom está recalculando os valores para todas as barras máximas no gráfico cada vez que é carregado? Também se você chamar a Barra N e depois a Barra N+1 como chamadas sucessivas separadas, a segunda chamada requer um recálculo completo? E finalmente, se as chamadas sucessivas são para buffers diferentes, cada uma delas é recalculada.

Lembro que você disse que cada chamada iCustom gera uma instância separada, então minha presunção é que cada uma é recalculada em sua totalidade.

Obrigado pela resposta,

Tzuman
 

Eu não queria interromper suas recentes discussões

por favor, dê uma olhada nesta nova linha

https://www.mql5.com/en/forum/182212

 

Como vejo, a mrtools já resolveu

MaaTini:
Eu não queria interromper suas recentes discussões

por favor, dê uma olhada nesta nova linha

https://www.mql5.com/en/forum/182212
 
mladen:
Tzuman,

Metatrader cria uma nova instância de indicador para cada novo conjunto de valores de parâmetro (exceção: número e índice tampão).

Um exemplo - as duas chamadas seguintes :

iCustom(NULL,0, "nome",1,0,0);

iCustom(NULL,0, "nome",2,0,0)

;

criará duas instâncias de um indicador (mesmo que você use por exemplo "n" em vez de 1 e 2 e atribua valores diferentes a n antes de uma nova chamada ao iCustom(), ele criará instâncias separadas. É por isso que alguns indicadores adaptativos não podem ser escritos usando iCustom(), mas devem ser feitos em uma forma de funções)

Agora trata-se de instâncias. Mas se o indicador é carregado e depois descarregado é geralmente um problema com parâmetros (a parte de descarregamento geralmente indica isso). Se os tipos de parâmetros não corresponderem, então ele fará a proeza "carregar - descarregar". Verifique se por acidente alguns dos parâmetros passados ao iCustom não são do tipo esperado (ou alguns dos parâmetros são omitidos acidentalmente e isso pode causar a confusão dos tipos de parâmetros).

Muito obrigado pela explicação. Assumi que a carga/descarga era causada pela mudança do Símbolo a cada iteração do laço, de modo que ele tinha que carregar todos os novos valores de dados,

por exemplo, iCustom("EURUSD",0, "nome" ,1,0,0); & iCustom("GBPUSD",0,nome" ,1,0,0);

Vou verificar cuidadosamente os parâmetros, mas procedi a escrever minhas próprias funções médias de MA com algum plágio. Apenas olhando para a utilização do processador no Task Manager, parece que minha utilização da CPU diminuiu em 90-95%. Estou feliz

 

olá guru im novato em codificação você pode me ajudar em "parar de abrir ordem múltipla quando o takeprofit acerta" eu tento código como este, mas não funciona. você poderia me ajudar por favor?

data/horaestática fecharT;

for(int a=OrdersHistoryTotal()-1; a>=0; a--) {if(OrderSelect(a,SELECT_BY_POS,MODE_HISTORY)==verdadeiro) {if(OrderMagicNumber()==magic && OrderSymbol()==symb && closeT<OrderCloseTime()) { closeT=OrderCloseTime(); if((buy===true ||| sell===true) && closeT===Time[0]){buy=false; sell=false;} } } }

 

obrigado mladen, vou tentar seu código.

 
RBarias:
olá guru im novato em codificação você pode me ajudar em "parar de abrir ordem múltipla quando o takeprofit acerta" eu tento código como este, mas não funciona. você poderia me ajudar por favor?

data estática fechamentoT;

for(int a=OrdersHistoryTotal()-1; a>=0; a--) {if(OrderSelect(a,SELECT_BY_POS,MODE_HISTORY)==verdadeiro) {if(OrderMagicNumber()==magic && OrderSymbol()==symb && closeT<OrderCloseTime()) { closeT=OrderCloseTime(); if((buy===true ||| sell===true) && closeT===Time[0]){buy=false; sell=false;} } } }

Você pode tentar algo assim (ele verificará se a última ordem fechada é fechada em uma barra atual e se um take profit foi atingido) :

datetime closeT= 0;

int ticket=-1;

for(int a=OrdersHistoryTotal()-1; a>=0; a--)

{

if(OrderSelect(a,SELECT_BY_POS,MODE_HISTORY))

if(OrderMagicNumber()==magic && OrderSymbol()==symb && closeT<OrderCloseTime())

{

closeT=OrderCloseTime();

ticket=OrderTicket();

}

}

if (ticket>-1)

{

OrderSelect(ticket,SELECT_BY_TICKET,MODE_HISTORY);

if(iBarShift(symb,0,closeT)==0 && OrderClosePrice()==OrderTakeProfit())

{

buy =false;

sell=false;

}

}
 

Oi mladen,

Seu script Symbols.mq4 funcionou perfeitamente no MT4 build 509, mas ele lança um erro de arquivo no build 636 (ao abrir o symbols.raw).

Você gostaria de compartilhar uma versão atualizada para o MT4 build 636?

Muito obrigado com antecedência.

Cumprimentos,

Timo.

Razão: