Ajuda na codificação - página 188

 

oi mladen ou qualquer pessoa,

eu noto que a plataforma mt4 tem alguns indicadores padrão (embora alguns sejam repetidos na parte de indicadores personalizados,), mas o código que eu acho que não é exatamente o mesmo, como recuperar ou ver o código desses indicadores padrão, muito obrigado por me informar.

 
kenwa:
oi mladen ou qualquer um, eu noto que a plataforma mt4 tem alguns indicadores padrão (embora alguns sejam repetidos na parte de indicadores personalizados,), mas o código que eu acho que não é exatamente o mesmo, como recuperar ou ver o código desses indicadores padrão, muito obrigado por me informar.

Você não pode

São construídos em indicador (executados diretamente pelo terminal)

 

parece que os indicadores incorporados são melhores do que os que estão em sessão de indicadores personalizados em função, realmente não há maneira de conhecer o código deles?

 

Alguém me perguntou como estou usando o enquadramento temporal múltiplo a partir de um único arquivo (quando não é possível chamar funções incorporadas)

Aqui está um exemplo simples e algumas explicações nele contidas

_____________________________

O indicador em anexo comporta-se como 3 indicadores em um e no código você encontrará comentários sobre o que é feito e quando. Espero que isto ajude algumas pessoas a esclarecer como um único arquivo pode ser feito um indicador de múltiplos períodos de tempo correto (que, entre outras coisas, sempre calculará o número correto de barras, sem assumir quantas barras no período de tempo alvo foram alteradas).

Portanto, este simples indicador de arquivo único com múltiplos períodos de tempo pode ser facilmente usado como modelo para indicadores de múltiplos períodos de tempo.

Arquivos anexados:
 

oi mladen,

você sabe se é possível e como fazer iStochasticOnArray? qualquer modelo ou fórmula para fazer isso? obrigado por informar.

 
kenwa:
olá mladen, você sabe que é possível e como fazer iStochasticOnArray? qualquer modelo ou fórmula para fazer isso? obrigado por informar.

kenwa

Não existe tal coisa como uma função construída. Nestes postos você pode ver como uma função para fazer isso pode ser escrita e como pode ser usada então : https://www.mql5.com/en/forum/177239/page34

 

olá, mladen:

um pouco profundo para mim

por exemplo, o dobro iStoch(double priceR, double priceH, double priceL, int period, int slowing, int i, int instanceNo=0) é o dobro dentro do dobro? este método pode reduzir o indexbuffer ocupado dentro do mq4?

este pouco estranho para mim de sua função:

stoch = iStoch(rsi,rsi,rsi,rsi,StoPeriod,StoSlowing,i);

obrigado por alguns esclarecimentos.

 
mladen:
Não sei por que ele não aceita o outro arquivo wav

Se você o alterou no código, ele deve aceitá-lo

Para repeti-lo 5 vezes você deve colocá-lo em um loop, mas isso pode causar alguns problemas (se o arquivo de som for muito longo)

Aqui está o código que usei (sei muito pouco sobre codificação para saber como fazer loops):

//+-----------------------------------------------------------------

#propriedade copyright "https://www.forex-tsd.com"

#link da propriedade "https://www.forex-tsd.com"

#janela_do_cartão_indicador de propriedade

//-----------------------------------------------------------------

alertas int externosForNotOlderThan = 300;

alertas int externosForMagicNumber = 0;

alertas externos de cordaParaSímbolo = "";

alertas de bool externoOn = verdadeiro;

alertas de bool externoSom = verdadeiro;

alertas de bool externoMensagem = verdadeiro;

alertas de bool externoNotificação = falso;

alertas de bool externoEmail = falso;

//-------------------------------------------------------

//

//-------------------------------------------------------

//

//

//

//

//

bilhetes int[];

bool alertado[];

símbolos de cordas[];

tipos de int[];

int vezes[];

int init() { return(0); }

int deinit() { return(0); }

int start()

{

//

//

// coletar dados para pedidos

//

//

para (int i=OrdensTotal()-1; i>=0; i--)

{

se (!OrderSelect(i,SELECT_BY_POS)) continuar;

se (alertasParaSymbol != "" && alertasParaSymbol!=OrderSymbol()) continuar;

if (alertsForMagicNumber != 0 && alertsForMagicNumber!=OrderMagicNumber()) continua; if (alertsForMagicNumber != 0 && alertsForMagicNumber!=OrderMagicNumber()) continua;

se (alertasParaNãoMais Antigo Que < (TimeCurrent()-OrderOpenTime())) continuar; se (alertasParaNãoMais Antigo Que < (TimeCurrent()-OrderOpenTime())) continuar;

//

//

//

//

//

para (int k=ArraySize(tickets); k>0; k--)

se (OrderTicket()==tickets[k-1]) quebrar;

se (k==0)

{

int size = ArraySize(tickets)+1;

ArrayResize(tickets,tamanho); tickets = OrderTicket();

ArrayResize(alertado,tamanho); alertado = falso;

ArrayResize(símbolos,tamanho); símbolos = OrderSymbol();

ArrayResize(tipos,tamanho); tipos = OrderType();

ArrayResize(times,tamanho); times = OrderOpenTime();

}

}

//

//

// verificar se algum pedido precisa ser alertado para

//

//

para (i=ArraySize(tickets)-1; i>=0; i--)

{

tipo de fio = "";

se (!alertado)

{

alertado = verdadeiro;

interruptor (tipos)

{

caso OP_BUY : tipo = "comprar"; pausa;

caso OP_SELL : tipo = "vender"; pausa;

caixa OP_BUYSTOP : tipo = "comprar parada"; pausa;

caso OP_BUYLIMIT : tipo = "comprar limite"; pausa;

caixa OP_SELLSTOP : tipo = "stop de venda"; pausa;

caixa OP_SELLLIMIT : tipo = "limite de venda"; pausa;

}

doAlert(tipo+" aberto em : "+TimeToStr(times,TIME_DATE|TIME_SECONDS)+" para "+symbols";)

}

}

retorno(0);

}

//-------------------------------------------------------

//

//-------------------------------------------------------

//

//

//

//

//

doAlert(string do What)

{

mensagem de corda;

mensagem = fazer o quê;

if (alertasMensagem) Alerta(mensagem);

if (alertasEmail) SendMail(StringConcatenate(Symbol()," order alerts "),message);

if (alertasNotificação) SendNotification("alertas de ordem "+message");

if (alertasSom) PlaySound("hallelujah.wav");

}

mas apenas toca o alerta regular quando é acionado.

Pensei: se eu não conseguir que o PlaySound mude, você poderia codificar em um loop que repetisse um pequeno alerta regular a cada 1 segundo por 10 vezes? - pelo menos isso faria muito mais para me acordar do que apenas um único som de alerta regular . . .

Obrigado

 
person77:
Aqui está o código que eu usei (sei muito pouco sobre codificação para saber fazer loops):

//+-----------------------------------------------------------------

#propriedade copyright "https://www.forex-tsd.com"

#link da propriedade "https://www.forex-tsd.com"

#janela_do_cartão_indicador de propriedade

//-----------------------------------------------------------------

alertas int externosForNotOlderThan = 300;

alertas int externosForMagicNumber = 0;

alertas externos de cordaParaSímbolo = "";

alertas de bool externoOn = verdadeiro;

alertas de bool externoSom = verdadeiro;

alertas de bool externoMensagem = verdadeiro;

alertas de bool externoNotificação = falso;

alertas de bool externoEmail = falso;

//-------------------------------------------------------

//

//-------------------------------------------------------

//

//

//

//

//

bilhetes int[];

bool alertado[];

símbolos de cordas[];

tipos de int[];

int vezes[];

int init() { return(0); }

int deinit() { return(0); }

int start()

{

//

//

// coletar dados para pedidos

//

//

para (int i=OrdensTotal()-1; i>=0; i--)

{

se (!OrderSelect(i,SELECT_BY_POS)) continuar;

se (alertasParaSymbol != "" && alertasParaSymbol!=OrderSymbol()) continuar;

if (alertsForMagicNumber != 0 && alertsForMagicNumber!=OrderMagicNumber()) continua; if (alertsForMagicNumber != 0 && alertsForMagicNumber!=OrderMagicNumber()) continua;

se (alertasParaNãoMais Antigo Que < (TimeCurrent()-OrderOpenTime())) continuar; se (alertasParaNãoMais Antigo Que < (TimeCurrent()-OrderOpenTime())) continuar;

//

//

//

//

//

para (int k=ArraySize(tickets); k>0; k--)

se (OrderTicket()==tickets[k-1]) quebrar;

se (k==0)

{

int size = ArraySize(tickets)+1;

ArrayResize(tickets,tamanho); tickets = OrderTicket();

ArrayResize(alertado,tamanho); alertado = falso;

ArrayResize(símbolos,tamanho); símbolos = OrderSymbol();

ArrayResize(tipos,tamanho); tipos = OrderType();

ArrayResize(times,tamanho); times = OrderOpenTime();

}

}

//

//

// verificar se algum pedido precisa ser alertado para

//

//

para (i=ArraySize(tickets)-1; i>=0; i--)

{

tipo de fio = "";

se (!alertado)

{

alertado = verdadeiro;

interruptor (tipos)

{

caso OP_BUY : tipo = "comprar"; pausa;

caso OP_SELL : tipo = "vender"; pausa;

caixa OP_BUYSTOP : tipo = "comprar parada"; pausa;

caso OP_BUYLIMIT : tipo = "comprar limite"; pausa;

caixa OP_SELLSTOP : tipo = "stop de venda"; pausa;

caixa OP_SELLLIMIT : tipo = "limite de venda"; pausa;

}

doAlert(tipo+" aberto em : "+TimeToStr(times,TIME_DATE|TIME_SECONDS)+" para "+symbols";)

}

}

retorno(0);

}

//-------------------------------------------------------

//

//-------------------------------------------------------

//

//

//

//

//

doAlert(string do What)

{

mensagem de corda;

mensagem = fazer o quê;

if (alertasMensagem) Alerta(mensagem);

if (alertasEmail) SendMail(StringConcatenate(Symbol()," order alerts "),message);

if (alertasNotificação) SendNotification("alertas de ordem "+message");

if (alertasSom) PlaySound("hallelujah.wav");

}

mas apenas toca o alerta regular quando é acionado.

Pensei: se eu não conseguir que o PlaySound mude, você poderia codificar em um loop que repetisse um pequeno alerta regular a cada 1 segundo por 10 vezes? - pelo menos isso faria muito mais para me acordar do que apenas um único som de alerta regular . . .

Obrigado

Pessoa77,

O que costumava funcionar para isso é ir para um gráfico aberto, depois ir para ferramentas/opções/eventos e depois em alerta simplesmente mudar o wav. para aquele que você quer, mas não faz isso há algum tempo, então não tenho certeza se isso ainda funciona, e certifique-se de que o arquivo wav que você está usando está na pasta de sons.

Arquivos anexados:
alert.png  99 kb
 

mrtools - obrigado: isso funcionou muito bem!

Razão: