記事「多通貨エキスパートアドバイザーの開発(第20回):自動プロジェクト最適化段階のコンベアの配置(I)」についてのディスカッション

 

新しい記事「多通貨エキスパートアドバイザーの開発(第20回):自動プロジェクト最適化段階のコンベアの配置(I)」はパブリッシュされました:

私たちはすでに、自動最適化を支援するいくつかのコンポーネントを作成しています。作成の過程では、最小限の動作するコードを作るところからリファクタリングを経て、改善されたコードを得るという従来の循環的な構造に従いました。そろそろ、私たちが作成しているシステムの重要なコンポーネントでもあるデータベースの整理を始める時期です。

本連載では、人間の介入なしで一つのトレーディング戦略のパラメータの良い組み合わせを見つけることができる自動最適化システムを作ろうとしています。これらの組み合わせは最終的に一つのエキスパートアドバイザー(EA)に統合されます。目標は第9回第11回でさらに詳しく設定されています。このような検索のプロセス自体は1つのEA(最適化EA)によって制御され、その動作中に保存する必要のあるすべてのデータはメインのデータベースに格納されます。

データベースには、いくつかのクラスのオブジェクトに関する情報を保存するためのテーブルがあります。一部には、固定された値のセットから取ることができるステータスフィールド(QueuedProcessDoneなど)がありますが、すべてのクラスがこのフィールドを使用しているわけではありません。より正確には、現時点では最適化タスク(task)のみで使用されています。私たちの最適化EAは、次に実行するタスクを選択するためにタスクテーブル(tasks)からQueuedのタスクを検索します。各タスクが完了すると、そのステータスはデータベース上でCompletedに変更されます。

次のステップとして、タスクだけでなく、他のすべてのオブジェクト(jobs、stages、projects)のステータスも自動更新されるように実装し、最終的にデータベースに接続せずに独立して動作できる最終EAを取得するまで、必要なすべてのステージを自動的に実行できるように整備してみましょう。

作者: Yuriy Bykov

 

あなたの例を実行してみました。

groupId_ = 1に設定しました。

しかし、初期化関数でエキスパートが作成されない。これがその結果です:

int OnInit() {
// 資本管理クラスにパラメータを設定する
   CMoney::DepoPart(expectedDrawdown_ / 10.0);
   CMoney::FixedBalance(fixedBalance_);

// ストラテジー・パラメーター・セットを含む初期化文字列
   string strategiesParams = NULL;

// ライブラリから選択されたストラテジーグループのインデックスが有効な場合
   if(groupId_ >= 0 && groupId_ < ArraySize(CGroupsLibrary::s_params)) {
      // 選択されたグループのライブラリから初期化文字列を取り出します。
      strategiesParams = CGroupsLibrary::s_params[groupId_];
   }

// ライブラリのストラテジー・グループが指定されていない場合、操作を中断する。
   if(strategiesParams == NULL) {
      return INIT_FAILED;
   }

// 複数のストラテジーを持つ Expert Advisor の初期化文字列を準備する。
   string expertParams = StringFormat(
                            "class CVirtualAdvisor(\n"
                            "    class CVirtualStrategyGroup(\n"
                            "       [\n"
                            "        %s\n"
                            "       ],%f\n"
                            "    ),\n"
                            "    class CVirtualRiskManager(\n"
                            "       %d,%.2f,%d,%.2f,%.2f,%d,%.2f,%.2f,%d,%.2f,%d,%.2f,%.2f"
                            "    )\n"
                            "    ,%d,%s,%d\n"
                            ")",
                            strategiesParams, scale_,
                            rmIsActive_, rmStartBaseBalance_,
                            rmCalcDailyLossLimit_, rmMaxDailyLossLimit_, rmCloseDailyPart_,
                            rmCalcOverallLossLimit_, rmMaxOverallLossLimit_, rmCloseOverallPart_,
                            rmCalcOverallProfitLimit_, rmMaxOverallProfitLimit_, rmMaxOverallProfitDate_,
                            rmMaxRestoreTime_, rmLastVirtualProfitFactor_,
                            magic_, "SimpleVolumes", useOnlyNewBars_
                         );

   PrintFormat(__FUNCTION__" | Expert Params:\n%s", expertParams);

// 仮想ポジションで動作するExpert Advisorの作成
   expert = NEW(expertParams);

// エキスパートアドバイザーが作成されていない場合は、エラーを返す。
   if(!expert) return INIT_FAILED;

...
}


さらに深く掘り下げると、オブジェクトはCVirtualFactory()では作成されません:

class CVirtualFactory {
public:
   // 初期化文字列からオブジェクトを作成する
   static CFactorable* Create(string p_params) {
      // オブジェクト・クラス名を読む
      string className = CFactorable::ReadClassName(p_params);
      
      // 作成されるオブジェクトへのポインタ
      CFactorable* object = NULL;

      // クラス名に応じて、対応するコンストラクタを呼び出す。
      if(className == "CVirtualAdvisor") {
         object = new CVirtualAdvisor(p_params);
...

何が問題なのか、また、あなたの例を実際に試す方法を教えていただけますか?

ありがとうございます。

 

こんにちは。

パラメータ・ライブラリのエントリを作成する作業、あるいは自動最適化に必要な他のすべてのステップが完了していない可能性があります。例えば、最後のステップであるライブラリへの入力については、第17回で 詳しく説明しています。

しかし、ポイントが異なる可能性もある。理想的には、最終的なEAを実行するのにデータベースは必要ありません。コードを確認して、後で返信します。
 
この記事のコードを見ました。確かに、今のところ自動化の最終段階である、最適化データベースとリンクしていない最終的なEAを自動生成するところまでは到達していない。これは将来の記事で行う予定である。今のところ、結果を得るためにはパイプラインの最初の段階の予備的な実行が必要である。
 

こんにちは、ユーリイ

私はGoogle翻訳を使ってパート20にたどり着きました。 Google翻訳」でググって、ブラウザの新しいタブに置いてください。 右端の検索バーにアイコンが表示されます。 母国語でページを読み込んで、アイコンを押して記事の言語と翻訳する言語を選択してください。 プレスト、私はパート20にいます!完璧な仕事はしてくれませんが、翻訳は99%役に立ちます。

アーカイブソースをエクセルに読み込み、いくつかの列を追加してソートし、コンテンツを並べ替えました。エクセルでの並べ替えに加えて、スプレッドシートを OutLookデータベースに直接インポートすることもできます。


SQLデータベースを確立するための開始記事の特定に困っています。 Simple Volume Stage 1を実行してみましたが、おそらく後戻りして別のSQLデータベースを作成する必要があることを示すフラットラインが得られました。 動作するシステムを得るために必要なプログラムの実行順序の表があると非常に助かります。おそらく、アーカイブ・ソース・テーブルに追加できるだろう。

もうひとつの小さな要望は、インクルード・ファイルの指定に""の代わりに<>オプションを使ってほしいということです。 私はエキスパート・ディレクトリとインクルード・ディレクトリで、#include <!!! と、あなたのシステムを分けて管理しています!MultiCurrencyVirtualAdvisor.mqh>で分けているので、この変更でサブディレクトリ指定/を追加しやすくなります。

ご意見ありがとうございました。

ケープコッダ

ファイル:
 

こんにちは。

プロジェクト、ステージ、作業、タスクに関する情報をデータベースに入力する方法については、第13、18、19回をご覧ください。これはメイントピックではないので、必要な情報は記事の最後に近いところにあります。例えば、パート18:

Проверив, что в базу данных теперь корректно попадают результаты проходов, совершаемых с использованием форвард-периода, проведём более приближенный к реальным условиям тест работы автоматической оптимизации. Для этого в чистую базу данных добавим уже два этапа. На первом будет оптимизироваться одиночный экземпляр торговой стратегии, но только на одном символе и периоде (EURGBP H1) на промежутке 2018 - 2023 годов. Форвард-период на этом этапе использоваться не будет. На втором этапе будет оптимизироваться группа из хороших одиночных экземпляров, полученных на первом этапе. Теперь форвард период уже будет использоваться: под него отводится весь 2023 год.

あるいはパート19のように:

プロジェクト用のデータベースに、"First"、"Clustering passes from first stage"、"Second"、"Second with clustering "という4つのステージを作ろう。各ステージで、H1タイムフレームのEURGBPとGBPUSDのシンボルに対して2つの作品を作成します。第 1 段階の作品では、異なる基準(複合、最大利益、カスタム)で 3 つの最適化タ スクを作成する。残りの作業については、それぞれ1つのタスクを作成する。2018年から2023年までを最適化期間とする。各作業について、入力パラメータの正しい値を指定します。

次回は、補助スクリプトを使ったデータベースの初期充填について説明します。

ライブラリファイルの保存に インクルードフォルダを使用するように変更する計画もあるが、まだその段階には至っていない。

 
Yuriy Bykov 保存に インクルードフォルダを使用するように移行する 計画では、しかし、今のところ、それは来ていない。

ありがとうございました。

 

こんにちは、ユーリイ、

次の記事は投稿されましたか?

 
こんにちは。