Características del lenguaje mql5, sutilezas y técnicas - página 11
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
Gracias.
Dado que la "Orden es una orden de comercio", sólo las órdenes pendientes pueden clasificarse como "órdenes activas", y las "Posiciones - compra y venta" no son órdenes de comercio. ¿O me estoy "perdiendo algo"?
Una orden es una orden en ruso. Das una orden y puede ser cualquiera de las 8.
1, 2, 3, 4 -buy-stop, sell-stop, buy-limit y sell-limit - después de la activación de la orden aparece una posición
5, 6 - comprar o vender - no son órdenes
7, 8 - stopLoss y TakeProfit - estas son las órdenes, estas son las órdenes de las empresas de corretaje para salir del mercado.
Casos 1, 2, 3, 4 - órdenes pendientes
5, 6 - capturar el mercado), es decir, tomar una determinada posición en el mercado, es igual que en la guerra: cada uno tiene su propia posición en el frente donde fueron enviados por los comandantes
Gracias.
Dado que "una orden es una orden comercial", sólo las órdenes pendientes pueden clasificarse como "órdenes activas", y las "Posiciones - compra y venta" no son una orden comercial. ¿O me estoy "perdiendo algo"?
5, 6 - comprar o vender - ya no son órdenes
El código siguiente muestra que se trata de órdenes reales.
Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading
Características del lenguaje mql5, sutilezas y trucos
fxsaber, 2017.02.25 16:30
void OnTradeTransaction ( const MqlTradeTransaction &Trans, const MqlTradeRequest &Request, const MqlTradeResult &Result )
{
if ((Trans.type == TRADE_TRANSACTION_ORDER_ADD) &&
PositionSelectByTicket(Trans.position) && OrderSelect(Trans.order) &&
(PositionGetInteger(POSITION_TYPE) == 1 - OrderGetInteger(ORDER_TYPE)))
{
const double Price = OrderGetDouble(ORDER_PRICE_OPEN);
if (Price == PositionGetDouble(POSITION_TP))
Print("Position #" + (string)Trans.position + " - triggered TP.");
else if (Price == PositionGetDouble(POSITION_SL))
Print("Position #" + (string)Trans.position + " - triggered SL.");
}
}
Las órdenes activas son órdenes comerciales que están pendientes de ejecución o cancelación, excepto las órdenes TP/SL y MarginCall. Las órdenes válidas pueden ser de COMPRA y VENTA.
Según tengo entendido, el término "orden activa" se refiere a las posiciones de COMPRA y/o VENTA, así como a las órdenes pendientes establecidas (aceptadas por un corredor).
Si tengo: posiciones largas y cortas abiertas, y límite de compra y stop de venta establecidos, entonces OrdersTotal() devolverá el valor =4. ¿Correcto?
Gracias.
Según tengo entendido, "orden activa" se refiere a las posiciones de COMPRA y/o VENTA, así como a las órdenes pendientes establecidas (aceptadas por el corredor).
Si tengo: posiciones largas y cortas abiertas, y límite de compra y tope de venta establecidos, entonces OrdersTotal() devolverá el valor =4, ¿verdad?
No.OrdersTotal() devolverá 2 (son órdenes pendientes de Buy Limit y Sell Stop) y PositionsTotal() también devolverá 2 (posiciones de Buy y Sell).
)) ¡¡¡¡Eso sí que es cool!!!! ¿Qué devuelve la función OrdersTotal()?
)) ¡¡¡¡Eso sí que es cool!!!! ¿Qué devuelve la función OrdersTotal()?
Lee ya la ayuda :).
Estúdialo:
//| OrdersTotalPositionsTotal.mq5 |
//| Copyright © 2017, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property version "1.00"
//---
#include <Trade\PositionInfo.mqh>
#include <Trade\OrderInfo.mqh>
CPositionInfo m_position; // trade position object
COrderInfo m_order; // pending orders object
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
int total=0;
for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions
if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
{
//if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
Print("position ",total,": ",m_position.Symbol()," ",EnumToString(m_position.PositionType()),
" ",DoubleToString(m_position.Volume(),2)," ",DoubleToString(m_position.PriceOpen(),8));
total++;
}
total=0;
for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders
if(m_order.SelectByIndex(i)) // selects the pending order by index for further access to its properties
{
//if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==m_magic)
Print("pending order ",total,": ",m_order.Symbol()," ",EnumToString(m_order.OrderType()),
" ",DoubleToString(m_order.VolumeInitial(),2)," ",DoubleToString(m_order.PriceOpen(),8));
total++;
}
}
//+------------------------------------------------------------------+
Aquí está el estado de la pestaña "Comercio":
Como puede ver hay dos posiciones abiertas (EURUSD compra 0.03 y USDCAD compra 0.02) y hay tres ORDENES LOCALES (USDJPY compra límite, USDJPY venta límite y EURUSD compra límite),
y una impresión del guión:
2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1) position 1: EURUSD POSITION_TYPE_BUY 0.03 1.06088000
2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1) pending order 0: EURUSD ORDER_TYPE_BUY_LIMIT 0.03 1.05879000
2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1) pending order 1: USDJPY ORDER_TYPE_SELL_LIMIT 0.01 112.71100000
2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1) pending order 2: USDJPY ORDER_TYPE_BUY_LIMIT 0.01 111.74500000
Podemos adoptar la siguiente terminología: una posición es algo que ya ha sido comprado/vendido o manualmente o se ha activado una orden pendiente y una orden es una orden pendiente para abrir una posición si el precio alcanza un nivel especificado.
Así se puede construir un bloque en el que se analizan las órdenes de mercado y pendientes:
{ //отражённым в терминале
if(OrderSelect(i-1,SELECT_BY_POS)==true)//Если есть следующий
{
// Здесь должен выполняться ..
// ..анализ характеристик ордеров
}
} //Конец тела цикла
El valor inicial i=1 se especifica en la cabecera de la sentencia del bucle, y la condición para el final del bucle es la expresión i<=TotalOrdenes(). La función OrdersTotal() devuelve el importe total de las órdenes de mercado y pendientes, es decir, aquellas órdenes que se muestran en el Terminal en la pestaña de Comercio. Por lo tanto, el número de iteraciones en el bucle será igual al número de órdenes presentes en la operación.
Todo ha sido aceptado desde hace tiempo, y antes de escribir la documentación, probablemente no estaría de más leer el tutorial de Sergei Kovalev (está integrado en MQL4):
Así se puede construir un bloque en el que se analizan las órdenes de mercado y pendientes:
El valor inicial i=1 se especifica en la cabecera de la sentencia del bucle, y la condición para el final del bucle es la expresión i<=TotalOrdenes(). La función OrdersTotal() devuelve el importe total de las órdenes de mercado y pendientes, es decir, aquellas órdenes que se muestran en el Terminal en la pestaña de Comercio. Por lo tanto, el número de iteraciones en el bucle será el número de órdenes presentes en la operación.
No hay necesidad de recocido)
Este es el código de MT4 y no hay división de órdenes y posiciones - todo está mezclado en él