Funciones útiles de KimIV - página 30

 

Si te interesa, echa un vistazo a lo que he hecho en términos de moda. Me voy al jardín a mojar patatas... Estaré allí por la tarde...

ZS. He deducido el valor que aparece el máximo número de veces en una serie de números.

Archivos adjuntos:
 
KimIV писал (а) >>

Si te interesa, echa un vistazo a lo que he hecho en términos de moda. Me voy al jardín a mojar patatas... Estaré allí por la tarde...

ZS. He deducido el valor que se produce el máximo número de veces en una serie de números.

Por supuesto, interesante, ¡gracias! Haremos pruebas.

 
KimIV писал (а) >>

Si te interesa, echa un vistazo a lo que he hecho en términos de moda. Me voy al jardín a mojar patatas... Estaré allí por la tarde...

SZY. He deducido el valor que aparece en la serie numérica el máximo número de veces.

También te recomiendo que añadas algo así como un margen de error (o intervalo de aciertos) para calcular la moda de los números reales, que puedes ajustar y así afinar la precisión del muestreo.

2 Idalgo :

Si haces análisis estadísticos (que es lo que me interesa en este momento), ¿quieres compartir tu opinión sobre su uso? Siéntase libre de crear un hilo separado. Estaría encantado de apoyar el tema.


 
sergeev писал (а) >>
También recomiendo introducir para calcular el modo de los números reales algo así como un error (u otro intervalo de acierto), que se puede ajustar y así ajustar la precisión del muestreo.

Fórmulas, dibujos, explicaciones de cómo y qué hacer... :-) Espero que entiendas que hay varias formas de hacer lo que sugieres. Describa su variante.

Y por primera vez hay un parámetro d - la precisión de los valores numéricos, el número de dígitos después del punto decimal.

 

Sí, la precisión de los valores d es una opción, pero en este caso tenemos un número verificado en un intervalo de 10^(-d).


// переменная exact определяет процент отклонения 
// элемента массива от требуемого числа e
// например для 40% exact=1.40; для 0% exact=1.0
int ArraySearchDouble(double& m[][], double e, double exact) 
{
    for (int i=0; i<ArrayRange(m, 0); i++) 
        if (m[i][1]<=e*exact && m[i][1]>=e/exact ) return(i);
    return(-1);
}
 
sergeev писал (а) >>

Sí, la precisión de los valores d es una opción, pero en este caso tenemos un número verificado en el intervalo 10^(-d).


Para los números flotantes, es mejor utilizar un valor fijo de la dispersión.

f1 + df > f2 > f1 - df ==> f1 == f2. O utilizar la normalización.

Tu código definitivamente tiene problemas con los números cercanos a cero, así como con TODOS los números negativos.

Revisar el código.

 

Sí, me olvidé un poco del negativo, tenía prisa.

// переменная exact определяет процент отклонения 
// элемента массива от требуемого числа e
// например для 40% exact=1.40; для 0% exact=1.0
int ArraySearchDouble(double& m[][], double e, double exact) 
{
    for (int i=0; i<ArrayRange(m, 0); i++) 
        if (MathAbs(m[i][1])<=MathAbs(e)*exact && MathAbs(m[i][1])>=MathAbs(e)/exact ) return(i);
    return(-1);
}

O



// переменная dExact определяет величину отклонения
// значения элемента массива от требуемого числа e
// например dExact=0.055
int ArraySearchDouble2(double& m[][], double e, double dExact) 
{
    for (int i=0; i<ArrayRange(m, 0); i++) 
        if (MathAbs(m[i][1])<=MathAbs(e)+dExact && MathAbs(m[i][1])>=MathAbs(e)-dExact) return(i);
    return(-1);
}
 
Hola Igor. Me alegro de seguir el desarrollo de la rama. He decidido examinar en detalle su función de fijación de pedidos, o para ser más preciso, su gestión de errores del bloque
:
......
      err=GetLastError();
      if (err==128 || err==142 || err==143) {
        Sleep(1000*66);
        if (ExistOrders(sy, op, mn, ot)) {
          if (UseSound) PlaySound(NameFileSound); break;
        }
        Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it);
        continue;
      }
      mp=MarketInfo(sy, MODE_POINT);
      pa=MarketInfo(sy, MODE_ASK);
      pb=MarketInfo(sy, MODE_BID);
      // Неправильные стопы
      if (err==130) {
        switch (op) {
          case OP_BUYLIMIT:
            if (pp>pa-msl*mp) pp=pa-msl*mp;
            if (sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
            if (tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
            break;
          case OP_BUYSTOP:
            if (pp<pa+(msl+1)*mp) pp=pa+(msl+1)*mp;
            if (sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
            if (tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
            break;
          case OP_SELLLIMIT:
            if (pp<pb+msl*mp) pp=pb+msl*mp;
            if (sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
            if (tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
            break;
          case OP_SELLSTOP:
            if (pp>pb-msl*mp) pp=pb-msl*mp;
            if (sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
            if (tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
            break;
        }
        Print("SetOrder(): Скорректированы ценовые уровни");
      }
      Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it);
      Print("Ask=",pa,"  Bid=",pb,"  sy=",sy,"  ll=",ll,"  op=",GetNameOP(op),
            "  pp=",pp,"  sl=",sl,"  tp=",tp,"  mn=",mn);
      if (pa==0 && pb==0) Message("SetOrder(): Проверьте в обзоре рынка наличие символа "+sy);
      // Блокировка работы советника
      if (err==2 || err==64 || err==65 || err==133) {
        gbDisabled=True; break;
      }
      // Длительная пауза
      if (err==4 || err==131 || err==132) {
        Sleep(1000*300); break;
      }
      // Слишком частые запросы (8) или слишком много запросов (141)
      if (err==8 || err==141) Sleep(1000*100);
      if (err==139 || err==140 || err==148) break;
      // Ожидание освобождения подсистемы торговли
      if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
      // Обнуление даты истечения
      if (err==147) {
        ex=0; continue;
      }
      if (err!=135 && err!=138) Sleep(1000*7.7);
    }
  }
}

Tengo esta pregunta.

¿Por qué maneja el error 131 (ERR_INVALID_TRADE_VOLUME: Volumen incorrecto) con una larga pausa?

¿Es un error o no entiendo algo?

 
ShestkoFF писал (а) >>
Hola Igor. He seguido este artículo con mucho gusto. He decidido examinar en detalle su función de colocación de pedidos, o para ser más precisos, su bloque de errores.
tratamiento de errores:

Tengo esta pregunta.

¿Por qué maneja el error 131 (ERR_INVALID_TRADE_VOLUME: Volumen incorrecto) con una larga pausa?

¿Es un error o me estoy perdiendo algo?

¡Hola Vasily! Tienes toda la razón. Es un error mío debido a mi despiste. Gracias por señalármelo. El error 131 debe ser tratado de la misma manera que los errores 2, 64, 65 y 133, es decir, el EA debe ser desactivado.

 
Bueno, por supuesto que no lo bloquearía. Yo enviaría el error a la parte superior y decidiría qué hacer al respecto allí.

Si se bloquea el EA en este punto, pueden quedar posiciones abiertas por el EA, lo que sería un desastre.