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

 
Alexey Volchanskiy:

.ex5 no le sirve a nadie, si quieres ayuda, publica el código fuente.


Joder, pensaba que era el código fuente :-) También estoy mirando los otros iconos.... Me preguntaba cuál era la fuente...... ésta :-)

Resulta que no es ....

Archivos adjuntos:
ChekParam.mq5  11 kb
 

La cuestión es que el pulso en la tercera barra menos desde el final es cero y se dibuja como cero. Pero no es cero en el buffer.

No sé lo que era, pero he resuelto el problema pegando todo el código PULSE en un nuevo indicador, pasando por alto icustom.

No tuve ningún error en la segunda barra de menos. No he cambiado nada más en el código, así que en realidad es un error de metacita.

 
LookingFor:

La cuestión es que el pulso en la tercera barra menos desde el final es cero y se dibuja como cero. Pero no es cero en el buffer.

No sé lo que era, pero he resuelto el problema pegando todo el código PULSE en un nuevo indicador, pasando por alto icustom.

No tuve ningún error en la segunda barra de menos. No he cambiado nada más en el código, así que realmente es un error de metacita.


sin el código, el fallo sólo puede ser tuyo. por desgracia, al pedir ayuda, TÚ no has dado el material...

 
¿Alguien puede ayudar? ¿Cuál es el error, por qué el indicador no se muestra correctamente?
Archivos adjuntos:
ChekParam.mq5  11 kb
 
Vladislav Andruschenko:

Lamentablemente, cuando pidió ayuda, no dio el material...

Vladislav, en nombre de la justicia, del deseo de entender de qué se trata y por respeto a ti, te doy el código.


//+------------------------------------------------------------------+
//|                                                   PULS_SWING.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_plots   1
//--- plot Pulse_Swing
#property  indicator_label1  "Pulse_Swing"
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//--- input parameters
input double   points=0.005;
input double   begin_price_level=1.0;
//--- indicator buffers
double         Pulse_Swing [], pulse [] , trend [] , delta [];
int PULSE_Handle ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Pulse_Swing,INDICATOR_DATA);
   SetIndexBuffer(1,pulse,INDICATOR_CALCULATIONS);
   SetIndexBuffer(2,trend,INDICATOR_CALCULATIONS);
   SetIndexBuffer(3,delta,INDICATOR_CALCULATIONS);
   IndicatorSetInteger(INDICATOR_DIGITS,0);
   ResetLastError(); 
   PULSE_Handle = iCustom(NULL,0,"PULSE",
                          points,          // Points
                          begin_price_level          // begin_price_level
                          );
   Print("PULSE_Handle",PULSE_Handle,"  error = ",GetLastError()); 
//---
   PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID);
   //ArrayFree (pulse);ArrayFree (delta);ArrayFree (Pulse_Swing);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   int  bar, start  ;
   if (prev_calculated==0)
   {pulse [0] = pulse [1] =0; start =begin+2 ;}
   else {start = prev_calculated ;}
   //Print(IntegerToString(bar));
   for (bar= start ;bar<rates_total;bar ++)
   {CopyBuffer(PULSE_Handle,0,bar,1,pulse);
   //Print(IntegerToString(pulse[bar]));
   if ((pulse [bar-1]- pulse [bar -2])>0) trend[bar-1] = 1 ; // 
   else
   if ((pulse [bar-1] - pulse [bar -2])<0) trend[bar-1] = -1 ; //
   else
   if (pulse [bar-1] == pulse [bar -2])  {trend[bar-1] = trend[bar-2] ;} // 
   else 
   continue ;
   delta[bar] = pulse[bar]- pulse[bar-1];
   if (trend [bar-1]== 1 && pulse [bar] != pulse [bar-1])
   Pulse_Swing [bar] = Pulse_Swing [bar-1] + delta[bar];
   else
   if (trend [bar-1]== -1 && pulse [bar] != pulse [bar-1])
   Pulse_Swing [bar] = Pulse_Swing [bar-1] - delta[bar];
   else
   if (delta [bar]==0 )Pulse_Swing [bar] = Pulse_Swing [bar-1] ;
   }
   //Print(IntegerToString(delta[rates_total-1]));
   Print(IntegerToString(delta[rates_total-2]));
   //Print(IntegerToString(pulse[rates_total-1]));
   Print(IntegerToString(pulse[rates_total-3]));
   Print(IntegerToString(pulse[rates_total-2]));
   Print(IntegerToString(pulse[rates_total-1]));
  
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 

Tengo problemas para leer el resultado de la operación comercial. Lo escribí así:

MqlTradeRequest request={0};
MqlTradeResult result={0};
//--- установка параметров операции
....
//--- отправка запроса
if ( !OrderSend(request,result) )
  PrintFormat("OrderSend error %d",GetLastError()); // если отправить запрос не удалось
else // Я хочу получить парамеры резултата
{ Sleep(9999); // Жду получения резултата
  double ClosePrice=result.price;
}

Si quitas Sleep : siempre me sale ClosePrice=0.0 . Incluso si espero 10 segundos (no quiero esperar más), casi siempre obtengo el resultado, pero a veces no.

¿Cómo puedo obtener resultados?

La descripción de OrderSend() dice :

Nota

Una solicitud de comercio pasa por varias etapas de validación en el servidor de comercio. En primer lugar, se comprueba que todos los campos obligatorios del parámetro de solicitudson correctos y, si no hay errores, el servidor acepta el pedido para su posterior procesamiento. Si la orden es aceptada con éxito por el servidor de negociación, la función OrderSend() devuelve true.

Es decir, cuando obtengo true de OrderSend(), no obtengo el parámetro MqlResult, si entiendo bien.

¿Cuándo vendrán a mí?

 
Ivan Ivanov:

No puedo leer el resultado de mi operación.

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

El error 131 se produce al modificar un pedido

fxsaber, 2017.09.12 19:47

Todo lo que hay que hacer es escribir el nombre del servidor de comercio y el símbolo y el problema se resolverá en un momento, porque todo el mundo puede probarlo por sí mismo.

Mientras tanto, uno tiene la sensación de que la tarea no es encontrar una solución, sino responder sí/no.

 

Señores programadores,

Una pregunta: Si el Probador de Estrategias en MT5 muestra buenos resultados sólo a precios abiertos, ¿será el mismo resultado si el robot abre operaciones sólo a precios abiertos?

 
Dzyga:

Señores programadores,

Pregunta: Si el Probador de Estrategias en MT5 muestra buenos resultados sólo a precios abiertos, ¿el robot abrirá operaciones sólo a precios abiertos con el mismo resultado?


Es fácil de comprobar: en el EA se abren operaciones sólo al precio de apertura (es decir, al nacimiento de la barra) y en el Probador de Estrategias se comprueba en el modo de generación de ticks "Todos los ticks".

 

Colegas, por favor ayúdenme

No entiendo que pasa con el bucle, los datos del Handle no van al array psa1

if (prev_calculated == 0 ){i=bars =start=1;}
  else {start = prev_calculated ;}
  for ( bars=start ; bars<rates_total ; bars ++)
  {CopyBuffer(pulse_Handle,0,start,1,pca1);
  
  if (pca1[bars]!=pca1[bars-1]) {pca2[i]=pca1[bars]; i++;
  string s="";s=IntegerToString(pca1[bars])+"  ";Print(s); continue;}
  else continue ;}