¿Cómo puedo abrir una orden de mercado correctamente? - página 8

 
Dmitry Fedoseev:
No eres tú quien necesita una pausa.
Eso es todo.
 
De todos modos, la conclusión, en mi opinión, es la siguiente.

Globalmente, hay dos formas:

1) análisis del entorno (aspirando al historial de transacciones, comprobando la posición abierta o el volumen de la posición);

2) análisis de las transacciones.

La primera funciona más lentamente. Pero es más fiable. Necesitamos un compromiso. Tal vez, tengamos que ver la estrategia y depender de ella.

Sí, FORTS tiene un ticker completo, por lo que no se debe trabajar con ticks sino con el evento BookEvent.

Es extraño que Vasily Sokolov no haya comentado este tema. Su punto de vista es interesante...
 
Dennis Kirichenko:
De todos modos, la conclusión, en mi opinión, es la siguiente.

Globalmente, hay dos formas:

1) análisis del entorno (aspirando al historial de transacciones, comprobando la posición abierta o el volumen de la posición);

2) análisis de las transacciones.

La primera funciona más lentamente. Pero es más fiable. Necesitamos un compromiso. Tal vez, tengamos que ver la estrategia y depender de ella.

Sí, FORTS tiene un ticker completo, por lo que no se debe trabajar con ticks sino con el evento BookEvent.

Es extraño que Vasily Sokolov no haya comentado este tema. Su punto de vista es interesante...
Quizá pronto me pase al cristal, pero por ahora .... a la antigua usanza.
 
Dennis Kirichenko:
De todos modos, la conclusión, en mi opinión, es la siguiente.

Globalmente, hay dos formas:

1) análisis del entorno (aspirando al historial de transacciones, comprobando la posición abierta o el volumen de la posición);

2) análisis de las transacciones.

La primera funciona más lentamente. Pero es más fiable. Necesitamos un compromiso. Tal vez, tengamos que ver la estrategia y depender de ella.

Sí, FORTS tiene un ticker completo, por lo que no se debe trabajar con ticks sino con el evento BookEvent.

Es extraño que Vasily Sokolov no haya comentado este tema. Su punto de vista es interesante...
Por cierto, tengo una pregunta: ¿podemos utilizar el eventoBookEvent de la misma manera que utilizamos Tick o Timer?
es decir, ¿puedo trasladar mi estrategia allí por completo?
 
Me acordé del tema...

Una vez trabajé en esta orden y escribí la clase CiOnTrade:
class CiOnTrade : public CTrade
Fue una tarea interesante. Mi cliente y yo nos pusimos de los nervios y nos rompimos el corazón. Por lo que recuerdo, la tarea principal era comprar/vender el volumen garantizado. Y si una parte del volumen no se cubría, había que eliminar esas órdenes y vender el resto a otro precio...

Así que la solución óptima que encontré fue la de procesar los estados. Y había muchos de ellos:
enum ENUM_TRADE_STATE
  {
   TRADE_STATE_NONE=0,      // "ничего"
   TRADE_STATE_ORDERS=1,    // "только ордера"
   TRADE_STATE_POSITION=2,  // "только позиция"
   TRADE_STATE_ALL=3,       // "все"
  };
1) "Nada": es el estado inicial, cuando no se ha hecho nada.

2) "Sólo pedidos": es el estado en el que se encuentran los pedidos.

3) "Sólo posición" es el estado en el que las órdenes se ejecutan completamente.

4) "Todo" es el estado cuando las órdenes no se han ejecutado completamente y ya hay una posición en el mercado.

Así que cada estado tuvo que ser procesado. Sí, por cierto, admito que también hay estados intermedios. Así que mi clase podría ser mejorada.
 
Gennady Mazur:
Por cierto, me ha surgido una pregunta: ¿se puede utilizar el eventoBookEvent de la misma forma que el Tick o el Timer?
es decir, ¿se puede trasladar su estrategia completamente allí?
Sí, pero ten en cuenta que BookEvent genera eventos con mayor frecuencia. Por eso necesitamos algún filtro para cribar los innecesarios. Por ejemplo, los precios no han cambiado, sino sólo los volúmenes de algunas ofertas...
 
Dennis Kirichenko:
Sí, pero hay que tener en cuenta que el vaso tiene más posibilidades de generar eventos. Por lo tanto, se necesita algún filtro para filtrar los eventos innecesarios. Por ejemplo, los precios no han cambiado, pero sí los volúmenes de algunas ofertas...
Lo entiendo, gracias... y en algunos casos el cambio de volumen es más importante que el cambio de precio, especialmente cerca de niveles fuertes.
 
Dennis Kirichenko:
La conclusión, en mi opinión, es la siguiente.

Globalmente, hay dos formas:

1) análisis del entorno (aspirando al historial de operaciones, comprobando la posición abierta o el volumen de posiciones);

2) análisis de las transacciones.

La primera funciona más lentamente. Pero es más fiable. Debe haber un compromiso. Tal vez debamos mirar la estrategia y depender de ella.
La variante OrderSend+Sleep(0) no funciona más lentamente que OrderSend+OnTradeTransaction. Lo he medido. Por lo tanto, no uso la segunda variante no para las transacciones asíncronas.
 
Dennis Kirichenko:
Supongo que la información sobre el acuerdo aún no ha llegado. Aquí (marcado en rojo), confías en la suerte. Y es una señora caprichosa :-))

bool OpenSellPosition(string symbol, double volume, string comment="", ulong deviation=10, ENUM_ORDER_TYPE_FILLING filling=ORDER_FILLING_FOK)
{
  MqlTradeRequest Request;
  MqlTradeResult Results;
  ZeroMemory(Request);
  ZeroMemory(Results);
  Request.price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
  Request.action=TRADE_ACTION_DEAL;
  Request.type=ORDER_TYPE_SELL;
  Request.symbol=symbol;
  Request.volume=volume;      
  Request.deviation=deviation;
  Request.comment=comment;  
  Request.type_filling=filling;
  bool res=false;
  res=OrderSend(Request,Results);
  if(res)
  {
    if(Results.deal>0) return(true);
    else return(false);

  }
  return(false);
}

Incluso conORDER_STATE_FILLED, Results.order puede tener un problema: Results.deal es cero. Esta situación se reproduce al 100% en el servidor FXOpen-MT5.

Recomiendo abrir muchas demos en diferentes servidores y lograr la funcionalidad completa del código. Lo hice para MT4 bíblica. Por eso no hay problema con el subjuego.

 
fxsaber:
OrderSend+Sleep(0) no es más lento que OrderSend+OnTradeTransaction. Lo he medido. Por lo tanto, no uso la segunda variante no para las transacciones asíncronas.

La variante OrderSend+Sleep(0) es temporal, ya que es una carencia de los desarrolladores (no la uses como ejemplo :) ).

Cuando se corrija, sólo quedará OrderSend

Razón de la queja: