Errores, fallos, preguntas - página 148

 
EQU:

Y de nuevo, el código... el código... El código es bueno... pero también es - táctica, ciclos... ;)

¿El gráfico no recibe un mensaje sobre la creación de una nueva barra? No me lo creo...))

¿Es un problema hacer un evento con él? ¿Es una variable predefinida al menos?

En general, es más fácil procesar eventos que llenar una montaña de código. Y además - con errores (¡¡¡Programas sin errores nunca!!! )))))

Estoy absolutamente de acuerdo contigo en que el nuevo bar es un acontecimiento y puede (y debe) programarse. Hay una rama en https://www.mql5.com/ru/forum/1031 léela con calma, pero yo llevo años luchando...

Z.I. Creo que después de leer esto verás que el nuevo bar puede no aparecer NUNCA... un agujero...

Обсуждение статьи "Алгоритм генерации тиков в тестере стратегий терминала MetaTrader 5"
Обсуждение статьи "Алгоритм генерации тиков в тестере стратегий терминала MetaTrader 5"
  • www.mql5.com
Обсуждение статьи "Алгоритм генерации тиков в тестере стратегий терминала MetaTrader 5".
 
EQU:

De nuevo, código... código... El código es bueno... pero también lo son las tácticas, los bucles... ;)

¿El gráfico no recibe un mensaje sobre la creación de una nueva barra? No me lo creo...))

¿Hay algún problema en hacer un evento? ¿Y una variable predefinida al menos?

En general, es más fácil procesar eventos que llenar una montaña de código. Y además - con errores (¡¡¡Programas sin errores nunca!!! )))))

En general, ¿cómo lo ve? ¿20 marcos temporales x número de símbolos en el 'Market Watch' y el evento OnNewBar se genera para cada uno de ellos? ¿Y hay que procesar cada uno, para determinar a qué símbolo y marco temporal se refiere? Ahora tiene la opción: escribir su propia función NewBar y en ella definir qué quiere recibir nuevas barras: todos los períodos para un símbolo, todos los símbolos para el período actual o algún caso especial. El resultado es una función específica y sin complicaciones. Esto es mejor que la función universal OnNewBar con muchas comprobaciones.
 

Al realizar la prueba, se genera un error

CTrade::PositionClose::OrderCheck: Solicitud de stop(s) no válida
En mi Asesor Experto, hay las siguientes líneas

descripción de las variables (en el procedimiento)

CTrade m_trade;

..................

posición de cierre

m_trade.PositionClose(_Symbol, eSlippage);

¿por qué da error? CTrade::PositionClose::OrderCheck: Solicitud de stop(s) no válida

SL y/o TP erróneos
TRADE_RETCODE_INVALID_STOPS

¿Qué tienen que ver los stops con el cierre de posiciones? ¿O me estoy perdiendo algo?

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 
Prival:

Estoy absolutamente de acuerdo contigo en que un bar nuevo es un acontecimiento y se puede (y debe) programar. Hay un hiloen https://www.mql5.com/ru/forum/1031 que puedes leer tranquilamente, pero yo llevo años luchando...

Z.U. Creo que después de leer esto te quedará claro que el nuevo bar puede no aparecer NUNCA... un agujero...

Me arriesgué a mirar el enlace... Creo que realmente vale la pena leerlo... con calma... ;)

Esa es la razón de querer un evento así... Sin bar, no hay evento.

 
Valmars:
En realidad, ¿cómo te lo imaginas? ¿20 marcos temporales x número de símbolos en 'Market Watch' y para cada uno se genera el evento OnNewBar? ¿Y hay que procesar cada uno, para determinar a qué símbolo y marco temporal se refiere? Ahora tiene la opción: escribir su propia función NewBar y en ella definir qué quiere recibir nuevas barras: todos los períodos para un símbolo, todos los símbolos para el período actual o algún caso especial. El resultado es una función específica y sin complicaciones. Es mejor que la función universal OnNewBar con muchas comprobaciones.

20 plazos... no es el límite para un parámetro ulong... llenar una variable entera una vez en un minuto es correcto, no es difícil...

Por qué, OnTick mira "x número de caracteres en el 'Market Watch' y genera un evento para cada..." ?????

Y la comprobación de bits es, créanme, algo muy rápido...

E incluso con un evento

- nadie me va a obligar a procesarlo, no es necesario...

- Y aunque tengas un evento, nada te impide añadir o sustituir "escribe tu propia función NewBar y define si quieres obtener nuevas barras" - si es necesario...

 
Interesting:

Incluso ahora es fácil de hacer, si sabes cómo hacerlo. Los desarrolladores prometieron reescribir OnTrade() y añadir los parámetros necesarios allí.

Nadie impide que estas situaciones se manejen localmente, en OnTick() u OnTime() - en el lugar de la operación de comercio; o en OnTrade(), si necesita atrapar acciones del usuario u operaciones de comercio no controladas directamente por el código.

La ligereza es un concepto relativo y para uno se mide en gramos, para otro en toneladas. En mi Asesor Experto tuve que hacerlo SIN EMBARGO (si mi código puede llamarse así), porque no hay variantes de PROSTO en mi lenguaje ahora, mientras que podrían muy bien existir, imho. Y no me gustó especialmente que el código se alargara un centenar de líneas y que pareciera más complicado.

Este es el problema en general:

Llega un tick, el indicador muestra la necesidad de cerrar, yo cierro

Cuando llega el siguiente tick, el indicador muestra que tiene que cerrarse, y no sé qué hacer - la posición ya está posicionada y es imposible averiguar qué está pasando en ese momento, claro, pero no sé.

No entiendo por qué esta complejidad sigue presente aquí? No entiendo por qué tenemos que escribir una tonelada de código en el evento onTrade() para entender lo que ha pasado?

Estoy a favor de la simplicidad, y cuando no la hay, me entristece

 
Vladix:

La ligereza es un concepto relativo, y para uno se mide en gramos, para otro en toneladas. Tuve que hacerlo en EA (si es que mi código puede llamarse así), porque ahora no hay variantes de PROSTO en el lenguaje, aunque bien podrían existir, imho. Y no me gustó especialmente que el código se alargara un centenar de líneas y que pareciera más complicado.

Este es el problema en general:

Llega un tick, el indicador muestra la necesidad de cerrar, yo cierro

Cuando llega el siguiente tick, el indicador muestra que debería cerrarse, y no sé qué hacer: la posición ya está colgada, y por supuesto puedo averiguar qué está pasando en ese momento, pero no lo sé.

No entiendo por qué esta complejidad sigue presente aquí? No entiendo por qué en el evento onTrade() se nos sugiere escribir una tonelada de código para entender lo que ha pasado?

Estoy a favor de la simplicidad, y cuando no la hay, me entristece

Lo hice, el código es menos de un centenar de líneas ... :) La solución es fiable y de inmediato para la multidivisa

//+----------------------------------------------------------------------------+
// Функция контроля открытия ордера на текущем баре               MQL5         |
//-----------------------------------------------------------------------------+
bool ЕстьОрдернаТекущемБаре(ENUM_ORDER_TYPE тип)
  {
   ulong тикет;
   HistorySelect(SeriesInfoInteger(СИМВОЛ,Period(),SERIES_LASTBAR_DATE),TimeCurrent());
   for(int i=0;i<HistoryDealsTotal();i=i+1)
     {
      тикет=HistoryDealGetTicket(i);
      if(HistoryDealGetString(тикет,DEAL_SYMBOL)!=СИМВОЛ || HistoryDealGetInteger(тикет,DEAL_ENTRY)==DEAL_ENTRY_STATE)// || HistoryDealGetInteger(тикет,DEAL_MAGIC)!=MAGIC
         continue;
      if(HistoryDealGetInteger(тикет,DEAL_TYPE)==тип || HistoryDealGetInteger(тикет,DEAL_TYPE)==DEAL_ENTRY_INOUT)
         return(true);
     }
   return(false);
  }
Puede especificar cualquier período deseado en lugar del período en el que el EA está rondando. Es decir, los pedidos no se harán más que una vez por período

Y después de cualquier solicitud de comercio, debemos hacer un retraso que prohíba la solicitud de comercio dentro de 30 segundos (por ejemplo). De lo contrario, es posible que la orden no aparezca en el historial en el siguiente tick.
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса - Документация по MQL5
 
Valmars:
En general, ¿cómo se lo imagina? En general, la idea es tener 20 marcos temporales x el número de símbolos en el 'Market Watch' y para cada uno de ellos se genera el evento OnNewBar... ¿Y hay que procesar cada símbolo y marco temporal para determinar a cuál se refiere? Ahora tiene la opción: escribir su propia función NewBar y en ella definir lo que quiere recibir las nuevas barras: todos los períodos para un símbolo, todos los símbolos para el período actual o algún caso especial. Consigue una función específica y sin complicaciones. Es mejor que una función universal OnNewBar con muchas comprobaciones.

En términos de una solución estándar, debería ser algo así

1. El evento debe estar vinculado al gráfico abierto, a su período y a su símbolo. El evento debe producirse cuando aparece una nueva barra (se ignoran los agujeros).

Los eventos deben ser manejados en un hilo (o hilos) terminal separado.

PS

Y así sucesivamente. Por supuesto, se trata de una aproximación sin tener en cuenta muchas particularidades...

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 

Vladix:

En realidad, el problema en sí es este:

llega un tick, el indicador muestra que debe cerrarse, yo hago el cierre

Cuando llega el siguiente tick, el indicador muestra que debe cerrarse, y no sé qué hacer: la posición ya está colgada y se puede saber lo que pasa en ese momento, claro, pero en medio de la nada.

No entiendo por qué esta complejidad sigue presente aquí? No entiendo por qué en el evento onTrade() se nos sugiere escribir una tonelada de código para entender lo que ha pasado?

Estoy a favor de la simplicidad, y cuando no la tienes, se vuelve triste

Tal vez, los desarrolladores añadirán parámetros a OnTrade(), al menos estaban pensando en ello. Por lo que sé, incluso hubo algunas declaraciones al respecto.
 
Dmitriy2:

Hecho de esta manera, menos código de un centenar de líneas ... :) solución es fiable y de inmediato para la multidivisa

En lugar del periodo en el que el EA está inactivo, podemos especificar el que queramos. Esto significa que los pedidos no se harán con más frecuencia que una vez por período.

Y después de cualquier solicitud de comercio, debemos hacer un retraso que prohíba la solicitud de comercio dentro de 30 segundos (por ejemplo). De lo contrario, es posible que la orden no aparezca en el historial en el siguiente tick.

Poner un retraso - sí, lo acepto, ¿cuántas líneas de código llevará? Y si hablamos de multidivisas, es necesario tener en cuenta el retraso de cada una, ¿no?

Yo escribí el código que resuelve esto. Sólo que no me gusta, al igual que, lo siento, no me gusta el tuyo. Y no se trata de parcialidad, la cuestión es que no hay otras opciones, simples y elegantes.

Razón de la queja: