Como codificar? - página 317

 

Hi,

Estou pensando como posso codificar este indicador/ferramentas.

Preciso de um indicador, roteiro ou algo parecido onde eu possa decidir alguma faixa em dias (ex 12/10/2012-15/10/2012 ou 15/10/2012-15/10/2012) e depois de escrever em um arquivo csv ou excel o aberto alto baixo e fechado para a vela exibida no gráfico dependendo da TF (ex. se eu decidir apenas um dia e anexá-lo em 1hr TF ele escreve 24 vela com sua especificação).

Agradecemos antecipadamente por sua ajuda.

 

Problema de sinal de alerta.

Olá a todos na casa, há este pequeno problema com um código MT4 que eu escrevi. Este código supõe que se deve observar três indys, stoichastic,RSI,e CCI.se o stoichastic cruzar sua linha de sinal para cima ou para baixo E o RSI do período 70 e 6 cruzar-se para cima ou para baixo e CCI estiver acima ou abaixo de zero, deve haver um sinal de compra se os 3 indys inteiros estiverem acima de suas linhas de sinal ou deve haver um sinal de venda se os 3 indys estiverem abaixo de suas linhas de sinal........ este código funciona, mas sempre que há alerta, ele continua se repetindo a cada tick-tack da vela. o que posso fazer para fazer este alerta soar apenas uma vez se as três condições forem atendidas na vela atual e não reaparecer o som. este é o código abaixo.

if(Period()==240){

double ist_main=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0);

double ist_signal=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_SIGNAL,0);

double RSIP1=iRSI(NULL,240,14,PRICE_CLOSE,0);

duplo RSIP2=iRSI(NULL,240,70,PRICE_CLOSE,0); duplo RSIP2=iRSI(NULL,240,70,PRICE_CLOSE,0);

duplo b4enCCI=iCCI(NULL,240,6,PRICE_TYPICAL,1);

double nowenCCI=iCCI(NULL,240,6,PRICE_TYPICAL,0); double nowenCCI=iCCI(NULL,240,6,PRICE_TYPICAL,0);

duplo b4trCCI=iCCI(NULL,240,14,PRICE_TYPICAL,1);

duplo nowtrCCI=iCCI(NULL,240,14,PRICE_TYPICAL,0);

// alertas

if((ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI>0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)){

Alerta("Buy Arrow","\n","Tempo atual é ",TimeToStr(CurTime()),"\n", Símbolo());

}

if((ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI<0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trCCI)){

Alerta("Seta de Venda", "\n", "Hora atual é ",TimeToStr(CurTime()),"\n", Símbolo());

}

}

 
mladen:
pooh

É simplesmente porque os valores de símbolos diferentes podem diferir tanto (por exemplo, GBPJPY está em torno de 126 agora e EURUSD está aproximadamente 100 vezes menos - quando você desenha esses valores no mesmo gráfico, o valor de EURUSD está simplesmente "fora de cena porque o metatrader toma os valores de GBPJPY como critério de escala do gráfico).

Dê uma olhada nesta linha : https://www.mql5.com/en/forum/178052. Já existem algumas soluções para problemas similares nesse tópico

Obrigado, Mladen. Segui seu link e encontrei o indicador que atende às minhas necessidades.

pooh

 

Tente assim :

if(Period()==240)

{

static datetime lastAlerted=0;

double ist_main=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0);

double ist_signal=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_SIGNAL,0);

double RSIP1=iRSI(NULL,240,14,PRICE_CLOSE,0);

double RSIP2=iRSI(NULL,240,70,PRICE_CLOSE,0);

double b4enCCI=iCCI(NULL,240,6,PRICE_TYPICAL,1);

double nowenCCI=iCCI(NULL,240,6,PRICE_TYPICAL,0);

double b4trCCI=iCCI(NULL,240,14,PRICE_TYPICAL,1);

double nowtrCCI=iCCI(NULL,240,14,PRICE_TYPICAL,0);

// alerts

if((ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI >0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0]; Alert("Buy Arrow","\n","Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

if((ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI <0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0]; Alert("Sell Arrow","\n","Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

}
Mastercash:
Olá a todos na casa, há este pequeno problema com um código MT4 que eu escrevi. Este código supõe que se deve observar três indys, stoichastic,RSI,e CCI.se o stoichastic cruzar sua linha de sinal para cima ou para baixo E o RSI do período 70 e 6 cruzar-se para cima ou para baixo e o CCI estiver acima ou abaixo de zero, deve haver um sinal de compra se os 3 indys inteiros estiverem acima de suas linhas de sinal ou deve haver um sinal de venda se os 3 indys estiverem abaixo de suas linhas de sinal........ este código funciona, mas sempre que há alerta, ele continua se repetindo a cada tick-tack da vela. o que posso fazer para fazer este alerta soar apenas uma vez se as três condições forem atendidas na vela atual e não reaparecer o som. este é o código abaixo.

if(Period()==240){

double ist_main=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0);

double ist_signal=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_SIGNAL,0);

double RSIP1=iRSI(NULL,240,14,PRICE_CLOSE,0);

duplo RSIP2=iRSI(NULL,240,70,PRICE_CLOSE,0); duplo RSIP2=iRSI(NULL,240,70,PRICE_CLOSE,0);

duplo b4enCCI=iCCI(NULL,240,6,PRICE_TYPICAL,1);

double nowenCCI=iCCI(NULL,240,6,PRICE_TYPICAL,0); double nowenCCI=iCCI(NULL,240,6,PRICE_TYPICAL,0);

duplo b4trCCI=iCCI(NULL,240,14,PRICE_TYPICAL,1);

duplo nowtrCCI=iCCI(NULL,240,14,PRICE_TYPICAL,0);

// alertas

if((ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI>0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)){

Alerta("Buy Arrow","\n", "Tempo atual é ",TimeToStr(CurTime()),"\n", Símbolo());

}

if((ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI<0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trCCI)){

Alerta("Seta de Venda", "\n", "Hora atual é ",TimeToStr(CurTime()),"\n", Símbolo());

}

}
 

Problemas de alerta

Nunca tomo nota da função LastAlert() e, por favor, você pode me informar onde obter o diretório de todas estas funções mt4 "tranche rouse".

 

Mastercash

Tenha cuidado: isso não é uma função, mas uma variável estática que é usada para armazenar o tempo (tempo de barra) do último alerta e dessa forma evita múltiplos alertas na mesma barra. Infelizmente não existe uma função como LastAlert() no metatrader, então temos que encontrar soluções para resolver a falta de funções.

Mastercash:
Nunca tomo nota da função LastAlert() e, por favor, você pode me informar onde obter o diretório de todas estas funções mt4 "tranche rouse".
 

Oi mladen.

Preciso ceder 24 variáveis cada uma para a vela de 24 horas do último dia.

Preciso fazer alguns cálculos com a vela e o resultado será atribuído em um buffer.

Como eu posso codificar para trabalhar com cada uma das 24 horas da vela do dia anterior?

Obrigado.

 

dasio

Você pode usar algo semelhante a isto (este modo não usa arrays). Além disso, este exemplo é para os dias atuais

datetime startTime = iTime(NULL,PERIOD_D1,0);

for (int i=iBarShift(NULL,PERIOD_H1,startTime); TimeDayOfYear(iTime(NULL,PERIOD_H1,i))==TimeDayOfYear(startTime); i--)

{

//

//

// processing the hourly data ... just an example here

//

//

double close = iClose(NULL,PERIOD_H1,i); //

double open = iOpen(NULL,PERIOD_H1,i); // and so on ...

}

dasio:
Oi mladen.

Preciso ceder 24 variáveis cada uma para a vela de 24 horas do último dia.

Preciso fazer alguns cálculos com a vela e o resultado será ceder em um buffer.

Como eu posso codificar para trabalhar com cada uma das 24 horas da vela do dia anterior?

Obrigado
 
mladen:
dasio

Você pode usar algo semelhante a isto (este modo não usa arrays). Além disso, este exemplo é para os dias atuais

datetime startTime = iTime(NULL,PERIOD_D1,0);

for (int i=iBarShift(NULL,PERIOD_H1,startTime); TimeDayOfYear(iTime(NULL,PERIOD_H1,i))==TimeDayOfYear(startTime); i--)

{

//

//

// processing the hourly data ... just an example here

//

//

double close = iClose(NULL,PERIOD_H1,i); //

double open = iOpen(NULL,PERIOD_H1,i); // and so on ...

}

Obrigado mladen.

Neste exemplo:

fechamento duplo = iClose(NULL,PERÍODO_H1,i); //

duplo aberto = iOpen(NULL,PERÍODO_H1,i); //

Qual vela rapaz e como posso mudar para a próxima vela? i+1?

Obrigado.

 

dasio

Ele já está passando por todas as horas do dia atual. Eu coloquei o iClose() e iOpen() apenas como exemplo de uma chamada de um período de tempo diferente de 1 hora. Se você quiser acessar um dia diferente do atual, substitua o "0" na data/hora de inícioTime=iTime(NULL,PERÍODO_D1,0); parte com qualquer dia para o qual você deseja que os dados coletados

dasio:
Obrigado mladen.

Neste exemplo:

fechamento duplo = iClose(NULL,PERÍODO_H1,i); //

duplo aberto = iOpen(NULL,PERÍODO_H1,i); //

Qual vela rapaz e como posso mudar para a próxima vela? i+1?

Obrigado
Razão: