[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 246

 
Vinin >> :

Chaque cas a sa propre solution


Je vous donne le code du programme pour une critique constructive du public (veuillez vous abstenir de toute critique constructive de l'indicateur lui-même). Mais d'abord une description. C'est le TSI (true force index). Il est basé sur le Momentum 1 jour. Ces incréments sont lissés par la moyenne correspondante (21 périodes). Maintenant, ajoutons une échelle. Pour ce faire, prenez la différence entre le haut et le bas et lissez-les avec la même moyenne exponentielle (21 périodes). Divisons l'élan lisse par l'écart lisse. Ce ratio est lissé par une moyenne exponentielle courte (5 périodes). Nous avons obtenu la ligne principale. Maintenant, lissons la ligne principale avec une couverture (EMA(, 5)) et réjouissons-nous, ayant obtenu une ligne de signal. En fait, réjouissons-nous encore une fois, car nous avons le TSI - un indicateur de tendance typique. Dans mon implémentation, j'ai 3 tampons supplémentaires pour les "cercles", que j'utilise pour marquer l'intersection de la ligne principale et de la ligne de signalisation. Messieurs, voyons le code :

//--------------------------------------------------------------------
// 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);                          
}


Permettez-moi de vous rappeler la raison de cet appel. Si vous tirez un indicateur sur un graphique, sautez quelques bougies et ajoutez un autre indicateur du même type, vous et moi obtiendrons une divergence dans les valeurs de l'indicateur. Il y a également une très forte divergence lorsque cet indicateur est dessiné pendant le test visuel de l'EA et plus tard le même indicateur est ajouté au graphique. Pourriez-vous m'aider avec des articles ou une expérience personnelle sur ce type d'erreur dans l'indicateur ? Merci.
 
Le bouton Stop/Play et le curseur de vitesse sont absents du testeur. Que faire ?
 
VAM_ >> :
Le bouton Stop/Play et le curseur de vitesse sont absents du testeur. Que faire ?

Levez le panneau de contrôle du testeur un peu plus haut... en utilisant le bouton gauche de la souris...

 
Dmido >> :

Bonne journée à tous)


J'ai un conseiller expert. J'ai un conseiller expert, il est capable de détecter les grandes tendances et a un bon avantage sur elles, mais il couvre à peine le slippage sur un marché sans poissons sans ajouts.

Ma question est la suivante : comment écrire le signal pour la mise à l'échelle ? L'idée est la suivante : j'ajoute quand il y a plus d'un stop au-dessus de la première position et que la tendance se dessine.


Je m'intéresse à l'unité elle-même qui envoie un signal pour conclure un marché. J'utilise le code copié du MACD Sample EA standard.

Comment corriger, par exemple, l'ouverture d'une position longue, puis la fermeture des deux positions ouvertes et longues en même temps ?


Mais les affaires se multiplient comme des mouches et le résultat est un putain de graal avec un millier de métiers ouverts((((.


Alternative : surveiller visuellement les performances de l'EA en temps réel et recharger manuellement, c'est ce qu'est le granit (art), mais pas un graal...

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

mtmMA - il devrait y avoir deux tableaux différents. lors de la division, il est souhaitable de vérifier l'inégalité par rapport à zéro.


Pour les calculs intermédiaires, il est plus pratique d'utiliser un tampon.

Si 8 ne suffit pas, une des solutions est ici.

 
Swan >> :

mtmMA - il devrait y avoir deux tableaux différents. lors de la division, il est souhaitable de vérifier l'inégalité par rapport à zéro.


Pour les calculs intermédiaires, il est plus pratique d'utiliser un tampon.

Si 8 pièces ne suffisent pas, voici une des solutions.






Merci pour votre commentaire. Remarquez que nous parlons de la moyenne de la différence entre le haut et le bas. C'est toujours positif. Et la moyenne renforce cette tendance. Je voulais vérifier, mais ensuite je pense que je verrai dans le journal de bord s'il y a quelque chose. Pensez-vous qu'une erreur de division par zéro pourrait provoquer une divergence des graphiques ajoutés à des intervalles différents.
 
IlyaA >> :


Merci pour le commentaire. Notez que nous parlons de la moyenne de la différence entre le haut et le bas. C'est toujours positif. Et la moyenne renforce cette tendance. Je voulais vérifier, mais ensuite je pense que je verrai dans le journal de bord s'il y a quelque chose. Pensez-vous qu'une erreur de division par zéro pourrait provoquer une divergence des graphiques ajoutés à des intervalles différents.

mais il est conseillé de vérifier)

l'écart est dû à l'utilisation de tableaux sans décalage.

 
IlyaA писал(а) >>

Permettez-moi de donner le code du programme pour une critique constructive du public (veuillez vous abstenir de toute critique constructive de l'indicateur lui-même). Mais d'abord une description. C'est le TSI (true force index). Il est basé sur le Momentum 1 jour. Ces incréments sont lissés par la moyenne correspondante (21 périodes). Maintenant, ajoutons une échelle. Pour ce faire, prenez la différence entre le haut et le bas et lissez-les avec la même moyenne exponentielle (21 périodes). Divisons l'élan lisse par l'écart lisse. Ce ratio est lissé par une moyenne exponentielle courte (5 périodes). Nous avons obtenu la ligne principale. Maintenant, lissons la ligne principale avec une couverture (EMA(, 5)) et réjouissons-nous, ayant obtenu une ligne de signal. En fait, réjouissons-nous encore une fois, car nous avons le TSI - un indicateur de tendance typique. Dans mon implémentation, j'ai 3 tampons supplémentaires pour les "cercles", que j'utilise pour marquer le croisement de la ligne principale et de la ligne de signalisation. Messieurs, envoyez-moi le code, s'il vous plaît :

Laissez-moi vous rappeler la raison de l'adresse. Si vous tirez l'indicateur sur le graphique, sautez quelques bougies et ajoutez un autre indicateur similaire, nous obtiendrons une divergence dans les valeurs de l'indicateur. Il y a également une très forte divergence lorsque cet indicateur est dessiné pendant le test visuel de l'EA et plus tard le même indicateur est ajouté au graphique. Pourriez-vous m'aider avec des articles ou une expérience personnelle sur ce type d'erreur dans l'indicateur ? Merci.

L'indicateur est bon. Si iMAOnArray() est appelé dans une boucle séparée, vous pouvez obtenir un fonctionnement correct de l'indicateur indépendamment de son temps de réglage.

Vous devez diviser votre boucle unique en trois boucles.

iMAOnArray() fonctionnera plus correctement.

 
Swan >> :

mais il est conseillé de vérifier)

L'écart est dû à l'utilisation de tableaux sans décalage.

Je ne comprends pas vraiment ce que cela signifie sans un changement. Pouvez-vous ajouter des mots, s'il vous plaît ?

 
IlyaA >> :

Je ne comprends pas vraiment ce que cela signifie sans un changement. Ajoutez des mots, s'il vous plaît.

Le tableau tampon est décalé lorsqu'une nouvelle barre apparaît. les index sont incrémentés de 1. normal ne l'est pas.

le lien ci-dessus le décrit plus en détail.

Raison: