エキスパート: 書籍「MQL5を使用したアルゴリズム取引のためのニューラルネットワーク」からの例 - ページ 2

 

こんにちは、

この本の最初のスクリプトを実行しようとしています。

ファイル名はinitial_data.mq5です。

最初のステップでスクリプトを実行すると

If(CopyClose(_Symbol, PERIOD_M5, Start, End, close) <= 0 ||)

CopyOpen(_Symbol, PERIOD_M5, Start, End, open) <= 0 ||)

コピーハイ(_Symbol, PERIOD_M5, 開始, 終了, ハイ) <= 0 ||| コピーロー(_Symbol, PERIOD_M5, 開始, 終了, クローズ) <= 0

コピー・ロー(_Symbol, PERIOD_M5, 開始, 終了, ロー) <= 0)

を返す;

CopyCloseは常に-1に等しい。

スクリプトはクラッシュし、再実行しても解決しません。

これは正常な状態であり、サーバーからのデータがないことを意味します。

しかし、データファイルへのパスがこのスクリプトにどのように記述されているのかがよくわかりません。

MQL5のドキュメントには書かれています:


例えば、MetaQuotes-DemoトレードサーバーからのEURUSDシンボルデータは、terminal_directorybasesのdirectoryフォルダにあります


そして、.hccの解像度のファイルと、H4.hcのようなファイルがあるサブディレクトリー˶cacheがあります。


しかし、initial_data.mq5スクリプトの中で、パスが書かれているのは1箇所だけです。

PrintFormat("Correlation coefficients saved to file %s"、

TerminalInfoString(TERMINAL_DATA_PATH), FileName);


TERMINAL_DATA_PATHを出力する。

2024.06.16 22:53:39.982 path (EURUSD,M5) dataPath =C:◆UsersHPAppData ◆Roaming ◆MetaQuotes ◆Terminal ◆D0E8209F77C8CF37AD8BF550E51FF075


これらのファイルへのパスを正しく指定するにはどうすればよいですか?それとも、MQL5のロジックに従ってターミナル・ディレクトリから自動的にフックすべきですか?

データをcsvファイルにダウンロードする方法を教えてください。


 
bobozel1 #:

取引、自動取引システム、取引戦略のテストに関するフォーラム

MQL4とMQL5に関する初心者の質問、アルゴリズムとコードに関するヘルプとディスカッション

Aleksey Vyazmikin, 2024.06.18 06:28 pm

#define FileName  "correlation.csv"
//+------------------------------------------------------------------+
//| 外部パラメータ|
//+------------------------------------------------------------------+
input datetime Start = D'2015.01.01 00:00:00';  // 期首
input datetime End = D'2020.12.31 23:59:00';    // 期末
//--- データを書き込むためにファイルを開く
   int handle = FileOpen(FileName, FILE_WRITE | FILE_CSV | FILE_ANSI, "\t", CP_UTF8);
   if(handle == INVALID_HANDLE)
     {
      PrintFormat("Error of open file %s: %d", FileName, GetLastError());
      return;
     }
ファイルオープン

パラメータ

オープンフラグ

[in] ファイルを操作するモードを定義するフラグの組み合わせ。フラグは以下のように定義される:
FILE_READ ファイルが読み込み用にオープン
FILE_WRITEファイルが書き込み用にオープン
FILE_BINバイナリ読み書きモード(文字列から文字列への変換は行われない)
FILE_CSVcsv タイプのファイル(書き込まれた要素はすべて適切なタイプ(unicode または ansi)の文字列に変換され、デリミタで区切られる)
FILE_TXTプレーン・テキスト・ファイル(同じ csv、ただし区切り記号は考慮しない)
FILE_ANSIANSI型の文字列(1バイト文字)
FILE_UNICODEUNICODE型の文字列(2バイト文字)
FILE_SHARE_READ複数プログラムによる共有読み込みアクセス
FILE_SHARE_WRITE複数プログラムによる共有書き込みアクセス
FILE_COMMON全クライアント端末の共通フォルダ内のファイルの場所 ■TerminalCommonFiles.

FileOpen

注意

セキュリティ上の理由から、MQL5言語ではファイルの操作は厳密に制御されています。MQL5言語ツールを使用してファイル操作に使用されるファイルは、ファイル "サンドボックス "の外に配置できません。

ファイルを特定のエンコーディングで読み取る必要がある場合(codepageパラメータにcodepage 値が指定されている)、FILE_ANSIフラグを設定する必要があります。FILE_ANSIフラグを指定しないと、テキストファイルは変換されずにUnicodeで読み込まれます。

ファイルは、クライアント端末のMQL5Filesサブフォルダ(テストの場合はtesting agent_agentMQL5Filesディレクトリ)のフォルダで開か れます。フラグにFILE_COMMONが指定された場合、ファイルは全クライアント端末の共通フォル ダーで開かれます

以下の規則に従って、"名前付きチャネル "を開くことができる:

  • チャンネル名は、以下の形式の文字列でなければならない:「ここで、servernameはネットワーク上のサーバー名で、pipenameはチャ ネル名です。同一コンピュータ上でチャネルを使用する場合、servername は省略できるが、代わりにドットを使用する。チャネルに接続しようとするクライアントは、チャネル名を知っていなければならない。
  • FileFlush()FileSeek() は、チャネルからの読み取りとチャネルへの書き込みの連続操作の 間に、ファイルの先頭で呼び出す必要があります。

上記の行では特殊なバックスラッシュ文字'˶'が使用されているので、MQL5プロ グラムで名前を記述するときは'˶'を2倍にしてください。

名前付きチャンネルでの操作の詳細については、"Communication with MetaTrader 5 via Named Channels without DLL"の記事をお読みください。


 
Aleksey Vyazmikin #

正直、ロボットが書いているような回答で、何も理解できなかった。作成するファイルの書き出し先はわかるのですが、作成されません。

具体的な質問なのですが、.hccや.hcファイルからデータを取り出し、.csvに書き込むにはどうすればいいのでしょうか?

結果として本に載っているinitial_data.mq5 スクリプトを実行しています

CopyCloseは常に-1です。これを修正するには?

データファイルへのパスが正しく綴られていないため、これらのファイルが表示されないのではと疑っています。

データファイルへのパスを正しく綴るにはどうすればいいでしょうか?

私の場合、データファイルはサンドボックス内のterminal_directorybasesMetaQuotes-DemohistoryEURUSDフォルダにあります。

1週間も悩んでいて、すべて読みましたが、解決策が見つかりません。助けてください。

 
bobozel1 #:

正直、ロボットが書いているような回答で、何も理解できなかった。作成されるファイルがどこに書かれているかはわかるのだが、作成されない。

具体的な質問なのですが、.hccや.hcファイルからデータを取り出し、.csvに書き込むにはどうすればいいのでしょうか?

結果として本に載っているinitial_data.mq5 スクリプトを実行しています

CopyCloseは常に-1です。これを修正する方法を教えてください。

データファイルへのパスが正しく綴られていないため、これらのファイルが表示されないのではと疑っています。

データファイルへのパスを正しく指定する方法を教えてください。

私の場合、データファイルはサンドボックスの中の terminal_terminal_directoryMetaQuotes-Demohistory ㊤ フォルダにあります。

1週間も悩んでいて、すべて読みましたが、解決策が見つかりません。助けてください。

すべてのデータはプラットフォームから取得され、ユーザーはターミナルがどこから取得するか、つまりどのファイルから取得するかは気にしません。

スクリプトはチャートに反映されたデータで動作します。

チャート上に引用を要求している日付があるかどうか確認してください。

 
Aleksey Vyazmikin #:

すべてのデータはプラットフォームから取得され、ユーザーは端末がどこからデータを取得するか、つまりどのファイルから取得するかは気にしない。

スクリプトはチャートに反映されたデータで動作する。

チャート上に引用を要求する日付があるかどうか確認してください。

この意味を説明してください。

スクリプトには

input datetime Start = D'2015.01.01 00:00:00'; // 期間の始まり

input datetime End = D'2020.12.31 23:59:00'; // 期間終了

M5について

M5上のEURUSD チャートを2015.01.01まで スクロールし、その上でスクリプトを実行 すべきでしょうか?

それともMNでスクリプトを実行できますか?新しいティックで最初に戻るのですか?
 
bobozel1 #:

その意味を説明していただけますか?

スクリプトには

input datetime Start = D'2015.01.01 00:00:00'; // 期間の始まり

input datetime End = D'2020.12.31 23:59:00'; // 期間終了

M5について

M5のEURUSD チャートを2015.01.01まで スクロールし、その上でスクリプトを実行 する必要がありますか

それともMNでスクリプトを実行できますか?それともMNでスクリプトを実行できますか?

ターミナルのヘルプを 読んでください。そしてもうひとつ

ヒストリーの深さには、ウィンドウに表示されるバーの最大数を設定することができます。変更を有効にするには、ターミナルをリロードする必要がある。

したがって、すべてのTFのヒストリーの最大深度を、作業に必要な最小のTFで一度に設定する必要がある。

日足の 100 バーと分足の 100 バーは、バーでは同じ深さになるが、日付では同じ深さにならないことは明らかである。

必要な値または「無制限」を設定し、ターミナルをリロードすると、必要な期間の履歴が利用可能であれば、毎月のTFでスクリプトを実行することができます。


 
Aleksey Vyazmikin #:

ターミナルのヘルプを 読んでください。そしてもうひとつ

ウィンドウ内のバーの最大数を通して、ヒストリーの深さの設定があることを知るだろう。変更を有効にするには、ターミナルをリロードする必要がある。

したがって、すべてのTFのヒストリーの最大深度を最小のTFで一度に設定する必要があり、これは作業上必要である。

日足100本と分足100本では、棒グラフでは同じ深さになるが、日付では同じ深さにならないことは明らかである。

必要な値または「無制限」を設定し、ターミナルをリロードすると、必要な期間の履歴が利用可能であれば、月足のTFでスクリプトを実行することができます。


ありがとうございます!すべてうまくいきました。
 
bobozel1 #:
ありがとう!うまくいったよ。

どういたしまして。

 
一番厄介なのはそこではない。一番厄介なのは、パラメータを最適化した後、1年間しか勝てないことだ。もう1年変えれば、また使えなくなる。つまり、筆者のこれは実現不可能なのだ。パラメータは年によって大きく異なるかもしれない。もしかしたら、毎年利益を上げられるようなパラメータは存在しないのかもしれない!
 

ドミトリー 、この本への尽力をありがとう。本当に役に立ちます。

neuronbase.mqhでは、ElasticNetの正則化メソッドを以下のように実装しています。

m_cWeights.m_mMatrix -= m_cWeights.m_mMatrix * Lambda[1] + Lambda[0] です。

しかし、基本式(+) やKerasのソースコード(+)などとは異なります。

あなたの実装方法について説明してください。なぜ完全な式の代わりにラムダを使うのか、なぜそのうちの1つで重みを乗算し、別の1つで合計するのか。

Dmitriy Gizlyk
Dmitriy Gizlyk
  • 2024.07.15
  • www.mql5.com
Trader's profile