-Alexey-: Warum testet das Prüfgerät, wenn ich die Taste "Start" drücke, nicht von der anfänglichen Einzahlungsebene aus, sondern von der Ebene aus, auf der der letzte Test endete? Ein solches Problem gibt es nicht in 4. Wie beginnt man die Prüfung ab der ersten Einzahlung?
Wir können die von Ihnen beschriebene Situation nicht reproduzieren.
Wir können die von Ihnen beschriebene Situation nicht reproduzieren.
Geben Sie uns mehr Details
Ich generiere im Assistenten eine Parabel auf den Durchschnitt mit einem Stopp. Ich führe einen Test mit offenen Preisen durch und klicke auf Abbrechen. Ich führe es zum zweiten Mal aus und erhalte die oben beschriebene Situation (Saldo- und Eigenkapitaltabelle wird nicht neu gezeichnet, sondern fortgesetzt). Expert Advisors, die nicht vom Assistenten stammen, sind OK.
Вы хотите быстро проверить торговую идею, не тратя времени на программирование? Выберите в "Мастере MQL5" нужный тип торговых сигналов, подключите модули сопровождения позиций и управления капиталом - на этом вся работа закончена. Создайте свои реализации модулей или закажите их через сервис "Работа" - и комбинируйте новые модули с уже существующими.
Im Testmodus mit mehreren Währungen verhält sich der Tester nicht korrekt, wenn er darauf wartet, dass ein neuer Balken auf zwei Instrumenten erscheint.
Eine kleine Klarstellung. Wenn in der Funktion isNewBar ein neuer Balken auf dem Hauptsymbol erscheint, warten wir darauf, dass in der Schleife ein neuer Balken auf dem anderen Symbol erscheint.
Ich füge den Code ein.
//в тестере баг в режиме мультивалютного тестирования//позиция открывается если на двух инструментах появился новый бар #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 позволяет решать задачи на совершенно новом уровне. Даже те задачи, которые уже вроде имеют решения, благодаря объектно-ориентированному программированию могут подняться на качественно новый уровень. В данной статье специально взят простой пример проверки появления нового бара на графике, который был преобразован в достаточно мощный и универсальный инструмент. Какой? Читайте в статье.
Im Testmodus mit mehreren Währungen verhält sich der Tester nicht korrekt, wenn er darauf wartet, dass ein neuer Balken auf zwei Instrumenten erscheint.
Was genau sehen Sie als Fehler an, bitte erklären Sie das. Sie haben keine Angaben zu den Tests, dem erzielten Ergebnis oder dem erwarteten Ergebnis gemacht.
Außerdem möchte ich Ihre Aufmerksamkeit auf die Grundlagen des Testens in MetaTrader 5 lenken. Es werden der Mechanismus der Zeckenerzeugung und grundlegende Konzepte erläutert.
Was genau sehen Sie als Fehler an, bitte erklären Sie das. Sie haben keine Angaben zu den Tests oder den Ergebnissen gemacht, und Sie kennen das erwartete Ergebnis nicht.
Außerdem möchte ich Ihre Aufmerksamkeit auf die Grundlagen des Testens in MetaTrader 5 lenken. Sie erklärt den Mechanismus der Zeckenerzeugung und die grundlegenden Konzepte.
Es ist ganz einfach.
Wir starten den Expert Advisor zur Optimierung und sehen das Ergebnis.
Wir wählen zum Beispiel den 4. Durchgang, führen den Expert Advisor aus und erhalten seinen normalen Betrieb mit allen Trades - hier ist der Bericht.
Ich habe ein Gefühl. Im Optimierungsmodus für mehrere Währungen kann der Prüfer einen Handel nicht an den Barren binden, wenn er nicht am offenen Barren eröffnet wurde.
Wenn die Funktion isNewBar die Schleife auskommentiert hat und nicht auf das Erscheinen eines neuen Balkens auf einem anderen Symbol wartet, funktioniert alles. Terminal Version 5 Build 642.
Ich habe die Artikel und die Codes von dort gelesen. Obwohl ich mich selbst kenne, muss ich sie vielleicht noch einmal lesen.
-Alexey-: Ich generiere im Assistenten einen EA auf Medium mit einem parabolischen Stop. Ich führe einen Test mit offenen Preisen durch und klicke auf "Abbrechen". Ich führe es zum zweiten Mal aus und erhalte die oben beschriebene Situation (das Diagramm für den Saldo und das Eigenkapital wird nicht neu gezeichnet, sondern bleibt bestehen). Expert Advisors, die nicht vom Assistenten stammen, sind OK.
Hier ist ein Teil des Codes. Wie kann man erreichen, dass die Parameterinput int grusdchf=100; input int grusdjpy=100; nicht optimiert werden, wenntrpar2=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;//
Hier ist ein Teil des Codes. Wie kann man erreichen, dass die Parameterinput int grusdchf=100; input int grusdjpy=100; nicht optimiert werden, wenntrpar2=false
Kreuzen Sie die Kontrollkästchen im Prüfgerät für diese Parameter nicht an. Oder klären Sie die Frage, sonst sehe ich Unklarheiten. :)
Hier ist ein Teil des Codes. Wie kann man erreichen, dass die Parameterinput int grusdchf=100; input int grusdjpy=100; nicht optimiert werden, wenntrpar2=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;
}
Die Kontrollkästchen werden für alle drei Eingänge aktiviert und dann auf false gesperrt.
Warum testet das Prüfgerät, wenn ich die Taste "Start" drücke, nicht von der anfänglichen Einzahlungsebene aus, sondern von der Ebene aus, auf der der letzte Test endete? Ein solches Problem gibt es nicht in 4. Wie beginnt man die Prüfung ab der ersten Einzahlung?
Wir können die von Ihnen beschriebene Situation nicht reproduzieren.
Weitere Einzelheiten
Wir können die von Ihnen beschriebene Situation nicht reproduzieren.
Geben Sie uns mehr Details
Dies scheint ein Fehler zu sein.
Im Testmodus mit mehreren Währungen verhält sich der Tester nicht korrekt, wenn er darauf wartet, dass ein neuer Balken auf zwei Instrumenten erscheint.
Eine kleine Klarstellung. Wenn in der Funktion isNewBar ein neuer Balken auf dem Hauptsymbol erscheint, warten wir darauf, dass in der Schleife ein neuer Balken auf dem anderen Symbol erscheint.
Ich füge den Code ein.
Dies scheint ein Fehler zu sein.
Im Testmodus mit mehreren Währungen verhält sich der Tester nicht korrekt, wenn er darauf wartet, dass ein neuer Balken auf zwei Instrumenten erscheint.
Was genau sehen Sie als Fehler an, bitte erklären Sie das. Sie haben keine Angaben zu den Tests, dem erzielten Ergebnis oder dem erwarteten Ergebnis gemacht.
Außerdem möchte ich Ihre Aufmerksamkeit auf die Grundlagen des Testens in MetaTrader 5 lenken. Es werden der Mechanismus der Zeckenerzeugung und grundlegende Konzepte erläutert.
Was genau sehen Sie als Fehler an, bitte erklären Sie das. Sie haben keine Angaben zu den Tests oder den Ergebnissen gemacht, und Sie kennen das erwartete Ergebnis nicht.
Außerdem möchte ich Ihre Aufmerksamkeit auf die Grundlagen des Testens in MetaTrader 5 lenken. Sie erklärt den Mechanismus der Zeckenerzeugung und die grundlegenden Konzepte.
Es ist ganz einfach.
Wir starten den Expert Advisor zur Optimierung und sehen das Ergebnis.
Wir wählen zum Beispiel den 4. Durchgang, führen den Expert Advisor aus und erhalten seinen normalen Betrieb mit allen Trades - hier ist der Bericht.
Ich habe ein Gefühl. Im Optimierungsmodus für mehrere Währungen kann der Prüfer einen Handel nicht an den Barren binden, wenn er nicht am offenen Barren eröffnet wurde.
Wenn die Funktion isNewBar die Schleife auskommentiert hat und nicht auf das Erscheinen eines neuen Balkens auf einem anderen Symbol wartet, funktioniert alles. Terminal Version 5 Build 642.
Ich habe die Artikel und die Codes von dort gelesen. Obwohl ich mich selbst kenne, muss ich sie vielleicht noch einmal lesen.
Schöne Feiertage.
Ich generiere im Assistenten einen EA auf Medium mit einem parabolischen Stop. Ich führe einen Test mit offenen Preisen durch und klicke auf "Abbrechen". Ich führe es zum zweiten Mal aus und erhalte die oben beschriebene Situation (das Diagramm für den Saldo und das Eigenkapital wird nicht neu gezeichnet, sondern bleibt bestehen). Expert Advisors, die nicht vom Assistenten stammen, sind OK.
Erstellen Sie eine Servicedesk-Anwendung mit folgenden Angaben
Hier ist ein Teil des Codes. Wie kann man erreichen, dass die Parameterinput int grusdchf=100; input int grusdjpy=100; nicht optimiert werden, wenntrpar2=false
Hier ist ein Teil des Codes. Wie kann man erreichen, dass die Parameterinput int grusdchf=100; input int grusdjpy=100; nicht optimiert werden, wenntrpar2=false
Kreuzen Sie die Kontrollkästchen im Prüfgerät für diese Parameter nicht an. Oder klären Sie die Frage, sonst sehe ich Unklarheiten. :)
Frage:
Sie müssen ein Array von Objektzeigern an eine Funktion übergeben. Natürlich per Verweis (ein Array).
Welche Syntax ist zu verwenden?
Oder sollte ich es auf andere Weise verwenden?
Hier ist ein Teil des Codes. Wie kann man erreichen, dass die Parameterinput int grusdchf=100; input int grusdjpy=100; nicht optimiert werden, wenntrpar2=false