![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Peut-être les développeurs devraient-ils prêter attention au problème de l'initialisation des tampons indicateurs ? Pourquoi ce problème n'existe-t-il pas dans MT4 ? Peut-être que ce n'est pas la compréhension totale ? Le problème est que, même après l'initialisation obligatoire des tampons après avoir retiré un indicateur d'un graphique dans CHACUN d'entre eux, tous les tampons contiennent des déchets et vous ne pouvez pas les sortir de là...
Personnellement, je n'ai rien contre les béquilles, mais seulement si ces béquilles ne sont pas trop compliquées et si elles ont un effet positif. Mais écrire dans un fichier et le lire ensuite est une béquille minable.
Comment l'imaginez-vous : "...après avoir retiré l'indicateur du graphique dans certains tampons, mais pas tous..."? De quelle manière, après la suppression de l'indicateur du graphique, avez-vous accès à ses tampons d'indicateurs?
Essayons de trouver le problème en détail. Vous avez besoin d'un ensemble standard : code + ce que vous avez fait + ce que vous avez obtenu...
Comment l'imaginez-vous : "...après avoir retiré l'indicateur du graphique dans certains tampons, mais pas tous..."? De quelle manière, après la suppression de l'indicateur du graphique, avez-vous accès à ses tampons d'indicateurs?
Essayons de trouver le problème en détail. Vous avez besoin d'un ensemble standard : code + ce que vous avez fait + ce que vous avez obtenu...
Pure supposition : il se peut qu'il entre dans la même zone de mémoire pendant l'accès au tampon actuel, qui était occupée par les tampons précédents.
Je ne suis pas entré dans la conversation, ne kickez pas, Alexey veut que les données dans les buffers restent au redémarrage (interrupteur on/off du terminal) ou seulement quand prev_calculated = 0 (dans le cas où prev_calculated > 0 plus tôt) ?
Comment l'imaginez-vous : "...après avoir retiré l'indicateur du graphique dans certains tampons, mais pas tous..."? De quelle manière, après avoir supprimé l'indicateur du graphique, avez-vous accès à ses tampons d'indicateur?
Essayons de trouver le problème en détail. Vous avez besoin d'un ensemble standard : code + ce que vous avez fait + ce que vous avez obtenu...
Voici le code de l'indicateur
| BalansEquityTest.mq5 |
| Viktorov |
| v4forex@yandex.ru |
\********************************************************************/
#property copyright "Viktorov"
#property link "v4forex@yandex.ru"
#property version "1.00"
#property indicator_separate_window
#property indicator_buffers 6
#property indicator_plots 3
#property indicator_type1 DRAW_COLOR_LINE
#property indicator_color1 clrGold, clrGreen, clrRed
#property indicator_width1 2
#property indicator_label1 "Balance"
#property indicator_type2 DRAW_HISTOGRAM2
#property indicator_color2 clrCrimson
#property indicator_width2 2
#property indicator_label2 "EquityMin"
#property indicator_type3 DRAW_HISTOGRAM2
#property indicator_color3 clrDarkViolet
#property indicator_width3 2
#property indicator_label3 "EquityMax"
double balance[];
double clrBalance[];
double equityMaxB[];
double equityMinB[];
double equityMax[];
double equityMin[];
double maxEquity, minEquity;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0, balance, INDICATOR_DATA);
SetIndexBuffer(1, clrBalance, INDICATOR_COLOR_INDEX);
SetIndexBuffer(2, equityMin, INDICATOR_DATA);
SetIndexBuffer(3, equityMinB, INDICATOR_DATA);
SetIndexBuffer(4, equityMax, INDICATOR_DATA);
SetIndexBuffer(5, equityMaxB, INDICATOR_DATA);
PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0.0);
PlotIndexSetDouble(1, PLOT_EMPTY_VALUE, 0.0);
PlotIndexSetDouble(2, PLOT_EMPTY_VALUE, 0.0);
PlotIndexSetDouble(3, PLOT_EMPTY_VALUE, 0.0);
PlotIndexSetDouble(4, PLOT_EMPTY_VALUE, 0.0);
ArrayInitialize(balance, 0.0); // принудительная
ArrayInitialize(equityMax, 0.0); // инициализация
ArrayInitialize(equityMaxB, 0.0); // всех
ArrayInitialize(equityMin, 0.0); // буферов
ArrayInitialize(equityMinB, 0.0); // индикатора
ArraySetAsSeries(balance, true); // все
ArraySetAsSeries(clrBalance, true); // буферы
ArraySetAsSeries(equityMax, true); // индикатора
ArraySetAsSeries(equityMaxB, true); // имеют
ArraySetAsSeries(equityMin, true); // флаг
ArraySetAsSeries(equityMinB, true); // AS_SERIES
IndicatorSetInteger(INDICATOR_DIGITS, 2);
IndicatorSetString(INDICATOR_SHORTNAME, "Show Money");
//---
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)
return(rates_total);
double bal = AccountInfoDouble(ACCOUNT_BALANCE);
double equity = AccountInfoDouble(ACCOUNT_EQUITY);
if(rates_total > prev_calculated)
{
minEquity = 0;
maxEquity = 0;
}
minEquity = fmin((minEquity == 0 ? AccountInfoDouble(ACCOUNT_BALANCE) : minEquity), equity);
maxEquity = fmax(maxEquity, equity);
balance[0] = AccountInfoDouble(ACCOUNT_BALANCE);
clrBalance[0] = 0.0;
equityMinB[0] = balance[0];
equityMin[0] = minEquity;
equityMaxB[0] = balance[0];
equityMax[0] = maxEquity;
if(balance[0] > balance[1])
clrBalance[0] = 1.0;
if(balance[0] < balance[1])
clrBalance[0] = 2.0;
Comment(PositionsTotal());
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
Je posterai une vidéo un peu plus tard, ce sera plus clair alors. Je ne peux pas l'expliquer plus clairement sur mes doigts qu'avant.
J'espère que cela ne vous dérangera pas de télécharger et de décompresser la vidéo.
Malheureusement, le fait de le retirer du graphique et de l'y attacher n'a pas été enregistré, mais il y a le fait que l'indicateur est là, puis il disparaît et ensuite il est de nouveau là. Il suffit de l'effacer et de le rattacher.
Faites attention à la fenêtre de données après avoir réinstallé l'indicateur. Même après une initialisation forcée des tampons, il y a encore des débris d'espace.
Voici le code de l'indicateur
J'aimerais faire une expérience : laisser un seul graphique ouvert et appliquer ou supprimer un indicateur sur celui-ci. Et vous avez besoin d'informations sur le terminal et le système d'exploitation (onglet "Log" du terminal).
Qu'est-ce qu'une carte a à voir avec ça ? Le fait que l'indicateur ne figure que sur un seul graphique n'est pas suffisant ?
ajouté :
Bien que je ne pense pas que le système d'exploitation puisse affecter le comportement de l'indicateur, voici des informations sur le système et le terminal
2016.10.16 20:56:34.904 Terminal Windows 7 Home Premium (x64 based PC), IE 11.00, UAC, AMD FX-4170 Quad-Core Processor , RAM: 10531 / 12255 Mb, HDD: 55167 / 244198 Mb, GMT+03:00
2016.10.16 20:56:34.904 Terminal MetaTrader 5 build 1455 started (MetaQuotes Software Corp.)
Qu'est-ce qu'une carte a à voir avec ça ? Le fait que l'indicateur ne figure que sur un seul graphique n'est-il pas suffisant ?
2016.10.18 19:09:34.266 Terminal Windows 10 Pro (x64 based PC), IE 11.00, UAC, Intel Core i3-3120 M @ 2.50 GHz, RAM: 3638 / 8077 Mb, HDD: 39824 / 233310 Mb, GMT+02:00
2016.10.18 19:09:34.266 Terminal C:\Users\KVN\AppData\Roaming\MetaQuotes\Terminal\038 C9E8FAFF9EA373522ECC6D5159962
Alors... La situation commence à prendre forme. Ajoutez ce code :
//---
if(prev_calculated==0)
{
Print("prev_calculated==0");
return(rates_total);
}
double bal=AccountInfoDouble(ACCOUNT_BALANCE);
2016.10.18 19:09:34.266 Terminal Windows 10 Pro (x64 based PC), IE 11.00, UAC, Intel Core i3-3120 M @ 2.50 GHz, RAM: 3638 / 8077 Mb, HDD: 39824 / 233310 Mb, GMT+02:00
2016.10.18 19:09:34.266 Terminal C:\Users\KVN\AppData\Roaming\MetaQuotes\Terminal\038 C9E8FAFF9EA373522ECC6D5159962
J'ai commencé à exécuter, mais quand je lance l'indicateur, il y a des numéros de peste dans un tampon presque partout dans l'histoire.
Après avoir retiré l'indicateur et l'avoir remis en place après un certain temps, les tampons sont vides.
Je répéterai l'opération de retrait et de remise en place plus tard.
Conclusions préliminaires :
Alors... La situation commence à prendre forme. Ajoutez un code comme celui-ci :
//---
if(prev_calculated==0)
{
Print("prev_calculated==0");
return(rates_total);
}
double bal=AccountInfoDouble(ACCOUNT_BALANCE);
Ajouté comme ceci