Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 317

 
voron_026:

OláAleksey Vyazmikin Comecei recentemente a programar. Estou lentamente entrando no assunto.

Eu tentei fazer desta maneira:

O primeiro retângulo é desenhado. Os demais não são desenhados. Eu ainda estou tentando descobrir como fazer isso. Obrigado pelas dicas e o que você quer dizer com estilo atípico?


Você tem certeza de que um objeto é desenhado e não muitos nas mesmas coordenadas?

Você tem pontos constantes.

datetime time0 = iTime(Symbol(),PERIOD_H4,0);
datetime time1 = iTime(Symbol(),PERIOD_H4,1);
double open0 = iOpen(Symbol(), PERIOD_H4,0);
double open1 = iOpen(Symbol(), PERIOD_H4,1);
double close1 = iClose(Symbol(), PERIOD_H4,1);
double high1 = iHigh(Symbol(), PERIOD_H4,1);
double low1 = iLow(Symbol(), PERIOD_H4,1);

Defina-os em uma função ou diretamente no código ao criar um objeto.

Sobre a tipicidade - sua função de cálculo é distorcida e tal expressão se(!...) não muitos dos iniciantes a utilizam de acordo com minhas observações.

 

Olá!


Por favor, informe:

Como calcular a posição de um indicador(I-1), em relação a outro indicador(I-2) construído sobre ele(I-1).


Por exemplo:

A posição do RSI em relação ao Bollinger.

Pensei que você pudesse substituir os dados em vez de cálculos de preço

 RSI = iRSI(Symbol(), TimeFrame, 14, PRICE_CLOSE, 1);
 BB  = iBands(Symbol(), TimeFrame, 34, 1, 0, RSI, MODE_UPPER, 1);
Mas isso me dá um erro.
 
Ras al Ghul:

Olá!


Por favor, informe:

Como calcular a posição de um indicador(I-1), em relação a outro indicador(I-2) construído sobre ele(I-1).


Por exemplo:

A posição do RSI em relação ao Bollinger.

Pensei que era possível substituir os dados ao invés do preço do cálculo

mas há um erro.

Não está claro nem mesmo como você construiu bb no RSI, ou seja, a imagem é clara como se faz...


double  iBands( 
   string       symbol,           // имя символа 
   int          timeframe,        // таймфрейм 
   int          period,           // период 
   double       deviation,        // кол-во стандартных отклонений 
   int          bands_shift,      // сдвиг относительно цены 
   int          applied_price,    // тип цены 
   int          mode,             // индекс линии 
   int          shift             // сдвиг 
   );

seu tipo de preço não é correto - você tem que fazê-lo com

double  iBandsOnArray( 
   double       array[],          // массив 
   int          total,            // количество элементов 
   int          period,           // период 
   double       deviation,        // кол-во стандартных отклонений 
   int          bands_shift,      // сдвиг относительно цены 
   int          mode,             // индекс линии 
   int          shift             // сдвиг 
   );
 
Aleksey Vyazmikin:

Sobre a tipicidade - sua função de cálculo é distorcida e tal expressão se(!...) é usada por muito poucos iniciantes de acordo com minhas observações.


Estou entendendo o que você quer dizer. Talvez eu esteja desenvolvendo meu próprio estilo. Eu gosto de usar o operador do if(!....) neste formato. E eu recebi a função de cálculo de outra pessoa, mas gosto desta lógica

 
Aleksey Vyazmikin:

Não está claro nem como você construiu a RSI bb, ou seja, a imagem está clara como feita.


Seu tipo de preço não é correto - você tem que fazer isso através de

Obrigado por sua resposta!

Ficou claro para onde meus pensamentos são dirigidos.


A figura é para ilustração com ferramentas MT4 padrão (de acordo com o indicador anterior/primeiro).


Estou familiarizado com arrays somente de java... Estou familiarizado com arrays em Java, e apenas de relance.

Como eu o crio e o que preciso colocar lá?

F1 no MetaEditor e MQLQL-Tutorial não me deu nenhuma clareza...

 
voron_026:

Entendo seu ponto de vista. Talvez eu esteja desenvolvendo meu próprio estilo. Eu gosto de usar o operador do if(!....) neste formato. Eu recebi a função de cálculo de outra pessoa, mas gostei de sua lógica.


Eu posso ver que você é um pensador profundo - boa sorte!

 
Ras al Ghul:

Obrigado por sua resposta!

Ficou claro para onde dirigir meus pensamentos.


A figura é para ilustração com ferramentas MT4 padrão (de acordo com o indicador anterior/primeiro).


Estou familiarizado com arrays somente de java... Estou familiarizado com arrays em Java, e apenas de relance.

Como eu o crio e o que preciso colocar lá?

F1 em MetaEditor e MQLQL-learning não me deu nenhuma clareza...


Criar um array e através de um loop (por exemplo, para) preenchê-lo com o valor do indicador. E então use a funçãoiBandsOnArray().

 
Aleksey Vyazmikin:

Criar um array e usar um loop (por exemplo, para) para preenchê-lo com o valor do indicador. E então use a funçãoiBandsOnArray().


Ou sua versão é muito complexa ou não entendo o valor de que você está falando...


double Array[], BB;  


 Array[1] = iRSI(Symbol(),TimeFrame,14,PRICE_CLOSE,1);
BB = iBandsOnArray(Array[1],0,34,1,0,MODE_UPPER,1);

Minha variante gera um erro sobre o fragmento selecionado:

Array' - array necessário.

Não é assim que obtemos um valor indicador em uma matriz?


 
Aleksey Vyazmikin:

Você tem certeza de que um objeto é desenhado e não muitos nas mesmas coordenadas?



Sim, você está certo. Os retângulos são desenhados nas mesmas coordenadas. Eu resolvi o problema da seguinte maneira:

void OnTick()
{
Fun_New_Bar();

   if(UseDojiCandles = true && Doji() == 1 && New_Bar == true)
     {
      datetime time0 = iTime(Symbol(),TimeFrame,0);
      datetime time1 = iTime(Symbol(),TimeFrame,1);
      double open0 = iOpen(Symbol(), TimeFrame,0);
      double open1 = iOpen(Symbol(), TimeFrame,1);

      if(!ObjectCreate(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJ_RECTANGLE,0,time1,open1,time0,open0))
         {
         Print("Не удалось создать метку вверх");
         }
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_COLOR,clrRed);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 
         
         DojiCandle ++;
     }
   

   
   if(UseDojiCandles = true && Doji() == -1 && New_Bar == true)
     {
      datetime time0 = iTime(Symbol(),TimeFrame,0);
      datetime time1 = iTime(Symbol(),TimeFrame,1);
      double open0 = iOpen(Symbol(), TimeFrame,0);
      double open1 = iOpen(Symbol(), TimeFrame,1);
      
      if(!ObjectCreate(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJ_RECTANGLE,0,time1,open1,time0,open0))
         {
         Print("Не удалось создать метку вниз");
         }
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_COLOR,clrRed);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 

         DojiCandle ++;
     }
     

   
}
Eu adicionei uma variávelTimeFrame, para mudar rapidamente o tempo calculado
 
Ras al Ghul:

Ou sua variante é muito complicada, ou não entendo o valor de que está falando...


Na minha variante, a peça destacada é juramentada:

Array' - array necessário.

Não é assim que obtemos um valor indicador em uma matriz?


Array[1] = iRSI(Symbol(),TimeFrame,14,PRICE_CLOSE,1);
BB = iBandsOnArray(Array,0,34,1,0,MODE_UPPER,1);