初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1358

 

こんにちは。

WebRequestで取得したZIPファイルのバイト列をZIPアーカイブに変換し、MQL5ツールを使用してディスクに解凍するソリューションを探しています。

解決策を探した結果、2015年に発表された記事「サードパーティライブラリを使わないMQL5ツールによるZIPアーカイブの取り扱い」(https://www.mql5.com/ru/articles/1971)にたどり着きました。ここでは、その解決策を示し、ZIPアーカイブを操作するためのCZipクラスを公開しました。しかし、この解決策を適用することができません。コンパイル時に、MetaEditorはCZipクラスライブラリのエラーを理由に実行ファイルをビルドすることができないのです。

私の質問の本質は、次のようなことに集約されます。- CZipクラスのメソッド、特にCreateFromCharArray()とUnpackZipArchive()をスクリプトコードに直接含めて個別に使用するにはどうしたらよいでしょうか。

//+------------------------------------------------------------------+
//|                                                     ZipTask2.mq5 |
//|                                 Copyright 2015, Vasiliy Sokolov. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Vasiliy Sokolov."
#property link      "https://www.mql5.com"
#property version   "1.00"
#include <Zip\Zip.mqh>

CZip Zip;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string cookie,headers;
   string mql_url="https://www.mql5.com/ru/code/download/9";
   int timeout=5000;
   uchar data[],zip_array[];
   if(!WebRequest("GET",mql_url,cookie,NULL,timeout,data,0,zip_array,headers))
     {
      printf("Unable to download ZIP archive from "+mql_url+". Check request and permissions EA.");
      return;
     }
   if(!Zip.CreateFromCharArray(zip_array))
     {
      printf("Loaded bad ZIP archive. Check results array.");
      return;
     }
   printf("Archive successfully loaded. Total files: "+(string)Zip.TotalElements());
   Zip.UnpackZipArchive("Alligator",FILE_COMMON);
  }
//+------------------------------------------------------------------+
Работаем с ZIP-архивами средствами MQL5 без использования сторонних библиотек
Работаем с ZIP-архивами средствами MQL5 без использования сторонних библиотек
  • www.mql5.com
Язык MQL5 развивается, и в него постоянно добавляются новые функции для работы с данными. С некоторых пор, благодаря нововведениям, стало возможно работать с ZIP-архивами штатными средствами MQL5 без привлечения сторонних библиотек DLL. Данная статья подробно описывает, как это делается, на примере описания класса CZip — универсального инструмента для чтения, создания и модификации ZIP-архивов.
 
もう一度質問させてください。
定期的にファイルを作成するサービスがあります(私はFileCloseで すべてを正しく閉じています)。
起動後、通常最初のファイルは正常に作成され、その後FileOpenはエラー5001を返すようになります。
しかし、これはすべてランダムです - 動作するときとしないときがあります。同時に、スクリプトやExpert Advisorで同じコードを実行しても、この問題に気づいたことはありません。
この禁止事項を回避する方法は?
 
Evgeny Dyuka #:
もう一度質問させてください。定期的にファイルを作成するサービスがあります(
FileCloseで すべて正しく閉じています)。起動後、最初のファイルはOKで、その後FileOpenでエラー5001が出ます。 しかし、ランダムに出ます。動くときと動かないときがあるのです。同時に、スクリプトやExpert Advisorで同じコードを実行しても、この問題に気づいたことはありません。この禁止事項を回避する方法は?


誰かがあなたと同じバグを持った同じようなサービスを書いて、修正すべき点を教えてほしいのですか?

 
Alexey Viktorov #:

誰かがあなたと同じバグを持った同じようなサービスを書いて、修正すべき点を教えてほしいのですか?

lisheeを切り出してコードを掲載するようになり、すべてがうまくいきました ))
ファイル検索機能で、FileFindClose()で検索が終了しない状態になっていました。
とにかく、返信ありがとうございました。
 
Evgeny Dyuka #:
コードを掲載するためにリスキーを切り出し始め、すべて動作しました )) ファイル検索機能において、FileFindClose()で検索が終了していませんでした。とにかく、返信ありがとうございました。

はい、ファイルを使用するものは、ファイルを開きます(ファイルへのアクセスを開きます) )))そして、ファイルを閉じる(アクセスする)ことが必要です。

不必要にファイルを閉じると-1が返され、何の影響もありませんが、開き忘れたファイルは多くの問題を引き起こす可能性があります)

 

入力ブロックに私を思い出させることは、ロボットのパラメータにコメントが表示されないことができますか?

sinput long   MagicNumber=123;      // Магический номер

で、パラメータはMagicNumberの代わりにMagicNumberを表示したままになります(これは例です)

 
Fast235 #:

入力ブロックに私を思い出させることは、ロボットのパラメータにコメントが表示されないことができますか?

で、パラメータはMagicNumberの代わりにMagicNumberを表示したままです(これは例です)

'sinput'はパラメータを出力しますが、それを最適化に含める ことはできません。

sinput修飾子#を 持つ変数

input 修飾子を持つ 変数は、プログラムを起動する際に外部パラメータの値を設定するだけでなく、テスターで取引戦略を最適化する際にも必要な 変数です。Expert Advisor で宣言された入力変数のうち、文字列型を除くすべての変数が最適化に参加することができます。

時には、テスターのすべてのパスの領域から、いくつかの外部プログラムパラメータを除外することが必要です。こ のような場合に備えて、メモリモディファイアのsinputが 用意されています。sinputは、静的外部変数の宣言の短縮形であるsinput = static inputです。つまり、EAコードでこのような宣言をすると

sinput       int layers=6;   // Количество слоев

は完全な宣言と同じになります

static input int layers=6;   // Количество слоев

sinput修飾子で宣言された変数は、MQL5プログラムの入力パラメータです。 このパラメータの値は、プログラム起動時に変更することができます。しかし、この変数は入力パラメータの最適化プロセスには参加しません。つまり、与えられた基準によって最適なパラメータ群を探索する際に、その値は探索されません。

ひはんしょり

Expert Advisorには5つの外部パラメータがあり、そのうち「Number of Layers」パラメータはsinputとして宣言れ、6に設定されています。このパラメータはトレード戦略の最適化手順では変更できませんが、使用するために必要な 値を設定することは可能です。Start、Step、Stopの各フィールドは、このような変数の値設定には使用できません。

このように、ある変数にsinput修飾子を設定することで、ユーザーがこのパラメータを最適化することを禁止しているのです。ストラテジーテスターにおいて、端末のユーザーは、最適化処理中に指定された範囲内で自動列挙するための開始値と停止値を設定できないことを意味します。

しかし、このルールには例外があり、ParameterSetRange()関数を 使用して、最適化タスクでsinput変数を変化させることができるのです。この関数は、静的入力(sinput)として 宣言されたものを含む、任意の入力 変数の利用可能な値の範囲をプログラムで制御するために特別に開発されました。もう一つの関数ParameterGetRange() は、最適化が開始されたときに入力変数の値を受け取り(OnTesterInit() ハンドラ内)、必要に応じて、変更ステップと最適化パラメータ値が列挙される範囲を再定義することができるようにするものです。

このように,sinput modifierと入力変数を扱う2つの関数を組み合わせることで,ある入力変数の最適化区間を,他の入力変数の値に応じて柔軟に定義するルールを作成することができる.

Документация по MQL5: Основы языка / Переменные / Input переменные
Документация по MQL5: Основы языка / Переменные / Input переменные
  • www.mql5.com
Input переменные - Переменные - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

sinput I remember, 質問はコメント表示で、EAのパラメータで、コメントの代わりに変数名を表示することができますか?

ps sinputの文字列は単なる一例です)

 
Fast235 #:

sinput思い出した、コメント表示についての質問ですが、EAパラメータで、コメントではなく変数名を表示することは可能でしょうか?

ps sinputの行はちょうど例である)

ただ、';'の後は何も書かないでください。

例-説明 文がある。

input group    "Buy Saucer"
input uchar       InpBuySaucerCode     = 174;   // Buy Saucer: Arrow code (font Wingdings)

を削除し、今度は説明文を削除します。

input group    "Buy Saucer"
input uchar       InpBuySaucerCode     = 174;    


という変数名が表示されます。

 

ただ、';'の後は何も書かないでください。

それが質問でした。コメントはありますが、パラメータに変数名を出力する必要があります。

何かコツがあるのかもしれませんね...。