Mi EA funciona bien cuando se ejecuta por sí solo, pero si intento ejecutar el mismo EA en un símbolo diferente al mismo tiempo en el mismo perfil, entonces el segundo no funciona muy bien o en absoluto o hay muchos errores. Esto sucede incluso si utilizo Symbol() y diferentes números mágicos para los dos gráficos separados. Incluso sucede si ejecuto diferentes versiones del mismo código (es decir, los nombres de los archivos EA y los números mágicos son diferentes pero el código es idéntico por lo demás). ¿Tengo algún tipo de conflicto con las variables globales o hay alguna otra razón por la que el segundo se cuelga? Gracias.
- Errores, fallos, preguntas
- EA no se ejecuta en múltiples pares, necesita ayuda
- Problema en EA con indicadores personalizados.
Sneck55:
Mi EA funciona bien cuando se ejecuta por sí solo, pero si intento ejecutar el mismo EA en un símbolo diferente al mismo tiempo en el mismo perfil, entonces el segundo no funciona muy bien o en absoluto o hay muchos errores. Esto sucede incluso si utilizo Symbol() y diferentes números mágicos para los dos gráficos separados. Incluso ocurre si ejecuto diferentes versiones del mismo código (es decir, los nombres de los archivos EA y los números mágicos son diferentes pero el código es idéntico por lo demás). ¿Tengo algún tipo de conflicto con las variables globales o hay alguna otra razón por la que el segundo se cuelga? Gracias.
Mi EA funciona bien cuando se ejecuta por sí solo, pero si intento ejecutar el mismo EA en un símbolo diferente al mismo tiempo en el mismo perfil, entonces el segundo no funciona muy bien o en absoluto o hay muchos errores. Esto sucede incluso si utilizo Symbol() y diferentes números mágicos para los dos gráficos separados. Incluso ocurre si ejecuto diferentes versiones del mismo código (es decir, los nombres de los archivos EA y los números mágicos son diferentes pero el código es idéntico por lo demás). ¿Tengo algún tipo de conflicto con las variables globales o hay alguna otra razón por la que el segundo se cuelga? Gracias.
Como no debería ser un problema ejecutar el mismo EA en diferentes gráficos (yo lo hago sin problemas) deberías proporcionar el código... ?
¡¡Usa el botón SRC!!
gooly: ¡¡usa el botón SRC!!
¿Qué parte de SRC no estaba clara? ¿Por qué no lo hiciste? Edita tu post!
Reproducir videoPor favor, edita tu post.
Para grandes cantidades de código, adjúntelo.if(BuyTicket != 0) { if(SmallMA<MediumMA) { for(Counter = 0; Counter <=OrdersTotal()-1; Counter++) { : Counter--; }
Si la energía falla, el sistema operativo se bloquea, el terminal o el gráfico se cierra accidentalmente, la próxima vez BuyTicket se perderá. Tendrá una orden abierta pero nunca intentará cerrarla. No necesita recordar el número de ticket cuando utiliza un bucle OrderSelect.- Usted DEBE contar hacia atrás al cerrar/borrar. Retroceder uno no funcionará si otro EA cierra una orden. Bucles y cierre o borrado de órdenes - Foro MQL4
- Simplifique sus booleanos
// if(SmallMA>MediumMA&&MediumMA>LargeMA) MABuyFanning = true; // else MABuyFanning = false; MABuyFanning = (SmallMA>MediumMA&&MediumMA>LargeMA);
if(NewBar == true)
Nunca escribiría if( (2+2) == 4) == true) ¿verdad? if(2+2 == 4) es suficiente. Así que no escriba if(bool == true ), sólo use if(bool) o if(!bool).
El botón SRC se utilizó para hacer el post
Sneck55:
El botón SRC se utilizó para hacer el post
El botón SRC se utilizó para hacer el post
sip, pero la primera línea "Sorry for the delay...." no es código y lo arruinó todo
#property copyright "Copyright 2014, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict extern bool CheckOncePerBar = true; extern double FixedLotSize = 1; extern double SystemStopLoss = 150; extern double TakeProfit = 0; extern int Slippage = 5; extern int MagicNumber = 3574; //Global Variables int BuyTicket; int SellTicket; double InternalStopLoss; double CalcDigits; double CalcPoint; bool MABuyFanning; bool MASellFanning; int SelectedOrder; bool Closed; int ErrorCode; string ErrLog; double BuyStopLoss; double SellStopLoss; bool NewBar; double ThisBarOpen; double SmallMA; double MediumMA; double LargeMA; int Counter; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { CalcDigits = MarketInfo(Symbol(),MODE_DIGITS);//MODE_DIGITS is count of digits after decimal point if(CalcDigits == 0) CalcPoint = 1;//Dow if(CalcDigits == 1) CalcPoint = 0.1; if(CalcDigits == 2) CalcPoint = 0.01;//Gold & Nymex if(CalcDigits == 3) CalcPoint = 0.01;//Yen if(CalcDigits == 4) CalcPoint = 0.0001;//Not used if(CalcDigits == 5) CalcPoint = 0.0001;//Non-Yen forex InternalStopLoss = SystemStopLoss*CalcPoint; return(INIT_SUCCEEDED); } //----------------------------------------------- void OnTick() { if(CheckOncePerBar == true) { if(ThisBarOpen != Open[0]) { ThisBarOpen = Open[0]; NewBar = true; } else NewBar = false; } else NewBar = true; if(NewBar == true) { //Reset Moving Averages SmallMA = iMA(NULL,0,8,0,1,0,0); MediumMA = iMA(NULL,0,10,0,1,0,0); LargeMA = iMA(NULL,0,50,0,1,0,0); if(SmallMA>MediumMA&&MediumMA>LargeMA) MABuyFanning = true; else MABuyFanning = false; if(SmallMA<MediumMA&&MediumMA<LargeMA) MASellFanning = true; else MASellFanning = false; if(BuyTicket == 0 && MABuyFanning == true) { RefreshRates(); BuyStopLoss = Bid - InternalStopLoss; // while(IsTradeContextBusy()) Sleep(10); BuyTicket = OrderSend(Symbol(),OP_BUY,FixedLotSize,Ask,Slippage,BuyStopLoss,0,"Buy Order",MagicNumber,0,Green); if(BuyTicket == -1) { ErrorCode = GetLastError(); Alert("Symbol: ",Symbol(),"Error in buy routine: ",ErrorCode); ErrLog = StringConcatenate("Bid: ",MarketInfo(Symbol(),MODE_BID)," Ask: ",MarketInfo(Symbol(),MODE_ASK)," Lots: ",FixedLotSize," Stop Loss: ",BuyStopLoss); Print(ErrLog); //Buy ticket revert to 0 so it can try again in case of slow connection/timeout etc. BuyTicket = 0; } } if(SellTicket == 0 && MASellFanning == true) { RefreshRates(); SellStopLoss = Ask + InternalStopLoss; // while(IsTradeContextBusy()) Sleep(10); SellTicket = OrderSend(Symbol(),OP_SELL,FixedLotSize,Bid,Slippage,SellStopLoss,0,"Sell Order",MagicNumber,0,Red); if(SellTicket == -1) { ErrorCode = GetLastError(); Alert("Symbol: ",Symbol(),"Error in sell routine: ",ErrorCode); ErrLog = StringConcatenate("Bid: ",MarketInfo(Symbol(),MODE_BID)," Ask: ",MarketInfo(Symbol(),MODE_ASK)," Lots: ",FixedLotSize," Stop Loss: ",SellStopLoss); Print(ErrLog); SellTicket = 0; } } //Exits if(BuyTicket != 0) { if(SmallMA<MediumMA) { for(Counter = 0; Counter <=OrdersTotal()-1; Counter++) { SelectedOrder = OrderSelect(Counter,SELECT_BY_POS); if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() && OrderType() == OP_BUY) { // while(IsTradeContextBusy()) Sleep(10); Closed = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_BID),Slippage,Red); if(Closed == true) BuyTicket = 0; else Alert("Symbol: ",Symbol()," Ticket: ",BuyTicket," unable to close buy order(s): buy ma convergence close routine"); } Counter--; } } } if(SellTicket != 0) { if(SmallMA>MediumMA) { for(Counter = 0; Counter <=OrdersTotal()-1; Counter++) { SelectedOrder = OrderSelect(Counter,SELECT_BY_POS); if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() && OrderType() == OP_SELL) { // while(IsTradeContextBusy()) Sleep(10); Closed = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_ASK),Slippage,Red); if(Closed == true) SellTicket = 0; else Alert("Symbol: ",Symbol()," Ticket: ",SellTicket," unable to close sell order(s): sell ma convergence close routine"); } Counter--; } } } } return; }
El código es extremadamente simple y, sin embargo, cuanto más ventanas lo ejecuto en el peor rendimiento. Lo he ejecutado en 4 símbolos diferentes, pero incluso empieza a fallar en un símbolo después de unos minutos. También empieza bien, pero cuanto más tiempo lo ejecuto (después de un par de horas más o menos) se vuelve más y más lento y menos preciso. A veces puede tardar hasta un minuto en eliminar cada EA de cada ventana con el pequeño círculo junto al cursor dando vueltas y vueltas durante años. Tengo un buen PC rápido que acabo de desfragmentar y escanear en busca de virus - también lo he probado en mi portátil con exactamente los mismos resultados. He intentado descargar todo el historial de M1 pero no hay diferencia. ¿Podría ser algún tipo de problema de pérdida de memoria? ¿Está MT4 tratando de utilizar los mismos recursos una y otra vez? Está claro que no podré confiar en ella para operar en mi cuenta real hasta que se resuelva el problema.
Esto es interesante...
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