Características úteis da KimIV - página 30

 

Se você estiver interessado, confira o que tenho feito em termos de moda. Vou para o jardim mergulhar batatas... Estarei lá à noite...

ZS. Eu derivei o valor que ocorre o número máximo de vezes em uma série numérica.

Arquivos anexados:
 
KimIV писал (а) >>

Se você estiver interessado, confira o que tenho feito em termos de moda. Vou para o jardim mergulhar batatas... Estarei lá à noite...

ZS. Eu deduzi o valor que ocorre o número máximo de vezes em uma série numérica.

É claro, interessante, obrigado! Estaremos testando.

 
KimIV писал (а) >>

Se você estiver interessado, confira o que tenho feito em termos de moda. Vou para o jardim mergulhar batatas... Estarei lá à noite...

SZY. Eu deduzi o valor que ocorre na série numérica o número máximo de vezes.

Também recomendo que você acrescente algo como uma margem de erro (ou intervalo de acerto) para calcular o modo dos números reais, que você pode ajustar e assim afinar a precisão da amostragem.

2 Idalgo :

Se você está fazendo análise estatística (é isso que me interessa no momento), você gostaria de compartilhar suas idéias sobre seu uso? Esteja à vontade para criar uma linha separada. Eu ficaria feliz em apoiar o tópico.


 
sergeev писал (а) >>
Também recomendo introduzir para calcular o modo de números reais algo como um erro (ou outro intervalo de acerto), que pode ser ajustado e assim ajustar a precisão da amostragem.

Fórmulas, desenhos, explicações de como e o que fazer... :-) Espero que você entenda que há várias maneiras de fazer o que você sugere. Descreva sua variante.

E pela primeira vez há um parâmetro d - a precisão dos valores numéricos, o número de dígitos após o ponto decimal.

 

Sim, a precisão dos valores d é uma opção, mas neste caso temos um número verificado em um 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 писал (а) >>

Sim, a precisão dos valores d é uma opção, mas neste caso temos um número verificado no intervalo 10^(-d).


Para números de flutuação, é melhor usar um valor de código rígido do spread.

f1 + df > f2 > f1 - df ==> f1 == f2. Ou utilizar a normalização.

Seu código definitivamente tem problemas com números próximos a zero, assim como TODOS os números negativos.

Revisar o código.

 

Sim, esqueci um pouco do negativo, eu estava com pressa.

// переменная 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);
}
 
Olá Igor. Tenho o prazer de acompanhar o desenvolvimento do ramo. Decidi analisar em detalhes sua função de configuração de pedidos, ou, para ser mais preciso, seu bloco
manipulação de erros:
......
      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);
    }
  }
}

Eu tenho esta pergunta.

Por que você lida com o erro 131 (ERR_INVALID_TRADE_VOLUME: Volume incorreto) com uma longa pausa.

É um erro ou eu não entendo alguma coisa.

 
ShestkoFF писал (а) >>
Olá Igor. Tenho acompanhado este artigo com grande prazer. Decidi examinar em detalhes sua função de estabelecimento do pedido, ou, para ser mais preciso, seu bloqueio de erro.
manipulação de erros:

Eu tenho esta pergunta.

Por que você lida com o erro 131 (ERR_INVALID_TRADE_VOLUME: Volume incorreto) com uma longa pausa.

É um erro ou estou perdendo algo?

Olá Vasily! Você está absolutamente certo! É um erro meu, devido à minha ausência de espírito. Obrigado por me apontar isso. O erro 131 deve ser tratado da mesma forma que os erros 2, 64, 65 e 133, ou seja, a EA deve ser desativada.

 
Bem, eu não o bloquearia, é claro. Eu enviaria o erro para o topo e decidiria o que fazer a respeito lá.

Se você bloquear a EA neste ponto, pode haver posições em aberto deixadas pela EA, o que seria um desastre.