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
Hola Mladen, gracias por tu ayuda, he aplicado tus cambios pero realmente no funciona, tal vez sería más simple si el EA simplemente ignora cualquier operación abierta existente, es decir, sólo las deja abiertas, y luego abre y cierra su propia nueva operación individual
En este momento abre y cierra su propia operación, pero también cierra cualquier operación abierta adicional.
aumentar
De un código parcial esto es lo que podría sugerir. Si se crea un parámetro booleano NoCloses,y si ese parámetro se pone en true, no debería cerrar las órdenes si se aplica como el snippet (si CBy CSno son iguales a 1 ese código no cerrará las órdenes)
saludos
Mladen
Hola Mladen, gracias por tu ayuda, he aplicado tus cambios pero realmente no funciona, tal vez sería más simple si el EA sólo ignora cualquier operación abierta existente, es decir, sólo las deja abiertas, y luego abre y cierra su propia nueva operación individual Por el momento abre y cierra su propia operación, pero también cierra cualquier operación abierta adicional existente
aumentar
De un código parcial esto es lo que podría sugerir. Si se crea un parámetro booleano NoCloses,y si ese parámetro se pone en true, no debería cerrar las órdenes si se aplica como el snippet (si CBy CSno son iguales a 1 ese código no cerrará las órdenes)
saludos
MladenEso es cierto, pero a no ser que lo haya entendido mal, ¿eso significa que la operación abierta por el EA tampoco se cerrará nunca, por lo que sólo cambiará entre compra y venta?
Sí, eso es correcto.
Por lo que entendí, esa era tu idea: dejar que el EA abriera las órdenes y luego tú gestionarías las órdenes (cerrándolas) manualmente. Con ese parámetro puedes incluso cambiarlo a false y entonces el EA volverá a cerrar las órdenes - así que es "controlable desde fuera", más o menos
Eso es cierto, pero a no ser que lo haya entendido mal, eso significa que la operación abierta por el EA tampoco se cerrará nunca, por lo que sólo cambia entre compra y venta?
Si, eso es correcto. Por lo que entendí esa era tu idea: dejar que el EA abra órdenes y luego tú gestiones las órdenes (cerrándolas) manualmente. Con ese parámetro puedes incluso cambiarlo a false y entonces el EA volverá a cerrar las órdenes - así que es "controlable desde fuera", más o menos
Ah lo siento fui ambiguo, quiero que el EA abra y cierre su orden e ignore cualquier orden existente, así por ejemplo
1. Tengo 5 órdenes de venta abiertas
2. Aplico el EA y abre 1 orden de compra
3. Ahora tengo 5 de venta y 1 de compra
4. El EA ahora desencadena una venta por lo que cierra su compra
5. Ahora tengo 6 órdenes de venta (5 existentes, 1 de venta del EA)
6. El EA ahora desencadena una compra por lo que cierra su venta
7. Ahora tengo 5 órdenes de venta y 1 de compra, etc.
Voy a cerrar las ventas existentes, el EA ignora cualquier otra operación aparte de la suya propia, como en el caso anterior.
aumentar
Ya lo hace si estableces el parámetro Magic a un valor distinto de 0 (es una parte del código que comprueba si debe cerrar una orden de compra justo antes de la orden de cierre)
Así que si el "Magic" no es igual a 0 y siempre que el valor de Magic sea único, sólo cerrará las órdenes abiertas por él mismo
Ah, lo siento, fui ambiguo, quiero que el EA abra y cierre su orden e ignore cualquier orden existente, así que por ejemplo
1. Tengo 5 órdenes de venta abiertas
2. Aplico el EA que abre 1 orden de compra
3. Ahora tengo 5 de venta y 1 de compra
4. El EA ahora desencadena una venta por lo que cierra su compra
5. Ahora tengo 6 órdenes de venta (5 existentes, 1 de venta del EA)
6. El EA ahora desencadena una compra por lo que cierra su venta
7. Ahora tengo 5 órdenes de venta y 1 de compra, etc.
Voy a cerrar las ventas existentes, el EA ignora cualquier otra operación aparte de la suya propia, como en el caso anteriorOperar una vez por barra para un marco de tiempo específico
¡Hola, queridos fEllA's!
Tengo EA (yeeaa, que no) que funciona bien en tester, toma múltiples operaciones por 4H Bar, como se indica. Ahora, al probarlo en Demo (Alpari UK) con 11 pares, el EA sólo toma 1 operación, cuando debería tomar más (3 como máximo, según las instrucciones). Sólo cada barra 4H, si se cumplen las condiciones.
Tengo la función 'Semaphor' con GlobalVariable codificada, y este trozo de código, para evitar la apertura de múltiples órdenes dentro de 1 TimeFrame predefinido (4H en este caso):
//Compra
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))
{
si (SignalsOnly)
{
// ------ La alerta debe ser sólo una vez por señal O una vez cada 15 o 30 minutos
if (CheckAlertTime == iTime (NULL, 5, 0)) return(0);
else CheckAlertTime = iTime (NULL, 5, 0);
if (Alerts) Alert (Symbol() + " " + DoubleToStr (Ask, Digits) + " BUY Signal");
if (PlaySounds) PlaySound (WhichSound);
}
if (!IsTrade && !SignalsOnly)
{
if (CheckAlertTime == iTime (NULL, OncePerBarTF, 0)) return (0);
else CheckAlertTime = iTime (NULL, OncePerBarTF, 0);
//Comprobar el margen libre
if (AccountFreeMargin() < (1000 * Lots))
{
Print ("No tenemos dinero. Margen libre = ", AccountFreeMargin());
return(0);
}
if (UseTakeProfit && CloseLotsPercent == 100) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
{
if (MoneyManagement) Lots = NormalizeDouble ((AccountFreeMargin() * Risk / 100 / ((Ask - BuySL) / Point / TickValue)), 2);
si no Lots = Lots;
}
if (TradeIsBusy() && IsTradingAllowed() < 0)
return (-1);
RefreshRates();
Ticket = OrderSend (Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "7Qi BUY " + MagicNo, MagicNo, 0, DodgerBlue);
if (Ticket > 0)
{
if (OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES))
{
Print ("7Qi BUY opened: ", OrderOpenPrice());
if (Alerts) Alert (Symbol() + " " + DoubleToStr (Ask, Digits) + " BUY opened");
if (PlaySounds) PlaySound (WhichSound);
}
else
{
Print ("Error al abrir BUY: ", Err);
}
}
// TradedThisBar = Bars;
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
TradeIsNotBusy();
return (0);
}
}
//-------------------------------------------------
¿Es posible que este código:
if (CheckAlertTime == iTime (NULL, OncePerBarTF, 0)) return (0);
else CheckAlertTime = iTime (NULL, OncePerBarTF, 0);
¿Impedir que el EA opere a mitad de la hora? ¿Comprueba sólo al principio de la barra?
Si uso la función "TradedThisBar = Bars" tendría que dejar al EA en 1 TimeFrame solamente, ¿correcto?
La función "Semaphor" está codificada en TrailingStops también, PartialCloseLots también.
Gracias a todos por su ayuda,
Que se diviertan,
Simon
Eslovenia
Iiiiiik - He encontrado el problema
¡Hola!
He encontrado el problema - es muy probablemente la combinación de:
if (TradeIsBusy() /*&& IsTradingAllowed()*/ < 0)
devolver (-1);
//-----------------------------------------------------------------------------------------
int IsTradingAllowed (int MaxWaitingSec = 30)
{
if (!IsTradeAllowed())
{
int StartWaitingTime = GetTickCount();
Imprima ("¡El contexto comercial está ocupado! Espere hasta que se libere...");
if (Alerts) Alert (Symbol() + " ¡No se permite la negociación de EA! Esperando...");
while (true)
{
if (IsStopped())
{
Imprime ("¡El EA fue terminado!");
return(-1);
}
if (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000 )
{
Print( "¡Límite de espera excedido (" + MaxWaitingSec + " seg)!" );
return(-2);
}
if (IsTradeAllowed())
{
Imprime ("¡El contexto comercial está ahora libre!");
return(0);
}
Sleep (100);
}
}
si no
{
Imprimir ("¡El contexto comercial está libre!");
return(1);
}
}
*/
//-----------------------------------------------
int TradeIsBusy (int MaxWaitingSec = 30)
{
if (IsTesting()) return(1);
int Err = 0, StartWaitingTime = GetTickCount();
while (true)
{
if (IsStopped())
{
Imprime ("¡El EA fue terminado!");
return(-1);
}
if (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000)
{
Print ("¡Tiempo de espera (" + MaxWaitingSec + " seg) excedido!");
if (Alerts) Alert (Symbol() + " ¡Tiempo de espera del EA excedido!");
return(-2);
}
if (GlobalVariableCheck ("TradeIsBusy"))
romper;
si no
{
Err = GetLastError();
if (Err != 0)
{
Print ("TradeIsBusy - GlobalVariableCheck - Error # ", Err);
Dormir (100);
continuar;
}
}
if (GlobalVariableSet ("TradeIsBusy", 1.0) > 0) return(1);
si no
{
Err = GetLastError();
if (Err != 0)
{
Print ("TradeIsBusy - GlobalVariableSet - Error # ", Err);
Sleep(100);
continuar;
}
}
}
while (true)
{
si (IsStopped())
{
Imprime ("¡El EA fue terminado!");
return(-1);
}
if (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000)
{
Print ("¡Tiempo de espera (" + MaxWaitingSec + " seg) excedido!");
if (Alerts) Alert (Symbol() + " ¡tiempo de espera excedido!");
return (-2);
}
if (GlobalVariableSetOnCondition ("TradeIsBusy", 1.0, 0.0 )) return (1);
si no
{
Err = GetLastError();
if (Err != 0)
{
Print ("TradeIsBusy - GlobalVariableSetOnCondition - Error # ", Err);
continuar;
}
}
if (Alerts) Alert (Symbol() + " - esperando que otro EA termine de operar...");
Sleep (1000);
}
}
//--------------------------------
void TradeIsNotBusy()
{
int Err;
if (IsTesting())
{
return(0);
}
while (true)
{
if (IsStopped())
{
Imprime (Symbol() + " ¡El EA fue terminado!" );
return(-1);
}
if (GlobalVariableSet ("TradeIsBusy", 0.0) > 0) return(1);
si no
{
Err = GetLastError();
if (Err != 0)
Print ("TradeIsNotBusy - GlobalVariableSet - Error # ", Err);
}
Sleep (100);
}
}
//-----------------------------------------------------------------------------------------------
Probaré sin la función IsTradeAllowed.
Gracias de todos modos,
Que te diviertas,
Simon
código de error 130
----- borrado ----- ya no es necesario......
Tutorial descargable de mq4
Hola chicos,
no encuentro un tutorial o libro de referencia ( ¡no online! ) sobre el código mq4.
¿pueden ayudarme?
Saludos cordiales
RESUELTO, tuve que descomprimir el archivo con una utilidad.