Longitud máxima de un nombre de símbolo en FOREX - página 8

 
fxsaber:

De hecho, es un mazazo. Ya que es posible no esperar a que el pedido sea rastreado. La única alternativa onTradeTransaction es si la orden es rechazada. Por ejemplo, si no hay suficiente dinero.


Resulta que hicimos un centenar de Async-transacciones llenando el array (lista) con los magos y solicitantes adecuados. Tan pronto como OnTradeTransaction recibió la respuesta sobre la búsqueda, eliminamos el elemento de la lista. En cuanto vimos que se destacaba un majico de la lista entre los vivos/muertos, eliminamos la entrada. Así es como se consigue más o menos el control. ¿Lo has entendido bien?


Puede seguir utilizando otros campos - SL/TP, Comentario - en lugar de la magia.

Sí, exactamente así. OnTradeTransaction nunca se desactiva, sólo se llama periódicamente a la función de comprobación (si OnTradeTransaction no se activa). En cuanto se detecta todo lo que tiene que ver con la orden, se restablecen las banderas.

¿Cómo puedo utilizar el comentario como SL/TP?

 
fxsaber:

¿Por qué esperar cuando se puede comprobar en cada On-stream?

Porque en mis estrategias importa lo que vino en OnTradeTransaction.

No uso On-puke :)

Añadido

Si el evento llegó enOnTradeTransaction entonces todo se reinicia, por lo que no hay ningún problema.

 
prostotrader:

¿Cómo utilizar el comentario ronyatno, pero como SL/TP?

Arriba se complementa...

Se establece la falsa SL, en cuyo valor se almacena la información que se necesita. Por ejemplo, así es como almacené el precio de apertura de una posición en MT4, que se obtuvo a través del Limiter.

 
prostotrader:

Porque en mis estrategias es importante exactamente lo que vino en OnTradeTransaction.

Por lo tanto, asegúrese de comprobar las magias directamente en OnTradeTransaction. Yo lo haría así.


En general, la idea de los megics como alternativa a los reqest es genial.

 
fxsaber:

Arriba se complementa...

Se establece una SL falsa, en cuyo valor se almacena la información que se necesita. Por ejemplo, así es como almacené el precio de apertura de una posición en MT4, que se llenó a través de un interruptor de límite.

¿Es posible fijar el SL cuando no hay posición?

 
prostotrader:

¿Es posible exponer el SL si no hay posición?

Puede que no sea posible hacerlo para las rebajas. Llevo mucho tiempo operando sólo con órdenes limitadas.

 
fxsaber:

Puede que no sea posible hacerlo para los mercados. Desde hace mucho tiempo sólo opero con órdenes limitadas.

"Es un poco extraño almacenar información así. Pues sí, deberías saberlo.

Como el mercado FOREX no me interesa en absoluto, 6 símbolos de nombre de símbolo y 65365 etiquetas en un gráfico son más que suficientes para mis necesidades,

Además, sólo puedo realizar 2000 operaciones por día de negociación.

 
prostotrader:

Como el mercado FOREX no me interesa en absoluto, los 6 caracteres del nombre del símbolo y 65365 mogollón en un gráfico es más que suficiente para mis necesidades,

Además, sólo puedo realizar 2000 operaciones en un día de negociación.

No se trata de la divisa. Y ahí los mismos problemas con OnTradeTransaction. Por lo tanto, una solución universal

#include <crc64.mqh> // https://www.mql5.com/en/blogs/post/683577

string GetMagicString()
{
  return(MQLInfoString(MQL_PROGRAM_PATH/*MQL_PROGRAM_NAME*/) + _Symbol + (string)ChartID()/* + (string)_Period*/);
}

// Формирует мэджик с изменяемой частью ReserveBits для прописывания туда Num-значения
ulong GetMagic( const int Num = 0, const int ReserveBits = 12 )
{
  uchar Bytes[];
  
  return((crc64(0, Bytes, (StringToCharArray(GetMagicString(), Bytes))) << ReserveBits) + (Num % (1 << ReserveBits)));
}

// Определяет, свой ли исходный мэджик с изменяемой частью ReserveBits
bool IsMyMagic( const ulong Magic, const int ReserveBits = 12 )
{
  return(GetMagic(0, ReserveBits) >> ReserveBits == Magic >> ReserveBits);
}

#define  PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{  
  for (int i = 0; i < 10; i++)
  {
    PRINT(GetMagic(i));
    PRINT(IsMyMagic(GetMagic(i)));
  }
  
  PRINT(IsMyMagic(MathRand()));
}
 

Por supuesto, el modelo de eventos es inconveniente en este caso. Por ejemplo, si quieres hacer operaciones Async sin salir de la función On y obtener resultados de ellas.

Ahora es posible liberar este comportamiento a través de una muleta.

  1. Escribimos un indicador (sin buffers ni variables de entrada) con OnTradeTransaction que escribe todas las transacciones en un lugar público (por ejemplo, en un recurso).
  2. El Asesor Experto crea este indicador a través de iCustom.
  3. En cualquier lugar de ejecución el Asesor Experto puede ver todas las transacciones entrantes escritas por el indicador.

Esto permite una gran flexibilidad.

Por ejemplo, podemos enviar un centenar de órdenes Async y esperar a que se ejecuten sin salir de lo profundo, continuando la ejecución de nuestro código.


Hablamos, por supuesto, de Peticiones. Y el tema de la magia no tiene nada que ver.


Aunque tendría sentido que los desarrolladores escribieran las transacciones en un array de acceso público. Sin indicador.

 
fxsaber:

No se trata de la divisa. Y ahí los mismos problemas con OnTradeTransaction. Por lo tanto, una solución universal.

Aunque es posible (e incluso mejor) prescindir de las operaciones a nivel de bits - sólo crc64 + Num.
2018.08.25 22:10:48.913 Test (BR-9.18,M1)       1749671450686091264
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091265
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091264
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091265
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091264
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091265
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091264
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091265
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091272
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091273

Hay coincidencias...