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

 
STARIJ:
Abajo está esto:

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

////+------------------DELETE BUYLIM-----------------------------------+
   if((SchBuyLimLots(Symbol())-SchBuyLots(Symbol()))!=0)                  //  лот байлимит НЕ лот бая
     {     
      for(int i=0;i<OrdersTotal();i++)
        {
         datetime T_op=0,T_lim=0,buys=0;
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) break;
         if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=SMB_) continue;
         if(OrderType()==OP_BUY)
         if(OrderCloseTime()>buys) buys+=OrderCloseTime();
         buys= OrderCloseTime();
         T_op=buys;                                                       //  время закрытия бая
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=SMB_) continue;
           {
            if(OrderType()==OP_BUYLIMIT)
              {
               T_lim=OrderOpenTime();                                     //  время закрытия селл
               ticket=OrderTicket();
               if(T_lim<=T_op)                                            //  разность
               res=OrderDelete( ticket,clrMagenta);
               if(res<1)
               {
                  Print(GetLastError());
               }
              }
           }
        }
     }
 
ZZuretc:

¿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()

 
Alexey Viktorov: Yo mismo no he investigado la maravilla que supone.

Gracias.

 
¿Puedes decirme cómo encontrar los valores máximos y mínimos del ATR actual?
Archivos adjuntos:
q6a0hh.PNG  12 kb
 

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

')' - no todas las vías de control devuelven un valor Stohastic-Signals-33.mq4 210 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 --



Archivos adjuntos:
 
RomanRott:¿Pueden decirme cómo encontrar los valores máximos y mínimos de la ATP actual?
   double max=-10000, min=+10000, ATR;
   for(int n=0; n<WindowFirstVisibleBar();n++)
   {
      ATR=iATR(NULL, 0, 14, n);
      if(max<ATR)max=ATR;
      if(min>ATR)min=ATR;
   }
   Alert("min = ", DoubleToStr(min,4), "    max = ", DoubleToString(max,4));
Para otros indicadores similares
 
Skander: Hola a todos.Hice un simple experto basado en Stochstic (en el pico superior vende, en el inferior compra), y el compilador da un error en un punto plano.
¿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

//--------------------------------------------------------------- 8 --
  bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip)    // Ф-ия закрытия ордера
  {
   double Close_Price=0;                       // Цена закрытия ордера 
   while(true)
     {
        ....................................
            continue;                           // Повторная попытка
         return(false);                                // Выход из функции
     }
     return false;   // Компилятор хочет return в конце функции
  }

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 Código 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.

 
STARIJ:

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.