[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 246

 
Vinin >> :

Cada caso tiene su propia solución


Permítanme darles el código del programa para una crítica constructiva del público (por favor, absténganse de hacer una crítica constructiva del propio indicador). Pero primero una descripción. Se trata del TSI (índice de fuerza real). Se basa en el Momentum de 1 día. Estos incrementos se suavizan con la media correspondiente (21 períodos). Ahora añadiremos un escalado. Para ello, toma la diferencia de máximos y mínimos y los suaviza con la misma media exponencial (21 períodos). Dividamos el momento suave por la dispersión suave. Este ratio se suaviza con una media exponencial corta (5 periodos). Obtuvimos la línea principal. Ahora vamos a suavizar la línea principal con una cobertura (EMA(, 5)) y alegrarnos, habiendo obtenido una línea de señal. De hecho, vamos a alegrarnos una vez más, porque tenemos el TSI, un típico indicador de tendencia. En mi implementación tengo 3 topes más para "círculos", que uso para marcar la intersección de las líneas principales y de señal. Señores, veamos el 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);                          
}


Permítanme recordarles el motivo del recurso. Si se tira de un indicador en un gráfico, se saltan unas cuantas velas y se añade otro del mismo tipo, usted y yo obtendremos una divergencia en los valores del indicador. También hay una divergencia muy fuerte cuando este indicador se dibuja durante la prueba visual del EA y más tarde el mismo indicador se añade al gráfico. ¿Podrían ayudarme con artículos o experiencias personales sobre este tipo de errores en el indicador? Gracias.
 
El botón de Stop/Play y el deslizador de velocidad faltan en el probador. ¿Qué hacer?
 
VAM_ >> :
En el probador faltan el botón de parada/reproducción y el deslizador de velocidad. ¿Qué hacer?

Levante el panel de control del probador un poco más alto... usando el botón izquierdo del ratón...

 
Dmido >> :

Buenos días a todos)


Tengo un Asesor Experto. Tengo un Asesor Experto, es capaz de detectar grandes tendencias y tiene una buena ventaja sobre ellas, pero apenas puedo cubrir el deslizamiento en el mercado sin peces.

Mi pregunta es: ¿Cómo escribo la señal para el escalado? La idea es la siguiente: añado cuando hay más de un stop por encima de la primera posición y la tendencia se muestra.


Estoy interesado en la propia unidad que envía una señal para hacer un trato. Estoy usando el código copiado del EA de ejemplo MACD estándar.

¿Cómo corregirlo para realizar una posición larga y luego cerrar simultáneamente las posiciones abiertas y largas?


Pero los acuerdos se multiplican como moscas y el resultado es un puto grial con mil oficios abiertos((((


Alternativa: controlar visualmente el rendimiento del EA en tiempo real y rellenar manualmente, eso es el granito (arte), pero no es un grial...

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

mtmMA - debe haber dos matrices diferentes. al dividirlo, es deseable comprobar la desigualdad a cero.


Para los cálculos intermedios es más conveniente utilizar un buffer.

Si 8 no es suficiente, una de las soluciones es aquí.

 
Swan >> :

mtmMA - debe haber dos matrices diferentes. al dividirlo, es deseable comprobar la desigualdad a cero.


Para los cálculos intermedios es más conveniente utilizar un buffer.

Si 8 piezas no son suficientes, una de las soluciones está aquí.






Gracias por su comentario. Obsérvese que estamos hablando de la media de la diferencia alta - baja. Siempre es positivo. Y la media refuerza esa tendencia. Quería comprobarlo, pero luego creo que veré en el cuaderno de bitácora si hay algo. ¿Crees que un error de división por cero podría causar una divergencia de los gráficos añadidos a diferentes intervalos.
 
IlyaA >> :


Gracias por el comentario. Tenga en cuenta que estamos hablando de la media de la diferencia alta - baja. Siempre es positivo. Y la media refuerza esa tendencia. Quería comprobarlo, pero luego creo que veré en el cuaderno de bitácora si hay algo. ¿Crees que un error de división por cero podría causar una divergencia de los gráficos añadidos a diferentes intervalos.

pero es aconsejable comprobarlo)

la discrepancia se debe al uso de matrices sin desplazamientos.

 
IlyaA писал(а) >>

Permítanme dar el código del programa para la crítica constructiva del público (por favor, absténgase de la crítica constructiva del propio indicador). Pero primero una descripción. Se trata del TSI (índice de fuerza real). Se basa en el Momentum de 1 día. Estos incrementos se suavizan con la media correspondiente (21 períodos). Ahora vamos a añadir un escalado. Para ello, toma la diferencia de máximos y mínimos y los suaviza con la misma media exponencial (21 períodos). Dividamos el impulso suave por la dispersión suave. Este ratio se suaviza con una media exponencial corta (5 periodos). Obtuvimos la línea principal. Ahora vamos a suavizar la línea principal con una cobertura (EMA(, 5)) y alegrarnos, habiendo obtenido una línea de señal. De hecho, vamos a alegrarnos una vez más, porque tenemos el TSI, un típico indicador de tendencia. En mi implementación tengo 3 topes más para "círculos", que uso para marcar la intersección de las líneas principales y de señal. Señores, por favor envíenme el código:

Permítanme recordarles el motivo de la dirección. Si se tira del indicador en el gráfico, se saltan algunas velas y se añade otro igual, obtendremos una divergencia en los valores del indicador. También hay una divergencia muy fuerte cuando este indicador se dibuja durante la prueba visual del EA y más tarde el mismo indicador se añade al gráfico. ¿Podrían ayudarme con artículos o experiencias personales sobre este tipo de errores en el indicador? Gracias.

El indicador está bien. Si se llama a iMAOnArray() en un bucle separado, se puede conseguir un funcionamiento correcto del indicador independientemente de su tiempo de ajuste.

Tienes que dividir tu bucle en tres bucles.

iMAOnArray() funcionará más correctamente.

 
Swan >> :

pero es aconsejable comprobarlo)

La discrepancia se debe a la utilización de matrices sin desplazamiento.

No entiendo muy bien lo que significa sin turno. ¿Podría añadir palabras, por favor?

 
IlyaA >> :

No entiendo muy bien lo que significa sin turno. Añade palabras, por favor.

La matriz del buffer se desplaza cuando aparece una nueva barra. los índices se incrementan en 1. lo normal no es.

el enlace anterior lo describe con más detalle.