Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 14

 
Alexey Kozitsyn:
Digámoslo así. Muestras el código que pasa por las órdenes con una explicación de cómo debería hacerlo y sólo entonces podremos decir qué está bien y qué está mal. Sólo los nombres de las funciones no le ayudarán a acercarse al resultado.

Hola ... gracias por aceptar ayudarme ... Parecía una pequeña empresa, para hacer sonar las órdenes de cierre, podría hacerse simplemente añadiendo el evento requerido a la carpeta apropiada - resultó no ser tan fácil ... Aquí hay un código de muestra que tomé deMQL4 ReferenceTrading Functions:

intHistorialPedidosTotal();

// recuperar información del historial comercial
int i,accTotal=Total de pedidos();
for(i=0;i<accTotal;i++)
{
//---- comprobar el resultado de la selección
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("Error al acceder a la base de datos del historial (",GetLastError(),"));
romper;
}
// trabajar con una orden...

}

... La función devuelvela cantidad de órdenes cerradas y borradas en el historial de la cuenta actual cargada en el terminal del cliente. El tamaño de la lista del historial depende de la configuración actual de la pestaña "Historial de cuentas" del terminal.

No me queda claro cómo va a buscar en ellos y por qué es necesario... ¿Quizás sea necesario memorizarlas y descartarlas, para que no estorben?

Se supone que debemos hacer sonar las órdenes recién cerradas en el momento en que se cierran con un breve pitido. Todas las órdenes que se cierran en mi Terminal de Cliente son de dos tipos solamente: porpromedioTrailStopLoss yTakeProfit. Al cerrar una orden (un grupo de órdenes), sin importar la dirección (Venta o Compra) deben ser separadas sólo porStopLossoTakeProfit yenviadas a la funciónPlaySoundcorrespondiente.

Справочник MQL4
Справочник MQL4
  • docs.mql4.com
Справочник MQL4
 
bablusut:

Hola ... gracias por aceptar ayudarme ... Parecía una pequeña empresa, para hacer sonar las órdenes de cierre, podría hacerse simplemente añadiendo el evento requerido a la carpeta apropiada - resultó no ser tan fácil ... Aquí hay un código de muestra que tomé deMQL4 ReferenceTrading Functions:

intHistorialPedidosTotal();

// recuperar información del historial comercial
int i,accTotal=Total de pedidos();
for(i=0;i<accTotal;i++)
{
//---- comprobar el resultado de la selección
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("Error al acceder a la base de datos del historial (",GetLastError(),"));
romper;
}
// trabajar con una orden...

}

... La función devuelvela cantidad de órdenes cerradas y borradas en el historial de la cuenta actual cargada en el terminal del cliente. El tamaño de la lista del historial depende de la configuración actual de la pestaña "Historial de cuentas" del terminal.

No me queda claro cómo va a buscar en ellos y por qué es necesario... ¿Quizás sea necesario memorizarlas y descartarlas, para que no estorben?

Se supone que debemos hacer sonar las órdenes recién cerradas en el momento en que se cierran con un breve pitido. Todas las órdenes que se cierran en mi Terminal de Cliente son de dos tipos solamente: porpromedioTrailStopLoss yTakeProfit. Cuando se cierra una orden (un grupo de órdenes) no importa la dirección (Venta o Compra) deben ser separadas sólo por el comando de cierreStopLossoTakeProfity enviadas a la funciónPlaySoundcorrespondiente.

El orden debe buscarse en orden inverso, ya que 0 es el primero y accTotal-1 es el último. En este código, después de "// trabajar con el orden", memoriza el comentario y comprueba si hay un comentario de cierre en el SL o TP.
 
Alexey Kozitsyn:
Los pedidos deben buscarse en el orden inverso, ya que 0 es el primero y accTotal-1 es el último. En este código, después de "// trabajar con el orden" recuerde el comentario y compruebe si hay un comentario de cierre para el SL o el TP.

intHistorialPedidosTotal();

// recuperar información del historial comercial
int i,accTotal=Total de pedidos();
for(i=0;i<accTotal;i++)
{
//---- comprobar el resultado de la selección
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("Error al acceder a la base de datos del historial (",GetLastError(),"));
romper;
}
// trabajar con una orden...

}

cadenaOrderComment();

comentario de la cadena;
if(OrderSelect(10,SELECT_BY_TICKET)==false)
{
Print("OrderSelect() ha devuelto un error ",GetLastError());
return(0);
}
comentario=OrderComment();

// ...

Gracias por la respuesta... Después de añadir el código de la funciónOrderComment,(MQL4Trading FunctionsReference) que devuelve el comentario de una orden seleccionada mediante la función OrdersHistoryTotal, el código queda así ... ¿Y no tenemos una función que rastrea los nuevos pedidos cerrados en el historial del terminal? "0 - primerísimo. accTotal-1 - último" - nos referimos a "primer cerrado" y "último cerrado" en el historial del terminal, ¿es por tiempo...? ¿lo he hecho bien?


Справочник MQL4
Справочник MQL4
  • docs.mql4.com
Справочник MQL4
 
bablusut:

¿pero no tenemos una función para seguir los nuevos pedidos cerrados en el historial del terminal?

No hay ninguno estándar.

  int i,accTotal=OrdersHistoryTotal();
  string comment;
  for(i=accTotal-1;i>=0;i++)
    {
     //---- check selection result
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
       {
        Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
        break;
       }
     // работа с ордером ...
     comment = OrderComment();
     // Проверяем, есть ли в комментарии признак закрытия ордера по ТП или СЛ
    }
Para determinar la presencia de una línea en otra - utilice las funciones de trabajo con líneas.
 
Alexey Kozitsyn:

No hay ninguno estándar.

  int i,accTotal=OrdersHistoryTotal();
  string comment;
  for(i=accTotal-1;i>=0;i++)
    {
     //---- check selection result
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
       {
        Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
        break;
       }
     // работа с ордером ...
     comment = OrderComment();
     // Проверяем, есть ли в комментарии признак закрытия ордера по ТП или СЛ
    }
Para determinar si una cadena está presente en la otra, utilice las funciones de cadena.

Gracias... Te refieres a la función StringFind = Buscar una subcadena en una cadena.

int StringFind(
cadena valor_cadena, //la cadena que buscamos
cadena match_substring, //lo que buscamos
int start_pos=0 //donde comenzar la búsqueda

);

Parámetros
valor_de_cadena
[in] Cadena para buscar en.
match_substring
[in] Match_substring a buscar.
start_pos=0
[in] Posición en la cadena donde debe iniciarse la búsqueda.
Valor devuelto

Devuelve el número de posición en la cadena donde comienza la subcadena a buscar, o -1 si no se encuentra ninguna subcadena.

... o FunciónStringCompare-Compara dos cadenas...


StringCompare - Строковые функции - Справочник MQL4
StringCompare - Строковые функции - Справочник MQL4
  • docs.mql4.com
StringCompare - Строковые функции - Справочник MQL4
 
bablusut:

Gracias... Te refieres a la función StringFind = Buscar una subcadena en una cadena.

int StringFind(
cadena valor_cadena, // la cadena que buscamos
cadena match_substring, //lo que buscamos
int start_pos=0 //donde empezar la búsqueda

);

Parámetros
valor_de_cadena
[in] Cadena para buscar en.
match_substring
[in] Match_substring a buscar.
start_pos=0
[in] Posición en la cadena donde debe iniciarse la búsqueda.
Valor devuelto

Devuelve el número de posición en la cadena donde comienza la subcadena a buscar, o -1 si no se encuentra ninguna subcadena.

...


Es cierto.
 
Alexey Kozitsyn:
Correcto.

Gracias... el código pasará a tener el siguiente aspecto:

 int i,accTotal=OrdersHistoryTotal();
  string comment;
  for(i=accTotal-1;i>=0;i++)
    {
     //---- check selection result
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
       {
        Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
        break;
       }
     // работа с ордером ...
     comment = OrderComment();
     // Проверяем, есть ли в комментарии признак закрытия ордера по ТП или СЛ
    }

int  StringFind(
   string  string_value,        // строка, в которой ищем
   string  match_substring,     // что ищем
   int     start_pos=0          // с какой позиции начинать поиск

   ); 



 

 
bablusut:

Gracias... el código tendrá entonces la forma de:

 int i,accTotal=OrdersHistoryTotal();
  string comment;
  for(i=accTotal-1;i>=0;i++)
    {
     //---- check selection result
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
       {
        Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
        break;
       }
     // работа с ордером ...
     comment = OrderComment();
     // Проверяем, есть ли в комментарии признак закрытия ордера по ТП или СЛ
    }

int  StringFind(
   string  string_value,        // строка, в которой ищем
   string  match_substring,     // что ищем
   int     start_pos=0          // с какой позиции начинать поиск

   ); 



 

No. Trata de entender lo que estás haciendo. Lo que has escrito es sólo un prototipo de función (es decir, sólo una descripción de lo que hace). Así que acabas de arrancar un trozo de documentación. Tienes que usarlo. Así que tienes que sustituir los argumentos por tus propios valores. Y la función devolverá el resultado. Entonces este resultado debe ser procesado.
 

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

Preguntas de los principiantes

A1exPit, 2016.11.30 22:14

¿Puede decirme OrderSelect by SELECT_BY_POS qué orden 0 es la última colocada o la primera? Estoy probando en ambos sentidos y viceversa, pero el error modificar #0 sale volando.

 
Vladimir Karputov:

veamos el código.