Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1154

 

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?


 
void OnStart()
  {
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));
        }
      else
         Print("Ошибка в CryptDecode. Код ошибки=",GetLastError());
     }
   else
      Print("Ошибка в 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 verwende CRYPT_AES256 anstelle derCRYPT_DES-Methode. Das Ergebnis ist der Fehler 4029 nach derCryptEncode-Methode

 
Dmitri Custurov:

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.

//+------------------------------------------------------------------+
bool IsReadyForCalculate(const int rates_total,const int prev_calculated,const datetime &time[])
  {
   //--- подключение терминала и синхронизация данных
   if(TerminalInfoInteger(TERMINAL_CONNECTED))  
      if(!SymbolIsSynchronized(_Symbol) || 
         !SeriesInfoInteger(_Symbol,_Period,SERIES_SYNCHRONIZED))   return(false);
   //--- некорректное значение prev_calculated
   if(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                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,const int prev_calculated,const datetime &time[],const double &open[],const double &high[],const double &low[],const double &close[],const long &tick_volume[],const long &volume[],const int &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);
  }
//+------------------------------------------------------------------+
Dateien:
 

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.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 
inwinterborn:

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.


      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.

int H;
double  TesterStatistics( );
void OnTick()
{
if (H!=Hour( ))
if (Hour( )==10||Hour( )==16||Hour( )==20||Hour( )==1)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,Ask+400*Point,Ask-200*Point,"C2",123 );
H=Hour( );
}
}
double OnTester()
{
TesterStatistics( STAT_BALANCEMIN  );
Print("-----------TesterStatistics( STAT_BALANCEMIN  )--------------",TesterStatistics( STAT_BALANCEMIN  )); 
}
 
ANDREY:

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.

int H;
double  TesterStatistics( );
void OnTick()

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.

int H;
//double  TesterStatistics( );
void OnTick()
{
if (H!=Hour( ))
if (Hour( )==10||Hour( )==16||Hour( )==20||Hour( )==1)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,Ask+400*Point,Ask-200*Point,"C2",123 );
H=Hour( );
}
}
double OnTester()
{
TesterStatistics( STAT_BALANCEMIN  );
Print("-----------TesterStatistics( STAT_BALANCEMIN  )--------------",TesterStatistics( STAT_BALANCEMIN  )); 
}
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
 
Guten Morgen! Wie kann ich die Anzeige von Höchst- und Tiefstwerten in einem Diagramm implementieren? Und die gleiche Farbe hervorheben.