Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 99
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
Dratuti. ¿Cómo se hace un panel como éste?
Dratuti. ¿Cómo se hace un panel como éste?
Dratuti. ¿Cómo se hace un panel como éste?
Vitaly Muzichenko,Artyom Trishkin, gracias.
Siguiendo con la redacción de otra martingala, perdiendo incluso en el probador, de lo contrario, ¿cómo se supone que vamos a crecer un alce.
En este momento hay un parámetro deseado, que debería ser responsable de la posibilidad de abrir la siguiente orden después de que la(s) anterior(es) esté(n) cerrada(s)
hay 2 escenarios
1) si el valor es verdadero
abrir un pedido
proceso
cerrar
y reabrir
2) si es falso
Abrir el pedido
Proceso
Cerrar
y luego hacer ExpertRemove
todo el problema es que estas dos condiciones son mutuamente excluyentes, pero tienen que combinarse en 1 EA ya que
1) el valor se fija al principio
2) el valor se establece en las condiciones de entrada y procesamiento y se acepta para su procesamiento (si es verdadero, se abre)
3) tras el cierre, ponemos false
Si alguien está interesado en estas cosas, estaría encantado de escuchar mis variantes.Es muy sencillo:
Tenemos problemas de lógica.
Todo es sencillo:
Algo no parece correcto, si es verdad - deberías estar cortando coles, no en los arbustos)
Por favor, avisa. El Asesor Experto no abre órdenes en el terminal. La recopilación está en marcha, según los gráficos las órdenes deberían abrirse. Pero no lo son. Adjunto el código.
double Lots=NormalizeDouble((AccountFreeMargin()/100*Percent)/MarketInfo(Symbol(),MODE_MARGINREQUIRED),1);//determinar el número de lotes
double MacdCurrent=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,0);/Parámetros MACD de la barra actual
double MacdPrevious1=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,1);//los parámetros MACD de la barra anterior
double MacdPrevious2=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,2);//los parámetros MACD de la línea principal desplazados 2 barras
double StopLoss=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,0);/Parámetros Trailing Stop por ParabolicSAR de la barra actual
double Previous_StopLoss=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,1);/Parámetros de StopLoss por parámetros ParabolicSAR de la barra anterior
double PSARCurrent=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,0);//parámetros ParabolicSAR de la barra actual
double PSARPrevious=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,1);//Parámetros ParabólicosSAR de la barra anterior
//+------------------------------------------------------------------+
//| Función de tic experto|
//+------------------------------------------------------------------+
void OnTick()
{
static datetime New_Time=TimeCurrent();// Hora de la barra actual
bool New_Bar=false; // Marcar nueva barra
int ticket,total,cnt;
//---------------------------------------------------------------------------
{
New_Bar=false; // No hay barra nueva
if(Time[0]==New_Time) // Compara los tiempos
{
New_Bar=true; // New_Bar es capturado
if(New_Bar==false) // Si una barra no es nueva
return; // ...luego salir
}
}
total=OrdersTotal();// Determinación del número de pedidos
if(total<1)
{
//-no hay órdenes abiertas
if((AccountFreeMargin()/100*Percent)<MarketInfo(Symbol(),MODE_MARGINREQUIRED)*(MarketInfo(Symbol(),MODE_MINLOT))
//Comprobar la disponibilidad de fondos para abrir el lote mínimo
{
Print("No hay fondos suficientes. Fondos libres = ",AccountFreeMargin());
volver;
}
//--condición para la apertura de la posición larga (COMPRA)
if((MacdCurrent>0 && MacdPrevious1<=0 && MacdPrevious2<0)
&&
PSARCurrent<iOpen(NULL,0,1))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss,0,NULL,MAGICNUMBER,0,Green);
if(ticket>0)//comprobar posición abierta
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Orden de compra abierta : ",OrderOpenPrice());
si no
Print("Error de apertura de orden de compra : ",GetLastError());
volver;
}
}
//--condición para abrir una posición corta (SELL)
if((MacdCurrent<0 && MacdPrevious1>=0 && MacdPrevious2>0)
&&
PSARCurrent>iOpen(NULL,0,1))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,StopLoss,0,NULL,MAGICNUMBER,0,Red);
if(ticket>0)//comprobar posición abierta
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Orden de venta abierta : ",OrderOpenPrice());
si no
Print("Error al abrir la orden de VENTA : ",GetLastError());
volver;
}
}
//--- salir del bloque "sin órdenes abiertas"
}
//--es importante entrar en el mercado correctamente pero es más importante salir de él correctamente
for(cnt=0;cnt<total;cnt++)
{
if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()==MAGICNUMBER && // comprobar el número mágico del pedido
OrderSymbol()==Symbol()) // comprobar el símbolo de la orden
{
//--- posición larga abierta
if(OrderType()==OP_BUY)
{
//--- debe estar cerrado?
if((MacdCurrent<0 && MacdPrevious1>=0 && MacdPrevious2>0)
&&
PSARCurrent>iOpen(NULL,0,1))
{
//--- orden de cierre y salida
if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))
Print("Error de OrderClose ",GetLastError());
volver;
}
//------------------Modificar orden por StopLoss
if(StopLoss>Previous_StopLoss && StopLoss<iOpen(NULL,0,0))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Previous_StopLoss,0,0,Blue))
Print("Error de modificación del pedido. Código de error=",GetLastError());
si no
Print("El precio de Stop Loss de la orden ha sido modificado con éxito;)
volver;
}
}
si no // ir en corto
if(OrderType()==OP_SELL)
{
//--- debe estar cerrado?
if((MacdCurrent>0 && MacdPrevious1<=0 && MacdPrevious2<0)
&&
PSARCurrent<iOpen(NULL,0,1))
{
//--- orden de cierre y salida
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
Print("Error de OrderClose ",GetLastError());
volver;
}
//-----------------Modificar orden por StopLoss
if(StopLoss<Previous_StopLoss && StopLoss>iOpen(NULL,0,0))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Previous_StopLoss,0,0,Blue))
Print("Error de modificación del pedido. Código de error=",GetLastError());
si no
Print("El precio de Stop Loss de la orden ha sido modificado con éxito;)
volver;
}
}
}
//-------------------------------------------------------------------------------------------------------
Sí, es más simple que eso.
pero ¿qué pasa si mantenemos esto como una reserva y hacemos lo siguiente
comprobar el estado y...es decir, cómo bloquear entonces la entrada para su posterior funcionamiento