Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 99

 

Dratuti. ¿Cómo se hace un panel como éste?

 
Andrey Sokolov:

Dratuti. ¿Cómo se hace un panel como éste?

Toma el ejemplo de kodobase y rehazlo, hay un montón de asesores con paneles para todos los gustos. Comienza con el fondo
 
Andrey Sokolov:

Dratuti. ¿Cómo se hace un panel como éste?

Con objetos gráficos.
 
 
Andrey Sokolov:
Vitaly Muzichenko,Artyom Trishkin, gracias.
Nzt
 
trader781:

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.
Tengo problemas con la lógica.

Es muy sencillo:

  1. abrir un pedido
  2. procesar el pedido
  3. cerrar el pedido
  4. Comprueba el estado y...
    • si es verdadero, entonces ExpertRemove()
  5. De nuevo
 
Artyom Trishkin:
Tenemos problemas de lógica.

Todo es sencillo:

  1. abrir un pedido
  2. procesar el pedido
  3. cerrar el pedido
  4. comprobar el estado y...
    • si es verdadero, entonces ExpertRemove()
  5. y hacerlo de nuevo
Algo parece estar mal, si es verdad - hay que cortar un repollo, no ir a los arbustos)
 
Vitaly Muzichenko:
Algo no parece correcto, si es verdad - deberías estar cortando coles, no en los arbustos)
No es así. Falso. No sé cuál es la prueba... Mierda, todavía tiene algo de lógica.
¿O sólo quieres charlar?
 

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;
}
}
}

//-------------------------------------------------------------------------------------------------------

 
trader781:

Sí, es más simple que eso.

pero ¿qué pasa si mantenemos esto como una reserva y hacemos lo siguiente

comprobar el estado y...
  • si es verdadero, entonces el bot se cuelga con una actividad mínima, preferiblemente ninguna

es decir, cómo bloquear entonces la entrada para su posterior funcionamiento

return(0); pero esto no es deseable - no manejará nada más.