Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 533

 
      // AO
      if(ao) {
         CopyTime(symbol_name[st],ao_time_frame,1,1,time_buf);
         if(symbol_ao_timebar[st]!=time_buf[0]) {
            symbol_ao_timebar[st]=time_buf[0];
            double ao_buf[];
            CopyBuffer(symbol_ao_handle[st],0,enter_bar,2,ao_buf);
            if(ao_buf[1]>ao_buf[0]&&ao_buf[0]<0) symbol_ao_signal[st]=0;
            if(ao_buf[1]<ao_buf[0]&&ao_buf[0]>0) symbol_ao_signal[st]=1;
            }
         }else symbol_ao_signal[st]=2;
      
      // AC
      if(ac) {
         CopyTime(symbol_name[st],ac_time_frame,1,1,time_buf);
         if(symbol_ac_timebar[st]!=time_buf[0]) {
            symbol_ac_timebar[st]=time_buf[0];
            double ac_buf[];
            CopyBuffer(symbol_ac_handle[st],0,enter_bar,2,ac_buf);
            if(ac_buf[1]>ac_buf[0]&&ac_buf[0]<0) symbol_ac_signal[st]=0;
            if(ac_buf[1]<ac_buf[0]&&ac_buf[0]>0) symbol_ac_signal[st]=1;
            }      
         }else symbol_ac_signal[st]=2;
Olá a todos. Aqui vai uma pergunta. Há um pedaço de código Diz aqui. Quer dizer, deveria dizer comprar ou vender, mas apenas quando o AO e o AC estão no mesmo avião. Comprar abaixo de zero e vender acima de zero.
É assim? Gurus, por favor, ajudem.
A questão é basicamente esta. Isto é um código normal ou alguma treta?
 
MASTERXAYS:
Olá a todos. Aqui vai uma pergunta. Há um pedaço de código Diz aqui. Quer dizer, deveria dizer comprar ou vender, mas apenas quando o AO e o AC estão no mesmo avião. Comprar abaixo de zero e vender acima de zero.
É assim? Por favor, ajudem os gurus.
A questão é a seguinte. Isto é um código normal ou alguma treta?

Eu chamaria "treta" a toda a abordagem .

Alguma vez viu o preço seguir um indicador? Note também que estes são os indicadores de B. Williams, e ele, como sabe, não negociou no mercado Forex, e a própria ideia está desactualizada.

 
-Aleks-:
E como, desculpe, faz esta zeragem?
Exactamente da mesma forma que a zeragem de tipos simples. Ao atribuir-lhes um valor 0. Assim que atribuir um valor 0 aos campos requeridos, utiliza-se a operação inversa StructToTime().
 
MASTERXAYS:
Olá a todos. Aqui vai uma pergunta. Há um pedaço de código Diz aqui. Quer dizer, deveria dizer comprar ou vender, mas apenas quando o AO e o AC estão no mesmo avião. Comprar abaixo de zero e vender acima de zero.
É assim? Por favor, ajudem os gurus.
A questão é basicamente a seguinte. Isto é um código normal ou alguma treta em óleo verde?

Leia o meu artigo onde são descritos os códigos de construção do sinal. Mas eu pessoalmente escrevo funções de sinal desta forma.

ENUM_ORDER_TYPE GetSignal(int i,ENUM_TIMEFRAMES tf)
  {
   double bbup[1];
   double bbdw[1];
   double rsi[1];
   double macd[2];
   double stoh[2];
   double Close[2];

   if(IND01[i]==INVALID_HANDLE || IND01[i]==0){IND01[i]=iBands(m_symbol,tf,BB_period,0,2,PRICE_CLOSE);return(WRONG_VALUE);}
   if(IND02[i]==INVALID_HANDLE || IND02[i]==0){IND02[i]=iRSI(m_symbol,tf,RSI_period,PRICE_CLOSE);return(WRONG_VALUE);}
   if(IND03[i]==INVALID_HANDLE || IND03[i]==0){IND03[i]=iMACD(m_symbol,tf,MACD_fast_ema_period,MACD_slow_ema_period,9,PRICE_CLOSE);return(WRONG_VALUE);}
   if(IND04[i]==INVALID_HANDLE || IND04[i]==0){IND04[i]=iStochastic(m_symbol,tf,ST_Kperiod,ST_Dperiod,ST_slowing,MODE_SMA,STO_LOWHIGH);return(WRONG_VALUE);}

   if(CopyBuffer(IND01[i],1,0,1,bbup)<1) return(WRONG_VALUE);
   if(CopyBuffer(IND01[i],2,0,1,bbdw)<1) return(WRONG_VALUE);
   if(CopyBuffer(IND02[i],0,0,1,rsi)<1) return(WRONG_VALUE);
   if(CopyBuffer(IND03[i],0,0,2,macd)<2) return(WRONG_VALUE);
   if(CopyBuffer(IND04[i],0,0,2,stoh)<2) return(WRONG_VALUE);
   if(CopyClose(m_symbol,tf,0,2,Close)<2) return(WRONG_VALUE);

   if(Close[0]<bbdw[0]&& Close[1]>bbdw[0]&&  stoh[1]>stoh[0]&&  stoh[0]<20  &&  rsi[0]<30  &&  macd[1]<macd[0]) return(ORDER_TYPE_BUY);
   if(Close[0]>bbup[0]&& Close[1]<bbup[0]&&  stoh[1]<stoh[0]&&  stoh[0]>80  &&  rsi[0]>70  &&  macd[1]>macd[0]) return(ORDER_TYPE_SELL);

   return(WRONG_VALUE);
  }
 
Aleksey Lebedev:

Será 1, ambas as vezes são arredondadas para um dia inteiro primeiro, depois subtraídas.

O que o leva a pensar que todos os números da expressão são arredondados? Não é arredondado. Concordo que uma variável será arredondada.

E se fossem arredondados, mostrei um exemplo - a barra actual de hoje e a de ontem calculada uma - 1 hora TF - a sua diferença seria igual a zero em todos os arredondamentos ... Talvez se nos reunirmos sempre para cima...

Alexey Kozitsyn:
Exactamente como a zeragem de tipos simples. Ao atribuí-los a 0. Assim que tiver atribuído 0 aos campos requeridos, utiliza a operação inversa StructToTime().

Obrigado - vou tentar novamente - os exemplos na Ajuda não são bons...

 
-Aleks-:

O que o leva a pensar que todos os números da expressão são arredondados? Não há arredondamento. Mas a variável é arredondada - concordo.

E se arredondado, eu mostrei um exemplo - barra actual de hoje e calculado ontem - 1 hora TF - a sua diferença seria igual a zero em qualquer arredondamento ... Talvez se nos reunirmos sempre para cima...

Ao dividir números inteiros (int,long,datetime etc.) o resultado é um número inteiro, ou seja, o restante é descartado. 00:00 de hoje e 23:59:59 de ontem, a diferença será de 1 dia.

 

Pode dizer-me por favor, MQL4...
Não consigo perceber, o indicador funciona em M5, como se refere ao Alto ou Baixo da barra anterior em H1 no seu código ?
Como iHigh(NULL,PERÍODO_H1, i) ... O objectivo é determinar (colocar uma seta para cima/baixo no gráfico M5) se a vela M5 actual quebrou o preço elevado da hora anterior.


 
No código do indicador MQL4, substituindo a linha
for(i=pos; i<rates_total; i++) 
com
for(i=pos; i<rates_total-1; i++) 
leva ao facto de o indicador não ser considerado na barra actual (inacabada) - simplesmente não existe uma linha indicadora sob esta barra.
Na MQL5, a barra actual tem alguns valores indicadores estranhos, por vezes apenas 0,0000.
O que posso fazer em relação a isso?
 
MikeZv:

Dê-me uma dica, MQL4...
Não consigo perceber, o indicador funciona em M5, como se refere a Alto ou Baixo da barra anterior em H1 ?
Como iHigh(NULL,PERÍODO_H1, i) ... O objectivo é determinar (colocar uma seta para cima/baixo no gráfico M5) se a vela M5 actual quebrou o preço elevado da hora anterior.


MikeZv:
No código do indicador MQL4 substituir a linha
com
leva ao facto de o indicador não ser calculado na barra actual (inacabada) - simplesmente não existe uma linha indicadora sob esta barra.
Na MQL5, a barra actual tem alguns valores indicadores estranhos, por vezes apenas 0,0000.
O que posso fazer em relação a isso?

Não importa como se gira os amortecedores indicadores lá - só a Juna pode ajudar aqui.

Adicionado:

Para o tempo da verificação de depuração - que valor está no tempo[i] matriz - para que se entenda de que fim se começa a contar barras e onde se tem a barra "zero".

 
Karputov Vladimir

Pouco torceu aí os amortecedores indicadores - só a Juna pode ajudar aqui.
... De que fim se inicia a contagem da barra e de onde se tem a barra "zero".

Vladimir, obrigado por responder à primeira pergunta, perdi estas funções...

Coloco o mesmo indicador em MT4 e MT5 (claro que o código é adaptado a cada plataforma).
Até à barra zero os seus valores são os mesmos, portanto, aparentemente de um extremo ... :)
E quando se desactiva o cálculo na barra actual em MT4 nada é desenhado sob a barra actual, em MT5 - valores errados.

Arquivos anexados:
mvt_Vlt.mq4  5 kb
mvt_Vlt.mq5  5 kb
Razão: