Caratteristiche utili da KimIV - pagina 30

 

Se ti interessa, guarda cosa ho fatto in termini di moda. Vado nell'orto a inzuppare le patate... Sarò lì in serata...

ZS. Ho ricavato il valore che si verifica il massimo numero di volte in una serie di numeri.

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

Se ti interessa, guarda cosa ho fatto in termini di moda. Vado nell'orto a inzuppare le patate... Sarò lì in serata...

ZS. Ho dedotto il valore che ricorre il massimo numero di volte in una serie di numeri.

Certo, interessante, grazie! Faremo dei test.

 
KimIV писал (а) >>

Se ti interessa, guarda cosa ho fatto in termini di moda. Vado nell'orto a inzuppare le patate... Sarò lì in serata...

SZY. Ho dedotto il valore che ricorre nella serie numerica il massimo numero di volte.

Raccomando anche di aggiungere qualcosa come un margine di errore (o un intervallo di colpi) per calcolare la modalità dei numeri reali, che si può regolare e quindi sintonizzare la precisione del campionamento.

2 Idalgo :

Se state facendo analisi statistiche (è quello che mi interessa al momento), volete condividere i vostri pensieri sul suo uso? Sentitevi liberi di creare un thread separato. Sarei felice di sostenere l'argomento.


 
sergeev писал (а) >>
Raccomando anche di introdurre per calcolare la modalità dei numeri reali qualcosa come un errore (o un altro intervallo di colpo), che può essere regolato e quindi regolare la precisione del campionamento.

Formule, disegni, spiegazioni di come e cosa fare... :-) Spero che tu capisca che ci sono diversi modi di fare quello che suggerisci. Descrivi la tua variante.

E per la prima volta c'è un parametro d - la precisione dei valori numerici, il numero di cifre dopo la virgola.

 

Sì, la precisione dei valori d è un'opzione, ma in questo caso abbiamo un numero verificato su un intervallo di 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 precisione dei valori d è un'opzione, ma in questo caso abbiamo un numero verificato sull'intervallo 10^(-d).


Per i numeri float, è meglio usare un valore hardcoded dello spread.

f1 + df > f2 > f1 - df ==> f1 == f2. O usare la normalizzazione.

Il tuo codice ha sicuramente problemi con i numeri vicini allo zero, così come con TUTTI i numeri negativi.

Rivedere il codice.

 

Sì, ho dimenticato un po' il negativo, andavo di fretta.

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

Oppure



// переменная 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);
}
 
Ciao Igor. Sono felice di seguire lo sviluppo del ramo. Ho deciso di esaminare in dettaglio la vostra funzione di impostazione degli ordini, o per essere più precisi, il suo blocco
gestione degli errori:
......
      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);
    }
  }
}

Ho questa domanda.

Perché gestite l'errore 131 (ERR_INVALID_TRADE_VOLUME: volume errato) con una lunga pausa.

È un errore o non capisco qualcosa.

 
ShestkoFF писал (а) >>
Ciao Igor. Ho seguito questo articolo con grande piacere. Ho deciso di esaminare in dettaglio la vostra funzione di impostazione dell'ordine, o per essere più precisi, il suo blocco di errore.
gestione degli errori:

Ho questa domanda.

Perché gestite l'errore 131 (ERR_INVALID_TRADE_VOLUME: volume errato) con una lunga pausa.

È un errore o mi manca qualcosa?

Ciao Vasily! Hai assolutamente ragione! È un mio errore dovuto alla mia distrazione. Grazie per avermelo fatto notare. L'errore 131 dovrebbe essere gestito allo stesso modo degli errori 2, 64, 65 e 133, cioè l'EA dovrebbe essere disabilitato.

 
Beh, non lo bloccherei, ovviamente. Io manderei l'errore in alto e lì deciderei cosa fare.

Se blocchi l'EA a questo punto, potrebbero esserci delle posizioni aperte lasciate dall'EA, il che sarebbe un disastro.