![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
No eres tú quien necesita una pausa.
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...
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...
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...
es decir, ¿puedo trasladar mi estrategia allí por completo?
Una vez trabajé en esta orden y escribí la clase CiOnTrade:
Así que la solución óptima que encontré fue la de procesar los estados. Y había muchos de ellos:
{
TRADE_STATE_NONE=0, // "ничего"
TRADE_STATE_ORDERS=1, // "только ордера"
TRADE_STATE_POSITION=2, // "только позиция"
TRADE_STATE_ALL=3, // "все"
};
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.
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 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...
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.
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 :-))
{
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.
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