Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 402
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
Evento de clic del ratón en el objeto gráfico
CHARTEVENT_OBJECT_CLICK
Coordenada X
Coordenada Y
Nombre del objeto gráfico donde se ha producido el evento
Uf, creo que lo tengo todo resuelto)
Gracias por la ayuda.
No sé cómo vincular el resultado "r" a un buffer para visualizarlo en un gráfico, por favor, aconséjame.
No puedo entender los ejemplos de los libros de texto, he preguntado a la gente
Escriben - "Escribe el valor de "r" en el buffer, y aparecerá en el gráfico" y "Normalmente se escribe en el buffer a través de un bucle for. "
pero eso no me dice nada.
Uno de los resultados es sólo la letra "r" y eso es todo, no puedo encontrarlo en ningún sitio.
Y una cosa más
cómo suavizar el resultado "r", por ejemplo.
Gracias por su atención.¿Cuál es el error? Cuando se ejecuta en el probador, la función borra la orden pendiente y a veces no. ¿Por qué? El principio de funcionamiento es el siguiente: cuando la orden de compra es cerrada por TP, se elimina el BuyLimit. Por favor, asesórese
¿Cuál es el error? Cuando se ejecuta en el probador, la función borra la orden pendiente y a veces no. ¿Por qué? El principio de funcionamiento es el siguiente: cuando la orden de compra es cerrada por TP, se elimina el BuyLimit. Por favor, aconséjeme.
OrdersTotal() != OrdersHistoryTotal()
Gracias.
Hola a todos.
Hice un simple Asesor Experto basado en Stochstick (vende en el pico superior, compra en el pico inferior), y el compilador da un error en el acto.
¿Puede alguien decirme cuál es la razón y qué significa este error? Al principio pensé que había olvidado poner un paréntesis en alguna parte.
Pero no, lo he comprobado varias veces y parece que todo está bien con los soportes. Les agradeceré mucho la ayuda.
Estos son los errores que genera el compilador: ')' - no todas las vías de control devuelven un valor Stohastic-Signals-33.mq4 177 3
Aquí está el propio Asesor Experto y un archivo mq4 adjunto también:
Por favor, indique cómo adjuntar el Asesor Experto a este archivo (en el editor con letras de colores)
//+------------------------------------------------------------------+
//| Stohastic-Signals-33.mq4
//| Copyright 2017, MetaQuotes Software Corp.
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#enlace de propiedad "https://www.mql5.com"
#versión de la propiedad "1.00"
#propiedad estricta
//+------------------------------------------------------------------+
bool New_Bar=false; // bandera de una nueva barra.
extern double H_line=80; // Línea superior del estocástico (sobrecompra)
extern double L_line=20; // Línea inferior (sobreventa) del estocástico
extern inttern Deslizamiento=2; // Deslizamiento
extern int SL; // SL de la orden que se establece
extern int TP; // TP de la orden que se establece
extern double Lts; //Tamaño del lote de la orden que se establece
bool B_Flag=false; // señal de bandera para la COMPRA
S_Flag=false, // Bandera para una señal de VENTA
ORD_Buy=false, // Marcar posición de compra abierta
ORD_Sell=false; // Marcar posición de venta abierta
bool Work=true; // Bandera que permite que el experto trabaje. true-sin error crítico, false-existente.
string Symb; // Nombre del instrumento financiero
int Crit_Error=11111111; // Número de error crítico
//+------------------------------------------------------------------+
//| función de tic experto |
//+------------------------------------------------------------------+
void OnTick()
{
int
Total, // Número de pedidos en la ventana
Tip=-1, // Tipo de pedido seleccionado (B=0,S=1)
Ticket; // Número de pedido
doble
M_1, M_2, M_3, // Valor principal en 1, 2 y 3 barras
Lote; // Número de lotes en la orden seleccionada
bool Ans_Close; // Bandera de cierre de la orden con éxito (1-cerrado, 0-no cerrado)
bool Ans_Open; // Marca si la orden se ha abierto con éxito (1-cerrado, 0-no abierto)
//--------------------------------------------------------------- 1 --
// Comprobar si hay un error crítico
if(Work==false) // Error crítico
{
Alert("Error crítico. El Asesor Experto no funciona;)
return; // Salir de start()
}
//--------------------------------------------------------------- 2 --
// Nueva barra
Fun_New_Bar(); // Llamada de la función
if (New_Bar==false) // Si la barra no es nueva
return; // ...luego salir
//------------------------------------------------------------- 3 --
// Recuento de pedidos
Symb=Símbolo(); // Nombre del instrumento financiero.
Total=0; // Número de pedidos
for(int i=1; i<=TotalPedidos(); i++) // Bucle de pedidos
{
if(OrderSelect(i-1,SELECT_BY_POS)==true) // Si
{ // Análisis de pedidos:
if (OrderSymbol()!=Symb)continue; // No es nuestro instrumento financiero
Ticket=OrderTicket(); // Número de pedido seleccionado.
Tip =OrderType(); // Tipo de la orden seleccionada.
Lot=OrderLots(); // Número de lotes
}
si no
{
Alert("OrderSelect() devolvió un error - ",GetLastError()); // Si el pedido no pudo ser seleccionado, entonces .
return; // Salir
}
}
//------------------------------------------------------------- 4 --
// Criterios comerciales Análisis de la situación
M_1=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,1);// 1 bar
M_2=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,2);// 2 bar
M_3=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,3);// 3 bar
//------------------------------------------------------------- 5 --
if(M_2>=H_line) // si el estohástico ha cruzado la línea de sobrecompra
{
if(M_3 <= M_2 && M_2 > M_1) // El estohástico ha cruzado la línea de sobrecompra {...
{
if(S_Flag==true) // Si(Se abre la posición de venta, entonces...
return; // Salir de start()
// Si la posición de venta no se abre, entonces ...
S_Flag=true; // establecemos una bandera que indica que ha aparecido la señal de Venta
B_Flag=false; // comprobar que la señal de COMPRA no ha aparecido
if(ORD_Buy==true) // Si se ha abierto una orden de compra,...
{
if(Tip!=0) // Comprobación: el TIPO de orden no se corresponde con la orden abierta...
{
Work=false; //El Asesor Experto no funcionará
Alert("El TIPO de orden no se corresponde con el FLAG de la orden abierta. Salida de la misma"); // Si la coincidencia no existe, el Asesor Experto deja de funcionar
return; // Salir del inicio
}
Ans_Close=Close_Order(Ticket,Lot,Slippage,Tip); // Cerrar la orden de compra abierta
if(Ans_Close==false) // Si no se cierra, entonces...
{
Alert("Fallo en el cierre de la orden. El Asesor Experto deja de funcionar.\NNNNSe trata de un error crítico ", Crit_Error);
return; // Salir
}
}
Ans_Open=Open_Order(Symb,Lts,SL,TP,1); // PUNTOS ABIERTOS
if(Ans_Open==false) // si no se abre la venta
{
Alert("Fallo en la apertura de la orden. El Asesor Experto deja de funcionar.\NNNNSe trata de un error crítico ", Crit_Error);
return; // Salir del inicio
} // Si la venta se abrió con éxito
ORD_Sell=true; // ponemos una bandera de que se ha abierto una posición CORTA
ORD_Buy=false; // Marcar la posición LONG como perdida
}
return; // Salir del inicio
}
//------------------------------------------------------------------------ 6 --
if(M_2<=L_line) // Si el estohástico ha cruzado la línea de sobreventa
{
if(M_3 >= M_2 && M_2 < M_1) // Aparece el pico inferior (BUY CALL)
{
if(B_Flag==true) // Si la posición de compra está abierta
return; // Salir de start()
// Si no se abre ninguna posición de compra, entonces...
B_Flag=true; // Bandera positiva para la posición de compra abierta
S_Flag=false; // comprobar que no hay señal de VENTA
if(ORD_Sell==true) // Si hay una orden de venta abierta,...
{
if(Tip!=1) // Comprobación: el TIPO de orden no se corresponde con la orden abierta...
{
Work=false; //El Asesor Experto no funcionará
Alert("El TIPO de orden no se corresponde con el FLAG de la orden abierta. Salir de la partida."); // Si la coincidencia no existe, el Asesor Experto deja de funcionar
return; // Salir del inicio
}
Ans_Close=Close_Order(Ticket,Lot,Slippage,Tip); // Cerrar la orden de venta abierta
if(Ans_Close==false) // Si no se cierra
{
Alert("Fallo en el cierre de la orden. El Asesor Experto deja de funcionar.\NNNNSe trata de un error crítico ", Crit_Error);
return; // Salir
}
}
Ans_Open=Open_Order(Symb,Lts,SL,TP,0); // ABRIR POSICIÓN LARGA
if(Ans_Open==false) // si no se abre Buy
{
Alert("Fallo en la apertura de la orden. El Asesor Experto deja de funcionar.\NNNNSe trata de un error crítico ", Crit_Error);
return; // Salir del inicio
} // Si la orden de compra se abrió con éxito
ORD_Sell=false; // comprobar que no hay posición corta
ORD_Buy=true; // Marcar posición abierta LONG
}
return; // Salir del inicio
}
}
//+------------------------------------------------------------------ 7 --
void Fun_New_Bar() // El fie de detección .
{ // ... nueva barra.
static datetime New_Time=0; // hora de la barra actual
New_Bar=false; // No hay barra nueva
if(¡Tiempo_nuevo!=Tiempo[0]) // comparar el tiempo
{
New_Time=Time[0]; // Ahora la hora es
New_Bar=true; // Se captura la nueva barra
}
}
//--------------------------------------------------------------- 8 --
bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip) // Cierre del pedido
{
double Precio_de_cierre=0; // Precio de cierre de la orden
while(true)
{
RefreshRates(); // Actualizar datos
if(F_Tip==0) // Si la orden es de compra, ...
Close_Price=Bid; // Precio de cierre Bid
Close_Price=Ask; // Si la orden es de venta, precio de cierre Ask
bool Ans_Close=Cierre de la orden(F_Ticket,F_Lot,Close_Price,F_Slippage); // Cerrar la compra o la venta
if (Ans_Close==true) // Ha funcionado :)
return(true); // Salir de la función de cierre
Crit_Error=GetLastError(); // Fijar el número de error
if (Fun_Error(Crit_Error)==1) // Gestión de errores
continue; // Reintentar; // Intentar de nuevo.
return(false); // Salir de la función
}
}
//--------------------------------------------------------------- 9 --
//Orden de apertura
bool Abrir_Orden(string F_Symb,double F_Lts,int F_SL,int F_TP,int F_Tip)
{
double Precio_abierto; //precio_abierto
string Tip_Deal; // Dirección de la operación(Compra o Venta)
double f_sl; // Orden de Stop Loss
double f_tp; // Toma de beneficios
int Ticket; // Ticket de la orden abierta
while(true) // Ordena el cierre del bucle.
{
RefreshRates(); // Actualizar datos
if(F_Tip==1) // Abrir VENTA...
{
Precio_abierto=Oferta;
Tip_Deal="OP_SELL";
f_sl=NormalizarDoble(Oferta+F_SL*Punto,Dígitos);
f_tp=NormalizarDoble(Oferta-F_TP*Punto,Dígitos);
}
//-------------------------------- Si quieres abrir BUY, entonces...
Open_Price=Preguntar;
Tip_Deal="OP_BUY";
f_sl=NormalizarDoble(Oferta+F_SL*Punto,Dígitos);
f_tp=NormalizarDoble(Oferta-F_TP*Punto,Dígitos);
Ticket=OrderSend(F_Symb,Tip_Deal,F_Lts,Open_Price,2,f_sl,f_tp);//open ORDER
if (Ticket > 0) // ha funcionado :)
return(true); //salir de la función
Crit_Error=GetLastError(); // número de error de confirmación
if (Fun_Error(Crit_Error)==1) // Gestión de errores
continue; // Reintentar; // Intentar de nuevo.
return(false); // Salir de la función
}
}
//--------------------------------------------------------------- 10 --
int Fun_Error(int Error) //Función que maneja errores
{
switch(Error)
{ // Errores insalvables.
caso 4: Alerta("El servidor comercial está ocupado. Inténtelo de nuevo...");
Sleep(3000); // Solución simple.
return(1); // Salir de la función.
case 135:Alert("El precio ha cambiado. Inténtelo de nuevo...");
RefreshRates(); // Actualizar datos.
return(1); // Salir de la función.
case 136:Alert("No hay precio. Esperando un nuevo tick...");
while(RefreshRates()==false) // Till a new tick
Sleep(1); // Retraso en el bucle
return(1); // Salir de la función
case 137:Alerta("El corredor está ocupado. Inténtelo de nuevo...");
Sleep(3000); // Solución simple.
return(1); // Salir de la función.
case 146:Alert("El subsistema de comercio está ocupado. Inténtelo de nuevo...");
Sleep(500); // Decisión simple
return(1); // Salir de la función
// Errores críticos
caso 2: Alert("Error general;)
return(0); // Salir de la función.
caso 5: Alert("Versión antigua del terminal.");
Work=false; // Ya no funciona
return(0); // Salir de la función
caso 64: Alerta("Cuenta bloqueada.");
Work=false; // Ya no funciona
return(0); // Salir de la función
caso 133:Alerta("Prohibido comerciar");
return(0); // Salir de la función
case 134:Alert("No hay suficiente dinero para ejecutar la transacción");
return(0); // Salir de la función
por defecto: Alert("Se ha producido un error ",Error); // Otras opciones
return(0); // Salir de la función
}
}
//-------------------------------------------------------------- 11 --
¿Puede alguien decirme cuál es la razón y qué significa este error? Al principio pensé que había olvidado poner un paréntesis en alguna parte.
Pero no, lo he comprobado varias veces y parece que todo está bien con los soportes. Les agradeceré mucho la ayuda.
Estos son los errores que genera el compilador: ')' - no todas las vías de control devuelven un valor Señales-estocásticas-33.mq4 177 3
')' - no todas las vías de control devuelven un valor Señales-estocásticas-33.mq4 210 3
//--------------------------------------------------------------- 8 --
bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip) // Cierre del pedido
{
double Precio_de_cierre=0; // Precio de cierre de la orden
while(true)
{
RefreshRates();// Actualizar datos
if(F_Tip==0)// Si(Orden de compra, ...
Close_Price=Bid; // Precio de cierre Bid
Close_Price=Preguntar;// Si se trata de una orden de venta, el precio de cierre es Ask
bool Ans_Close=Cerrar orden(F_Ticket,F_Lot,Close_Price,F_Slippage); // Cerrar compra o venta
si (Ans_Close==true)// Funcionó :)
return(true);// Salir de la función de cierre
Crit_Error=GetLastError();// número de error cometido
if (Fun_Error(Crit_Error)==1) // Gestión de errores
continuar;// reintentar
return(false);// Salir de la función
}
}
Pulse el botón de compilación en el MetaEditor y lea el mensaje de error - hay un número de línea y un número de posición
Insertar el código del programa con el botón SRC - ¡¡¡A los lectores locales les gusta más así!!! y tu larga divagación es BRRRRR
El botón sirve para insertar el código fuente en el texto del mensaje. Al hacer clic, aparecerá una ventana vacía en la que deberá pegar el código y luego hacer clic en el botón Insertar.
Pulse el botón de compilación en el MetaEditor y lea el mensaje de error - hay un número de línea y un número de posición
Insertar el código del programa con el botón SRC - ¡¡¡A los lectores locales les gusta más así!!! y tu larga divagación es BRRRRR
El botón sirve para insertar el código fuente en el texto del mensaje. Al hacer clic, aparece una ventana vacía en la que hay que pegar el código y luego hacer clic en el botón Insertar.
Gracias.