[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 246

 
Vinin >> :

Cada caso tem sua própria solução


Deixe-me dar-lhes o código do programa para críticas construtivas ao público (por favor, abstenham-se de críticas construtivas ao próprio indicador). Mas primeiro uma descrição. Este é o TSI (true force index). É baseado no Momentum de 1 dia. Estes incrementos são suavizados pela média correspondente (21 períodos). Agora vamos acrescentar uma escalada. Para fazer isso, pegue a diferença de alto - baixo e suavize com a mesma média exponencial (21 períodos). Dividamos a dinâmica suave pela distribuição suave. Esta relação é suavizada por uma média exponencial curta (5 períodos). Obtivemos a linha principal. Agora vamos suavizar a linha principal com uma sebe (EMA(, 5)) e nos regozijar, tendo obtido uma linha de sinal. Na verdade, vamos nos regozijar mais uma vez, porque temos TSI - um típico indicador de tendência. Em minha implementação tenho mais 3 buffers para "círculos", que utilizo para marcar a intersecção das linhas principais e de sinal. Cavalheiros, vamos ver o código:

//--------------------------------------------------------------------
// TSI.mq4 
// Предназначен для использования в качестве трендового индикатора
//--------------------------------------------------------------------

#property indicator_separate_window         // indicator_chart_window, indicator_separate_window
#property indicator_buffers     3           // Количество буферов
#property indicator_color1      Red         // Цвет первой линии Red Blue Lime 
#property indicator_color2      Blue        // Цвет второй линии
#property indicator_color3      Yellow
#property indicator_level1      -20
#property indicator_level2       20
//#property indicator_minimum   -100
//#property indicator_maximum    100
 
extern int LengthMtm            = 21;
extern int LengthSmooth         = 5;
extern int LengthErgodic        = 5;
extern int HistoryLimit         = 2000;

double tsi[], ergodic[], cross[];           // Объявление массивов (под буферы индикатора)
double mtm[], base[], mtmMA[], mtmS[];


//-----------------------------------------------------------------------------
int MathSgn(double Value = 0.0)
{
    if ( Value < 0) return(-1); else return( 1);
}

//-----------------------------------------------------------------------------
int init()                         
{
    SetIndexBuffer(0, tsi);                                 // Назначение массива буферу
    SetIndexBuffer(1, ergodic);                             // Назначение массива буферу
    SetIndexBuffer(2, cross);                               // Назначение массива буферу
    
    SetIndexStyle (0, DRAW_LINE,        STYLE_SOLID, 1);    // Стиль линии DRAW_HISTOGRAM STYLE_SOLID
    SetIndexStyle (1, DRAW_LINE,        STYLE_SOLID, 1);    // Стиль линии        
    SetIndexStyle (2, DRAW_ARROW,       STYLE_SOLID, 0);    // Стиль линии
    SetIndexArrow (2, 161);
    
    SetIndexLabel(0, "TSI");
    SetIndexLabel(1, "Ergodic");
    SetIndexLabel(2, "Cross");
    IndicatorShortName("TSI("+ LengthMtm+","+ LengthSmooth+","+ LengthErgodic+")");    
    
    ArrayResize(        mtm,        Bars);
    ArrayResize(        base,       Bars);
    ArrayResize(        mtmMA,      Bars);
    ArrayResize(        mtmS,       Bars);

    ArraySetAsSeries(   mtm,        true);
    ArraySetAsSeries(   base,       true);
    ArraySetAsSeries(   mtmMA,      true); 
    ArraySetAsSeries(   mtmS,       true);


    return(0);                                      
}

//-----------------------------------------------------------------------------
int start()                         
{    
    if ( HistoryLimit == 0) HistoryLimit = Bars;
    
    int Counted_bars            = IndicatorCounted();
    int i                       = MathMin(Bars - Counted_bars - 1, HistoryLimit); 
    while( i >= 0 ) {        
     
        mtm[ i]                  = Close[ i] - Close[ i+1];
        base[ i]                 = High[ i]  - Low[ i];
        mtmMA[ i]                = iMAOnArray( mtm,   0, LengthMtm,     0, MODE_EMA, i) * 100;
        mtmMA[ i]               /= iMAOnArray( base,  0, LengthMtm,     0, MODE_EMA, i);
        mtmS[ i]                 = iMAOnArray( mtmMA, 0, LengthSmooth,  0, MODE_EMA, i);
        tsi[ i]                  = mtmS[ i];
        ergodic[ i]              = iMAOnArray( mtmS,  0, LengthErgodic, 0, MODE_EMA, i); 
        
        if ( MathSgn( tsi[ i+1] - ergodic[ i+1]) != MathSgn( tsi[ i] - ergodic[ i]) )       
            cross[ i]           = ergodic[ i];
        else
            cross[ i]           = EMPTY_VALUE;
        
        i--;                       
    }
    
    return(0);                          
}


Deixe-me lembrá-lo do motivo do apelo. Se você puxar um indicador em um gráfico, pular algumas velas e adicionar outra do mesmo tipo, você e eu teremos uma divergência nos valores dos indicadores. Há também uma divergência muito forte quando este indicador é desenhado durante os testes visuais da EA e mais tarde o mesmo indicador é adicionado ao gráfico. Você poderia me ajudar com artigos ou experiência pessoal sobre este tipo de erro no indicador? Obrigado.
 
O botão Stop/Play e o controle deslizante de velocidade estão faltando no testador. O que fazer?
 
VAM_ >> :
O botão Stop/Play e o controle deslizante de velocidade estão faltando no testador. O que fazer?

Eleve o painel de controle do testador um pouco mais alto... usando o botão esquerdo do mouse...

 
Dmido >> :

Bom dia para todos)


Eu tenho um consultor especializado. Tenho um Expert Advisor, ele é capaz de detectar grandes tendências e tem uma boa vantagem sobre elas, mas mal cobre o deslize em um mercado sem peixes, sem adições.

Minha pergunta é: Como faço para escrever o sinal de escalada? A idéia é esta - estou acrescentando quando há mais do que uma parada acima da primeira posição e a tendência está se mostrando.


Estou interessado na própria unidade que envia um sinal para fazer um acordo. Estou usando o código copiado da amostra padrão MACD EA.

Como corrigi-lo, por exemplo, para abrir posições longas e depois fechar ambas as posições abertas e longas de uma só vez?


Mas os negócios se multiplicam como moscas e o resultado é a merda de um graal com mil negócios abertos((((


Alternativamente: monitorar visualmente o desempenho da EA em tempo real e recarregar manualmente, isso é o que o granito é (arte), mas não um graal...

 
IlyaA >> :
        mtmMA[ i]                = iMAOnArray( mtm,   0, LengthMtm,     0, MODE_EMA, i) * 100;
        mtmMA[ i]               /= iMAOnArray( base,  0, LengthMtm,     0, MODE_EMA, i);

mtmMA - deve haver duas matrizes diferentes. ao dividi-lo, é desejável verificar se a desigualdade é zero.


Para cálculos intermediários, é mais conveniente utilizar um buffer.

Se 8 não for suficiente, uma das soluções é aqui.

 
Swan >> :

mtmMA - deve haver duas matrizes diferentes. ao dividi-lo, é desejável verificar se a desigualdade é zero.


Para cálculos intermediários, é mais conveniente utilizar um buffer.

Se 8 peças não são suficientes, uma das soluções está aqui.






Obrigado por seu comentário. Note que estamos falando da média da diferença alta - baixa. É sempre positivo. E a média reforça essa tendência. Eu queria verificar, mas depois acho que vou ver no diário de bordo se houver alguma coisa. Você acha que um erro de divisão por zero poderia causar uma divergência de gráficos adicionados em intervalos diferentes.
 
IlyaA >> :


Obrigado pelo comentário. Note que estamos falando da média da diferença alta - baixa. É sempre positivo. E a média reforça essa tendência. Eu queria verificar, mas depois acho que vou ver no diário de bordo se houver alguma coisa. Você acha que um erro de divisão por zero poderia causar uma divergência de gráficos adicionados em intervalos diferentes.

mas é aconselhável verificar)

a discrepância é devida ao uso de matrizes sem turnos.

 
IlyaA писал(а) >>

Deixe-me dar o código do programa para críticas construtivas do público (por favor, abstenha-se de críticas construtivas ao próprio indicador). Mas primeiro uma descrição. Este é o TSI (true force index). É baseado no Momentum de 1 dia. Estes incrementos são suavizados pela média correspondente (21 períodos). Agora vamos acrescentar uma escalada. Para fazer isso, pegue a diferença de alto - baixo e suavize com a mesma média exponencial (21 períodos). Dividamos a dinâmica suave pela distribuição suave. Esta relação é suavizada por uma média exponencial curta (5 períodos). Obtivemos a linha principal. Agora vamos suavizar a linha principal com uma sebe (EMA(, 5)) e nos regozijar, tendo obtido uma linha de sinal. Na verdade, vamos nos regozijar mais uma vez, porque temos o TSI - um indicador de tendência típico. Em minha implementação tenho mais 3 buffers para "círculos", que utilizo para marcar a intersecção das linhas principais e de sinal. Cavalheiros, por favor, enviem-me o código:

Deixe-me lembrar-lhe o motivo do endereço. Se você puxar o indicador na tabela, pular algumas velas e adicionar outra igual, teremos uma divergência nos valores do indicador. Há também uma divergência muito forte quando este indicador é desenhado durante os testes visuais da EA e mais tarde o mesmo indicador é adicionado ao gráfico. Você poderia me ajudar com artigos ou experiência pessoal sobre este tipo de erro no indicador? Obrigado.

O indicador está bem. Se iMAOnArray() for chamado em um loop separado, você pode conseguir o funcionamento correto do indicador, independentemente do tempo de ajuste.

Você precisa quebrar seu loop único em três loops.

iMAOnArray() vai funcionar mais corretamente.

 
Swan >> :

mas é aconselhável verificar)

A discrepância se deve ao uso de matrizes sem um turno.

Eu realmente não entendo o que significa sem um turno. Você poderia acrescentar palavras, por favor?

 
IlyaA >> :

Eu realmente não entendo o que significa sem um turno. Acrescente palavras, por favor.

A matriz tampão é deslocada quando uma nova barra aparece. índices são incrementados em 1. normal não é.

o link acima descreve-o com mais detalhes.