Experimentos con MetaTrader 5 en Discovery - página 16

 
Otra pregunta, ¿qué construcción es? 803?
 

construye 803. La cuenta es real 10267.

¿Supongo que como hay tantas preguntas, soy el único con "mnj"?

Hasta hace 3-4 semanas el probador era un poco más correcto en cuanto a los diferenciales. Pero en cuanto al comportamiento...

El problema estaba en lo siguiente: prácticamente cualquier vela se formaba, digamos, dentro de 20 ticks. Y luego 50-100 ticks o el precio estaba 10 puntos arriba/abajo en el extremo o cerca del cierre. Y este ritmo fue fácilmente encontrado por un probador que optimizó el scalper.

En general, el probador no es adecuado para las estrategias scalper/pipsewing.

Entiendo la lentitud del probador de garrapatas. Pero para el intercambio, en mi opinión, no se puede prescindir de él.

 
dimeon:
¿Cómo lo hago?

Abre el gráfico. Abra la ventana de datos. Desplácese por el gráfico hasta el punto deseado en el tiempo. Mueva el ratón sobre el gráfico y vea los valores de la dispersión en la ventana de datos.

Ya lo he mirado. En un gran número de barras, el diferencial es cero. Es decir, los datos son incompletos. Cuando el valor de la dispersión es cero, se utiliza el último valor distinto de cero.

Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Доступ к таймсериям и индикаторам / Bars - Документация по MQL5
 
La situación es diferente en el probador. El visualizador muestra que en la primera mitad del día el spread está fuera de la marca, por la tarde es de 20-50 pips de media y en la sesión nocturna vuelve a estar fuera de la marca
 

Permítanme explicar con imágenes lo que sucede en el probador.

El probador descarga los datos históricos de al menos el año anterior antes de comenzar las pruebas y analiza la dispersión. Si las pruebas comienzan con el 2013.01.01, entonces el último diferencial no nulo de 2012 se registró el 2012.12.10 a las 10:09 horas, y fue de 2990 puntos


El siguiente diferencial no nulo se registra el 2013.03.15 a las 18:49 en la cantidad de 1190


Entre estas horas el margen es de 0. Es decir, desde el 1 de enero de 2013 hasta la tarde del 15 de marzo, el último diferencial conocido fue de 2990 (lo que llamé "el último valor no nulo"). Hasta que ese último valor distinto de cero se convirtió en 1190.

Después de eso tenemos valores de propagación cero de nuevo, es por eso que hemos estado utilizando 1190. Esto se registró hasta 2013.03.18 18:46.


después de otros 3 minutos.


Entonces había muchos menos ceros que a principios de año. Sin embargo, la serie de ceros se mantuvo.

Esto explica la serie de diferenciales idénticos

La situación es desagradable, la resolveremos. Los márgenes en el probador serán adecuados.

 

Los spreads serán ordenados, los estableceremos correctamente aunque el broker no haya importado los spreads detallados en su historial.

Esto permitirá realizar pruebas normales.

 
stringo:

Permítanme explicar con imágenes lo que sucede en el probador.

El probador carga los datos históricos de, al menos, el año anterior antes de que comience la prueba y analiza la dispersión. Si las pruebas comienzan desde el 01.01 de 2013, el último diferencial no nulo de 2012 se registró el 12.10 de 2012 a las 10:09 horas, y fue de 2990 puntos


El siguiente diferencial no nulo se registra en 2013.03.15 a las 18:49 en la cantidad de 1190


Entre estas horas el margen es de 0. Es decir, desde el 1 de enero de 2013 hasta la tarde del 15 de marzo, el último diferencial conocido fue de 2990 (lo que llamé "el último valor no nulo"). Hasta que ese último valor distinto de cero se convirtió en 1190.

Después de eso tenemos valores de propagación cero de nuevo, es por eso que hemos estado utilizando 1190. Esto se registró hasta 2013.03.18 18:46.


después de otros 3 minutos.


Entonces había muchos menos ceros que a principios de año. Sin embargo, la serie de ceros se mantuvo.

Esto explica la serie de diferenciales idénticos.

La situación es desagradable, la resolveremos. Los márgenes en el probador serán adecuados.

No tiene sentido probar los futuros de principios de año, porque todo el mundo ha negociado el de marzo.

Sería más razonable calcular el diferencial medio con un redondeo adecuado.

También, por favor, reduzca los volúmenes para el probador. La mayoría de los ticks se producen cuando el precio no se mueve en absoluto en la realidad. En el probador, el precio llega al extremo muchas veces, lo que se refleja en pruebas inadecuadas. Y el tiempo de optimización se reduce.

 

1. a) Sobre los futuros pegados... no se entiende muy bien, pero en mi opinión el probador no funciona con ellos (ni una sola operación, he intentado probar los EAs estándar que hay en el terminal).

b) En mt5 de bx ya están pegados los futuros de los principales blue chips, no te quedes atrás.

c) Sería estupendo poder fijar los spreads manualmente en el probador, sería mucho más fácil optimizar las estrategias.

 

2. a) Sobre el feed... no estaría de más tenerlo en forma de tabla de operaciones como en Quicksilver (como herramienta enchufable y desconectable por supuesto), y también la posibilidad de establecer filtros en la tabla como en Quicksilver (por ejemplo quiero ver sólo las operaciones grandes con volumen a partir de 100 lotes y cómo han pasado, por oferta o por demanda)... Repito - no estaría de más, pero no es tan necesario.

b) Pero añadir a la estructura MqlTick obtenida (SymbolInfoTick(_Symbol,latest_price)) otro parámetro sobre cómo se ha abierto la operación en Bid o Ask - creo que es necesario, o como una petición separada de información de mercado, esta información es pasada por la bolsa y es necesaria para muchos robots, incluyendo el mío. Calcular si una transacción fue una compra o una venta no es realista... porque hay transacciones extrabursátiles con grandes volúmenes que no mueven el mercado directamente y muchos otros matices... Creo que añadir este parámetro a la estructura no será difícil para los desarrolladores y aportará muchas ventajas.

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура для получения текущих цен
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура для получения текущих цен
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура для получения текущих цен - Документация по MQL5
 

3. Al intentar colocar órdenes pendientes, un EA da un error "Fecha de vencimiento de la orden no válida en la solicitud". Por ejemplo, hice un EA que sólo coloca órdenes pendientes pero no hace nada más... En MT5 en forex, coloca órdenes pendientes normalmente, pero en FORTS, sale el error. La fecha de vencimiento de la orden es adecuada - lo comprobé mostrándola en la pantalla. ¿Soy el único con este problema? ¿Cuál es la razón? Código del Asesor Experto abajo


#property copyright "Copyright 2013, MetaQuotes Software Corp."

#property link      "http://www.mql5.com"

#property version   "1.00"

input int tp=150;

input int Deviation=5;

MqlTradeRequest mrequest; 

MqlTradeResult mresult;   

int OnInit()

  {

   return(0);

  }

void OnDeinit(const int reason)

  {

  }


void OnTick()

  {

   Open_Pending_Order(1,SymbolInfoDouble(_Symbol,SYMBOL_BID)+NormalizeDouble(tp*_Point,_Digits), 1, 111);

   Sleep(500);

  return;

  }

//+------------------------------------------------------------------+

void Open_Pending_Order(int type, double prise, double lot, long magic)

  {

   ZeroMemory(mrequest);

   mrequest.action = TRADE_ACTION_PENDING;                               

   mrequest.magic = magic;                                              

   mrequest.symbol = _Symbol;                                            

   mrequest.type_filling = ORDER_FILLING_RETURN;                            

   mrequest.deviation=NormalizeDouble(Deviation*_Point,_Digits);                                                

   mrequest.type_time=ORDER_TIME_SPECIFIED;

   mrequest.expiration=TimeCurrent()+6000;                                    

   mrequest.volume = lot; 

   mrequest.sl = 0;  

   mrequest.tp = 0; 

   mrequest.price = prise;

   Print(" время экспирации ",mrequest.expiration," тип экспирации  ",mrequest.type_time," цена ",mrequest.price);

    if(type==1)

      {                                    

       mrequest.type = ORDER_TYPE_BUY_STOP;                              

       OrderSend(mrequest,mresult);

       // анализируем код возврата торгового сервера

       if(mresult.retcode==10009 || mresult.retcode==10008) Print("Ордер Buy по символу ",_Symbol, " с маджиком ",magic," успешно помещен, тикет ордера #:",mresult.order," !!");  

       else Print("Запрос на установку ордера Buy по символу ",_Symbol, " с маджиком ",magic," не выполнен - ответ сервера:" , mresult.retcode," код ошибки " ,GetLastError());

      }

    if(type==2)

      {                                    

       mrequest.type = ORDER_TYPE_SELL_LIMIT;     

       OrderSend(mrequest,mresult);

       // анализируем код возврата торгового сервера

       if(mresult.retcode==10009 || mresult.retcode==10008) Print("Ордер Sell по символу ",_Symbol, " с маджиком ",magic," успешно помещен, тикет ордера #:",mresult.order,"!!");

       else Print("Запрос на установку ордера Sell  по символу ",_Symbol, " с маджиком ",magic," не выполнен - код ошибки:" , mresult.retcode,"  " ,GetLastError());                         

      }

   return; 

  }

Dice (he intentado cambiar el tiempo de caducidad) :

2013.04.24 17:40:05 udalit (SBRF-6.13,M1) La solicitud para realizar una orden de compra por SBRF-6.13 con el número mágico 111 ha fallado - respuesta del servidor: 10022 código de error 4756

2013.04.24 17:40:05 udalit (SBRF-6.13,M1) Hora de caducidad 2013.04.25 17:00:00 Tipo de caducidad 2 Precio 10016.0