あなたの例を実行してみました。
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); ...
何が問題なのか、また、あなたの例を実際に試す方法を教えていただけますか?
ありがとうございます。
こんにちは、ユーリイ
私はGoogle翻訳を使ってパート20にたどり着きました。 Google翻訳」でググって、ブラウザの新しいタブに置いてください。 右端の検索バーにアイコンが表示されます。 母国語でページを読み込んで、アイコンを押して記事の言語と翻訳する言語を選択してください。 プレスト、私はパート20にいます!完璧な仕事はしてくれませんが、翻訳は99%役に立ちます。
アーカイブソースをエクセルに読み込み、いくつかの列を追加してソートし、コンテンツを並べ替えました。エクセルでの並べ替えに加えて、スプレッドシートを OutLookデータベースに直接インポートすることもできます。
SQLデータベースを確立するための開始記事の特定に困っています。 Simple Volume Stage 1を実行してみましたが、おそらく後戻りして別のSQLデータベースを作成する必要があることを示すフラットラインが得られました。 動作するシステムを得るために必要なプログラムの実行順序の表があると非常に助かります。おそらく、アーカイブ・ソース・テーブルに追加できるだろう。
もうひとつの小さな要望は、インクルード・ファイルの指定に""の代わりに<>オプションを使ってほしいということです。 私はエキスパート・ディレクトリとインクルード・ディレクトリで、#include <!!! と、あなたのシステムを分けて管理しています!MultiCurrencyVirtualAdvisor.mqh>で分けているので、この変更でサブディレクトリ指定/を追加しやすくなります。
ご意見ありがとうございました。
ケープコッダ
こんにちは。
プロジェクト、ステージ、作業、タスクに関する情報をデータベースに入力する方法については、第13、18、19回をご覧ください。これはメイントピックではないので、必要な情報は記事の最後に近いところにあります。例えば、パート18:
あるいはパート19のように:
次回は、補助スクリプトを使ったデータベースの初期充填について説明します。
ライブラリファイルの保存に インクルードフォルダを使用するように変更する計画もあるが、まだその段階には至っていない。
こんにちは、ユーリイ、
次の記事は投稿されましたか?
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
新しい記事「多通貨エキスパートアドバイザーの開発(第20回):自動プロジェクト最適化段階のコンベアの配置(I)」はパブリッシュされました:
本連載では、人間の介入なしで一つのトレーディング戦略のパラメータの良い組み合わせを見つけることができる自動最適化システムを作ろうとしています。これらの組み合わせは最終的に一つのエキスパートアドバイザー(EA)に統合されます。目標は第9回と第11回でさらに詳しく設定されています。このような検索のプロセス自体は1つのEA(最適化EA)によって制御され、その動作中に保存する必要のあるすべてのデータはメインのデータベースに格納されます。
データベースには、いくつかのクラスのオブジェクトに関する情報を保存するためのテーブルがあります。一部には、固定された値のセットから取ることができるステータスフィールド(QueuedProcessDoneなど)がありますが、すべてのクラスがこのフィールドを使用しているわけではありません。より正確には、現時点では最適化タスク(task)のみで使用されています。私たちの最適化EAは、次に実行するタスクを選択するためにタスクテーブル(tasks)からQueuedのタスクを検索します。各タスクが完了すると、そのステータスはデータベース上でCompletedに変更されます。
次のステップとして、タスクだけでなく、他のすべてのオブジェクト(jobs、stages、projects)のステータスも自動更新されるように実装し、最終的にデータベースに接続せずに独立して動作できる最終EAを取得するまで、必要なすべてのステージを自動的に実行できるように整備してみましょう。
作者: Yuriy Bykov