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

 
mila.com:

Obrigado, isto é correto?

label =ObjectGetInteger(0,nm,OBJPROP_COLOR,0);

if(label==Lime) BUY_ = true;

Não, é assim que você obtém os dados de cor como um tipo int.

Tente ver o que está impresso no comentário.

Comment( ColorToString((color)ObjectGetInteger(0,"NaneOBJ",OBJPROP_COLOR,0), true) );

Leia sobre a conversão

 
Vitaly Muzichenko:

Leia sobre a conversão

Obrigado, a condição em si é correta?
 
mila.com:
Obrigado, a condição em si é correta?
string label = ColorToString((color)ObjectGetInteger(0,"MP140269",OBJPROP_COLOR,0), true);
if(label==Lime) BUY_ = true;

if(label==Red) BUY_ = false;
Provavelmente não. Se os dados forem do tipostring, você precisa anexá-los entre aspas, e escrever uma correspondência completa de cor caracter por caracter: "clrLime".
 
Vitaly Muzichenko:
Provavelmente não. Se os dados forem do tipostring, você precisa anexá-los entre aspas, e escrever uma correspondência completa de cor caracter por caracter: "clrLime".
Obrigado, funcionou )
 
Vitaly Muzichenko:
Provavelmente não. Se os dados forem do tipostring, você deve anexá-los entre aspas, e escrever uma correspondência completa de cor caracter por caracter: "clrLime".
Não, não é necessário incluí-lo entre aspas - estas são constantes. Ou seja, deveria ser assim: if(label===clrLime) {}
 
Artyom Trishkin:
Não, não é preciso estar entre aspas - estas são constantes. Ou seja, deveria ser assim: if(label===clrLime) {}

Obrigado, funciona.

Você poderia me dizer como obter corretamente o nível do indicador estocástico a partir do alto prazo.

      int bar_sto2_0=iBarShift(Symbol(),TimeFrame2,iTime(Symbol(),TimeFrame2,i));
      int bar_sto2_1=iBarShift(Symbol(),TimeFrame2,iTime(Symbol(),TimeFrame2,i+1));
      double sto1_0=iStochastic(Symbol(),TimeFrame1,kperiod1,dperiod1,slowing1,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,i);
      double sto1_1=iStochastic(Symbol(),TimeFrame1,kperiod1,dperiod1,slowing1,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,i+1);
      double sto2_0=iStochastic(Symbol(),TimeFrame2,kperiod2,dperiod2,slowing2,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,bar_sto2_0);
      double sto2_1=iStochastic(Symbol(),TimeFrame2,kperiod2,dperiod2,slowing2,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,bar_sto2_1);
      
      if(sto2_0>55)
       {
      BufferUP[i]=low[i]-distance*MyPoint;
       }
      

Quando o indicador é ajustado em um período de tempo alto, tudo está correto, a seta é ajustada quando a linha do indicador está acima de 55.

Quando mudado para uma tabela inferior, o caos.

 
mila.com:

Obrigado, funciona.

Você poderia me dizer como obter o nível do indicador estocástico corretamente, a partir do alto prazo.

      int bar_sto2_0=iBarShift(Symbol(),TimeFrame2,iTime(Symbol(),TimeFrame2,i));
      int bar_sto2_1=iBarShift(Symbol(),TimeFrame2,iTime(Symbol(),TimeFrame2,i+1));
      double sto1_0=iStochastic(Symbol(),TimeFrame1,kperiod1,dperiod1,slowing1,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,i);
      double sto1_1=iStochastic(Symbol(),TimeFrame1,kperiod1,dperiod1,slowing1,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,i+1);
      double sto2_0=iStochastic(Symbol(),TimeFrame2,kperiod2,dperiod2,slowing2,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,bar_sto2_0);
      double sto2_1=iStochastic(Symbol(),TimeFrame2,kperiod2,dperiod2,slowing2,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,bar_sto2_1);
      
      if(sto2_0>55)
       {
      BufferUP[i]=low[i]-distance*MyPoint;
       }
      

Quando o indicador é ajustado em um período de tempo alto, tudo está correto, a seta é ajustada quando a linha do indicador está acima de 55.

Quando você muda para uma tabela inferior, o caos.

Se você estiver falando sobre o ciclo do indicador, então, para saber qual barra do tempo alto corresponde à barra, indicada pelo índice do ciclo no baixo preço, você precisa obter o tempo i da barra. Então este tempo é usado para identificar a barra do quadro alto que corresponde a este tempo. Por exemplo: uma barra de H4 corresponde a quatro barras de H1. Assim, quatro valores do índice do ciclo i de H1 apontarão para a mesma barra em H4.

De suas variáveis (seus nomes) não consigo entender de qual barra você está obtendo os valores. Portanto, é difícil dizer outra coisa que não seja teoria.

 
Artyom Trishkin:

Se você estiver falando do ciclo indicador, para saber qual barra de tempo superior corresponde à barra indicada pelo índice do ciclo no tf inferior, você precisa obter o tempo da barra i. Então este tempo é usado para identificar a barra do quadro alto que corresponde a este tempo. Por exemplo: uma barra de H4 corresponde a quatro barras de H1. Correspondentemente, quatro valores do índice do ciclo i do período H1 apontarão para a mesma barra no período H4.

De suas variáveis (seus nomes) não consigo entender de que barra você obtém os valores. Portanto, é difícil dizer outra coisa que não seja teoria.

O indicador está definido em M1.

A condição principal para a seta para cima é a linha indicadora na M5 acima do nível 55.

Esta condição não é atendida, mesmo que a linha esteja abaixo do nível 55 na M5, a seta ainda está colocada.

 

como escrever a condição "se a alta de 1 barra for maior que a baixa de 3..." no robô.

O gatilho não deve ser "OnTick()".

mas toda vez que 0 barra se torna 1

 
trader781:

como escrever a condição "se a alta de 1 barra for maior que a baixa de 3..." no robô.

O gatilho não deve ser "OnTick()".

mas toda vez que 0 barra se torna 1

Você poderia fazer o seguinte

//+------------------------------------------------------------------+
//|                                                       test03.mq4 |
//|                                                   Sergey Gritsay |
//|                         https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link      "https://www.mql5.com/ru/users/sergey1294"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class CNevBar
  {
private:
   datetime          curbar;
   datetime          lastbar;
public:
                     CNevBar();
                    ~CNevBar();
   bool              new_bar(string symbol,ENUM_TIMEFRAMES period);
  };
//+------------------------------------------------------------------+
void CNevBar::CNevBar()
  {

  }
//+------------------------------------------------------------------+
void CNevBar::~CNevBar(void)
  {

  }
//+------------------------------------------------------------------+
bool CNevBar:: new_bar(string symbol,ENUM_TIMEFRAMES period)
  {
   curbar=(datetime) SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
   if(lastbar==0)lastbar=(datetime)SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
   if(lastbar!=curbar)
     {
      lastbar=curbar;
      return(true);
     }
   return(false);
  }

CNevBar newbar;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(newbar.new_bar(_Symbol,PERIOD_CURRENT))
     {
      if(High[1]>Low[3])
        {

        }
     }

  }
//+------------------------------------------------------------------+

...

Razão: