MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1154

 

エムティーフォー

このアイテムは何ですか?どこにも説明がないのですが?

デフォルトで無効にするにはどうしたらいいですか?


 
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);
  }

マニュアルにあるcryptoの例を実行しようとしていますが、CRYPT_DES メソッドの代わりにCRYPT_AES256を 使用しています。結果はCryptEncode メソッド後にエラー4029が 発生

 
Dmitri Custurov:

マニュアルにあるcryptoのサンプルを実行しようとしていますが、CRYPT_DES メソッドの代わりにCRYPT_AES256を 使用しています。その結果CryptEncode メソッド後にエラー4029が 発生する

図式化した。もっと丁寧なキーが必要だ)

 

こんにちは。

私は頭が悪く、自分では解決できないので、何が問題なのか、少なくとも正しい方向を示すようなアドバイスをお願いします。

異なる指標がシンクロして歴史の断片を示し始めている。毎日ではなく、時々起こります。

インジケータが動的に読み込まれた履歴を正しく処理しないことが原因だと思いました。更新履歴のインジケータの正しい更新に関することはすべて試したのですが、他にどうすればよいのかわかりません。

アルパリ・ブローカー2020.03.13よりMT5 ビルド2363。

スクリーンショットでは、まず "失われた "バージョンを表示しています。

その後、手動アップデート後に正しいバージョンになります。

//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
ファイル:
 

こんにちは。

MQL5でこんな質問があります。OnChartEvent()関数を 強制的に起動させるにはどうしたらよいですか?何か標準的な方法があるのでしょうか?

そのために、ChartNavigate()関数を使い、OnChartEvent()から実行するようにしています。しかし、動作が不安定です。多くのティックが入ると、なぜかChartNavigate()を呼び出した後、OnChartEvent()が再起動しないことがしばしばあります。ChartNavigate()とtickの到着速度がどう関係しているのか理解できませんが、それにしてもこの現象は起こります。

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

こんにちは。

私は頭が悪く、自分では解決できないので、何が問題なのか、少なくとも正しい方向を示すようなアドバイスをお願いします。


      loc_prev_calculated = 0;    // чтобы индикатор не висел "голым" до следующей котировки, вычисляю индикатор из того, что есть
      return(true);

最近、無駄に追加したのかも...。

削除
loc_prev_calculated 

に置き換えた。

      return(false);

今後も注目していきたい。


MT5に標準装備されているインジケーターについて教えてください。上のスクリーンショットのように、バタバタしてしまうのでしょうか?

 

皆さんこんにちは!
ダブルOnTester()関数とTesterStatistics( )関数をマスターしています。MT4のテスターで、毎日10時、16時、20時、01時に1つずつ注文を出すという簡単なコードを書きました。テスト終了時に、TesterStatistics( )関数は 最小のバランス値(つまり相対的なドローダウン)を返します。

課題

TesterStatistics( ) は、すべてのオープンオーダーの最小のバランス値を返します。

質問

ある特定の時間、 例えば16:00にオープンした注文に対してのみ、TesterStatistics()が最小の残高値を返すようにするには、どのように言語構成を使用すればよいですか?このとき、コードで指定されたすべての命令を同時にテストする必要があります。つまり、TesterStatistics は 16:00 にオープンした 1 つの注文の残高推移を追跡し、テスト終了時に 16:00 にオープンした注文の最小残高値のみを表示する必要があります。

私のコードに必要な言語コンストラクトを挿入していただければ幸いです。自分の問題を解決するアルゴリズムがすぐに理解できるようになる。
以下は私のコードです。

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:

皆さん、ごきげんよう。
ダブルのOnTester()とTesterStatistics()をマスターしました。MT4のテスターで、毎日10時、16時、20時、01時に1つずつ注文を出すという簡単なコードを書きました。テスト終了後、関数TesterStatisticsは最小のバランス値(つまり相対的なドローダウン)を返します。

課題

TesterStatistics( ) は、すべての未決済注文の最低残高値を返します。

質問

TesterStatistics()が、ある特定の時間、 例えば16:00にオープンした注文に対してのみ、最小の残高値を返すようにするには、どのような言語構成を使用すればよいのでしょうか。このとき、コードで指定されたすべての命令を同時にテストする必要があります。つまり、TesterStatistics( )は16:00にオープンした1つの注文のみの残高推移を追跡し、16:00にオープンした注文のみの残高の最小値を返さなければならないのです。

私のコードに必要な言語を挿入していただければ幸いです。これによって、私の問題を解決するためのアルゴリズムが非常に早く理解できるようになります。
以下は私のコードです。

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

何ですか?

 
 Сергей Таболин
:

こんなものなのでしょうか?

ご感想をお寄せいただきありがとうございました。おかげさまで、グローバル変数 Hの宣言と一緒にTesterStatistics( ); 関数を指定することに気がつきました。は私のミスです。直しました。

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
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
 
おはようございます。チャートに高値・安値のバーデータを表示させるにはどうしたらよいですか?そして同色を強調する。