voidOnStart()
{
string text="Hello man";
string keystr="ABCDEFG";
uchar src[],dst[],key[];
//--- подготовка ключа шифрованияStringToCharArray(keystr,key);
//--- подготовка исходного массива src[]StringToCharArray(text,src);
//--- вывод исходных данныхPrintFormat("Initial data: size=%d, string='%s'",ArraySize(src),CharArrayToString(src));
//--- шифрование массива src[] методом DES с 56-битным ключом key[]int res=CryptEncode(CRYPT_AES256,src,key,dst);
//--- проверка результата шифрованияif(res>0)
{
//--- вывод шифрованных данныхPrintFormat("Encoded data: size=%d %s",res,ArrayToHex(dst));
//--- расшифровка данных массива dst[] методом DES с 56-битным ключом key[]
res=CryptDecode(CRYPT_AES256,dst,key,src);
//--- проверка результатаif(res>0)
{
//--- вывод дешифрованных данныхPrintFormat("Decoded data: size=%d, string='%s'",ArraySize(src),CharArrayToString(src));
}
elsePrint("Ошибка в CryptDecode. Код ошибки=",GetLastError());
}
elsePrint("Ошибка в CryptEncode. Код ошибки=",GetLastError());
}
//+------------------------------------------------------------------+string ArrayToHex(uchar &arr[],int count=-1)
{
string res="";
//--- проверка размераif(count<0 || count>ArraySize(arr))
count=ArraySize(arr);
//--- преобразование в шестнадцатиричную строкуfor(int i=0; i<count; i++)
res+=StringFormat("%.2X",arr[i]);
//---return(res);
}
Ich versuche, das Krypto-Beispiel aus dem Handbuch auszuführen, aberich verwendeCRYPT_AES256 anstelle derCRYPT_DES-Methode. Das Ergebnis ist der Fehler 4029 nach derCryptEncode-Methode
Ich versuche, das Krypto-Beispiel aus dem Handbuch auszuführen, aberich verwendeCRYPT_AES256 anstelle derCRYPT_DES-Methode. Infolgedessen wird der Fehler 4029 nach der MethodeCryptEncode
Ich habe es herausgefunden. Er braucht einen sorgfältigeren Schlüssel.)
Ich bin dumm und kann es nicht selbst herausfinden. Bitte geben Sie mir einen Rat, was das Problem sein könnte, oder weisen Sie mir zumindest die richtige Richtung.
Verschiedene Indikatoren beginnen, gleichzeitig ein anderes Stück Geschichte zu zeigen. Das passiert manchmal, aber nicht jeden Tag.
Ich dachte, der Grund dafür sei, dass die Indikatoren dynamisch geladene Historien nicht korrekt verarbeiten. Ich habe alles versucht, was die korrekte Aktualisierung des Indikators in der Aktualisierungshistorie betrifft, ich weiß nicht, was sonst noch getan werden sollte, um dies zu verhindern.
Alpari-Makler. MT5 Build 2363 vom 13.03.2020.
Die Bildschirmfotos zeigen zuerst die "gescheiterte" Version.
Dann die richtige Version nach der manuellen Aktualisierung.
//+------------------------------------------------------------------+bool IsReadyForCalculate(constint rates_total,constint prev_calculated,constdatetime &time[])
{
//--- подключение терминала и синхронизация данныхif(TerminalInfoInteger(TERMINAL_CONNECTED))
if(!SymbolIsSynchronized(_Symbol) ||
!SeriesInfoInteger(_Symbol,_Period,SERIES_SYNCHRONIZED)) return(false);
//--- некорректное значение prev_calculatedif(prev_calculated<0) return(false);
//---if(prev_calculated==0) prev_time = time[rates_total-1];
//--- произошли изменения в данных, но prev_calculated не сброшен в 0//--- или изменение времени не соответствует одному баруif( (rates_total!=prev_calculated+1 &&
rates_total!=prev_calculated &&
prev_calculated!=0) ||
(time[rates_total-1]>prev_time &&
time[rates_total-2]!=prev_time))
{
loc_prev_calculated = 0; // чтобы индикатор не висел "голым" до следующей котировки, вычисляю индикатор из того, что естьreturn(true);
}
//--- корректный сценарийif( (rates_total==prev_calculated || rates_total==prev_calculated+1 || prev_calculated==0) &&
(time[rates_total-1]==prev_time || time[rates_total-2]==prev_time))
{
loc_prev_calculated = prev_calculated;
return(true);
}
//--- return(false); // верну false, пока не знаю, какие варианты ещё могут быть
}
//+------------------------------------------------------------------+//| 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(!IsReadyForCalculate(rates_total,prev_calculated,time)) return(0);
//---// вызов функции зигзага//--- return value of prev_calculated for next call
prev_time = time[rates_total-1];
return(rates_total);
}
//+------------------------------------------------------------------+
Ich habe diese Frage in MQL5. Wie kann ich den Start der Funktion OnChartEvent() erzwingen? Gibt es eine Standardmethode dafür?
Zu diesem Zweck verwende ich den Befehl ChartNavigate() und führe ihn über OnChartEvent() aus. Aber es funktioniert instabil - wenn viele Ticks eintreffen, startet OnChartEvent() nach dem Aufruf von ChartNavigate() aus irgendeinem Grund oft nicht neu. Ich kann nicht verstehen, wie das zusammenhängt - ChartNavigate() und Tick-Ankunftsrate, aber es passiert trotzdem.
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
Ich bin dumm und kann es nicht selbst herausfinden. Bitte geben Sie mir einen Rat, was das Problem sein könnte, oder weisen Sie mir zumindest die richtige Richtung.
loc_prev_calculated = 0; // чтобы индикатор не висел "голым" до следующей котировки, вычисляю индикатор из того, что естьreturn(true);
Vielleicht habe ich das kürzlich umsonst hinzugefügt...
Entfernt
loc_prev_calculated
Ersetzt durch...
return(false);
Beobachten.
Bitte sagen Sie mir, was es mit den Standardindikatoren auf dem MT5 auf sich hat und wie sie funktionieren. Fallen sie um, so wie ich es in den Screenshots oben getan habe?
Guten Tag zusammen! Ich beherrsche die doppelte OnTester() Funktion und die TesterStatistics( ) Funktion. Ich habe einen einfachen Code für meinen Tester in MT4 geschrieben, der jeden Tag um 10:00, um 16:00, um 20:00 und um 01:00 eine Order eröffnet. Am Ende des Tests gibt die Funktion TesterStatistics( ) den kleinsten Saldowert (d. h. den relativen Drawdown) zurück.
PROBLEM
TesterStatistics( ) liefert den kleinsten Saldowert für ALLE offenen Aufträge
QUESTION
Wie kann ich eine Sprachkonstruktion verwenden, damit TesterStatistics() den kleinsten Saldowert nur für einen Auftrag zurückgibt, der zu einer bestimmten Zeit geöffnet wurde, z. B. um 16:00 Uhr. Dabei sollten alle im Code angegebenen Aufträge gleichzeitig getestet werden. Das bedeutet, dass TesterStatistics die Saldodynamik nur für einen um 16:00 Uhr eröffneten Auftrag verfolgen und am Ende des Tests nur den Mindestsaldowert für den um 16:00 Uhr eröffneten Auftrag anzeigen soll.
Ich wäre Ihnen sehr dankbar, wenn Sie das erforderliche Sprachkonstrukt in meinen Code einfügen könnten. So kann ich den Algorithmus zur Lösung meines Problems schnell verstehen. Hier ist mein Code.
Guten Tag an alle! Ich habe Double OnTester() und TesterStatistics( ) gemeistert. Ich habe einen einfachen Code für meinen Tester in MT4 geschrieben, der jeden Tag eine Order um 10:00, um 16:00, um 20:00 und um 01:00 öffnet. Am Ende des Tests liefert die Funktion TesterStatistics den kleinsten Saldowert (d.h. den relativen Drawdown).
PROBLEM
TesterStatistics( ) liefert den niedrigsten Saldowert für ALLE offenen Aufträge
QUESTION
Welche Sprachkonstruktion kann verwendet werden, damit TesterStatistics() den kleinsten Saldowert nur für einen Auftrag zurückgibt, der zu einer bestimmten Zeit, z. B. um 16:00 Uhr, eröffnet wurde? Dabei sollten alle im Code angegebenen Aufträge gleichzeitig getestet werden. D.h., TesterStatistics( ) sollte die Saldodynamik nur eines um 16:00 Uhr eröffneten Auftrags verfolgen und am Ende des Tests nur den Mindestwert des Saldos für den um 16:00 Uhr eröffneten Auftrag zurückgeben.
Ich wäre Ihnen sehr dankbar, wenn Sie die gewünschte Sprache in meinen Code einfügen könnten. So kann ich den Algorithmus zur Lösung meines Problems sehr schnell verstehen. Hier ist mein Code.
Wir danken Ihnen für Ihr Feedback. Dank Ihnen habe ich erkannt, dass die Angabe der FunktionTesterStatistics( ); zusammen mit der Deklaration der globalen Variablen H ... war mein Fehler. Ich habe es repariert.
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
MT4
Worum handelt es sich bei diesem Artikel und was bewirkt er? Ich kann nirgends eine Beschreibung finden.
Wie kann ich diese Funktion standardmäßig deaktivieren?
Ich versuche, das Krypto-Beispiel aus dem Handbuch auszuführen, aberich verwende CRYPT_AES256 anstelle derCRYPT_DES-Methode. Das Ergebnis ist der Fehler 4029 nach derCryptEncode-Methode
Ich versuche, das Krypto-Beispiel aus dem Handbuch auszuführen, aberich verwende CRYPT_AES256 anstelle derCRYPT_DES-Methode. Infolgedessen wird der Fehler 4029 nach der MethodeCryptEncode
Ich habe es herausgefunden. Er braucht einen sorgfältigeren Schlüssel.)
Hallo!
Ich bin dumm und kann es nicht selbst herausfinden. Bitte geben Sie mir einen Rat, was das Problem sein könnte, oder weisen Sie mir zumindest die richtige Richtung.
Verschiedene Indikatoren beginnen, gleichzeitig ein anderes Stück Geschichte zu zeigen. Das passiert manchmal, aber nicht jeden Tag.
Ich dachte, der Grund dafür sei, dass die Indikatoren dynamisch geladene Historien nicht korrekt verarbeiten. Ich habe alles versucht, was die korrekte Aktualisierung des Indikators in der Aktualisierungshistorie betrifft, ich weiß nicht, was sonst noch getan werden sollte, um dies zu verhindern.
Alpari-Makler. MT5 Build 2363 vom 13.03.2020.
Die Bildschirmfotos zeigen zuerst die "gescheiterte" Version.
Dann die richtige Version nach der manuellen Aktualisierung.
Hallo.
Ich habe diese Frage in MQL5. Wie kann ich den Start der Funktion OnChartEvent() erzwingen? Gibt es eine Standardmethode dafür?
Zu diesem Zweck verwende ich den Befehl ChartNavigate() und führe ihn über OnChartEvent() aus. Aber es funktioniert instabil - wenn viele Ticks eintreffen, startet OnChartEvent() nach dem Aufruf von ChartNavigate() aus irgendeinem Grund oft nicht neu. Ich kann nicht verstehen, wie das zusammenhängt - ChartNavigate() und Tick-Ankunftsrate, aber es passiert trotzdem.
Hallo!
Ich bin dumm und kann es nicht selbst herausfinden. Bitte geben Sie mir einen Rat, was das Problem sein könnte, oder weisen Sie mir zumindest die richtige Richtung.
Vielleicht habe ich das kürzlich umsonst hinzugefügt...
EntferntErsetzt durch...
return(false);Beobachten.
Bitte sagen Sie mir, was es mit den Standardindikatoren auf dem MT5 auf sich hat und wie sie funktionieren. Fallen sie um, so wie ich es in den Screenshots oben getan habe?
Guten Tag zusammen!
Ich beherrsche die doppelte OnTester() Funktion und die TesterStatistics( ) Funktion. Ich habe einen einfachen Code für meinen Tester in MT4 geschrieben, der jeden Tag um 10:00, um 16:00, um 20:00 und um 01:00 eine Order eröffnet. Am Ende des Tests gibt die Funktion TesterStatistics( ) den kleinsten Saldowert (d. h. den relativen Drawdown) zurück.
PROBLEM
TesterStatistics( ) liefert den kleinsten Saldowert für ALLE offenen Aufträge
QUESTION
Wie kann ich eine Sprachkonstruktion verwenden, damit TesterStatistics() den kleinsten Saldowert nur für einen Auftrag zurückgibt, der zu einer bestimmten Zeit geöffnet wurde, z. B. um 16:00 Uhr. Dabei sollten alle im Code angegebenen Aufträge gleichzeitig getestet werden. Das bedeutet, dass TesterStatistics die Saldodynamik nur für einen um 16:00 Uhr eröffneten Auftrag verfolgen und am Ende des Tests nur den Mindestsaldowert für den um 16:00 Uhr eröffneten Auftrag anzeigen soll.
Ich wäre Ihnen sehr dankbar, wenn Sie das erforderliche Sprachkonstrukt in meinen Code einfügen könnten. So kann ich den Algorithmus zur Lösung meines Problems schnell verstehen.
Hier ist mein Code.
Guten Tag an alle!
Ich habe Double OnTester() und TesterStatistics( ) gemeistert. Ich habe einen einfachen Code für meinen Tester in MT4 geschrieben, der jeden Tag eine Order um 10:00, um 16:00, um 20:00 und um 01:00 öffnet. Am Ende des Tests liefert die Funktion TesterStatistics den kleinsten Saldowert (d.h. den relativen Drawdown).
PROBLEM
TesterStatistics( ) liefert den niedrigsten Saldowert für ALLE offenen Aufträge
QUESTION
Welche Sprachkonstruktion kann verwendet werden, damit TesterStatistics() den kleinsten Saldowert nur für einen Auftrag zurückgibt, der zu einer bestimmten Zeit, z. B. um 16:00 Uhr, eröffnet wurde? Dabei sollten alle im Code angegebenen Aufträge gleichzeitig getestet werden. D.h., TesterStatistics( ) sollte die Saldodynamik nur eines um 16:00 Uhr eröffneten Auftrags verfolgen und am Ende des Tests nur den Mindestwert des Saldos für den um 16:00 Uhr eröffneten Auftrag zurückgeben.
Ich wäre Ihnen sehr dankbar, wenn Sie die gewünschte Sprache in meinen Code einfügen könnten. So kann ich den Algorithmus zur Lösung meines Problems sehr schnell verstehen.
Hier ist mein Code.
Was ist das?
Ist es das?
Wir danken Ihnen für Ihr Feedback. Dank Ihnen habe ich erkannt, dass die Angabe der FunktionTesterStatistics( ); zusammen mit der Deklaration der globalen Variablen H ... war mein Fehler. Ich habe es repariert.