Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1855

 
Tretyakov Rostyslav #:

Si se produce una condición de cierre

//-------------------------------------------------------------------+  Команда на закрытие сетки ордеров
   if((CountTrade(0) > 1 && CalculiteProfit() >= 0 && OrderGroupCloseSignal()==0)||(CountTrade(1) > 1 && CalculiteProfit() >= 0 && OrderGroupCloseSignal()==1))
     {
      flag_close=1;
     }

Aquí la condición es CalculiteProfit() >= 0. En este caso podemos calcular a qué precio será el beneficio necesario para estas posiciones y establecer allí el take profit o stop loss, dependiendo de los precios y las posiciones. Y como las posiciones de compra y venta se cierran a precios diferentes, esto sólo es apropiado si las posiciones son del mismo tipo.

 
Andrey Sokolov #:

La condición aquí es CalculiteProfit() >= 0, en cuyo caso se puede calcular a qué precio será el beneficio necesario para estas posiciones y establecer una toma de beneficios allí.

Yo no)

EVGENII SHELIPOV es el autor de las condiciones.

 

Saludos. ¿Puedes darme una pista?

En el robot mt5 necesito poner una curva como una media móvil en el gráfico. ¿Existe una forma más "civilizada" que la de esculpir a partir de objetos, y si es así, cuál es?

 
Andrey Sokolov #:

Saludos. ¿Puedes darme una pista?

En el robot mt5 necesito poner una curva como una media móvil en el gráfico. ¿Existe una forma más "civilizada" que la de esculpir a partir de objetos, y si es así, cuál es?

Sí - mostrarlo
 
Artyom Trishkin #:
Sí, prodúzcalo usted mismo

la palabra clave aquí es "como". Ahí están tus propios datos, no los de un indicador de terceros.

 
Andrey Sokolov #:

Saludos. ¿Puedes darme una pista?

En el robot mt5 necesito poner una curva como una media móvil en el gráfico. ¿Existe una forma más "civilizada" de mostrarlo que sacarlo de los objetos?

Dibujo de valores en CCanvas.

 
Andrey Sokolov #:

la palabra clave aquí es "como". Ahí están tus propios datos, no los de un indicador de terceros.

Haz un indicador y añádelo como #recurso
 

Hola. ¿Puedes darme una pista? El terminal de comercio tiene un concepto como ALERT. Es decir, lo ponemos en la escala deprecios y establecemos las condiciones para alcanzar este precio. Pero resulta que es desechable. El robot de comercio no es un evento único y la alerta no es un evento único.

 
valentin104 El terminal de comercio tiene un concepto como ALERT. Es decir, lo ponemos en la escala deprecios y establecemos las condiciones para alcanzar este precio. Pero resulta que es desechable. El orden es similar al de las alertas, pero son reutilizables, es decir, siguen funcionando hasta que se desactivan.

// использовать алерт
input bool alert = true;
// уровень срабатывания
input double trigLv = 0.0;
// отклонение от trigLv в пунктах
input int deviation = 30; 


// функция взята из https://www.mql5.com/ru/docs/basis/types/double
bool EqualDoubles(double d1,double d2,double epsilon)
  {
   if(epsilon<0) 
      epsilon=-epsilon;
//---
   if(d1-d2>epsilon) 
      return false;
   if(d1-d2<-epsilon) 
      return false;
//---
   return true;
  }

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit() {
  return(INIT_SUCCEEDED);
}

int OnCalculate(const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[]
) {
  static bool triggered = false;
  static datetime time_ = 0;
  if (!alert)
    return rates_total;
  if (EqualDoubles(trigLv, close[0], deviation * SymbolInfoDouble(NULL, SYMBOL_POINT))) { // сравнение цены Close с trigLv
    if (time_ != time[rates_total - 1])
      time_ = time[rates_total - 1];
    else
      return rates_total;
    if (!triggered)
      Alert("Level ", NormalizeDouble(trigLv, (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)), " triggered!");
    triggered = true;
  }
  else
    triggered = false;
  
  return rates_total;
}

El código es para MQL5. La función se basa en la suposición de que el indicador tiene la misma función que en MQL5 y en MQL5 se basa en la misma función que en MQL5.

Archivos adjuntos:
Alert.mq5  5 kb