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

 
_new-rena:

Esto (abajo) no funciona, escribí F_Path en el explorador, hice clic en enter, el archivo se abre... ¿La información de WinApi tiene este aspecto?

¿Quién impide que se utilice la bandera FILE_COMMON al escribir y leer? El archivo estará disponible para todos los terminales instalados en el sistema. Estará en la carpeta compartida de todos los terminales.

En ME Archivo --> Abrir carpeta de datos compartidos

 
artmedia70:

¿Quién impide que se utilice la bandera FILE_COMMON al escribir y leer? El archivo estará disponible para todos los terminales instalados en el sistema. Se ubicará en la carpeta compartida de todos los terminales.

En ME Archivo --> Abrir carpeta de datos compartidos

gracias (!!!), lo probaré.
 

Hola, ¿alguien se ha encontrado con este problema al crear una solicitud de comercio con parámetros:

si pongo los siguientes parámetros:

mrequest.action=TRADE_ACTION_DEAL;
mrequest.type_filling=ORDER_FILLING_FOK;

mrequest.type=ORDER_TYPE_BUY;

el terminal anuncia que he especificado un método inválido mrequest.type_filling(política de ejecución de la orden); si especifico mrequest.type_filling=ORDER_FILLING_RETURN, la orden se abre pero no puedo cerrarla programáticamente porque el terminal informa de que se está utilizando un método inválido. Estoy ejecutando el Asesor Experto en un servidor de Forex y todo funciona bien en otros servidores. ¿Puede alguien escribir una política de ejecución de órdenes que pueda ser utilizada cuando se desarrollen robots de trading para este broker? Gracias.
 

Hay un indicador mq4 con función de alerta.

Por ejemplo:

//+------------------------------------------------------------------+
//|                                                    RSI-Alert.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"

#property indicator_separate_window
//#property indicator_minimum 0
//#property indicator_maximum 100
#property indicator_buffers 3
#property  indicator_color1 LightSeaGreen
#property  indicator_color2 CLR_NONE
#property  indicator_color3 CLR_NONE
#property  indicator_width1 1
#property  indicator_width2 1
#property  indicator_width3 1
#property  indicator_style1 STYLE_SOLID
#property  indicator_style2 STYLE_DOT
#property  indicator_style3 STYLE_DOT
//---- input parameters
extern int RSIPeriod=48;
extern int ApplyTo=0;
extern bool AlertMode=true;
extern int OverBought=0;
extern int OverSold=0;
//---- buffers
double RSIBuffer[];
double RSIOBBuffer[];
double RSIOSBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
//---- indicator lines
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,RSIBuffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,RSIOBBuffer);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,RSIOSBuffer);
//---- name for DataWindow and indicator subwindow label
   short_name="RSI-Alert("+RSIPeriod+")";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);
   SetIndexLabel(1,"OverBought");
   SetIndexLabel(2,"OverSold");
//----
   SetIndexDrawBegin(0,RSIPeriod);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Relative Strength Index                                          |
//+------------------------------------------------------------------+
int start()
  {
   int    i,counted_bars=IndicatorCounted();
//----
   if(Bars<=RSIPeriod) return(0);
//----
   i=Bars-RSIPeriod-1;
   if(counted_bars>=RSIPeriod) i=Bars-counted_bars-1;
   while(i>=0)
   {
      RSIBuffer[i]=iForce(NULL,0,RSIPeriod,1,0,i);
      RSIOBBuffer[i]=OverBought;
      RSIOSBuffer[i]=OverSold;
      i--;
   }
   
   if(AlertMode)
   {
      if(RSIBuffer[1]<OverBought && RSIBuffer[0]>=OverBought)
         Alert("RSI = "+ RSIBuffer[i]+ ", Sell.");
      else if(RSIBuffer[1]>OverSold && RSIBuffer[0]<=OverSold)
         Alert("RSI = "+ RSIBuffer[i]+ ", Buy.");
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+
¿Cómo hacer que en la esquina superior izquierda de la subventana (donde suele aparecer el nombre del indicador y los parámetros), o de alguna otra manera, se indique si la señal está activada(extern bool AlertMode=true;) o desactivada?
 
Nilog:

Hay un indicador mq4 con función de alerta.

Por ejemplo:

¿Cómo hacer que en la esquina superior izquierda de la subventana (donde suele aparecer el nombre del indicador y los parámetros), o de alguna otra manera, se indique si la señal está activada(extern bool AlertMode=true;) o desactivada?
Salida de texto por objetos, por ejemplo.
 

La documentación dice que:

При тестировании в эксперте можно обрабатывать пользовательские события с помощью функции OnChartEvent(), но в индикаторах эта функция в тестере не вызывается. Даже если индикатор имеет обработчик OnChartEvent() и этот индикатор используется в тестируемом эксперте, то сам индикатор не будет получать никаких пользовательских событий.

Por el momento esta afirmación no es relevante - en los indicadores esta función es llamada en el probador, al menos un indicador puede recibir eventos generados por otro indicador en el probador.

El problema es que una vez que el indicador recibe la llamada de esta función, no tiene acceso a los datos almacenados en las variables declaradas a nivel global, y viceversa - todos los cambios realizados en esta función no se almacenan en las variables de nivel de acceso global.

Ejemplos:

1. El objeto se declara globalmente y se inicializa en la función OnInit. Se puede acceder a él desde la función OnCalculate, pero obtenemos un mensaje de error en la función OnChartEvent: puntero no válido

2. hay una función que envía el contenido de una variable al diario (la variable se declara globalmente). Cuando se llama a esta función desde OnCalculate se obtiene el valor esperado, cuando se llama a la misma función desde OnChartEvent se obtiene un sinsentido.

 

¡Buenos días!

Me he encontrado con un problema al utilizar eventos, en particular la función OnChartEvent() en un indicador. Cuando se utiliza en un Asesor Experto, no hay ningún problema, pero en el indicador no funciona correctamente. Es decir, el evento ocurre pero no hay manera de cambiar los campos existentes. Ejemplo:

//----------------------------------------------------------------------------------------------
int k;
int OnInit()
{
k = 0;
ihandleDE = iCustom(_Symbol, _Period, "DrawExtremums");
//< ... >
return(INIT_SUCCEED);
}

int OnCalculate(const int rates_total,
const int prev_calculado,
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[])
{
Print("OnCalculate(): k =", k);
//< ... >
return(rates_total)

}

void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
string nameEv = "EXTR_UP";
if (sparam == nameEv)
{
Print("OnChartEvent(): k = ", k);
k++;

}

}

//----------------------------------------------------------------------------------------------

Como resultado obtenemos:

"OnCalculate(): k = 0" - siempre.

"OnChartEvent(): k = 0,...,123332" - cuenta de 0 a ...

¿Cómo puede ser esto y por qué? ¿Hay alguna forma de arreglarlo? Si alguien lo entiende, se agradecería mucho una respuesta.

P.D.: Esta injusticia ocurre sólo en el probador de estrategias, en tiempo real todo funciona correctamente.

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
dariamap:

¡Buenos días!

Me he encontrado con un problema al utilizar eventos, en particular la función OnChartEvent() en un indicador. Cuando se utiliza en un Asesor Experto, no hay ningún problema, pero en el indicador no funciona correctamente. Es decir, el evento se produce pero no hay manera de cambiar los campos existentes. Ejemplo:

//----------------------------------------------------------------------------------------------
int k;
int OnInit()
{
k = 0;
ihandleDE = iCustom(_Symbol, _Period, "DrawExtremums");
//< ... >
return(INIT_SUCCEED);
}

int OnCalculate(const int rates_total,
const int prev_calculado,
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[])
{
Print("OnCalculate(): k =", k);
//< ... >
return(rates_total)

}

void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
string nameEv = "EXTR_UP";
if (sparam == nameEv)
{
Print("OnChartEvent(): k = ", k);
k++;

}

}

//----------------------------------------------------------------------------------------------

Como resultado obtenemos:

"OnCalculate(): k = 0" - siempre.

"OnChartEvent(): k = 0,...,123332" - cuenta de 0 a ...

¿Cómo puede ser esto y por qué? ¿Hay alguna forma de arreglarlo? Si alguien lo entiende, se agradecería mucho una respuesta.

P.D.: Esta injusticia ocurre sólo en el probador de estrategias, en tiempo real todo funciona bien.

Por la noche. En su momento, el Servicio de Atención al Cliente dio una respuesta bastante definida sobre este tema: el terminal y el probador de estrategias son dos programas diferentes, y el rendimiento de los Asesores Expertos/indicadores en el probador y en el terminal puede ser diferente. Lo que a menudo funciona en el terminal del cliente no funciona en el Probador de Estrategias. Escribe al Servicio de Atención al Cliente, aporta pruebas y deja que lo arreglen.
 
Tapochun:
Buenas noches. En su momento, el Service Desk dio una respuesta bastante definida sobre este tema: el terminal y el probador de estrategias son dos programas diferentes, y el trabajo de los Asesores Expertos/indicadores en el probador y en el terminal puede diferir significativamente. Lo que a menudo funciona en el terminal del cliente no funciona en el Probador de Estrategias. Por favor, escriba al Servicio de Atención al Cliente y proporcióneles pruebas y deje que lo arreglen.
¡Muchas gracias! Me alegro de que el problema no sea yo)
 
extern string Symbol1= "EURUSD";
extern string Symbol2= "GBRUSD";

  double Sell1=iFractals(Symbol1,240,MODE_UPPER,2);
  double Sell2=iFractals(Symbol2,240,MODE_UPPER,2);
Me puedes decir que comando escribir para que cuando se abran los fractales Sell1 y Sell2 al mismo tiempo se abra una orden
Razón de la queja: