Pouvez-vous me dire comment faire pour que l'indicateur n'affiche pas la valeur actuelle mais la valeur maximale des dernières barres Per, j'ai utilisé Osma comme exemple, mais il affiche la valeur actuelle dans le Strategy Tester lorsque le graphique est en mouvement et lorsque vous le mettez juste sur le graphique, rien :
//---- indicator settings#property indicator_separate_window#property indicator_buffers1#property indicator_color1 Silver
#property indicator_width1 2//---- indicator parametersexternint Per=12;
externint FastEMA=12;
externint SlowEMA=26;
externint SignalSMA=9;
//---- indicator buffersdouble OsmaBuffer1[];
double OsmaBuffer[];
double MacdBuffer[];
double SignalBuffer[];
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int init()
{
//---- 2 additional buffers are used for counting.
IndicatorBuffers(4);
//---- drawing settings
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexDrawBegin(0,SignalSMA);
IndicatorDigits(Digits+2);
//---- 3 indicator buffers mappingSetIndexBuffer(0,OsmaBuffer1);
SetIndexBuffer(1,OsmaBuffer);
SetIndexBuffer(2,MacdBuffer);
SetIndexBuffer(3,SignalBuffer);
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("OsMA("+FastEMA+","+SlowEMA+","+SignalSMA+")");
//---- initialization donereturn(0);
}
//+------------------------------------------------------------------+//| Moving Average of Oscillator |//+------------------------------------------------------------------+int start()
{
int limit;
int counted_bars=IndicatorCounted();
//---- last counted bar will be recountedif(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//---- macd counted in the 1-st additional bufferfor(int i=0; i<limit; i++)
MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//---- signal line counted in the 2-nd additional bufferfor(i=0; i<limit; i++)
SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
//---- main loopfor(i=0; i<limit; i++)
OsmaBuffer[i]=MacdBuffer[i]-SignalBuffer[i];
//---- donefor(i=0; i<limit; i++)
{
for(int b=0; b<Per; b++)
{
OsmaBuffer1[i] =OsmaBuffer[ ArrayMaximum(OsmaBuffer,Per,b)];
}
}
return(0);
}
Всё разобрался, перемудрил просто))), достаточно этого:
borilunad: Je comprends ça ! Mais comment programmer cette variable ("spread spécifié") ? Bien sûr, je peux créer une variable Spread et la modifier à chaque fois que je change la répartition dans le testeur. Disons que Spread(TestGenerator) ou qu'il existe une fonction, ou que vous pouvez d'une manière ou d'une autre créer une telle fonction, il est impossible que vous ne puissiez pas le faire ! А ?
Il y a un écart fixe, lors des tests,
mais avec la plupart des DCs, c'est variable. Si vous voulez, tenez-en compte dans le testeur. En général, il faut tester les conseillers experts dans les conditions les plus défavorables. C'est-à-dire avec un écart maximal, avec des retards possibles dans l'ouverture des ordres, etc.
mais avec la plupart des DCs, c'est variable. Si vous voulez, tenez-en compte dans le testeur. En général, testez les conseillers experts dans les conditions les plus défavorables. C'est-à-dire avec un écart maximal, avec des retards possibles dans l'ouverture des ordres, etc.
Je comprends et je fais tout ! Je voulais juste refléter l'écart que j'ai mis dans le prog, parce que dans le testeur Ask est souvent faussé, puis le trouver par Bid+spread ! Voir la branche MarketInfo ne fonctionne pas dans le testeur! Alors vous saurez ce qui ne va pas ! J'ai demandé là-bas, et personne ! Donc, déplacé ici, il a répondu là, pour lequel vous et d'autres vous remercient !
borilunad: Oui, je comprends et je fais tout ! Je voulais juste que l'écart que je fixe soit reflété dans le programme, car l'offre est souvent déformée dans le testeur, puis on la trouve via l'offre + l'écart ! Voir la branche MarketInfo ne fonctionne pas dans le testeur! Alors vous saurez ce qui ne va pas ! J'ai demandé là-bas, et personne ! Donc, déplacé ici, il a répondu là, pour lequel vous et d'autres vous remercient !
Merde, Boris. Je l'ai déjà écrit. Eh bien, vous pouvez imiter un spread flottant directement dans le conseiller expert. Qu'est-ce qui m'empêche d'ajouter un nombre aléatoire dans la fourchette du spread flottant à l'offre, et de l'ouvrir avec des ordres stop. Et fermez par la valeur, pas par des ordres d'arrêt. C'est plus compliqué que de définir un écart statique plus important, mais si vous en avez vraiment besoin, vous pouvez le faire. Dans le même temps, définissez l'écart minimum dans le testeur.
Merde, Boris. Je l'ai déjà écrit. Eh bien, faites un spread flottant simulé directement dans votre EA. Qu'est-ce qui vous empêche d'ajouter un nombre aléatoire dans la fourchette de spreads flottants à l'offre et d'ouvrir avec des ordres stop. Et fermez par la valeur, pas par des ordres d'arrêt. C'est plus compliqué que de définir un écart statique plus important, mais si vous en avez vraiment besoin, vous pouvez le faire. Dans le même temps, dans le testeur, définissez l'écart minimum.
C'est juste... Une façon de penser.
Merci Artem, c'est plus sage dans le bon sens du terme ! Je le ferai !
Aidez-nous à résoudre le problème, s'il vous plaît) J'ai écrit un Expert Advisor qui fonctionne en croisant les ondes, mais quand j'essaie de le tester, le terminal bipe et ne teste rien (le code du compilateur aime bien. Comment faire pour qu'il ait au moins quelque chose à montrer ?
Aidez moi avec le problème, s'il vous plait) J'ai écrit un EA qui fonctionne en croisant les ondes, mais quand j'essaie de le tester, le terminal bipe et ne teste rien (le code du compilateur aime bien. Comment faire pour qu'il y ait au moins quelque chose à montrer ?
Est-ce que tu regardes parfois ce que tu as écrit ? !
Quelque chose me dit que "c'est là que réside le problème" :
Aide avec le problème, s'il vous plaît) J'ai écrit un Expert Advisor qui fonctionne sur le croisement des ondes, mais quand j'essaie de le tester, le terminal bipe et ne teste rien (le code du compilateur aime. Comment faire pour qu'il ait au moins quelque chose à montrer ?
//считаю ордера чтобы советник не трогал в ручную выставленные ордера
Où va-t-il le toucher ? Oui et il suffit de vérifier le magicien, le manuel sans magicien.
Et, comme écrit ci-dessus, les masses ne se chevauchent pas...
Pouvez-vous me dire comment faire pour que l'indicateur n'affiche pas la valeur actuelle mais la valeur maximale des dernières barres Per, j'ai utilisé Osma comme exemple, mais il affiche la valeur actuelle dans le Strategy Tester lorsque le graphique est en mouvement et lorsque vous le mettez juste sur le graphique, rien :
Je comprends ça ! Mais comment programmer cette variable ("spread spécifié") ? Bien sûr, je peux créer une variable Spread et la modifier à chaque fois que je change la répartition dans le testeur. Disons que Spread(TestGenerator) ou qu'il existe une fonction, ou que vous pouvez d'une manière ou d'une autre créer une telle fonction, il est impossible que vous ne puissiez pas le faire ! А ?
Il y a un écart fixe, lors des tests,
mais avec la plupart des DCs, c'est variable. Si vous voulez, tenez-en compte dans le testeur. En général, il faut tester les conseillers experts dans les conditions les plus défavorables. C'est-à-dire avec un écart maximal, avec des retards possibles dans l'ouverture des ordres, etc.
Il y a un écart spécifié, lors des tests,
mais avec la plupart des DCs, c'est variable. Si vous voulez, tenez-en compte dans le testeur. En général, testez les conseillers experts dans les conditions les plus défavorables. C'est-à-dire avec un écart maximal, avec des retards possibles dans l'ouverture des ordres, etc.
Voici la fonction
bool isFlagHistoryPos(int mn=-1) {
date t ;
int gd = MarketInfo(Symbol(),MODE_DIGITS) ;
int i, j=-1, k=OrdersHistoryTotal() ;
for (i=0 ; i<k ; i++) {
si(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
si (OrderSymbol()==Symbol()) {
si (OrderType()==OP_BUY || OrderType()==OP_SELL) {
si (mn<0 || OrderMagicNumber()==mn) {
si (t<OrderCloseTime()) {
t=OrderCloseTime() ;
j=i ;
}
}
}
}
}
}
if(OrderSelect(j, SELECT_BY_POS,MODE_HISTORY)) {
double ocp=NormalizeDouble(OrderClosePrice(),gd) ;
double otp=NormalizeDouble(OrderTakeProfit(),gd) ;
si(MathAbs(ocp-otp)/Point<=TPpoint) return(true) ;
}
retour (faux) ;
Le conseiller expert lui-même est joint
/* Décompilé par Vinin */
Oui, je comprends et je fais tout ! Je voulais juste que l'écart que je fixe soit reflété dans le programme, car l'offre est souvent déformée dans le testeur, puis on la trouve via l'offre + l'écart ! Voir la branche MarketInfo ne fonctionne pas dans le testeur! Alors vous saurez ce qui ne va pas ! J'ai demandé là-bas, et personne ! Donc, déplacé ici, il a répondu là, pour lequel vous et d'autres vous remercient !
Merde, Boris. Je l'ai déjà écrit. Eh bien, vous pouvez imiter un spread flottant directement dans le conseiller expert. Qu'est-ce qui m'empêche d'ajouter un nombre aléatoire dans la fourchette du spread flottant à l'offre, et de l'ouvrir avec des ordres stop. Et fermez par la valeur, pas par des ordres d'arrêt. C'est plus compliqué que de définir un écart statique plus important, mais si vous en avez vraiment besoin, vous pouvez le faire. Dans le même temps, définissez l'écart minimum dans le testeur.
C'est juste que... une ligne de pensée.
Merde, Boris. Je l'ai déjà écrit. Eh bien, faites un spread flottant simulé directement dans votre EA. Qu'est-ce qui vous empêche d'ajouter un nombre aléatoire dans la fourchette de spreads flottants à l'offre et d'ouvrir avec des ordres stop. Et fermez par la valeur, pas par des ordres d'arrêt. C'est plus compliqué que de définir un écart statique plus important, mais si vous en avez vraiment besoin, vous pouvez le faire. Dans le même temps, dans le testeur, définissez l'écart minimum.
C'est juste... Une façon de penser.
Aidez-nous à résoudre le problème, s'il vous plaît) J'ai écrit un Expert Advisor qui fonctionne en croisant les ondes, mais quand j'essaie de le tester, le terminal bipe et ne teste rien (le code du compilateur aime bien. Comment faire pour qu'il ait au moins quelque chose à montrer ?
Aidez moi avec le problème, s'il vous plait) J'ai écrit un EA qui fonctionne en croisant les ondes, mais quand j'essaie de le tester, le terminal bipe et ne teste rien (le code du compilateur aime bien. Comment faire pour qu'il y ait au moins quelque chose à montrer ?
Quelque chose me dit que "c'est là que réside le problème" :
Aide avec le problème, s'il vous plaît) J'ai écrit un Expert Advisor qui fonctionne sur le croisement des ondes, mais quand j'essaie de le tester, le terminal bipe et ne teste rien (le code du compilateur aime. Comment faire pour qu'il ait au moins quelque chose à montrer ?
//считаю ордера чтобы советник не трогал в ручную выставленные ордераOù va-t-il le toucher ? Oui et il suffit de vérifier le magicien, le manuel sans magicien.
Et, comme écrit ci-dessus, les masses ne se chevauchent pas...