Anatoli Kazharski: C'est difficile sans code. Faites-moi savoir plus tard ce que dit le service d'assistance.
Voici le code de test, si vous êtes intéressé.
Initialement, le paramètre indicateur est faux.
Nous mettons l'indicateur sur le graphique. Il trace un histogramme.
Nous définissons les paramètres comme vrais.
Il dessine l'histogramme et les flèches.
Rendez le paramètre faux. Sur le TF actuel, les flèches disparaissent (pas toujours). Si nous passons à des TF différentes, les flèches apparaissent de manière chaotique dans certaines d'entre elles, malgré la suppression des tampons lors de la désinitialisation.
#property indicator_separate_window#property indicator_plots3#property indicator_buffers4//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+inputbool inpUseArrows=false;
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+double bufGisto[];
double bufGistoColor[];
double bufArrowUp[];
double bufArrowDn[];
//---constdoubleEMPTY=EMPTY_VALUE;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- Размечаем массив цветовcolor colors[2];
colors[ 0 ]= clrLime;
colors[ 1 ] = clrRed;
//--- Устанавливаем параметры графических серий
SetPlotParametersColorHistogram(0,0,bufGisto,bufGistoColor,false,"test gisto",colors,EMPTY,2);
//--- Проверяем, нужно ли отображать объемыif(inpUseArrows) // Если отображать нужно
{
SetPlotParametersArrow(1,2,bufArrowUp,false,"test up",EMPTY,clrLime,233,10);
SetPlotParametersArrow(2,3,bufArrowDn,false,"test dn",EMPTY,clrRed,234,-10);
}
//---IndicatorSetInteger(INDICATOR_DIGITS,0);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
if(inpUseArrows)
{
ArrayInitialize(bufArrowUp,EMPTY);
ArrayInitialize(bufArrowDn,EMPTY);
}
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---if(prev_calculated==0)
{
ArrayInitialize(bufGisto,EMPTY);
//---if(inpUseArrows)
{
ArrayInitialize(bufArrowUp,EMPTY);
ArrayInitialize(bufArrowDn,EMPTY);
}
//---for(int i=0; i<rates_total; i++)
{
bufGisto[i]=(open[i]-close[i])/_Point;
bufGistoColor[i]=(bufGisto[i]<0) ? 1 : 0;
//---if(inpUseArrows)
{
if(bufGisto[i]>20)
bufArrowDn[i]=bufGisto[i];
elseif(bufGisto[i]<-20)
bufArrowUp[i]=bufGisto[i];
}
}
}
elseif(rates_total>prev_calculated)
{
bufGisto[rates_total-1]=EMPTY;
//---if(inpUseArrows)
{
bufArrowUp[ rates_total-1 ] = EMPTY;
bufArrowDn[ rates_total-1 ] = EMPTY;
}
}
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+//| Параметры графического построения: цветная гист-а от 0 линии |//+------------------------------------------------------------------+void SetPlotParametersColorHistogram(constint plotIndex,// Индекс графической серииconstint bufferNum,// Номер первого буфера серииdouble& value[], // Буфер значенийdouble& clr[], // Буфер цветовconstbool asSeries, // Флаг нумерации как в таймсерииconststring label, // Имя серииconstcolor& colors[], // Цвета линииconstdouble emptyValue = EMPTY_VALUE, // Пустые значения серииconstint width = 0, // Толщина линииconstENUM_LINE_STYLE style = STYLE_SOLID, // Стиль линииconstint drawBegin = 0, // Количество баров без отрисовкиconstint shift=0// Сдвиг построения в барах
)
{
//--- Привязываем буферыSetIndexBuffer(bufferNum,value,INDICATOR_DATA);
SetIndexBuffer(bufferNum+1,clr,INDICATOR_COLOR_INDEX);
//--- Устанавливаем порядок нумерации в массивах-буферахArraySetAsSeries(value,asSeries);
ArraySetAsSeries(clr,asSeries);
//--- Устанавливаем тип графического построенияPlotIndexSetInteger(plotIndex,PLOT_DRAW_TYPE,DRAW_COLOR_HISTOGRAM);
//--- Устанавливаем имя графической серииPlotIndexSetString(plotIndex,PLOT_LABEL,label);
//--- Устанавливаем пустые значения в буферахPlotIndexSetDouble(plotIndex,PLOT_EMPTY_VALUE,emptyValue);
//--- Устанавливаем количество цветов индикатораconstint size=ArraySize(colors);
PlotIndexSetInteger(plotIndex,PLOT_COLOR_INDEXES,size);
//--- Устанавливаем цвета индикатораfor(int i=0; i<size; i++)
PlotIndexSetInteger(plotIndex,PLOT_LINE_COLOR,i,colors[i]);
//--- Устанавливаем толщину линииPlotIndexSetInteger(plotIndex,PLOT_LINE_WIDTH,width);
//--- Устанавливаем стиль линииPlotIndexSetInteger(plotIndex,PLOT_LINE_STYLE,style);
//--- Устанавливаем количество баров без отрисовки и значений в DataWindowPlotIndexSetInteger(plotIndex,PLOT_DRAW_BEGIN,drawBegin);
//--- Устанавливаем сдвиг графического построения по оси времени в барахPlotIndexSetInteger(plotIndex,PLOT_SHIFT,shift);
}
//+------------------------------------------------------------------+//| Параметры графического построения: стрелки |//+------------------------------------------------------------------+void SetPlotParametersArrow(constint plotIndex,// Индекс графической серииconstint bufferNum,// Номер первого буфера серииdouble &value[],// Буфер значенийconstbool asSeries,// Флаг нумерации как в таймсерииconststring label,// Имя серииconstdouble emptyValue=EMPTY_VALUE,// Пустые значения серииconstcolor clr=clrRed,// Цвет стрелокconstint arrowCode= 159,// Код стрелокconstint arrowShift = 0,// Сдвиг стрелок по вертикалиconstint width=0,// Толщина стрелокconstint drawBegin=0,// Количество баров без отрисовкиconstint shift=0// Сдвиг построения в барах
)
{
//--- Привязываем буферыSetIndexBuffer(bufferNum,value,INDICATOR_DATA);
//--- Устанавливаем порядок нумерации в массивах-буферахArraySetAsSeries(value,asSeries);
//--- Устанавливаем тип графического построенияPlotIndexSetInteger(plotIndex,PLOT_DRAW_TYPE,DRAW_ARROW);
//--- Устанавливаем имя графической серииPlotIndexSetString(plotIndex,PLOT_LABEL,label);
//--- Устанавливаем пустые значения в буферахPlotIndexSetDouble(plotIndex,PLOT_EMPTY_VALUE,emptyValue);
//--- Устанавливаем цвет индикатораPlotIndexSetInteger(plotIndex,PLOT_LINE_COLOR,0,clr);
//--- Устанавливаем код стрелокPlotIndexSetInteger(plotIndex,PLOT_ARROW,arrowCode);
//--- Устанавливаем смещение стрелок по вертикалиPlotIndexSetInteger(plotIndex,PLOT_ARROW_SHIFT,arrowShift);
//--- Устанавливаем толщину стрелокPlotIndexSetInteger(plotIndex,PLOT_LINE_WIDTH,width);
//--- Устанавливаем количество баров без отрисовки и значений в DataWindowPlotIndexSetInteger(plotIndex,PLOT_DRAW_BEGIN,drawBegin);
//--- Устанавливаем сдвиг графического построения по оси времени в барахPlotIndexSetInteger(plotIndex,PLOT_SHIFT,shift);
}
//+------------------------------------------------------------------+
Que vous spécifiez ou non des tableaux pour les flèches comme tampons, ils sont toujours câblés :
//---
Par ailleurs, si les flèches n'ont pas besoin d'être affichées, elles peuvent simplement être exclues de l'affichage par DRAW_NONE.
Essayez cette variante:
J'y ai pensé, mais il y a un inconvénient. Les tableaux sont automatiquement marqués et développés, ce qui consomme des ressources. Les développeurs feraient mieux de laisser le bug être corrigé.
Et qu'en est-il du fait d'être codé en dur... Si je ne lie pas les tampons aux séries graphiques, pourquoi est-ce que je vois des déchets inconnus, dont je ne peux pas me débarrasser.
Sinon, il s'avère que les indicateurs dynamiques ne peuvent pas être construits normalement.
L'option la plus idéale est de nettoyer les tampons dans deinit et c'est tout. Mais le nettoyage n'aide pas...
Il serait bien d'introduire une distinction sur le type de chaîne tel qu'il est utilisé dans d'autres langues, à savoir une chaîne régulière et une chaîne "brute". Je pense qu'ils y viendront de toute façon, mais au stade initial, cela permettrait d'éliminer de nombreux problèmes à l'avenir.
Par exemple, Python utilise r "string" pour créer une chaîne "brute".
Quelle est la raison pour laquelle les journaux ne s'affichent pas complètement dans le testeur ? Tout ce que vous pouvez regarder a été regardé et vérifié, c'est imbattable.
Quelle est la raison pour laquelle les journaux ne sont pas entièrement affichés dans le testeur ? Tout ce qui peut être regardé - regardé et vérifié, ne peut pas le vaincre.
"Beaucoup d'entrées" est un mot fort... La plupart des entrées ne sont tout simplement pas là. Mais la question est de savoir ce qui pourrait empêcher la sortie dans le fichier journal.
Par exemple, un EA qui n'est pas très sophistiqué :
voidOnTick ()
{
Print (TimeCurrent());
}
En mode "ticks réels", il affiche ces logs :
2017.09.05 09:38:56.994 Testeur EURUSD : l'historique des données commence à partir de 2014.07.29 00:00 2017.09.05 09:38:56.996 Tester EURUSD : le téléchargement préliminaire des ticks de l'historique a commencé, cela peut prendre un certain temps. 2017.09.05 09:38:58.001 Testeur EURUSD : téléchargement préliminaire des ticks de l'historique terminé, 35.52 Ko en 0:01.030 (34.48 Ko/sec) 2017.09.05 09:38:58.001 Testeur EURUSD : les données des ticks commencent à partir de 2017.06.01 00:00 2017.09.05 09:38:58.002 Le processus de l'agent Core 1 a été lancé. 2017.09.05 09:38:58.346 Core 1 se connectant à 127.0.0.1:3000 2017.09.05 09:38:58.347 Core 1 connecté 2017.09.05 09:38:58.350 Core 1 autorisé (agent build 1653) 2017.09.05 09:38:58.352 Tester EURUSD,M15 (MetaQuotes-Demo) : test d'experts\Test.ex5 de 2017.08.30 00:00 à 2017.08.31 00:00 2017.09.05 09:38:58.404 Synchronisation commune du noyau 1 terminée 2017.09.05 09:38:58.455 Core 1 EURUSD : ticks déjà synchronisés [43 bytes] 2017.09.05 09:39:04.609 Core 1 2017.08.30 00:36:55 2017.08.30 00:36:55 2017.09.05 09:39:10.760 Core 1 2017.08.30 00:48:27 2017.08.30 00:48:27 2017.09.05 09:39:16.866 Core 1 2017.08.30 01:02:20 2017.08.30 01:02:20 2017.09.05 09:39:22.976 Core 1 2017.08.30 01:24:08 2017.08.30 01:24:08 2017.09.05 09:39:27.668 Core 1 déconnecté 2017.09.05 09:39:27.668 Core 1 connexion fermée 2017.09.05 09:39:27.681 Tester arrêté par l'utilisateur
Cela dit, le testeur est terriblement lent, comme vous pouvez le constater, les sauts se comptent en dizaines de minutes...
C'est difficile sans le code. Faites-moi savoir ce que le service après-vente dira après.
C'est difficile sans code. Faites-moi savoir plus tard ce que dit le service d'assistance.
Voici le code de test, si vous êtes intéressé.
Initialement, le paramètre indicateur est faux.
Nous mettons l'indicateur sur le graphique. Il trace un histogramme.
Nous définissons les paramètres comme vrais.
Il dessine l'histogramme et les flèches.
Rendez le paramètre faux. Sur le TF actuel, les flèches disparaissent (pas toujours). Si nous passons à des TF différentes, les flèches apparaissent de manière chaotique dans certaines d'entre elles, malgré la suppression des tampons lors de la désinitialisation.
Ça ne va pas dans tous les sens. Service Desk #1832411x64, 1643.
Que vous spécifiez ou non des tableaux pour les flèches comme tampons, ils sont toujours câblés :
//---
Par ailleurs, si les flèches n'ont pas besoin d'être affichées, elles peuvent simplement être exclues de l'affichage par DRAW_NONE.
Essayez de cette façon:
Que vous spécifiez ou non des tableaux pour les flèches comme tampons, ils sont toujours câblés :
//---
Par ailleurs, si les flèches n'ont pas besoin d'être affichées, elles peuvent simplement être exclues de l'affichage par DRAW_NONE.
Essayez cette variante:
J'y ai pensé, mais il y a un inconvénient. Les tableaux sont automatiquement marqués et développés, ce qui consomme des ressources. Les développeurs feraient mieux de laisser le bug être corrigé.
Et qu'en est-il du fait d'être codé en dur... Si je ne lie pas les tampons aux séries graphiques, pourquoi est-ce que je vois des déchets inconnus, dont je ne peux pas me débarrasser.
Sinon, il s'avère que les indicateurs dynamiques ne peuvent pas être construits normalement.
L'option la plus idéale est de nettoyer les tampons dans deinit et c'est tout. Mais le nettoyage n'aide pas...
En ME, veuillez indiquer ALT+M dans la liste des fonctions/méthodes le type de valeur de retour.
Il serait bien d'introduire une distinction sur le type de chaîne tel qu'il est utilisé dans d'autres langues, à savoir une chaîne régulière et une chaîne "brute". Je pense qu'ils y viendront de toute façon, mais au stade initial, cela permettrait d'éliminer de nombreux problèmes à l'avenir.
Par exemple, Python utilise r "string" pour créer une chaîne "brute".Quelle est la raison pour laquelle les journaux ne s'affichent pas complètement dans le testeur ? Tout ce que vous pouvez regarder a été regardé et vérifié, c'est imbattable.
Quelle est la raison pour laquelle les journaux ne sont pas entièrement affichés dans le testeur ? Tout ce qui peut être regardé - regardé et vérifié, ne peut pas le vaincre.
Beaucoup d'entrées. Voir le fichier journal.
Beaucoup d'entrées. Voir le fichier journal.
"Beaucoup d'entrées" est un mot fort... La plupart des entrées ne sont tout simplement pas là. Mais la question est de savoir ce qui pourrait empêcher la sortie dans le fichier journal.
Par exemple, un EA qui n'est pas très sophistiqué :
En mode "ticks réels", il affiche ces logs :
2017.09.05 09:38:56.994 Testeur EURUSD : l'historique des données commence à partir de 2014.07.29 00:00
2017.09.05 09:38:56.996 Tester EURUSD : le téléchargement préliminaire des ticks de l'historique a commencé, cela peut prendre un certain temps.
2017.09.05 09:38:58.001 Testeur EURUSD : téléchargement préliminaire des ticks de l'historique terminé, 35.52 Ko en 0:01.030 (34.48 Ko/sec)
2017.09.05 09:38:58.001 Testeur EURUSD : les données des ticks commencent à partir de 2017.06.01 00:00
2017.09.05 09:38:58.002 Le processus de l'agent Core 1 a été lancé.
2017.09.05 09:38:58.346 Core 1 se connectant à 127.0.0.1:3000
2017.09.05 09:38:58.347 Core 1 connecté
2017.09.05 09:38:58.350 Core 1 autorisé (agent build 1653)
2017.09.05 09:38:58.352 Tester EURUSD,M15 (MetaQuotes-Demo) : test d'experts\Test.ex5 de 2017.08.30 00:00 à 2017.08.31 00:00
2017.09.05 09:38:58.404 Synchronisation commune du noyau 1 terminée
2017.09.05 09:38:58.455 Core 1 EURUSD : ticks déjà synchronisés [43 bytes]
2017.09.05 09:39:04.609 Core 1 2017.08.30 00:36:55 2017.08.30 00:36:55
2017.09.05 09:39:10.760 Core 1 2017.08.30 00:48:27 2017.08.30 00:48:27
2017.09.05 09:39:16.866 Core 1 2017.08.30 01:02:20 2017.08.30 01:02:20
2017.09.05 09:39:22.976 Core 1 2017.08.30 01:24:08 2017.08.30 01:24:08
2017.09.05 09:39:27.668 Core 1 déconnecté
2017.09.05 09:39:27.668 Core 1 connexion fermée
2017.09.05 09:39:27.681 Tester arrêté par l'utilisateur
Cela dit, le testeur est terriblement lent, comme vous pouvez le constater, les sauts se comptent en dizaines de minutes...
Machine sur VPS.