Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 26
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
Una vez que hayas limpiado tu código, será más legible para ti, por no hablar de otros que necesitan entender tu lógica. Ahí es donde se verán todos los fallos.
Ahora, elimina los paréntesis rizados adicionales y ordena el resto normalmente en bloques, y verás dónde falla tu lógica.
¿Cuáles son redundantes?
Tienes un montón de corchetes innecesarios en tu código - trata el código con un estilizador, y verás inmediatamente los corchetes vacíos parejos extra.
Hecho
Fabricado por
Mejor manera: if(count<=20) count++; - ¿para qué contar más si sólo necesitas 21?
2.{
if(Bars<801 || (IsTradeAllowed()==false)) //--- Проверим достаточна ли в истории баров для анализа и разрешение торговли
Print("Нет достаточного количества баров или торговля на текущем инструменте запрещена");
return;
}
Y aquí está el wigwam. Esto sólo comprobará el número de barras e imprimirá cuandocount>20, el resto del código funcionará cuandocount<=20.
3.
if(OrderSymbol()==Symbol() && OrderType()<2)
continue;
Si sólo hay que tener en cuenta los del mercado (y esto es lo que se espera de un código más amplio), no es necesariocontinuar en absoluto.
4.
{
dummy=(OrderClose(OrderTicket(),OrderLots(),Bid,0,White));
{
if((dummy==true) && ((OrderSelect(i,SELECT_BY_POS,MODE_TRADES))==false))
PlaySound("music");
Sleep(20000);
PlaySound("music");
Sleep(20000);
PlaySound("music");
Sleep(20000);
dummy=false;
ExpertRemove();
}
}
¿Cierra una orden y se elimina? ¿Y si hay más? Y duerme durante un minuto entero.
No he mirado el código de arriba, no hay lugar para probarlo todavía.
1 ok, lo arreglaré
2 no está bien, los siguientes bloques no deberían funcionar encount<20
3 OK, lo corregiré
4 Sí, es un minuto, pero debe iniciarse sólo si no hay más órdenes de mercado para el símbolo actual. Intenté implementarlo a través de un resultado negativo de la selección de la orden, por eso debemos establecer el retorno en algún lugar, pero el retorno en void OnTick() no se ve tan bien. Y de nuevo, OrdersTotal() dará un resultado erróneo si tenemos muchas órdenes para todos los símbolos.
2 no está bien, los siguientes bloques no deberían funcionar cuandocount<20
Entonces tenemos que añadir else return después del bloque;
4 Sí, es un minuto, pero debe iniciarse sólo si no hay más órdenes de mercado para el símbolo actual. He tratado de implementarlo a través de un resultado negativo de la selección de órdenes, por eso debemos establecer el retorno en algún lugar, mientras que el retorno en void OnTick() no se ve muy bien. Y de nuevo, OrdersTotal() dará un resultado erróneo si tenemos muchas órdenes sobre todos los símbolos.
¿Por qué necesitamos tres sonidos?
Pues bien, podemos hacerlo todo en dos etapas: en el primer bucle se cierran las órdenes y en el siguiente se recalculan todas las órdenes de mercado para comprobar si queda alguna, y si no hay ninguna, suenan las fanfarrias.
Pero sigo sin entender cuál es el truco de la música después de cerrar los pedidos. Bueno, puedes hacer una impresión al diario o enviar un mensaje al correo o una notificación a tu smartphone, pero ¿por qué convertir un EA en una caja de música?Entonces debes añadir un return después del bloque else return;
¿Por qué necesitamos el triple de sonido?
Pero se puede hacer todo en dos pasos: en el primer bucle se cierran las órdenes, y en el siguiente se recalculan todas las órdenes de mercado para comprobar si hay alguna sin cerrar, y si no hay ninguna, suena la fanfarria.
Sigo sin entender cuál es el truco de la música cuando los pedidos se han cerrado. Bien, podemos imprimirlo en el diario, enviar un mensaje al correo o notificarlo al smartphone, pero ¿por qué deberíamos convertir nuestro EA en una caja de música?¿Cómo se separan los ciclos?
¿Cómo puedo vincular el sonido a la última orden cerrada? Porque si no hay órdenes, el Asesor Experto no activaría un sonido.
Y una última cosa: estoy contento con la música por ahora
¿Cómo se separan los ciclos?
¿Cómo vincular el sonido al último cerrado? porque si no hay órdenes, el Asesor Experto no funcionará
Y por último, estoy contento con la música por ahora.
¿Qué quiere decir con "separado"? No tenemos que separar nada, sólo necesitamos dos bucles (son casi iguales) pero uno tiene OrderClose() y el otro tiene un contador de órdenes. El criterio de selección del orden es el mismo. Si el contador es=0, todos los pedidos se han cerrado y podemos poner música.
También me di cuenta de que la condición
{
if((Bid>=ma1-X*Point && Bid<ma1) || (Bid<=ma1+X*Point && Bid>ma1))
{
{y=true;}
}
}
No parece estar relacionado con un orden determinado, así que ¿para qué sirve en el bucle?
Yo lo comprobaría antes del bucle de cierre.