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

 
xyz999: 2) Si la optimización (backtest) se llevó a cabo durante un período de 10 meses y se seleccionó la opción de prueba de 1/4 hacia adelante, como por ejemplo, ¿cómo debo entender:
Terminal de cliente / Probador de estrategias / Backtesting / Forward Testing
 

Gracias.

Sí, desde este enlace.

http://www.metatrader5.com/ru/terminal/help/tester/tester_using/forward_testing.

He encontrado la respuesta a mi segunda pregunta. Sin embargo, NO hay respuestas a la primera y tercera preguntas.

A mí también me gustaría tenerlos.

Quiero conocer los resultados y ratios de otros comerciantes. Como mis resultados son muy alarmantes. Soy un científico en el campo del control automático y la modelización de procesos no estacionarios, que incluye también un gráfico del movimiento de los precios en el mercado. Llevo muchos años modelando procesos no estacionarios y el funcionamiento del probador no se ajusta en absoluto a mis años de experiencia. Algo está mal aquí. O bien utilizo el comprobador de forma incorrecta o no funciona correctamente. Averigüémoslo juntos.

Mi backtest siguiendo estrictamente el periodo de optimización muestra un 200% del beneficio que tuvimos durante la optimización con los mismos parámetros. Sin embargo, si elegimos otros parámetros de optimización y hacemos pruebas durante el periodo de optimización, obtendremos varios beneficios menos. Esto no debería ser así. Por eso tengo algunas preguntas.

 
xyz999: He encontrado una respuesta a mi segunda pregunta. Sin embargo, no hay respuesta a la primera y tercera pregunta. A mí también me gustaría tenerlos.

Bueno, no depende de mí, como se dice, "lo que pueda" (c). Estoy lejos del tema en sí. Intenta buscar en el foro, quizás donde ya se haya hablado de las pruebas de avance. O, si crees que el tema es muy importante, crea una nueva rama temática. De lo contrario, las preguntas se perderán en la rama general.

xyz999 : Sí, en este enlace https://www.metatrader5.com/ru/terminal/help/algotrading/testing encontré la respuesta a mi segunda pregunta.

También hay material de referencia en la terminal. F1.

 
mario065:

Hizo una cosa muy tonta.

Tomé el cuerpo del indicador Custom Moving Average y puse el buffer MFI dentro.

He cambiado el precio.

Te hice un experto, sólo un indicador y un comentario para verificar.

Gracias por no dejar el mensaje sin contestar. Por desgracia, el comprobador sigue rechazando el suavizado de los demás indicadores. Mi Asesor Experto requiere dos indicadores - MFI y DEMA al mismo tiempo. He implementado su algoritmo con MFI en mi EA - en vano - no he sido capaz de ejecutarlo para la optimización de las variables globales.

Gracias de nuevo por sus mensajes.
 
El artículo sobre el EA https://www.mql5.com/ru/articles/100 menciona condiciones para abrir posiciones, pero no condiciones para cerrarlas.


   bool Buy_opened=false;  // переменные, в которых будет храниться информация 
   bool Sell_opened=false; // о наличии соответствующих открытых позиций

   if(PositionSelect(_Symbol)==true) // есть открытая позиция
     {
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
         Buy_opened=true;  //это длинная позиция
        }
      else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
        {
         Sell_opened=true; // это короткая позиция
        }
     }    
             
   bool Buy_Condition_1=...
   bool Buy_Condition_2=...
   bool Buy_Condition_3=...

   
 if(Buy_Condition_1 || Buy_Condition_2)
     { 
       if(Buy_Condition_3)
        {
         // есть ли в данный момент открытая позиция на покупку?
         if(Buy_opened)
           {
            Alert("Уже есть позиция на покупку!!!");
            return;    // не добавлять к открытой позиции на покупку
           }        
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           // последняя цена ask
         mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.magic = EA_Magic;                                            // Magic Number
         mrequest.type = ORDER_TYPE_BUY;                                       // ордер на покупку
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=10;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
         OrderSend(mrequest,mresult);
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {
            Alert("Ордер Buy успешно помещен, тикет ордера #:",mresult.order,"!!");
           }
         else
           {
            Alert("Запрос на установку ордера Buy не выполнен - код ошибки:",GetLastError());
            return;
           }
        }
      }
 
 bool Buy_Close_1=....
 bool Buy_Close_2=...
 bool Buy_Close_3=...
 
 if(Buy_Close_1 || Buy_Close_2)
     {
      if(Buy_Close_3)
        {
        // есть ли в данный момент открытая позиция на покупку?
         if(????)
         {
           Alert("Позицию на покупку закрываю!!!");
            return;    // закрыл
         }        
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена bid
         mrequest.sl = 0;
         mrequest.tp = 0;
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.magic = EA_Magic;                                            // Magic Number
         mrequest.type = ORDER_TYPE_SELL; // ордер на продажу                                     // ордер на покупку
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=10;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
         OrderSend(mrequest,mresult);

En lugar de los signos de interrogación puse PositionSelect(_Symbol) con valor true. No sirvió de nada.


Pregunta. ¿Qué puedo cambiar mínimamente para poder establecer condiciones de cierre?
Пошаговое руководство по написанию MQL5-советников для начинающих
Пошаговое руководство по написанию MQL5-советников для начинающих
  • 2010.06.09
  • Samuel
  • www.mql5.com
Написание советников на MQL5 проще чем кажется, вы легко можете этому научиться. В этом руководстве вы познакомитесь с основными моментами, необходимыми для написания простого советника на основе конкретной торговой стратегии. Рассмотрена структура советника, использование встроенных технических индикаторов и торговых функций, вопросы отладки и тестирования советника на исторических данных.
 
Lester:
El artículo sobre el Asesor Experto https://www.mql5.com/ru/articles/100 menciona las condiciones para la apertura de posiciones, pero no habla de las condiciones para el cierre de posiciones.


En lugar de los signos de interrogación puse PositionSelect(_Symbol) con valor true. No sirvió de nada.


Pregunta. ¿Qué puedo cambiar al mínimo - para poder establecer las condiciones de cierre?

Tienes un retorno después de la alerta. Es probable que la posición no se cierre debido a este retorno. Por favor, quítalo y vuelve a intentarlo.

// есть ли в данный момент открытая позиция на покупку?
         if(????)
         {
           Alert("Позицию на покупку закрываю!!!");
           return;    // закрыл
         }  


 
Gracias, ya que me pareció que la respuesta era muy sencilla y que estaba cerca.
Sin embargo, en la parte de los signos de interrogación surgió otra cuestión.

En el algoritmo.

En condiciones adecuadas + ninguna posición - la posición se abre, y en otras condiciones y la presencia de una posición abierta - la posición abierta se cierra.

Si no me equivoco - existencia de una posición, a saber Buy_opened

if(Buy_Condition_1 || Buy_Condition_2)
     { 
       if(Buy_Condition_3)
        {
         // есть ли в данный момент открытая позиция на покупку?
         if(Buy_opened)
           {
            Alert("Уже есть позиция на покупку!!!");
            return;    // не добавлять к открытой позиции на покупку
           }        

igual a uno - provoca alerta y retorno (vuelve al principio), e igual a cero - abre la orden de compra.

Pregunta. ¿Qué debo escribir en lugar de los signos de interrogación - la condición de una orden abierta, para que el EA no abra una posición (en mi caso, abre una orden de venta)?

 bool Buy_Close_1=....
 bool Buy_Close_2=...
 bool Buy_Close_3=...
 
 if(Buy_Close_1 || Buy_Close_2)
     {
      if(Buy_Close_3)
        {
        // есть ли в данный момент открытая позиция на покупку?
         if(????)
         {
           Alert("Позицию на покупку закрываю!!!");
            return;    // закрыл
         }        
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена bid
         mrequest.sl = 0;
         mrequest.tp = 0;

Por el momento también he prescrito Buy_opened, porque las condiciones de esta definición están relacionadas con PositionSelect(_Symbol)

Entiendo que las preguntas no significan nada, ya que es posible probar rápidamente todas las opciones lógicas posibles y probar, pero el problema es que el error del probador no me permite hacer esto, pero hay una oportunidad de diagnosticar realmente en M1 en el modo de comercio real.

 
Lester:
...

Entiendo que las preguntas no significan nada ya que puedes probar rápidamente todas las opciones lógicas posibles y probar, pero el problema es que el bug del probador no me permite hacer eso, pero hay una oportunidad de diagnosticar realmente en M1 en modo de comercio real.

No entiendo bien su pregunta.

¿Y qué fallo en el probador has encontrado que te impide ejecutar la prueba?

 
tol64:

No entiendo bien su pregunta.

¿Cuál es el error en el probador que le impide ejecutar la prueba?

Lo he descrito antes o en la rama de indicadores. Dema que se refiere a la manija del indicador MFI no se muestra en la ventana MFI y por lo tanto el probador no funciona, pero el Asesor Experto funciona. Lo mismo con MA, AMA...

Sobre la pregunta. ¿Qué debemos escribir en lugar de los signos de interrogación para que el Asesor Experto "entienda" que hay una posición abierta y no abra una orden?

bool Buy_Close_1=....
 bool Buy_Close_2=...
 bool Buy_Close_3=...
 
 if(Buy_Close_1 || Buy_Close_2)
     {
      if(Buy_Close_3)
        {
        // есть ли в данный момент открытая позиция на покупку?
         if(????)
         {
           Alert("Позицию на покупку закрываю!!!");
           // Return убрал благодаря форуму ))
         }        
 
Lester:
Descrito anteriormente, o en la rama de indicadores. Dema que se refiere a la manija del indicador MFI - no se muestra en la ventana MFI, y por lo tanto - el Asesor Experto no funciona. Lo mismo ocurre con MA, AMA.

Sobre la pregunta. ¿Qué debemos escribir en lugar de los signos de interrogación para que el EA "vea" que hay una posición abierta y no abra una orden?

Si hay una posición (PositionSelect(_Symbol)) y se cumplen todas las demás condiciones, entonces cierra la posición. Si no se elimina el retorno de su ejemplo, la condición debería tener el siguiente aspecto

if(!PositionSelect(_Symbol))
  {
   return;
  }

lo que significa que si no hay posición, se sale. Si no se sale, el programa ejecutará el código que viene después de este bloque.

Pero yo pondría la comprobación de presencia/ausencia de posición antes de la comprobación de la condición de cierre.

Razón de la queja: