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, pero...
El último EA que publiqué tiene un lag de 3 segundos y 50 (!) pips de deslizamiento. Precio
12 gráficos de 3 segundos cada uno - el precio no tendrá tiempo de correr tanto. ¿O he entendido algo mal?
Esperemos que puedas localizarlo. "Caída" significa aproximadamente una vez cada 2-3 minutos. Si no lo hace, probablemente el servidor está demasiado cerca, o su ordenador es demasiado rápido. Tengo parte de mi CPU ocupada por un paquete de red neural, así que MT se queda con el 50%... Ahora... Aquí, desactiva la red neuronal (hay un botón de pausa, a diferencia de otros programas). El error número uno no ha desaparecido, pero se ha vuelto un poco menos frecuente. La MT se está "comiendo" el 55-99% de la CPU. Al encenderlo... MT obtiene 1,5 veces menos tiempo de CPU. Los errores también se hicieron más frecuentes.
double dStopLoss; int nHoursToHold; datetime timePrev = 0; int nBars; int nDelaySeconds = 3; int nSlip = 50; double dLotSize = 0.1; int nMagic = 0; int nDigits; string strTradeSemaphore = "TradeSemaphore"; ////////////////// int init() { nBars = Bars; if(!IsTesting() && !GlobalVariableCheck(strTradeSemaphore)) GlobalVariableSet(strTradeSemaphore, 0.0); dStopLoss = 110 * Point; nHoursToHold = 1; nDigits = MarketInfo( Symbol(), MODE_DIGITS ); if(Symbol() == "EURUSD") nMagic = 1; else if(Symbol() == "EURJPY") nMagic = 2; else if(Symbol() == "USDCHF") nMagic = 3; else if(Symbol() == "GBPUSD") nMagic = 4; else if(Symbol() == "GBPJPY") nMagic = 5; else if(Symbol() == "GBPCHF") nMagic = 6; else if(Symbol() == "USDJPY") nMagic = 7; else if(Symbol() == "AUDUSD") nMagic = 8; else if(Symbol() == "EURGBP") nMagic = 9; else if(Symbol() == "USDCAD") nMagic = 10; else if(Symbol() == "EURCHF") nMagic = 11; else if(Symbol() == "EURAUD") nMagic = 12; return(0); } // ------ int deinit() { return(0); } // ------ int start() { if(Bars < 5) return(0); /* // The previous bar just closed bool bIsBarEnd = false; if(timePrev != Time[0] + nMagic) bIsBarEnd = true; timePrev = Time[0] + nMagic; */ bool bIsBarEnd = false; if(nBars != Bars) { if(IsTesting() || (!IsTesting() && CurTime() > Time[0] + nMagic * nDelaySeconds)) { bIsBarEnd = true; nBars = Bars; } } if(!bIsBarEnd) return(0); // ------ if(!IsTesting()) { while(!IsStopped()) { if(GlobalVariableGet(strTradeSemaphore) == 0.0) GlobalVariableSet(strTradeSemaphore, nMagic); if(GlobalVariableGet(strTradeSemaphore) == nMagic) break; Sleep(1000); } } RefreshRates(); for(int nCnt = OrdersTotal() - 1; nCnt >= 0; nCnt--) { OrderSelect(nCnt, SELECT_BY_POS, MODE_TRADES); if(OrderMagicNumber() == nMagic) { if(CurTime() - OrderOpenTime() > (nHoursToHold - 1) * 60 * 60) { if(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua); else if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, nSlip, OrangeRed); } } } int nSignal = GetSignal(); if(nSignal == OP_BUY) Buy(); else if(nSignal == OP_SELL) Sell(); if(!IsTesting()) GlobalVariableSet(strTradeSemaphore, 0.0); return(0); } // ------ void Sell() { if(AccountFreeMargin() < 500) return; dLotSize = GetLotSize(); double dNormalizer = MathPow(10, nDigits); double dBid = Bid;//MathFloor(Bid * dNormalizer) / dNormalizer; //NormalizeDouble(Bid, nDigits); double dStop = Bid + dStopLoss;//MathFloor((Bid + dStopLoss) * dNormalizer) / dNormalizer; //NormalizeDouble(Bid + dStopLoss, nDigits); int nResult = OrderSend(Symbol(), OP_SELL, dLotSize, dBid, nSlip, dStop, 0, "Friday", nMagic, 0, OrangeRed); if(nResult == -1) { int nError = GetLastError(); Alert(Symbol() + ", sell: " + dBid + ", Stop: " + dStop + ", error: " + nError); } } // ------ void Buy() { if(AccountFreeMargin() < 500) return; dLotSize = GetLotSize(); double dNormalizer = MathPow(10, nDigits); double dAsk = Ask;//MathFloor(Ask * dNormalizer) / dNormalizer; //NormalizeDouble(Bid, nDigits); double dStop = Ask - dStopLoss;//MathFloor((Ask - dStopLoss) * dNormalizer) / dNormalizer; //NormalizeDouble(Bid + dStopLoss, nDigits); int nResult = OrderSend(Symbol(), OP_BUY, dLotSize, dAsk, nSlip, dStop, 0, "Friday", nMagic, 0, Aqua); if(nResult == -1) { int nError = GetLastError(); Alert(Symbol() + ", buy: " + dAsk + ", Stop: " + dStop + ", error: " + nError); } } // ------ double GetLotSize() { double dLot = 0.1; return(dLot); } // ------ int GetSignal() { int nSignal; if(MathMod(Hour(), 2) == 0) nSignal = OP_BUY; else nSignal = OP_SELL; return(nSignal); }El Sur llama, y la nueva función se probará puntualmente en una semana =)))))
...y gracias también, al menos alguien ha intentado solucionar los fallos ;)
Quark, escribí sobre el desarrollador, no sobre los desarrolladores. :) ¿Lo entiendes? En algunas religiones es Dios, en otras es una dirección diferente.
Además, escribí que mis 9 EAs funcionan bien en una cuenta. Pero se te da bien encontrar las condiciones cuando MT4 está paleando algo mal :)
Nos vemos el lunes :)
El Sur llama y la nueva función f se probará puntualmente en una semana =)))))
Un gran saludo al Sur.
...y gracias también, al menos alguien ha intentado solucionar los fallos ;)
Con un error. Y cuántos de ellos...
Sólo estaba bromeando :) Aunque el principio es el mismo en todas partes. Si preguntas correctamente, obtienes una respuesta. Si dices palabrotas, te expulsan :)
Y también escribí que mis 9 EAs están funcionando bien en la misma cuenta. Pero se te da bien encontrar las condiciones cuando MT4 está paleando algo mal :)
72 ventanas con 12 de mis concejales - también. Entonces añadí el 13, y aquí vamos... En general, por supuesto, si tomo el último EA publicado en esta rama y lo uso en relojes en lugar de minutos, y aumento la pausa de 3 segundos a 30 (como sugeriste, por cierto) no habrá errores. Así que el resultado se consigue, uno positivo...
Es una pena lo de los chicos del foro inglés, pero no voy a traducir nuestros mensajes para ellos. No tiene buena salud :(
Buena suerte,
Quark
El problema ocurre en diferentes EAs. La lógica en todos ellos fue modificada con semáforos (como sugirió Slava) y retardo (Rosh) - de modo que en 10 segundos dados sólo 1 EA estaba trabajando. Todos los errores que mencioné anteriormente desaparecieron (hasta ahora), excepto el número 6.