Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 342
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
Aquí está el archivo .cpp del proyecto, échale un vistazo y después de un par de búsquedas en Google y Yandex, no encontré nada del otro mundo, en general es comprensible. Incluso parece sencillo.
¿Pero cómo funciona? No estoy muy seguro de cómo hacer referencia a este ddl - desde el código del EA? ¿Cómo? En primer lugar, tiene este aspecto #include <GetIntValue>.
2. Al llamar a la dll, no hay que mantener el estudio encendido, ¿verdad? ¿cómo se ejecuta?
Por favor, muestre el ejemplo más sencillo de llamar a esta dll desde el código mql.
No lo entiendo aquí...
El tamaño del lote debe aumentar exponencialmente (con el multiplicador 2) si se abre una segunda orden unidireccional.
Este es el resultado.
entonces así
se obtiene un resultado como el siguiente
Entonces eso es todo.
Gracias, entiendo la idea... lo tengo claro.
¿para qué es esa línea?
datetime o;
Aquí hay otra pregunta. Tengo una orden de arrastre. Cuando hay 1 orden unidireccional abierta, todo funciona bien, si hay más, no funciona por alguna razón. ¿Por qué?
{
for(int i = 0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
{
if(Bid - OrderOpenPrice() > TrailingStop*Point)
{
if (OrderStopLoss() < Bid - (TrailingStop + TrailingStep)*Point)
{
SL = NormalizeDouble(Bid - TrailingStop*Point,Digits);
if (OrderStopLoss() !=SL)
OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0);
}
}
}
if (OrderType() == OP_SELL)
{
if(OrderOpenPrice() - Ask > TrailingStop*Point)
{
if (OrderStopLoss() > Ask + (TrailingStop+ TrailingStep)*Point)
{
SL = NormalizeDouble (Ask+TrailingStop*Point,Digits);
if (OrderStopLoss() !=SL)
OrderModify (OrderTicket(), OrderOpenPrice(), SL,0,0);
}
}
}
}
}
}
}
Aquí está el archivo .cpp del proyecto, échale un vistazo y después de un par de búsquedas en Google y Yandex, no encontré nada del otro mundo, en general es comprensible. Incluso parece sencillo.
¿Pero cómo funciona? No estoy muy seguro de cómo hacer referencia a este ddl - desde el código del EA? ¿Cómo? En primer lugar, tiene este aspecto #include <GetIntValue>.
Es más o menos así. Para que funcione, tienes que compilar la dll y ponerla en la carpeta experts/libraries (lee la ayuda y el tutorial, ahí está detallado).
2. Al llamar a la dll, no hay que mantener el estudio encendido, ¿verdad? ¿cómo se ejecuta?
Aquí hay otra pregunta. Tengo una orden de arrastre. Cuando hay 1 orden unidireccional abierta, todo funciona bien, si hay más, no funciona por alguna razón. ¿Por qué?
{
for(int i = 0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
{
if(Bid - OrderOpenPrice() > TrailingStop*Point)
{
if (OrderStopLoss() < Bid - (TrailingStop + TrailingStep)*Point)
{
SL = NormalizeDouble(Bid - TrailingStop*Point,Digits);
if (OrderStopLoss() !=SL)
OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0);
}
}
}
if (OrderType() == OP_SELL)
{
if(OrderOpenPrice() - Ask > TrailingStop*Point)
{
if (OrderStopLoss() > Ask + (TrailingStop+ TrailingStep)*Point)
{
SL = NormalizeDouble (Ask+TrailingStop*Point,Digits);
if (OrderStopLoss() !=SL)
OrderModify (OrderTicket(), OrderOpenPrice(), SL,0,0);
}
}
}
}
}
}
}
Como necesitas pasar parámetros a la función, prueba esto
bool IfProfTrail=false; // Usar sólo para posiciones rentables - Modo Breakeven
int TrailingStop=0; // Distancia de arrastre = 0 - mínimo permitido
int TrailingStep=1; // Paso de distancia final
¡Muchas gracias!
Ahora entiendo cuál es el problema.
Para la compra he utilizado:
Por lo que sé, la compra es ask, pero iClose(Symbol(),Period(),0) toma los precios de bid. Este puede ser el motivo del error.
Pero aquí surge la pregunta, porque el EA no es un EA basado en Pips, el precio estuvo en la zona de compra durante mucho tiempo y se actualizó con cada tick.Ahora uso la siguiente combinación:
¿Por qué no se abre el comercio? Resulta que el EA se detiene en el error y no ve más movimiento de precios?
Tomé la plantilla para mi Asesor Experto de https://c.mql5.com/mql4/book/mq4/experts/tradingexpert.mq4
En su opinión, ¿debería añadir a la función de gestión de errores de este EA una comprobación de los errores 129 y 138?
En caso afirmativo, ¿cómo hacerlo?
Como mínimo, debe tener su propia función para la apertura de posiciones/configuración de órdenes que maneje todos los errores. Aquí es donde tienes que conseguir los últimos precios.
No he mirado ninguna pieza en blanco. Pero sí diré: el EA necesita manejar todos los errores devueltos por el servidor. Y eso no es suficiente. Debe ser capaz de retomar sus posiciones tras cualquier situación inesperada sin pérdida de funcionalidad y sin que el algoritmo falle, y continuar su trabajo como si no hubiera ocurrido nada extraordinario.
Como mínimo debería tener su propia función para abrir posiciones/establecer órdenes que maneje todos los errores. Es donde debe obtener los últimos precios.
No he mirado ningún plano. Pero diré: necesitas manejar todos los errores devueltos por el servidor en tu EA. Y esto no es suficiente. Debe ser capaz de retomar sus posiciones después de cualquier situación imprevista, sin perder funcionalidad, sin ningún fallo de su algoritmo, y continuar su trabajo como si no hubiera ocurrido nada extraordinario.
La plantilla está sacada de un libro de texto. No se me dan bien las funciones de gestión de errores.
En la apertura de la orden, hay RefreshRates(); (he sustituido Bids y Asks por Market Info como se sugiere).
Y función de tratamiento de errores:
Quería preguntar. Quiero preguntar: ¿Puedo añadir otra línea de 129 error a la misma?