-Alexey-: Pourquoi, lorsque j'appuie sur le bouton "Start", le testeur ne teste pas à partir du niveau de dépôt initial, mais à partir du niveau où le dernier test s'est terminé. Il n'y a pas de tel problème en 4. Comment commencer à tester à partir du niveau de dépôt initial ?
Nous ne pouvons pas reproduire la situation que vous décrivez.
Nous ne pouvons pas reproduire la situation que vous décrivez.
Donnez-nous plus de détails
Je génère un parabolique dans l'assistant sur la moyenne avec un stop. Je lance un test sur des prix ouverts et je clique sur annuler. Je l'exécute pour la deuxième fois et j'obtiens la situation décrite ci-dessus (le graphique des soldes et des fonds propres n'est pas redessiné mais continue). Les conseillers experts qui ne sont pas issus de l'assistant sont OK.
Вы хотите быстро проверить торговую идею, не тратя времени на программирование? Выберите в "Мастере MQL5" нужный тип торговых сигналов, подключите модули сопровождения позиций и управления капиталом - на этом вся работа закончена. Создайте свои реализации модулей или закажите их через сервис "Работа" - и комбинируйте новые модули с уже существующими.
En mode de test multidevises, lorsqu'on attend l'apparition d'une nouvelle barre sur deux instruments, le testeur ne se comporte pas correctement.
Une petite clarification. Dans la fonction isNewBar, lorsqu'une nouvelle barre apparaît sur le symbole principal, nous attendons qu'une nouvelle barre apparaisse dans la boucle sur l'autre symbole.
Je colle le code.
//в тестере баг в режиме мультивалютного тестирования//позиция открывается если на двух инструментах появился новый бар #include <Trade\Trade.mqh>#include <Trade\OrderInfo.mqh>#include <Trade\PositionInfo.mqh>//--- input parametersinputint Per=10;//период средней inputstring Instrum1="EURUSD";//первый инструментinputstring Instrum2="GBPUSD";//второй инструмент//-------------------------------------------------------
CTrade trade;//торговые функции
COrderInfo orderinfo;//информация об ордере
CPositionInfo posinfo;//информация о позицииint hiMA ;//хэндл индикатора intOnInit()
{
hiMA=iMA(_Symbol,_Period,Per,0,MODE_SMA,PRICE_OPEN) ;
if(hiMA < INVALID_HANDLE) return(-1) ;
return(0);
}
//====================================================================voidOnDeinit(constint reason)
{
IndicatorRelease(hiMA) ;
}
//=====================================================================voidOnTick()
{
if(!isNewBar(Instrum2)) return ;
//Print(" Это новый бар ");double Ma[1] ;//показания индикатора CopyBuffer(hiMA,0,0,1,Ma) ;
MqlTick price;// будет использоваться для получения текущих/последних котировок ценыbool possel=posinfo.Select(Instrum1) ;
SymbolInfoTick(Instrum1,price) ;
if(possel && price.bid > Ma[0] && posinfo.PositionType() == POSITION_TYPE_SELL)
{//цена выше средней закрываем короткую позу
trade.PositionClose(Instrum1) ; return ;
}
if( !possel && price.bid > Ma[0])
{//цена выше средней нет поз открываем длинную позу
trade.Buy(0.1,Instrum1,0,0,0,NULL) ; return ;
}
if( possel && price.ask < Ma[0] && posinfo.PositionType() == POSITION_TYPE_BUY)
{//цена ниже средней закрываем длинную позу
trade.PositionClose(Instrum1) ; return ;
}
if(!possel && price.ask < Ma[0])
{// цена ниже средней нет поз открываем короткую позу
trade.Sell(0.1,Instrum1,0,0,0,NULL) ;
}
return ;
}
//=======================================================================bool isNewBar(string other_symbol)
{//возвращает труе если новый бар на двух инструментахstaticdatetime last_bar_time=0;
int cntsleep ;
if(last_bar_time==0)
{//--- это первый вызов, запишем время открытия и выйдем
last_bar_time=(datetime)SeriesInfoInteger(_Symbol,Period(),SERIES_LASTBAR_DATE);
return(false);
}
datetime curr_time=(datetime)SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE);
if(curr_time!=last_bar_time)
{//время открытия не совпадает это новый бар
last_bar_time=curr_time;
cntsleep=0 ;
while(!(curr_time == (datetime)SeriesInfoInteger(other_symbol,Period(),SERIES_LASTBAR_DATE)))
{// ждем появления нового бара на втором инструменте Sleep(5000);
if(cntsleep >10) return(false) ;// недождались
cntsleep++ ;
}
return(true) ;
}
return(false) ;
}
Язык программирования MQL5 позволяет решать задачи на совершенно новом уровне. Даже те задачи, которые уже вроде имеют решения, благодаря объектно-ориентированному программированию могут подняться на качественно новый уровень. В данной статье специально взят простой пример проверки появления нового бара на графике, который был преобразован в достаточно мощный и универсальный инструмент. Какой? Читайте в статье.
En mode test multi-devises, lors de l'attente de l'apparition d'une nouvelle barre sur deux instruments, le testeur ne se comporte pas correctement.
Qu'est-ce que vous considérez exactement comme un bogue, veuillez expliquer. Vous n'avez donné aucun détail sur les tests, ni sur le résultat obtenu, ni sur le résultat attendu.
Qu'est-ce que vous considérez exactement comme un bogue, veuillez expliquer. Vous n'avez fourni aucun détail sur les tests ou le résultat que vous avez obtenu, et vous ne connaissez pas le résultat attendu.
Nous lançons le conseiller expert pour l'optimisation et voyons le résultat.
Par exemple, nous choisissons la 4ème passe, exécutons le Conseiller Expert, et obtenons son fonctionnement normal avec toutes les transactions, et voici le rapport.
J'ai un pressentiment. Dans le mode d'optimisation multi-devises, le testeur ne peut pas lier une transaction à la barre si elle n'a pas été ouverte sur la barre ouverte.
Si la fonction isNewBar a commenté la boucle et n'attend pas l'apparition d'une nouvelle barre sur un autre symbole, tout fonctionne. Terminal version 5 build 642.
J'ai lu les articles et j'ai lu les codes à partir de là. Même si, je me connais, je vais devoir les relire.
-Alexey-: Je génère dans l'assistant un EA sur moyen avec un stop parabolique. Je lance un test sur des prix ouverts et je clique sur "annuler". Je l'exécute pour la deuxième fois et j'obtiens la situation décrite ci-dessus (le graphique des soldes et des capitaux propres n'est pas redessiné mais continue). Les conseillers experts qui ne sont pas issus de l'assistant sont OK.
Voici un morceau de code. Comment faire en sorte que les paramètresinput int grusdchf=100 ; input int grusdjpy=100 ; ne soient pas optimisés lorsquetrpar2=false.
//------------------------------------------------------------inputbool trpar1=true ;//разрешение торговли по EURUDSDinputint greurusd=100;//сетка для EURUSDinputint grgbpusd=100;//сетка для GBPUSD//------------------------------------------------------------inputbool trpar2=true;//inputint grusdchf=100;//inputint grusdjpy=100;////------------------------------------------------------------inputbool trpar3=true;//inputint graudjpy=100;//inputint grchfjpy=100;//
Voici un morceau de code. Comment faire en sorte que les paramètresinput int grusdchf=100 ; input int grusdjpy=100 ; ne soient pas optimisés lorsquetrpar2=false.
Ne cochez pas les cases du testeur en fonction de ces paramètres. Ou clarifiez la question, sinon je vois une ambiguïté. :)
Voici un morceau de code. Comment faire en sorte que les paramètresinput int grusdchf=100 ; input int grusdjpy=100 ; ne soient pas optimisés lorsquetrpar2=false.
inputbool trpar2=true;
inputint grusdchf=100;
inputint grusdjpy=100;
if (trpair2==false) // если false то всегда 100
{
x_grusdchf=100;
x_grusdjpy=100;
}
else// если true то значения с перебора
{
x_grusdchf=grusdchf;
x_grusdjpy=grusdjpy;
}
Les cases à cocher sont activées sur les trois entrées et se verrouillent sur false.
Pourquoi, lorsque j'appuie sur le bouton "Start", le testeur ne teste pas à partir du niveau de dépôt initial, mais à partir du niveau où le dernier test s'est terminé. Il n'y a pas de tel problème en 4. Comment commencer à tester à partir du niveau de dépôt initial ?
Nous ne pouvons pas reproduire la situation que vous décrivez.
Donnons plus de détails
Nous ne pouvons pas reproduire la situation que vous décrivez.
Donnez-nous plus de détails
Cela semble être un bug.
En mode de test multidevises, lorsqu'on attend l'apparition d'une nouvelle barre sur deux instruments, le testeur ne se comporte pas correctement.
Une petite clarification. Dans la fonction isNewBar, lorsqu'une nouvelle barre apparaît sur le symbole principal, nous attendons qu'une nouvelle barre apparaisse dans la boucle sur l'autre symbole.
Je colle le code.
Cela semble être un bug.
En mode test multi-devises, lors de l'attente de l'apparition d'une nouvelle barre sur deux instruments, le testeur ne se comporte pas correctement.
Qu'est-ce que vous considérez exactement comme un bogue, veuillez expliquer. Vous n'avez donné aucun détail sur les tests, ni sur le résultat obtenu, ni sur le résultat attendu.
En outre, j'aimerais attirer votre attention sur les principes de base des tests dans MetaTrader 5. Il explique le mécanisme de génération des tics et les concepts de base.
Qu'est-ce que vous considérez exactement comme un bogue, veuillez expliquer. Vous n'avez fourni aucun détail sur les tests ou le résultat que vous avez obtenu, et vous ne connaissez pas le résultat attendu.
En outre, j'aimerais attirer votre attention sur les principes de base des tests dans MetaTrader 5. Il explique le mécanisme de génération des tics et les concepts de base.
C'est facile.
Nous lançons le conseiller expert pour l'optimisation et voyons le résultat.
Par exemple, nous choisissons la 4ème passe, exécutons le Conseiller Expert, et obtenons son fonctionnement normal avec toutes les transactions, et voici le rapport.
J'ai un pressentiment. Dans le mode d'optimisation multi-devises, le testeur ne peut pas lier une transaction à la barre si elle n'a pas été ouverte sur la barre ouverte.
Si la fonction isNewBar a commenté la boucle et n'attend pas l'apparition d'une nouvelle barre sur un autre symbole, tout fonctionne. Terminal version 5 build 642.
J'ai lu les articles et j'ai lu les codes à partir de là. Même si, je me connais, je vais devoir les relire.
Joyeuses fêtes.
Je génère dans l'assistant un EA sur moyen avec un stop parabolique. Je lance un test sur des prix ouverts et je clique sur "annuler". Je l'exécute pour la deuxième fois et j'obtiens la situation décrite ci-dessus (le graphique des soldes et des capitaux propres n'est pas redessiné mais continue). Les conseillers experts qui ne sont pas issus de l'assistant sont OK.
Créez une application servicedesk, en spécifiant
Voici un morceau de code. Comment faire en sorte que les paramètresinput int grusdchf=100 ; input int grusdjpy=100 ; ne soient pas optimisés lorsquetrpar2=false.
Voici un morceau de code. Comment faire en sorte que les paramètresinput int grusdchf=100 ; input int grusdjpy=100 ; ne soient pas optimisés lorsquetrpar2=false.
Ne cochez pas les cases du testeur en fonction de ces paramètres. Ou clarifiez la question, sinon je vois une ambiguïté. :)
Question :
Vous devez passer un tableau de pointeurs d'objets à une fonction. Par référence, bien sûr (un tableau).
Quelle syntaxe utiliser ?
Ou dois-je l'utiliser d'une autre manière ?
Voici un morceau de code. Comment faire en sorte que les paramètresinput int grusdchf=100 ; input int grusdjpy=100 ; ne soient pas optimisés lorsquetrpar2=false.