Nützliche Funktionen von KimIV - Seite 30

 

Wenn es Sie interessiert, sehen Sie sich an, was ich in Sachen Mode gemacht habe. Ich gehe jetzt in den Garten, um Kartoffeln zu dippen... Ich werde am Abend dort sein...

ZS: Ich habe den Wert abgeleitet, der am häufigsten in einer Zahlenreihe vorkommt.

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

Wenn es Sie interessiert, sehen Sie sich an, was ich in Sachen Mode gemacht habe. Ich gehe jetzt in den Garten, um Kartoffeln zu dippen... Ich werde am Abend dort sein...

ZS: Ich habe den Wert abgeleitet, der am häufigsten in einer Zahlenreihe vorkommt.

Natürlich, interessant, danke! Wir werden Tests durchführen.

 
KimIV писал (а) >>

Wenn es Sie interessiert, sehen Sie sich an, was ich in Sachen Mode gemacht habe. Ich gehe jetzt in den Garten, um Kartoffeln zu dippen... Ich werde am Abend dort sein...

SZY: Ich habe den Wert abgeleitet, der in der Zahlenreihe am häufigsten vorkommt.

Ich empfehle auch, dass Sie so etwas wie eine Fehlerspanne (oder ein Trefferintervall) hinzufügen, um den Modus der realen Zahlen zu berechnen, den Sie anpassen und so die Stichprobengenauigkeit abstimmen können.

2 Idalgo :

Wenn Sie statistische Analysen durchführen (das ist es, was mich im Moment interessiert), würden Sie gerne Ihre Gedanken über deren Verwendung mitteilen? Sie können gerne einen separaten Thread erstellen. Ich würde mich freuen, das Thema zu unterstützen.


 
sergeev писал (а) >>
Ich empfehle auch, für die Berechnung des Modus der reellen Zahlen so etwas wie einen Fehler (oder ein anderes Trefferintervall) einzuführen, der eingestellt werden kann und somit die Genauigkeit der Probenahme anpasst.

Formeln, Zeichnungen, Erklärungen, wie und was zu tun ist... :-) Ich hoffe, Sie verstehen, dass es mehrere Möglichkeiten gibt, das zu tun, was Sie vorschlagen. Beschreiben Sie Ihre Variante.

Und zum ersten Mal gibt es einen Parameter d - die Genauigkeit der numerischen Werte, die Anzahl der Nachkommastellen.

 

Ja, die Genauigkeit der d-Werte ist eine Option, aber in diesem Fall haben wir eine Zahl, die in einem Intervall von 10^(-d) überprüft wurde.


// переменная 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 писал (а) >>

Ja, die Genauigkeit der d-Werte ist eine Option, aber in diesem Fall haben wir eine Zahl, die auf dem Intervall 10^(-d) überprüft wurde.


Für Fließkommazahlen ist es besser, einen fest kodierten Wert für die Spanne zu verwenden.

f1 + df > f2 > f1 - df ==> f1 == f2. Oder verwenden Sie die Normalisierung.

Ihr Code hat definitiv Probleme mit Zahlen nahe Null, sowie mit ALLEN negativen Zahlen.

Überarbeitung des Codes.

 

Ja, ich habe das Negative ein bisschen vergessen, ich war in Eile.

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

Oder



// переменная 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);
}
 
Hallo Igor. Ich freue mich, die Entwicklung der Branche zu verfolgen. Ich habe mich entschlossen, Ihre Funktion zum Einstellen von Aufträgen genauer unter die Lupe zu nehmen, genauer gesagt, die Fehlerbehandlung des Blocks
:
......
      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);
    }
  }
}

Ich habe folgende Frage.

Warum behandeln Sie den Fehler 131 (ERR_INVALID_TRADE_VOLUME: Falsches Volumen) mit einer langen Pause.

Ist das ein Fehler oder verstehe ich etwas nicht?

 
ShestkoFF писал (а) >>
Hallo Igor. Ich habe diesen Artikel mit großem Vergnügen verfolgt. Ich habe mich entschlossen, Ihre Funktion der Auftragssetzung, genauer gesagt ihre Fehlersperre, im Detail zu untersuchen.
Fehlerbehandlung:

Ich habe folgende Frage.

Warum behandeln Sie den Fehler 131 (ERR_INVALID_TRADE_VOLUME: Falsches Volumen) mit einer langen Pause.

Ist das ein Fehler oder übersehe ich etwas?

Hallo Wassili! Sie haben völlig Recht! Das ist mein Fehler, weil ich so geistesabwesend bin. Danke, dass Sie mich darauf hingewiesen haben. Der Fehler 131 sollte genauso behandelt werden wie die Fehler 2, 64, 65 und 133, d. h. der EA sollte deaktiviert werden.

 
Nun, natürlich würde ich sie nicht blockieren. Ich würde den Fehler nach oben schicken und dort entscheiden, was zu tun ist.

Wenn Sie den EA zu diesem Zeitpunkt blockieren, kann es sein, dass der EA noch offene Positionen hat, was eine Katastrophe wäre.