Discusión sobre el artículo "Operaciones de trading en MQL5 - Es fácil" - página 3

 

¿Pueden decirme si es posible implementar esta construcción desde MQL4 usando m_Trade.PositionModify (m_Trade es un miembro de la clase CTrade)?

...
if(TrendUp==true) 
   for(int i=0; i<10; i++)
      {
        ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,30,0,0);
        if(ticket>0 && i<9) OrderModify(ticket,0,0,Ask+SPS*take_koef[i],0);
      };
...

El objetivo del script es abrir una compra en el mercado con un número determinado de lotes, y luego establecer un take profit en 10 partes. Me quedé atascado en el hecho de que sin establecer un stop loss PositionModify da error 10016(Paradas incorrectas en la solicitud). Y no hay ninguna tarea para establecer una parada :). En la ayuda dice que es posible no especificar un valor:

Параметры

symbol

[in]  Наименование торгового инструмента, по которому предполагается модифицировать позицию.

sl

[in]  Новая цена, по которой сработает Stop Loss (либо, если изменение не нужно, предыдущее значение).

tp

[in]  Новая цена, по которой сработает Take Profit (либо, если изменение не нужно, предыдущее значение).

He intentado pasar el valor obtenido de la solicitud de compra anterior (hay cero por supuesto), bueno, el mismo rastrillo sólo en el perfil. Aquí está mi código:

...
         m_Trade.Buy(Lots);// comprar todo el volumen en el mercado
         if(m_Trade.ResultRetcode()==10008)//si la compra tiene éxito, cambia la posición ajustando las tomas
           {
            S="Solicitud cumplida. Número de pedido: "+IntegerToString(m_Trade.RequestOrder());
            Comment(S);
            sl=m_Trade.RequestSL();// obtener stop loss de la última petición
            for(int i=0;i<=10;i++)
              {
               if(m_Trade.PositionModify(symbol,sl,Ask+SPS*take_koef[i]))
                 {
                  S+="Snap Take: "+IntegerToString(i);
                  Comment(S);
                 }
               else
                 {
                  S+="Error de cambio de SnPosition con código: "+IntegerToString(m_Trade.ResultRetcode());
                  Comment(S);
                  return(4);
                 };
              };
...

Gracias de antemano por vuestra ayuda.

[Eliminado]  
Esta es una GRAN ayuda para poner en marcha su programación EA.
 

Buena introducción a la programación orientada a objetos en MQL5.

Con MT5 build 1347 el primer ejemplo de código falla al compilar con el error "illegal switch expression type".

Tuve que añadir la fundición a int en las declaraciones de conmutación en AccountInfo.mqh para que funcione, como:

switch((int)MarginMode())

 
Николай Осипов:

Hola,
Al utilizar la función BuyStop en el código para operar con futuros RTS-3.13 (RIH3), se sigue produciendo un error :
10022 TRADE_RETCODE_INVALID_EXPIRATION - Fecha de vencimiento de la orden inválida


Nicolás, saludos. ¿Por casualidad has solucionado este problema? Yo experimento las mismas dificultades en RTS-6.17, no entiendo como solucionarlo.
 
Rashid Zeynalov:
Problema similar en RTS-3.13 Opening-demo, probado todo (mientras que las órdenes limitadas se establecen en ORDER_TIME_SPECIFIED_DAY como está escrito en el perfil de símbolo) !!!!. Mientras que la orden de compra-stop está perfectamente abierta en el mercado manualmente. Este es un fallo de la terminal, usted debe escribir a los desarrolladores
Rashid, hola. ¿Por casualidad has resuelto este problema? Estoy experimentando las mismas dificultades en el Open real en RTS-6.17.

 
sgtkachev:
Rashid, hola. ¿Por casualidad has resuelto este problema? Estoy experimentando las mismas dificultades en el Open real en RTS-6.17.

Lo siento, no me di cuenta de la pregunta. Trate de reemplazar este archivo y reportar el resultado, por favor.
Archivos adjuntos:
Trade.mqh  68 kb
 

Hola

En algunos brokers (FoxPro por ejemplo) al intentar abrir una posición error 10030. Descripción del código: invalid fill. En otros brokers (por ejemplo Alpari) funciona sin estas líneas

En el bloque de inicialización del Asesor Experto escribí diferentes valores en el código:

trade.SetTypeFilling(SYMBOL_FILLING_FOK);

или
trade.SetTypeFilling(SYMBOL_FILLING_IOC);

или

trade.SetTypeFilling(ORDER_FILLING_RETURN);

No ayuda. ¿Cómo resolver el problema? ¿O esta clase CTrade es anticuada y no corresponde a las últimas actualizaciones del terminal y tengo que escribir las operaciones comerciales de acuerdo con el esquema estándar a través de la estructura?


UPD: Rashid publicó un archivo de biblioteca más arriba, resolvió mi problema. Es triste que la biblioteca estándar tiene un error. Ahora voy a estudiar la comparación para ver si es posible hacer algunos cambios directamente en el EA sin reemplazar la biblioteca para que todo funcione

Автоматическое обновление - Для продвинутых пользователей - Начало работы - Справка по MetaTrader 5
Автоматическое обновление - Для продвинутых пользователей - Начало работы - Справка по MetaTrader 5
  • www.metatrader5.com
В платформу встроена система автоматического обновления. Она позволяет своевременно получать и устанавливать новые версии программы. Эту систему...
 
Bien
 
makk:

Buena introducción a la programación orientada a objetos en MQL5.

Con MT5 build 1347 el primer ejemplo de código falla al compilar con el error "illegal switch expression type".

Tuve que añadir la fundición a int en las declaraciones de conmutación en AccountInfo.mqh para que funcione, como:

switch((int)MarginMode())

 

Hola, Gracias por este post muy útil y por favor me ayude a resolver esto. Soy nuevo en MT5 y estoy aprendiendo a crear EAs así que copié el código de ejemplo para ejecutar Ctrade.Buy pero el backtest falló. Aquí hay más información:


1) Cuenta: Es una cuenta real con la moneda base como NZD

2) MetaEditor ajustes para backtest:

Opciones


3) Código: Copiado de https://www.mql5.com/es/articles/481:


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

//|                                                         demo.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"

#include<Trade\Trade.mqh>


//--- object for performing trade operations

CTrade  trade;

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

//| Expert initialization function                                   |

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

int OnInit()

  {

   //--- set MagicNumber for your orders identification

   int MagicNumber=123456;

   trade.SetExpertMagicNumber(MagicNumber);

   //--- set available slippage in points when buying/selling

   int deviation=10;

   trade.SetDeviationInPoints(deviation);

   //--- order execution mode

   trade.SetTypeFilling(ORDER_FILLING_RETURN);

   //--- logging mode: it would be better not to declare this method at all, the class will set the best mode on its own

   trade.LogLevel(1);

   //--- what function is to be used for trading: true - OrderSendAsync(), false - OrderSend()

   trade.SetAsyncMode(true);

   //---

   return(0);

  }

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

//| Expert deinitialization function                                 |

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

void OnDeinit(const int reason)

  {

//---

   

  }

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

//| Expert tick function                                             |

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

void OnTick()

  {

   BuySample1();

  }


//--- Buy sample  

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

//|  Buying a specified volume at the current symbol                 |

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

void BuySample1()

  {

//--- 1. example of buying at the current symbol

   if(!trade.Buy(0.1))

     {

      //--- failure message

      Print("Buy() method failed. Return code=",trade.ResultRetcode(),

            ". Code description: ",trade.ResultRetcodeDescription());

     }

   else

     {

      Print("Buy() method executed successfully. Return code=",trade.ResultRetcode(),

            " (",trade.ResultRetcodeDescription(),")");

     }

//---

  }

4) Registro de errores (Tenga en cuenta que estoy probando sólo en EUR / USD):

GJ 0 19:36:44.410 127.0.0.1 login (build 1730)

HH 0 19:36:44.420 Red 38520 bytes de información de cuenta cargada

JO 0 19:36:44.420 Red 1482 bytes de parámetros de comprobador cargados

QE 0 19:36:44.420 Red 188 bytes de parámetros de entrada cargados

FR 0 19:36:44.421 Red 443 bytes de lista de símbolos cargada

IF 0 19:36:44.421 Archivo experto de comprobador añadido: Experts\demo.ex5. 46684 bytes cargados

QH 0 19:36:44.433 Probador depósito inicial 10000,00 NZD, apalancamiento 1:100

JN 0 19:36:44.437 Probador inicializado con éxito

ES 0 19:36:44.437 Red 46 Kb de datos de inicialización totales recibidos

PP 0 19:36:44.437 Probador Intel Core i7-4510U @ 2.00GHz, 8103 MB

RJ 0 19:36:44.799 Símbolos EURUSD: símbolo a sincronizar

HR 0 19:36:44.800 Símbolos EURUSD: símbolo sincronizado, 3624 bytes de información de símbolo recibidos

NJ 0 19:36:44.800 Histórico EURUSD: sincronización de histórico iniciada

GO 0 19:36:44.856 Histórico EURUSD: carga 27 bytes de datos históricos para sincronizar en 0:00:00.000

RQ 0 19:36:44.856 Historia EURUSD: historia sincronizado desde 2012.01.01 a 2017.11.15

EF 0 19:36:44.993 Historial EURUSD,Diario: caché de historial asignada para 1010 compases y contiene 312 compases desde 2014.01.01 00:00 hasta 2014.12.31 00:00

ND 0 19:36:44.993 Historia EURUSD,Diario: la historia comienza a partir de 2014.01.01 00:00

OL 0 19:36:44.996 Probador EURUSD,Diario (HalifaxPlus-Live): se genera cada tick

GN 0 19:36:44.996 Tester EURUSD,Diario: pruebas de Experts\demo.ex5 de 2015.01.01 00:00 a 2017.11.15 00:00 iniciado

CK 0 19:36:56.288 Símbolos NZDUSD: símbolo a sincronizar

IS 0 19:36:56.288 Símbolos NZDUSD: símbolo sincronizado, 3624 bytes de información de símbolo recibidos

JL 0 19:36:56.288 Historial NZDUSD: sincronización de historial iniciada

HJ 0 19:36:56.575 Historial NZDUSD: carga 14 Kb de datos de historial para sincronizar en 0:00:00.078

LS 0 19:36:56.575 Historia NZDUSD: historia sincronizado desde 2013.01.01 a 2017.11.15

CO 0 19:36:56.579 Símbolos EURNZD: símbolo a sincronizar

OJ 0 19:36:56.580 Símbolos EURNZD: símbolo sincronizado, 3624 bytes de información de símbolo recibidos

DL 0 19:36:56.580 Historia EURNZD: sincronización de historia iniciada

MK 0 19:36:56.656 Historia EURNZD: carga 27 bytes de datos de historia para sincronizar en 0:00:00.000

OD 0 19:36:56.656 Historia EURNZD: historial sincronizado desde 2013.01.01 hasta 2017.11.15

IN 0 19:36:56.665 Comercio 2015.01.02 03:00:00 mercado comprar 0.10 EURUSD (1.20538 / 1.20549 / 1.20538)

PE 0 19:36:56.665 Operaciones 2015.01.02 03:00:00 trato #2 comprar 0.10 EURUSD a 1.20549 hecho(basado en la orden #2)

FH 0 19:36:56.666 Comercio 2015.01.02 03:00:00 trato realizado [#2 comprar 0.10 EURUSD a 1.20549]

OG 0 19:36:56.666 Comercio 2015.01.02 03:00:00 orden realizada comprar 0.10 a 1.20549 [#2 comprar 0.10 EURUSD a 1.20549]

FO 0 19:36:56.670 demo (EURUSD,D1) 2015.01.02 03:00:00 Buy() método ejecutado con éxito. Código de retorno=10009 (realizado a 1.20549)

NM 2 19:37:15.823 Historial NZDUSD 2016.09.21 23:01:00: historial corrupto detectado (s:-73370, o:73433, h:+48, l:-123, c:-117 -- tv:63, rv:11250111)

JF 2 19:37:15.823 Historial NZDUSD 2016.09.21, se ha encontrado un contenedor defectuoso, debe resincronizarse

LQ 2 19:37:16.106 Error 9 del historial del comprobador en una función indefinida

OH 2 19:37:16.106 El comprobador se ha detenido en el 0% del intervalo de comprobación con el error '20 NZDUSD'.


Por favor, dígame cuál es el problema y cómo puedo resolverlo.