Funciones útiles de KimIV - página 74

 
allarkoms писал(а) >>

¡Hola Igor!

Estoy intentando aprender MQL4 y debido a la falta de descripción de los operadores del lenguaje un problema me ha dejado perplejo. Tengo un indicador con 8 búferes de datos acumulados. Necesito que se muestre con el periodo del siguiente marco temporal en un plazo que he elegido. Para ello, utiliza el operador iCustom(). Pero devuelve un valor doble y no sé cómo y si se puede y debe utilizar iCustom en este caso.

Realmente espero su ayuda.

¡Hola, Alexey!

Debe hacer un nuevo indicador que utilice la función iCustom(). Asigna los valores devueltos por esta función a los buffers del nuevo indicador.

 
ProfitTrader писал(а) >>

¡Hola Igor! ¡Y buenas tardes a todos!

Me interesa el código que se debe introducir para que el Asesor Experto no haga más operaciones ese día cuando cierre una operación...

Lo he encontrado pero no funciona en el probador de estrategias, quiero probarlo, ¿qué código debo usar en su lugar?

Entonces debería añadirlo en la condición de entrada.

¡Hola, Sergiy!

Ni siquiera veo por qué el uso de mi función dada por usted no puede trabajar en el probador de la estrategia. Si sigue siendo relevante para ti, te sugiero que publiques el código completo del EA. Vamos a intentar resolverlo...

 

Hay preguntas sobre las diferencias y peculiaridades de las funciones SetOrder() y OpenPosition() en el manejo de errores.


SetOrder():

      if ( err==8 || err==141) Sleep(1000*100);
      if ( err!=135 && err!=138) Sleep(1000*7.7);
      if ( err==139 || err==140 || err==148) break;

OpenPositions(): Los errores 8 (ERR_TOO_FREQUENT_REQUESTS), 138 (ERR_REQUOTE) y 139 (ERR_ORDER_LOCKED) no son tratados, a diferencia de SetOrder():

      if ( err==141) Sleep(1000*100);
      if ( err!=135) Sleep(1000*7.7);
      if ( err==140 || err==148 || err==4110 || err==4111) break;

En SetOrder() el error 130 (ERR_INVALID_STOPS) es manejado por la corrección de paradas, pero en OpenPositions() no es manejado de ninguna manera.

En el procesamiento de OpenPositions() está presente 145 (ERR_TRADE_MODIFY_DENIED). El sentido de procesarlo aquí no está claro.

Además, en la primera página de esta discusión se menciona el manejo de errores que falta en ambas funciones:

KimIV >>:

На паузу 7.7 секунды нарвутся ошибки 129 (Неправильная цена bid или ask), 130 (Неправильные стопы), 134 (Недостаточно денег), 136 (Нет цен).

¡Además, no se procesan otros errores (probablemente, importantes en este caso), por ejemplo, el 3 (ERR_INVALID_TRADE_PARAMETERS), el 6 (ERR_NO_CONNECTION), el 7 (ERR_NOT_ENOUGH_RIGHTS), el 9 ERR_MALFUNCTIONAL_TRADE, el 137 (ERR_BROKER_BUSY), el 144(!), 4067 (ERR_TRADE_ERROR), 4106 (ERR_UNKNOWN_SYMBOL), 4107 (ERR_INVALID_PRICE_PARAM)


Igor, por favor, comenta los puntos descritos.

Las funciones SetOrder() y OpenPositions() que he mencionado están tomadas de la biblioteca b-Orders del 05.11.2008 y b-Positions del 29.10.2008 del sitio kimiv.ru.


Me gustaría añadir. Si se produce el error 5 ERR_OLD_VERSION, puede tratarse del mismo modo que 2, 64, 65, 133; 4109 ERR_TRADE_NOT_ALLOWED del mismo modo que 4110, 4111

 
¿Qué significa el error 142? No pude encontrarlo en los códigos de error. También me gustaría saber si es posible reducir los retrasos en alguna parte para el pipsator?
 
khorosh >> :
¿Qué significa el error 142? No lo he encontrado en los códigos de error.

https://docs.mql4.com/ru/trading/errors

142 Se ha puesto en cola un pedido. No se trata de un error, sino de uno de los códigos de comunicación entre el terminal cliente y el servidor de comercio. Este código puede ser recibido en un caso raro, cuando durante el desempeño de la operación comercial hubo una interrupción en la conexión y la conexión fue restaurada después. Debe tratarse de la misma manera que el error 128.

 
Здравствуйте Игорь! И всем Добрый день!

Me interesa una pregunta sobre las BPA, no están descritas en el libro, y hay muchas novedades en este tema. Me gustaría saber cómo hacer que se abra una operación cada vez que aparezca un BPA. Quiero saber cómo se abren las órdenes cuando aparecen las BPA. Lo tengo, pero por alguna razón este algoritmo no funciona, ¿cuál es el error aquí?

extern int     Magic                = 777;
extern int       TP                 = 6;
extern int       SL                 = 2;
extern double  Lots                 = 0.01;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
if(  iClose(NULL,0,1)>iOpen(NULL,0,0) && (iClose(NULL,0,1)-iOpen(NULL,0,0))>1*Point )
   { //покупаем
  OrderSend(Symbol(),OP_BUY, Lots,Ask,2,Bid- SL*Point,Bid+ TP*Point,
                                               NULL, Magic,0,CLR_NONE);}
                                                  
if(  iClose(NULL,0,1)<iOpen(NULL,0,0) && (iClose(NULL,0,1)-iOpen(NULL,0,0))>1*Point )
   { //продаем
 OrderSend(Symbol(),OP_SELL, Lots,Bid,2,Ask+ SL*Point,Ask- TP*Point,
                                              NULL, Magic,0,CLR_NONE);}

   return(0);
  }
//+------------------------------------------------------------------+
 
En la primera condición, la primera sub-condición es superflua, la segunda condición sobre la venta no es factible en absoluto. ¿Un punto es una brecha? Tienes un deslizamiento de 2 y un stop de 2, podría haber solapamientos.
 
Roger >> :
En la primera condición la primera sub-condición es redundante, la segunda condición en venta es imposible. ¿Un punto es una brecha? Tu deslizamiento es 2 y el stop es 2.

Gracias, pero ¿por qué es superfluo el primer prefacio? Usted quiere que una posición de compra se abra cuando una nueva barra esté por encima del cierre de la anterior y viceversa. >> ¿Es esa la forma correcta?

if(  iClose(NULL,0,1)<iOpen(NULL,0,0) && (iClose(NULL,0,1)-iOpen(NULL,0,0))>2*Point )
   { //покупаем
  OrderSend(Symbol(),OP_BUY, Lots,Ask,2,Bid- SL*Point,Bid+ TP*Point,
                                               NULL, Magic,0,CLR_NONE);}
                                                  
if(  iClose(NULL,0,1)>iOpen(NULL,0,0) && (iClose(NULL,0,1)-iOpen(NULL,0,0))>2*Point )
   { //продаем
 OrderSend(Symbol(),OP_SELL, Lots,Bid,2,Ask+ SL*Point,Ask- TP*Point,
                                              NULL, Magic,0,CLR_NONE);}
 
Así es.
if(  iClose(NULL,0,1)-iOpen(NULL,0,0)>10*Point )
   { //покупаем
  OrderSend(Symbol(),OP_BUY, Lots,Ask,2,Bid- SL*Point,Bid+ TP*Point,
                                               NULL, Magic,0,CLR_NONE);}
                                                  
if( iOpen(NULL,0,0)- iClose(NULL,0,1)>10*Point )
   { //продаем
OrderSend(Symbol(),OP_SELL, Lots,Bid,2,Ask+ SL*Point,Ask- TP*Point,
                                              NULL, Magic,0,CLR_NONE);}
 
Roger >> :
>> Así es.

Por lo que entiendo, la primera condición implica automáticamente que el precio de cierre sea mayor que el de apertura. En el segundo, es al revés??????