Funciones útiles de KimIV - página 121

 

Hay un error en la función https://forum.mql4.com/ru/38949/page5#434241.

Debería ser así

double PriceOpenNearPos(string sy="", int op=-1, int mn=-1) {
  double mi, oop=0, p;
  int    i, k=OrdersTotal(), pp=0;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (OrderType()==OP_BUY)  mi=MarketInfo(OrderSymbol(), MODE_ASK);
            if (OrderType()==OP_SELL) mi=MarketInfo(OrderSymbol(), MODE_BID);
            p=MarketInfo(OrderSymbol(), MODE_POINT);
            if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
            if (pp==0 || pp>MathAbs(OrderOpenPrice()-mi)/p) {
              pp=MathAbs(OrderOpenPrice()-mi)/p;
              oop=OrderOpenPrice();
              if(pp==0) break;
            }
          }
        }
      }
    }
  }
  return(oop); 

}

Por favor, vuelva a descargarlo.

 

¡Buenas tardes a todos!

Al arreglar los Asesores Expertos (debido a las actualizaciones de MQL) resultó que muchas de las funciones de Igor Kim ya no funcionan. Esto incluye los más populares. Por ejemplo,

NúmeroDePosiciones - Devuelve el número de posiciones.

ExistPositions - Devuelve el indicador de existencia de posiciones.

Otra función, que mencioné ayer en el hilo: Función NumberOfBarCloseLastPos().
Esta función devuelve el número de barra para cerrar la última posición

Cuando visualizo el comentario en el gráfico del Probador de Estrategias, veo que las funciones devuelven valores constantes (-1 y/o 0) todo el tiempo, a pesar de la existencia de operaciones (actuales y cerradas). Parece que el EA no ve las condiciones definidas por estas funciones en su código.

Además, las funciones llamadas "ejecutables" dejan de funcionar, por ejemplo, un conjunto de funciones para cerrar posiciones: ClosePosBySelect (esta función cierra una posición seleccionada preliminarmente) y funciones asociadas:
CerrarPosiciones - Cerrar posiciones a precio de mercado, etc.

Por favor, avisa de qué tipo de errores hay en estas funciones y qué hay que arreglar, al menos usando una de ellas -NumberOfPositions - devuelve el número de posiciones?

 
Rita:

¡Buenas tardes a todos!

Al arreglar los Asesores Expertos (debido a las actualizaciones de MQL) resultó que muchas de las funciones de Igor Kim ya no funcionan. Esto incluye los más populares. Por ejemplo,

NúmeroDePosiciones - Devuelve el número de posiciones.

ExistPositions - Devuelve el indicador de existencia de posiciones.

Otra función, que mencioné en la rama ayer: Función NumberOfBarCloseLastPos().
Esta función devuelve el número de barra para cerrar la última posición.

Cuando visualizo el comentario en el gráfico del Probador de Estrategias, veo que las funciones devuelven valores constantes (-1 y/o 0) todo el tiempo, a pesar de la existencia de operaciones (actuales y cerradas). Parece que el EA no ve las condiciones definidas por estas funciones en su código.

Además, las funciones llamadas "ejecutables" dejan de funcionar, por ejemplo, un conjunto de funciones para cerrar posiciones: ClosePosBySelect (cierra una posición seleccionada previamente) y
CerrarPosiciones - Cerrar posiciones a precio de mercado, etc.

Por favor, avisa de qué tipo de fallos han aparecido en las funciones y qué hay que arreglar, al menos usando una de ellas como ejemplo -NumberOfPositions - Devuelve el número de posiciones?

NumberOfPositions() me funciona bien. De verdad, ¡sigo trabajando con MQL4 sin pluses! Si escribes en un idioma actualizado, supongo que todo debe adaptarse a él o ir a Freelance. Ahora todo se comercializa con una fuerza terrible. Mi corazón está contigo.

Si de alguna manera puedes encajarNumberOfPositions(), entonces ExistPositions() no es necesario. Puede comprobarlo de esta manera:

if(NumberOfPositions() > 0) //вместо if(ExistPositions() == true)
----------------------------//или
if(NumberOfPositions() == 0)//вместо if(ExistPositions() == false)

Buena suerte.

 
borilunad:

NumberOfPositions() me funciona bien. Es cierto, ¡sigo trabajando con MQL4 sin pluses! ¡Si estás escribiendo en un idioma actualizado, entonces todo debería ajustarse a él o ir a Freelance! Ahora todo se comercializa con una fuerza terrible. ¡!

No vengo aquí a menudo, así que no sé, ¿qué significa "MQL4 sin pros"?

¿Crees que los que pueden responder aquí no lo hacen para obligar a un visitante a pagar por responder a una pregunta de autónomo sin complicaciones?

Me pregunto cuánto costaría a los programadores-comerciantes locales arreglar dicha función de I.Kim para que funcione en la última versión de mt4 con MQL actualizado:

//|  Описание : Возвращает количество позиций.                                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;
  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) kp++;
          }}}}}
  return(kp);
}
Te recuerdo que Comment( NumberOfPositions(NULL, -1, Magic) ); - devuelve constantemente -1 aunque el EA haya abierto posiciones.
 
Rita:

No vengo aquí a menudo, así que no sé, ¿qué significa " MQL4 sin pros"?

¿Crees que los que pueden responder aquí no lo hacen para obligar a un visitante a pagar por responder a una pregunta de autónomo sin complicaciones?

Me pregunto cuánto costaría a los programadores-comerciantes locales arreglar dicha función de I.Kim para que funcione en la última versión de mt4 con MQL actualizado:

Te recuerdo que Comment( NumberOfPositions(NULL, -1, Magic) ); siempre devolverá -1, aunque el EA haya abierto posiciones.

NULL como parámetro de una función significa que no hay parámetros.

Eso sería mejor)Comment( NumberOfPositions(Symbol(), -1, Magic));

 
Rita:

No vengo aquí a menudo, así que no sé, ¿qué significa " MQL4 sin pros"?

¿Crees que los que pueden responder aquí no lo hacen para obligar a un visitante a pagar por responder a una pregunta de autónomo sin complicaciones?

Me pregunto cuál sería el coste de arreglar esa característica para los programadores comerciales:

Permítame recordarle que la salida de Comment( NumberOfPositions(NULL, -1, Magic) ); muestra que siempre se devuelve -1, incluso si el EA ha abierto posiciones.

¡MQL4++ actualizado, como lo llaman aquí!

Mi función devuelve el número correcto de posiciones. ¡Pero tiene un error en Comment()! ¡Seguro que la función funciona!

Pruébalo así:

int start()// или что у Вас там, как в обновлённом MQL4


  int BuyPos = NumberOfPositions(Symbol(),OP_BUY, Magic); //это вызов этой функции, чтобы знать, сколько у Вас баев
  int SellPos = NumberOfPositions(Symbol(),OP_SELL,Magic);//а это для селлов



  Comment("Buy ",BuyPos," Sell ",SellPos);

¡De esta manera verá todo exactamente en el gráfico, aplique las variables BuyPos y SellPos para comprobar en las condiciones! Mira cómo lo tengo:

      if(BuyPos == 0 && SellPos == 0) 
      {
// и так далее ...

Buena suerte.

 

Gracias, borilunad y vadynik, por el consejo.

Efectivamente, ¡la función funciona! ¡Un humilde agradecimiento por el útil consejo:https://www.youtube.com/watch?v=SFJeHI2LVX4&feature=related!

 
borilunad:

Ahora todo se comercializa con una fuerza terrible. Mi corazón está contigo.

Boris, ¿no te da vergüenza decir eso? Cuenta cuántas páginas has escrito tratando de ayudarte. ¿Y este es tu agradecimiento a todos los que te han ayudado? No los recuerdo todos, pero Artem (artmedia70) se encargó amablemente de su problema y obtuvo a cambio...
 
Rita:

He aquí una alternativa. La función sólo se llama si el número de pedidos ha cambiado. Además, se puede llamar si el tipo de orden ha cambiado.

// переменные глобального уровня
int Total[6];
int ot;

void OnTick()
{
 if(ot != OrdersTotal())
  CountTrades();

  Comment("Ордеров BUY ", Total[OP_BUY], "\n"
        , "Ордеров SELL ", Total[OP_SELL], "\n"
        , "Ордеров BUYLIMIT ", Total[OP_BUYLIMIT], "\n"
        , "Ордеров SELLLIMIT ", Total[OP_SELLLIMIT], "\n"
        , "Ордеров BUYSTOP ", Total[OP_BUYSTOP], "\n"
        , "Ордеров SELLSTOP ", Total[OP_SELLSTOP], "\n"
}
void CountTrades()
{/*********************Подсчёт открытых ордеров**********************/
  ArrayInitialize(Total, 0);
           int type, total = OrdersTotal(); ot = 0;
            for(int i = 0; i < total; i++)
             {
              if(OrderSelect(i, SELECT_BY_POS) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
               {
                type = OrderType();
                 Total[type] += 1;
                ot++;
               }
             }
}/*******************************************************************/
 
Rita:

Gracias, borilunad y vadynik, por el consejo.

Efectivamente, ¡la función funciona! ¡Un humilde agradecimiento por el útil consejo:https://www.youtube.com/watch?v=SFJeHI2LVX4&feature=related!

Gracias. ¡Pero la siguiente función que se te sugiere puede tener fallos ya que está escrita en MQL4++!