Impulsion - page 32

 
Artyom Trishkin:
Là, j'ai pensé : probablement que votre désir de tout simplifier, de réduire à MA, et de faire vite, et conduit à des conclusions hâtives - "ça ne marchera pas". Je vous l'ai dit - comptez d'abord la différence entre les tiques voisines. Nous remplissons le tableau avec des différences de prix, pas des prix. Mais nous regardons au passage pour MA. Correction.

Chérie, j'ai réparé ce truc depuis longtemps maintenant. Je vous demande de vous assurer que vous n'aurez pas un indicateur sans valeur ici.

Maintenant, à propos de ce que vous avez obtenu à la fin :

- le calcul de la vitesse moyenne.

Même si vous n'avez pas obtenu une maîtrise en prix, vous avez obtenu une maîtrise en vitesse. Quelle différence cela fait-il ?

Si vous ne savez pas ce qu'est le bug de la moyenne, alors regardez bien :

(5+1)/2=3 //chute

(1+5)/2=3 //augmente

OK, pense par toi-même, mathématicien...

 
new-rena:

Chérie, j'ai réparé ce truc depuis longtemps maintenant. Je vous donne des instructions pour que vous n'ayez pas un indicateur sans valeur ici.

Maintenant, à propos de ce que vous avez obtenu à la fin :

- le calcul de la vitesse moyenne.

Même si vous n'avez pas obtenu une maîtrise en prix, vous avez obtenu une maîtrise en vitesse. Quelle différence cela fait-il ?

Si vous ne savez pas ce qu'est le bug de la moyenne, alors regardez bien :

(5+1)/2=3

(1+5)/2=3 //augmente

Eh bien, pense par toi-même, mathématicien...

C'est un peu une mise en bouche, mon pote. Être impoli ne donne pas une bonne image des gens.

Maintenant, dites-moi ce qu'il y a dans vos formules pour quoi, mentor ...

ZS. Je comprends votre agressivité - quelqu'un ne vous a pas donné ses calculs, et vous-même ne comprenez pas, en comptant tout dans le monde MAK, mathématicien .... Mais vous n'avez pas besoin de vous en prendre aux gens à cause de ça - vous avez l'air stupide.

 
Artyom Trishkin:

C'est un peu exagéré, mon pote. Être grossier ne donne pas une bonne image des gens.

Maintenant, dites-moi ce qu'il y a dans vos formules pour quoi, mentor...

ZS. Je comprends votre agression - quelqu'un ne vous a pas donné ses calculs, et vous ne comprenez pas, considérant tout dans le monde comme mashki, mathématicien ... Vous ne devez pas craquer sur les gens à cause de ça - vous avez l'air stupide.

L'impolitesse était mutuelle. Et le fait que quelqu'un n'ait pas donné quelque chose, cela n'affecte pas la création de ce qui se passe ici. Là où je l'ai demandé, je l'ai déjà expliqué et cette personne fait de la publicité sur tous les forums, pas seulement ici. Les gens écrivent qu'il en a marre.

Venons-en au fait.

J'ai donné le lien hier et c'est presque la partie principale de l'indicateur, son zeste, pour ainsi dire.

C'est-à-dire que le nombre de ticks et la direction du mouvement du prix sont déterminés pour le même intervalle de temps et sur cette base, un signal de trading est obtenu. Qu'est-ce qui n'est pas clair ici ?

L'essentiel est de ne pas faire la moyenne.

Ainsi, par la quantité de ticks, nous jugeons de la volatilité, et par la somme des deltas pour le même intervalle de temps (comme vous l'avez correctement écrit ci-dessus, le delta est la différence de prix entre des ticks successifs), nous jugeons de la direction du mouvement des prix, c'est-à-dire de la tendance. Et le delta peut être soit négatif, soit positif. Nous additionnons ce que nous avons.

En fait, pour calculer cet indicateur et pour qu'il fonctionne, nous n'avons besoin que du nombre N de derniers ticks. Inscrire des tics dans l'historique n'est pas vraiment nécessaire, sauf pour les tests.

Les analogues existants de cet indicateur sont conçus comme un indicateur de vitesse.

 
new-rena:

A propos de l'impolitesse - c'était mutuel. Et le fait que quelqu'un n'ait pas donné quelque chose, cela n'a aucun effet sur la création de ce qui se passe ici. Là où je l'ai demandé, j'ai déjà tout expliqué et cet homme fait de la publicité sur tous les forums, pas seulement ici. Les gens écrivent qu'il en a marre.

Venons-en au fait.

J'ai posté le lien ici hier, il s'agit donc pratiquement de la partie principale de l'indicateur, son point fort, pour ainsi dire.

C'est-à-dire que le nombre de ticks et la direction du mouvement du prix sont déterminés pour le même intervalle de temps et sur cette base un signal de trading est obtenu. Qu'est-ce qui n'est pas clair ici ?

L'essentiel est de ne pas faire la moyenne.

Ainsi, par la quantité de ticks, nous jugeons de la volatilité, et par la somme des deltas pour le même intervalle de temps (comme vous l'avez correctement écrit ci-dessus, le delta est la différence de prix entre des ticks successifs), nous jugeons de la direction du mouvement des prix, c'est-à-dire de la tendance. Et le delta peut être soit négatif, soit positif. Nous additionnons ce que nous avons.

En fait, pour calculer cet indicateur et pour qu'il fonctionne, nous n'avons besoin que du nombre N de derniers ticks. Inscrire des tics dans l'historique n'est pas vraiment nécessaire, sauf pour les tests.

Les analogues existants d'un tel indicateur se présentent sous la forme d'un indicateur de vitesse.

Est-ce ce lien ? https://www.mql5.com/ru/forum/61389/page30#comment_1776762

ZS. A propos de l'impolitesse réciproque - c'est vous pour rien. Je n'ai pas été impoli avec vous en premier.

Импульс
Импульс
  • www.mql5.com
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий. - Страница 30 - Категория: автоматические торговые системы
 
Artyom Trishkin:

Est-ce le lien ? https://www.mql5.com/ru/forum/61389/page30#comment_1776762

ZS. Vous vous trompez sur l'impolitesse mutuelle. Je n'ai pas été grossier avec toi en premier.

Oui, mais c'est en 4-pièces. D'après ce que j'ai compris, on fait dans le 5.
 
Karputov Vladimir:

La base de l'enregistrement des tics est là.


Format du nom de fichier :

Il y a quatre colonnes dans le fichier :


Reste à savoir à quelle fréquence il faut lancer de nouveaux dossiers. Je pense que toutes les heures vous devriez commencer chaque fichier. Il sera plus facile à analyser.

ajouter High,Low (ou compter immédiatement les changements de prix) - quand un tick est manqué (pour des raisons techniques) ils changent... c'est-à-dire qu'une situation est possible quand à l'intérieur de M1 le Bid a baissé, et le High a augmenté.

Je pense que cela se produit pendant les impulsions et lorsque le terminal/ordinateur travaille sur autre chose :-)

 
Karputov Vladimir:

Il y a eu un enregistrement de 600 tics. Ce record (100 chacun) était réparti sur six tableaux. Les graphiques montrent le prix et le taux de changement de tick (EMA10). En somme, il y a une raison d'étudier ces chiffres :







vous cherchez un peu, c'est à dire pas du tout..sur les graphiques vous avez une sorte de fonction d'erreur de différenciation. C'est-à-dire que vous lisez d'abord la vitesse comme une dérivée (dx/dt), puis vous l'intégrez (par une méthode différente) et la comparez à l'original.

indice : toute MA est une fonction intégrale de facto

Conseil 2 : pour voir si vous évoluez dans la bonne direction, prenez une SMA simple et déplacez-la d'une demi-période en arrière. Si vous voyez quelque chose d'utile dans l'historique, cela signifie que la vitesse et l'élan sont comptés pour une raison et que vous pouvez creuser davantage.

 
new-rena:
Oui, mais c'est écrit en 4-pc. D'après ce que j'ai compris, on fait dans le 5.

Le choix de la plate-forme est indifférent. J'ai demandé à Roman là-bas, et je lui ai écrit des codes en privé, mais je n'ai pas réussi à comprendre pourquoi il fixe la taille du tableau à deux millions dans init(), puis redimensionne le tableau à zéro dans start(), puis essaie de le remplir avec l'index -1 ( !!!), et seulement après cela augmente la variable SIZE de 1, qui devrait indexer le tableau. Comparez, c'est ce que j'ai suggéré :

//+------------------------------------------------------------------+
//|                                                   FillArrays.mq4 |
//|              Copyright 2015, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//|   Input variables                                                |
//+------------------------------------------------------------------+
input int NumberOfStorableTicks=20;       // Количество сохраняемых тиков
int numberOfStorableTicks; // Количество сохраняемых тиков
input int PeriodOfMA=5;                   // Период сглаживания
int periodOfMA; // Период сглаживания
input ENUM_MA_METHOD MaMethod=MODE_SMA;   // Метод усреднения МА

//+------------------------------------------------------------------+
//|   Global variables                                               |
//+------------------------------------------------------------------+
string symbol;    // Symbol()
int digits;       // Digits
//+------------------------------------------------------------------+
//|   Arrays                                                         |
//+------------------------------------------------------------------+
double      Mass_ticks[];
double      Mass_smoothed_values[];
//+------------------------------------------------------------------+
//|   Structures                                                     |
//+------------------------------------------------------------------+
   MqlTick struct_tick;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   symbol=Symbol();
   digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
   //---
   numberOfStorableTicks=(NumberOfStorableTicks<1)?1:NumberOfStorableTicks;
   periodOfMA=(PeriodOfMA<1)?1:PeriodOfMA;
   //---
   ArrayResize(Mass_ticks,numberOfStorableTicks);
   ArrayInitialize(Mass_ticks,0.0);
   ArrayResize(Mass_smoothed_values,numberOfStorableTicks);
   ArrayInitialize(Mass_smoothed_values,0.0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   Comment("");
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(SymbolInfoTick(symbol,struct_tick)) {
      double tick_bid=struct_tick.bid;
      FillArrays(numberOfStorableTicks,tick_bid,Mass_ticks);
      }
   string txt="";
   for(int i=numberOfStorableTicks-1; i>=0; i--) {
      string itxt=IntegerToString(i);
      txt+="\nmass["+itxt+"]: "+DoubleToString(Mass_ticks[i],digits);
      }
   Comment(txt);
  }
//+------------------------------------------------------------------+
void FillArrays(int array_size, double price, double &mass_price[]) {
   //--- сместим данные в массиве влево
   for(int i=array_size-1; i>0; i--) {
      mass_price[i]=mass_price[i-1];
      }
   //--- запишем новый тик в массив
   mass_price[0]=price;
}
//+------------------------------------------------------------------+
void SmoothingDataArray(int array_size, int ma_period, int ma_shift, ENUM_MA_METHOD ma_method, double &mass_price[], double &mass_smoothing[]) {
   for(int i=array_size-1; i>=0; i--) {
      mass_smoothing[i]=iMAOnArray(mass_price,array_size,ma_period,ma_shift,ma_method,i);
      }
   }
//+------------------------------------------------------------------+

Cependant, iMAOnArray() refuse de le lisser. Peu importe à quel point c'est tordu, c'est à l'envers et à l'endroit. Mais ce n'est pas nécessaire pour le but recherché ici. Je suppose...

Oui, j'ai oublié. C'est ce que Roman a suggéré :

//---------------------
extern int MaxDrawTicks=100;
extern int Num_Aver_of_Ticks=5;  
double     xBuffer_Time []; // Массив значений   динамический
                            // В котором индекс - номер тика, значение - это бид 
int SIZE=0;                 // Вспомогательная переменная для массива                                  
int tickCounter, tickCounter_Current; 
//+------------------------------------------------------------------+
int init()
  {   
//--- устанавливаем размер динамического массива
   if(ArrayResize(xBuffer_Time,2000000)<0) {Alert(" Ошибка в изменении размера массива времени поступления тиков "); return(false);}
//--- установим индексацию для буфера как в таймсерии для динамического массива
  // ArraySetAsSeries(xBuffer_Time,true);    
//---   Возвращает количество элементов указанного массива. 
   int S=ArraySize(xBuffer_Time);
   if (S>=0) Alert("Размер массива: ",S);
   else Print("Ошибка. Массив не создан ",S);        
   ArrayInitialize(xBuffer_Time, 0);
   return(0);
  }  
//+------------------------------------------------------------------+
int start()
  {  
   //ArrayResize(ValueArr,size);
   //ValueArr[size-1] = GetValue();
   //size++; 
 //----------------------------------------  
   ArrayResize(xBuffer_Time,SIZE);
   xBuffer_Time[SIZE-1] = Bid; //NormalizeDouble((iTime (_Symbol,1,0)-_start), 2); 
  
   if ( SIZE >= 0 && ArraySize(xBuffer_Time) < 2147483647)
      {
      Alert (" Значение xBuffer_Time[SIZE-1] = ", DoubleToStr(xBuffer_Time[SIZE-1],Digits) );
      Alert (" Значение SIZE = ", DoubleToStr(SIZE,2) );  
      } 
    SIZE ++;   
 //---------------------------------------      
//------------
   return(0);
  }
 
Artyom Trishkin:

Je vais essayer un tableau :

tique 10
tique 9
tique 8
tique 7
tique 6
tique 5
tique 4
tique 3 tique 2
tique 1 tique 0
Future tique
X10
X9
X8
X7
X6
X5
X4
X3
X2
X1X0
XN0
X9X8
X7X6X5
X4X3
X2
X1
X0XN0
XN1

x0, x1, x2 définissent l'état actuel (rose), les autres définissent l'état passé (vert clair). Les données du tableau se déplacent constamment, et le nouveau xn0 prend la place du zéro. Donc maintenant l'état actuel sera compté à partir de x1, x0, xn0, et le tick x2 de la dernière fois est décalé vers les cellules définissant l'état précédent, faisant une petite correction pour cet état. Si nous comptons tout ensemble, alors les trois premiers ticks seront corrigés, ce qui me semble assez grossier.

Il y a quelque chose à cela. Voici une capture d'écran du graphique en tic-tac :

Capture d'écran d'un graphique en tic-tac

Notez la zone délimitée par les grandes flèches.

Et voici le traitement de la condition lorsque l'incrément moyen des ticks (tick0, tick1, tick2) est supérieur à l'incrément moyen (tick3, tick4, tick5, tick6, tick7, tick8, tick9, tick10) et que l'incrément est supérieur à zéro :

Traitement de la condition

 
Artyom Trishkin:

Le choix de la plate-forme est indifférent. J'ai demandé à Roman là-bas, et je lui ai écrit des codes en privé, mais je n'ai pas réussi à comprendre pourquoi il fixe la taille du tableau à deux millions dans init(), puis redimensionne le tableau à zéro dans start(), puis essaie de le remplir avec l'index -1 ( !!!), et seulement après cela augmente la variable SIZE de 1, qui devrait indexer le tableau. Comparez, c'est ce que j'ai suggéré :

Cependant, iMAOnArray() refuse de le lisser. Peu importe comment je le tourne, il va en arrière et en avant. Mais ce n'est pas nécessaire pour les objectifs visés ici. Je suppose...

OK. Et où se trouve l'analyse des intervalles de temps dans votre code et pourquoi l'AM est apparue ?

J'ai trouvé un bug dans mon truc, aussi. Ce n'est pas le même nombre de tics pendant un seul et même intervalle de temps. Nous ne devons pas perdre un tel indicateur.

Je me trompe peut-être, car je n'utilise pas 5-Rka depuis longtemps.