Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Pourquoi ne pas simplement recalculer l'ensemble de l'indicateur lorsqu'il est à 0 ? Cela me semble être la meilleure solution.
:) C'est ce que je fais...
Pour un indicateur lourd avec des tonnes de graphiques, ce n'est pas la meilleure solution. La solution est simple - utiliser votre propre variable au lieu de prev_calculated, statique ou globale. Mais c'est une béquille et nous voulons autre chose.
Une personne qui utilise le mot "béquille" :
Pour un indicateur lourd avec des tonnes de graphiques - pas le meilleur. Non, la solution est simple - utiliser sa propre variable au lieu de prev_calculated, statique ou globale. Mais c'est une béquille et nous voulons autre chose.
Et si l'historique a été échangé, cela signifie qu'il peut y avoir de nouvelles barres qui ont été manquées ou qui n'ont pas été calculées auparavant - c'est-à-dire que les lectures de l'indicateur seront déjà fausses.
Si prev_calculated=0, cela signifie qu'un recalcul complet doit être effectué. Tous les indicateurs standard sont entièrement recalculés dans ce cas.
Tout est clair, mais hélas, tout n'annule pas cela :
Tout cela est utile, mais ne peut pas être utilisé conformément à son objectif direct - montrer combien de "barres ont été traitées lors de l'appel précédent" - prev_calculated.
Les indicateurs sont différents ; certains n'ont pas du tout besoin de barres pour les calculs, d'autres n'ont besoin que de ticks en direct, d'autres encore ont des limitations sur la profondeur de conversion - ils ne se soucient pas de ce qui a changé ensuite dans l'historique, d'autres ont besoin de suivre des objets graphiques, etc. Ils n'ont pas besoin de fonctions supplémentaires pour suivre les changements dans l'historique attaché à prev_calculated, ils ont seulement besoin de ceci - "barres traitées lors de l'appel précédent". Ils n'en ont pas besoin.
Quoi qu'il en soit, M. les programmeurs, s'il vous plaît, n'empêchez pas le participant de "saisir l'événement".
Et si je recalculais simplement l'indicateur entier à 0 ? À mon avis, c'est la meilleure solution.
Je ne dirais pas que c'est la meilleure solution. Du moins pas encore.
J'ai décidé d'écrire un indicateur qui enregistre le tirage actuel sur le compte, afin de ne pas avoir à recalculer quoi que ce soit dans l'historique. La première ligne ressemblait à ceci au début.
Je ne dirais pas que c'est la meilleure solution. Du moins pas encore.
J'ai décidé d'écrire un indicateur qui enregistre le tirage actuel sur le compte, afin de ne pas avoir à recalculer quoi que ce soit dans l'historique. Au début, la première ligne ressemblait à ceci.
"... un prix d'origine inconnue... "Il s'agit d'éléments non initialisés d'un tableau de tampons indicateurs. Ce qui devrait être fait :
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading
Bugs, bugs, questions
Alexey Viktorov, 2016.10.17 09:58
Comprends-tu ce que tu as écrit ?
Mieux vaut expliquer comment se débarrasser des déchets. C'est la première fois que l'indicateur est utilisé. D'où viennent ces déchets ? Ne devrait-il pas y avoir une initialisation lors de la liaison entre le tampon et le tableau ? ou est-ce lors de l'initialisation que les déchets spatiaux entrent dans le tableau ? ?? Pourquoi n'y a-t-il pas de telles ordures dans le mql4 ?
Donnez-moi un exemple de la façon dont on peut séparer les déchets des valeurs normales sans utiliser de variables statiques ou globales supplémentaires.
Tout le monde a le droit de citer la documentation.
Personne ne doit rien à personne. Il y aura donc des déchets dans le tampon de l'indicateur, après la liaison, jusqu'à ce que vous initialisiez vous-même tous les éléments du tableau.
Ajouté :
Je vais maintenant créer un exemple...
//| prev_calculated.mq5 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots 1
#property indicator_type1 DRAW_LINE
#property indicator_color1 clrGray
#property indicator_label1 "prev_calculated"
//---- buffers
double ExtBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,ExtBuffer,INDICATOR_DATA);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
if(prev_calculated==0)
{
//--- инициализация элементов индикаторного буфера при первом запуске или при подкачке истории
for(int i=0;i<rates_total;i++)
ExtBuffer[i]=1.01;
return(rates_total);
}
//--- пересчитываем самый правый бар или самый правый бар и один предыдущий при появлении нового бара
int limit=rates_total-prev_calculated+1;
for(int i=rates_total-limit;i<rates_total;i++)
{
//--- визуализация пересчёта самого правого бара
static bool drive=false;
if(!drive)
ExtBuffer[i]=1.03;
else
ExtBuffer[i]=1.02;
drive=!drive;
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
Personne ne doit rien à personne. Il y aura donc des déchets dans le tampon de l'indicateur, après la liaison, jusqu'à ce que vous initialisiez vous-même tous les éléments du tableau.
Ajouté :
Je vais maintenant créer un exemple...
//| prev_calculated.mq5 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots 1
#property indicator_type1 DRAW_LINE
#property indicator_color1 clrGray
#property indicator_label1 "prev_calculated"
//---- buffers
double ExtBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,ExtBuffer,INDICATOR_DATA);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
if(prev_calculated==0)
{
//--- инициализация элементов индикаторного буфера при первом запуске или при подкачке истории
for(int i=0;i<rates_total;i++)
ExtBuffer[i]=1.01;
return(rates_total);
}
//--- пересчитываем самый правый бар или самый правый бар и один предыдущий при появлении нового бара
int limit=rates_total-prev_calculated+1;
for(int i=rates_total-limit;i<rates_total;i++)
{
//--- визуализация пересчёта самого правого бара
static bool drive=false;
if(!drive)
ExtBuffer[i]=1.03;
else
ExtBuffer[i]=1.02;
drive=!drive;
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
Une capacité étonnante à répondre à la mauvaise question...
Maintenant, expliquez-moi ce qui se passe si :
1. Compté 100 barres, entré dans les tampons de 0 à 99 inclus (considérons la direction comme une série chronologique) valeur 1.03
2. Soudain l'historique est chargé et prev_calculated devient 0
À partir de quelle barre, il sera de 1,03 ?