Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 952

 
vladzeit:

***

1. Solicita el precio actual del instrumento actual.

***

2.1 Si el precio actual es Punto >= 100 pips, abrimos una posición.

***

¿Quieres coger un hueco?

 
Vladimir Karputov:

¿Quieres coger un hueco?

Vladimir, para mi vergüenza, no estoy seguro de entender lo que es un Gap)

Quiero implementar un algoritmo simple, en el que un cambio de precio por un número de pips será una condición para entrar en el mercado, para comprar o vender... no importa.

Como resultado, quiero aprender a obtener el precio actual del símbolo, guardarlo en una variable local o global y recuperarlo desde allí en un evento, y ponerlo a cero.

Quiero utilizarlo principalmente para encontrar puntos de entrada en el mercado.

Acabo de empezar a aprender mql5, sobre todo gracias a tus ejemplos de Asesores Expertos, que escribes mucho, gracias).

Soy capaz de armar mis propios algoritmos a partir de tus ejemplos, pero me confunde obtener el precio actual y guardarlo en una variable.

 
vladzeit:

***

Quiero implementar un algoritmo simple en el que un cambio de precio por un número de pips sería una condición para entrar en el mercado, para comprar o vender... no importa.

***

Debe entender que si fija un precio en el tick actual, en el siguiente tick este precio puede no cambiar en absoluto o cambiar por un número muy pequeño de puntos.

Por lo tanto, tiene que ser más específico sobre lo que quiere hacer:

  • por ejemplo, obtener el precio actual una vez en N-segundos.
  • obtener el precio actual sólo en la formación de una nueva barra.
  • ...
  • y sólo entonces comparar este precio con el valor almacenado anteriormente.

 
Vladimir Karputov:

Debe entenderse que si se memoriza un precio en el tick actual, en el siguiente tick este precio puede no cambiar en absoluto o cambiar en un número muy pequeño de puntos.

Por lo tanto, tiene que ser más específico sobre lo que quiere hacer:

  • por ejemplo, obtener el precio actual una vez en N-segundos.
  • obtener el precio actual sólo en la formación de una nueva barra.
  • ...
  • y sólo entonces comparar ese precio con el valor memorizado anteriormente.

Hmmm... No pensé en estas características)

  • Para obtener el precio actual sólo en el momento en que nace una nueva barra.
Este ejemplo me sería más útil.
 
vladzeit:

Mmm... Son características en las que no había pensado)

  • Obtiene el precio actual sólo cuando nace una nueva barra.
Este ejemplo me será más útil.

Intentaré mostrar un ejemplo esta noche (tarde).

 

¡Buenas tardes!
Estoy tratando de acelerar el indicador. Estoy tratando de acelerar el indicador porque tengo un array de tiempo que debe ser comparado con los índices de las barras y veo algo de lentitud aquí. Ya lo he comprobado, si he preparado un array con índices y lo he comparado con los índices de las barras obtengo 40K elementos en 7 segundos, pero si tengo un array de tiempo tarda 140 segundos. ¿Hay algún truco para acelerar el indicador?

   bool FindArr(int Bar)
     {
      int Size=CheckSizeTime;
      for(int i=restBars; i<Size; i++)
        {
         datetime BarTime=iTime(NULL,PERIOD_CURRENT,Bar);
         if(BarTime==ArrCol.BarTimeArray[i])
           {
            restBars++;
            return(true);
           }
        }
      return(false);
     }
if(prev_calculated==0)         
        for(int i=0;i<rates_total;i++)
           {
            if(Arr.FindArr(i))
              {
               ColorSectionBuffer[i]=low[i];
               ColorSectionColors[i]=0;
              }
            else
              {
               ColorSectionBuffer[i]=0;
               ColorSectionColors[i]=EMPTY_VALUE;
              }
           }
 
vladzeit:

Mmm... Son características en las que no había pensado)

  • Obtiene el precio actual sólo cuando nace una nueva barra.
Este ejemplo me será más útil.
Vladimir Karputov:

Intentaré mostrar un ejemplo esta noche (tarde).

Aquí estaba haciendo un ejemplo para que alguien obtenga los precios de cada garrapata:

//+------------------------------------------------------------------+
//|                                               Display prices.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
//---
#include <Trade\SymbolInfo.mqh>  
CSymbolInfo    m_symbol;                     // symbol info object
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(!m_symbol.Name(Symbol())) // sets symbol name
      return(INIT_FAILED);
   RefreshRates();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(!RefreshRates())
      return;
   Comment("Ask: ",DoubleToString(m_symbol.Ask(),m_symbol.Digits()),"\n",
           "Bid: ",DoubleToString(m_symbol.Bid(),m_symbol.Digits()));
  }
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates(void)
  {
//--- refresh rates
   if(!m_symbol.RefreshRates())
     {
      Print("RefreshRates error");
      return(false);
     }
//--- protection against the return value of "zero"
   if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
      return(false);
//---
   return(true);
  }
//+------------------------------------------------------------------+

Las explicaciones serán mañana, esta noche ya estoy durmiendo.

Mañana también habrá un ejemplo de un nuevo bar.

Archivos adjuntos:
 
Vladimir Karputov:

Este es un ejemplo de cómo obtener los precios de cada garrapata para otra persona:

Lo explicaré mañana, esta noche ya estoy en la cama.

Mañana también habrá un ejemplo de un nuevo bar.

Vladimir, gracias. Mehe familiarizado un poco con la funciónRefreshRates de la claseCSymbolInfo .Lo he visto en sus informes y también lo he leído en una cartilla.

La llamada de esta función enOnTick y la salida de los valores de los precios enComment también me queda claro en el ejemplo. El procedimiento enOnInit para comprobar el símbolo actual también está claro para mí.

A la espera del ejemplo con la nueva barra, intentaré poner algo de práctica con tu ejemplo, no lo he utilizado en la práctica. Lo probaré.


 
fxsaber:

Gracias, lo he arreglado.

Gracias - ahora parece que sólo da directorios correctamente.

Sin embargo, me di cuenta de que los subdirectorios están separados por una "\", mientras que el estándar MQL proporciona dos "\" barras inclinadas. Es decir, el código es necesario para generar las rutas de los archivos y debido a una barra es imposible hacerlo sin un post-procesamiento adicional, ¿hay alguna opción para obtener dos barras a la vez?

 
Aleksey Vyazmikin:

Gracias - ahora sólo los directorios parecen ser correctos.

Sin embargo, me di cuenta de que los subdirectorios están separados por una "\", mientras que el estándar MQL proporciona dos "\" barras inclinadas. Es decir, el código es necesario para la generación de las rutas de los archivos, pero debido a una barra es imposible hacerlo sin un post-procesamiento adicional, ¿existe la posibilidad de obtener dos barras a la vez?

Print("\\");
Razón de la queja: