Chicos, necesito ayuda, hace unos días que no puedo hacer los cambios necesarios en el siguiente código:
void start()
{
StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL);
// Определение направления пересечения мувинговif (Init) InitMetod();
// Трейлинг стоп открытых позицийif (Trailing != 0 ) RealTrailOrder(TrailStop, TrailStep, StopLevel, MagicNumber);
// Ожидание нового бара на графикеif(timeprev == Time[0]) return;
timeprev = Time[0];
// Открытие ордера по методу Пуриа
CheckForOpen();
}
//+------------------------------------------------------------------+//| Check for open order conditions |//+------------------------------------------------------------------+void CheckForOpen() // Открытие ордера по методу Пуриа
{
double malw,mas1,mas2,macd;
int res;
// Считывание параметров индикаторов
malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0);
mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0);
mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0);
macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,0);
// Проверяем положение мувмнговif(malw>mas1 && malw>mas2 && OrderSell)
{
OrderBuy=true;
OrderSell=false;
Order=true;
}
if(malw<mas1 && malw<mas2 && OrderBuy)
{
OrderBuy=false;
OrderSell=true;
Order=true;
}
// Открываем ордер Buyif(macd>0 && OrderBuy && Order)
{
res=OrderSend(Symbol(),OP_BUY,Lots(),Ask,Slip,Bid-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Blue);
Order=false;
return;
}
// Открываем ордер Sell if(macd<0 && OrderSell && Order)
{
res=OrderSend(Symbol(),OP_SELL,Lots(),Bid,Slip,Ask+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Red);
Order=false;
return;
}
}
//+------------------------------------------------------------------+//| Calculate optimal lot size |//+------------------------------------------------------------------+double Lots() // Расчет объема лота
{
double Lots;
if (Lot > 0) return(Lot);
Lots=AccountFreeMargin()/5000;
Lots=MathMin(15,MathMax(0.01,Lots));
if(Lots<0.1) Lots=NormalizeDouble(Lots,2);
else
{
if(Lots<1) Lots=NormalizeDouble(Lots,1);
else Lots=NormalizeDouble(Lots,0);
}
return(Lots);
}
//+------------------------------------------------------------------+//| Init metod Puria function |//+------------------------------------------------------------------+void InitMetod() // Опредеоение начального пересечения мувингов
{
double malw,mas1,mas2;
malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0);
mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0);
mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0);
if((malw<=mas1 && malw>=mas2) || (malw>=mas1 && malw<=mas2))
{
Init=false;
OrderBuy=true;
OrderSell=true;
}
return;
}
En realidad, lo que intenté pero no pude añadir aquí: hacer que el EA espere 4 precios de apertura de vela seguidos después de que todos los indicadores ( precios de apertura de vela) coincidan:
1. El precio de apertura de la 1ª vela - (5) sobre (75) y (85) + barra MACD abierta por encima de 0-1de 4 confirmaciones es; 2. El precio de apertura de la 2ª vela - (5) sobre (75) y (85) + barra MACD abierta por encima de 0-2 de 4 confirmaciones es; 3.3. El precio de apertura de la 3ª vela - (5) por encima de (75) y (85) + barra MACD abierta por encima de 0-3de 4 confirmaciones sí; 4. El precio de apertura de la 4ª vela - (5) por encima de (75) y (85) + barra MACD abierta por encima de 0-4 de 4 confirmaciones sí-Abrir operación de compra en la misma vela (4ª).
La misma situación con las órdenes deventa, sólo que en la otra dirección deben abrirse los indicadores. Y hay un punto importante - si en, digamos, cualquier etapa de la 1 ª vela a la 4 ª,los indicadores cambian su posición(por ejemplo, en la 3 ª vela de apertura, la barra de MACD se abre por debajo de 0, o = 0) - entonces todo se restablece, porque las señales no se verificaron en la apertura de 4 ª vela en una fila.
Por favor, programadores experimentados, ¿qué hay que cambiar en el código para que estas condiciones funcionen? He probado muchas cosas, y no sé...
El precio de apertura de la 1ª vela - (5) sobre (75) y (85) + barra MACD abierta sobre 0 - 1 de 4 confirmaciones sí;
2 El precio de apertura de la 2ª vela - (5) sobre (75) y (85) + barra MACD abierta sobre 0-2 de 4 confirmaciones sí;
3 El precio de apertura de la 3ª vela - (5) sobre (75) y (85) + barra MACD abierta sobre 0-3 de 4 confirmaciones es;
4 El precio de apertura de la 4ª vela - (5) por encima de (75) y (85) + barra MACD abierta por encima de 0-4 de 4 confirmaciones sí-Abrir operación de compra en la misma vela (4ª).
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
Para un probador esto
OrderSendlo hará e incluso funcionará en servidores rápidos, pero si no es un probador es mejor hacerlo según la documentación :)
En realidad, lo que intenté pero no pude añadir aquí: hacer que el EA espere 4 precios de apertura de vela seguidos después de que todos los indicadores ( precios de apertura de vela) coincidan:
1. El precio de apertura de la 1ª vela - (5) sobre (75) y (85) + barra MACD abierta por encima de 0- 1 de 4 confirmaciones es;
2. El precio de apertura de la 2ª vela - (5) sobre (75) y (85) + barra MACD abierta por encima de 0- 2 de 4 confirmaciones es;
3.3. El precio de apertura de la 3ª vela - (5) por encima de (75) y (85) + barra MACD abierta por encima de 0- 3 de 4 confirmaciones sí;
4. El precio de apertura de la 4ª vela - (5) por encima de (75) y (85) + barra MACD abierta por encima de 0- 4 de 4 confirmaciones sí- Abrir operación de compra en la misma vela (4ª).
La misma situación con las órdenes de venta, sólo que en la otra dirección deben abrirse los indicadores. Y hay un punto importante - si en, digamos, cualquier etapa de la 1 ª vela a la 4 ª, los indicadores cambian su posición(por ejemplo, en la 3 ª vela de apertura, la barra de MACD se abre por debajo de 0, o = 0) - entonces todo se restablece, porque las señales no se verificaron en la apertura de 4 ª vela en una fila.
Por favor, programadores experimentados, ¿qué hay que cambiar en el código para que estas condiciones funcionen? He probado muchas cosas, y no sé...
if(malw>mas1 && malw>mas2 && OrderSell)Como dicen, no te fíes de nuestra palabra.
OrderSellNo sé qué puede haber en él, comparte la lógica de la toma de decisiones en el código.
artem artem #:
El precio de apertura de la 1ª vela - (5) sobre (75) y (85) + barra MACD abierta sobre 0 - 1 de 4 confirmaciones sí;
2 El precio de apertura de la 2ª vela - (5) sobre (75) y (85) + barra MACD abierta sobre 0- 2 de 4 confirmaciones sí;
3 El precio de apertura de la 3ª vela - (5) sobre (75) y (85) + barra MACD abierta sobre 0- 3 de 4 confirmaciones es;
4 El precio de apertura de la 4ª vela - (5) por encima de (75) y (85) + barra MACD abierta por encima de 0- 4 de 4 confirmaciones sí- Abrir operación de compra en la misma vela (4ª).
Anotar un valor con otro, ¿nada? Dividir primer bloque = solución, segundo bloque = solución, comparar bloques.
Anotar un valor con otro, ¿nada? Dividir primer bloque = solución, segundo bloque = solución, comparar bloques.
Resulta que tienes, en el código, un error lógico.
Vale, pero las variables se colapsarán si las usas así y entonces no sabrás qué son los "milagros"
Vale, pero las variables se colapsarán si las usas así y entonces no sabrás qué son los "milagros".
Si conoces otra opción, escríbela...
Puedes ayudar a la gente).