Fonctions utiles de KimIV - page 30

 

Si tu es intéressé, regarde ce que j'ai fait en matière de mode. Je vais au jardin pour tremper les pommes de terre... Je serai là dans la soirée...

ZS. J'en ai déduit la valeur qui apparaît le plus grand nombre de fois dans une série de chiffres.

Dossiers :
 
KimIV писал (а) >>

Si tu es intéressé, regarde ce que j'ai fait en matière de mode. Je vais au jardin pour tremper les pommes de terre... Je serai là dans la soirée...

ZS. J'en ai déduit la valeur qui apparaît le plus grand nombre de fois dans une série de nombres.

Bien sûr, intéressant, merci ! Nous allons faire des tests.

 
KimIV писал (а) >>

Si tu es intéressé, regarde ce que j'ai fait en matière de mode. Je vais au jardin pour tremper les pommes de terre... Je serai là dans la soirée...

SZY. J'ai déduit la valeur qui apparaît le plus grand nombre de fois dans la série numérique.

Je vous recommande également d'ajouter quelque chose comme une marge d'erreur (ou un intervalle de réussite) pour calculer le mode des nombres réels, que vous pouvez ajuster et ainsi régler la précision de l'échantillonnage.

2 Idalgo :

Si vous faites de l'analyse statistique ( c'est cequi m'intéresse en ce moment), voulez-vous partager vos réflexions sur son utilisation ? N'hésitez pas à créer un fil de discussion distinct. Je serais heureux de soutenir ce sujet.


 
sergeev писал (а) >>
Je recommande également d'introduire pour calculer le mode des nombres réels quelque chose comme une erreur (ou un autre intervalle de coup), qui peut être ajusté et ainsi ajuster la précision de l'échantillonnage.

Formules, dessins, explications du comment et du quoi faire... :-) J'espère que vous comprenez qu'il y a plusieurs façons de faire ce que vous suggérez. Décrivez votre variante.

Et pour la première fois, il existe un paramètre d - la précision des valeurs numériques, le nombre de chiffres après la virgule.

 

Oui, la précision des valeurs d est une option, mais dans ce cas nous avons un nombre vérifié sur un intervalle 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 писал (а) >>

Oui, la précision des valeurs d est une option, mais dans ce cas nous avons un nombre vérifié sur l'intervalle 10^(-d).


Pour les nombres flottants, il est préférable d'utiliser une valeur codée en dur de l'écart.

f1 + df > f2 > f1 - df ==> f1 == f2. Ou utiliser la normalisation.

Votre code a définitivement des problèmes avec les nombres proches de zéro, ainsi qu'avec TOUS les nombres négatifs.

Réviser le code.

 

Oui, j'ai un peu oublié le négatif, j'étais pressé.

// переменная 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);
}

Ou



// переменная 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);
}
 
Bonjour Igor. Je suis heureux de suivre le développement de la branche. J'ai décidé d'examiner en détail votre fonction d'établissement des commandes, ou pour être plus précis, son traitement des erreurs du bloc
:
.
......
      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);
    }
  }
}

J'ai une question.

Pourquoi traitez-vous l'erreur 131 (ERR_INVALID_TRADE_VOLUME : Volume incorrect) par une longue pause.

Est-ce une erreur ou je ne comprends pas quelque chose.

 
ShestkoFF писал (а) >>
Bonjour Igor. J'ai suivi cet article avec grand plaisir. J'ai décidé d'examiner en détail votre fonction de passation de commande, ou pour être plus précis, son bloc d'erreurs.
le traitement des erreurs :

J'ai une question.

Pourquoi traitez-vous l'erreur 131 (ERR_INVALID_TRADE_VOLUME : Volume incorrect) par une longue pause.

Est-ce une erreur ou est-ce que je rate quelque chose ?

Bonjour Vasily ! Vous avez tout à fait raison ! C'est mon erreur due à mon étourderie. Merci de me l'avoir fait remarquer. L'erreur 131 doit être traitée de la même manière que les erreurs 2, 64, 65 et 133, c'est-à-dire que l'EA doit être désactivée.

 
Bien sûr, je ne le bloquerais pas. J'enverrais l'erreur au sommet et déciderais de ce qu'il faut faire à ce niveau.

Si vous bloquez l'EA à ce stade, il peut y avoir des positions ouvertes laissées par l'EA, ce qui serait un désastre.