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

 
Sergey Likho:

アルゴリズムの書き方はどのようにすればよいのでしょうか?


タスク

1つのExpert Advisorが異なるチャートで動作する。

口座、残高、持分などの情報を分単位で記載したファイルが必要です。

今、すべてのExpert Advisorは、すべての情報を1つのファイルに書き込むことが判明しました。その結果、不要なエントリーが多くなってしまいました。

1つのボットだけがファイルに記録を作るようにする(そして、それが削除されると、もう1つのボットが記録を作り始めるなど)、考えられるオリジナルの解決策は何でしょうか?

OnInit()でEA名または他のオブジェクトでグラフィカルオブジェクトを作成します。 EAが既にオブジェクトを作成している場合は、それを使用できます。例えば "MyEA":ObjectCreate(0,"MyEA",OBJ_...,...)

OnTick()でファイルに書き込む際、最初のチャートIDにこのラベルがあるかどうかを確認する必要があります。

オーバーシュートを使わなければならないのです。

string ChartGetSymb()
  {
   string symb="";
   long chartID=ChartFirst();
   while(chartID!=-1) 
    {
      if(ObjectGetString(chartID,"MyEA",OBJPROP_NAME)=="MyEA")
       {
        symb=ChartSymbol(chartID);
        break;
       }
      chartID=ChartNext(chartID);
     }
   return(symb);
  }

Expert Advisorがインストールされた最初のチャート/シンボルを取得します。

そして、ファイルに書き込む前に、最初のExpert Advisorと比較します。

if(ChartGetSymb() == Symbol()) {
  записываем в файл, если соответствует символу, иначе не записываем
}


簡単な構成ではありませんが、グローバル変数に書き込むよりはましです

 
Artyom Trishkin:

標準のMAを取り、バッファのデータ型を変更してコンパイルし、端末のデータウィンドウ(Ctrl+D)で確認する。

それだと端末に表示されないので、どうしようもない。しかし、ZigZagインジケータで確認したところ、INDICATOR_CALCULATIONSとして宣言されているHighとLowの2つのバッファが追加されています。また、ターミナルには表示されませんが、プログラムからも取得されます。とにかく情報をありがとうございます。
 
Sergey Likho:

ChartID()をターミナルのグローバル変数 に書き込むとエラーになる。このナンセンスさは何?


このコードを試してみてください。


このコードを実行した結果

2019.11.29 15:22:07.453 Script 00 EURUSD,H1: removed
2019.11.29 15:22:07.453 00 EURUSD,H1: uninit reason 0
2019.11.29 15:22:07.453 00 EURUSD,H1: GVAR id:131992895281608496 GV_id:131992895281608496
2019.11.29 15:22:07.453 00 EURUSD,H1: initialized
2019.11.29 15:22:07.433 Script Test\00 EURUSD,H1: loaded successfully
 
Vitaly Muzichenko:

OnInit()でEAまたは他のオブジェクトの名前でグラフィカルオブジェクトを作成します。おそらくEAはすでにオブジェクトを作成しているので、それを使用できます。

OnTick()でファイルに書き込む際、最初のチャートIDにこのラベルがあるかどうかを確認する必要があります。

オーバーシュートを使わなければならないのです。


Expert Advisorがインストールされた最初のチャート/シンボルを取得します。

そして、ファイルに書き込む前に、最初のExpert Advisorと比較します。


簡単な構造ではありませんが、グローバル変数に書き込むよりはましです

はい、いい考えです。

ありがとうございます。


質問、EAが(エラーなどで)削除されても、オブジェクトが残っていた場合はどうするのですか?チャートが完全に閉じてしまった場合、どうにかして「メイン」EAを再割り当てしなければならないのでしょうか?

 
Sergey Likho:

はい、それは良いアイデアですね。

ありがとうございます。


問題は、EAが(エラーなどで)削除されたが、オブジェクトは残っていた場合である。チャートが完全に閉じられた場合、どうにかして「メイン」Expert Advisorを再割り当てする必要がありますが、どうすればよいでしょうか?

誤ってExpert Advisorを削除してしまい、オブジェクトが残ってしまった場合など、1つだけエラーが発生するケースがありますが、私の記憶では、MT4でそのようなエラーはなかったと思います。それ以外の場合は、チーフエキスパートアドバイザーを再任する。


追伸:Expert Advisorでエラー時にOnDeInit()が出力され、チャートから自己削除されることを確認してみてください。おそらく、変数を作ってtickを数え、11tick目に10/0で割れば簡単に確認できるはずです。

OnDeInit()でPrintを設定し、初期化が発生した原因を 確認し、発生した場合はその原因/番号でチャートからオブジェクト "MyEA "を削除する。

t++;
if(t > 10) {
 int e = 10;
 e /= 0;
}

自分で確認する時間がないので、結果について書くことができる

 
Vitaly Muzichenko:

OnInit()でEAまたは他のオブジェクトの名前でグラフィカルオブジェクトを作成します。おそらくEAはすでにオブジェクトを作成しているので、それを使用できます。

OnTick()でファイルに書き込む際、最初のチャートIDにこのラベルがあるかどうかを確認する必要があります。

オーバーシュートを使わなければならないのです。


Expert Advisorがインストールされた最初のチャート/シンボルを取得します。

そして、ファイルに書き込む前に、最初のExpert Advisorと比較します。


簡単な構成ではありませんが、グローバル変数に書き込むよりはましです

勘違いしているのでは?GVは毎回ディスクに書き込まれるわけではありません。そうでなければ、GVを強制的にディスク化する必要はない。

void  GlobalVariablesFlush();
その上、EAやオブジェクトを求めて全てのチャートを調べるとか...。Vitaly、それは残念・・・。
 
Alexey Viktorov:

勘違いしているのでは?GVは毎回ディスクに書き込ま れるわけではありません。そうでなければ、強制的にGVをディスクに書き込むという機能は必要ないでしょう。

EAとオブジェクトを探すために、すべてのチャートに目を通すことは、プラスになります。Vitaly、本当に残念だ...。

GlobalVariableSet("GV",ID) です。

プロファイル -> gvariables.dat


 
Vitaly Muzichenko:

GlobalVariableSet("GV",ID) のように表記することもできます。

プロファイル -> gvariables.dat


作成時はそうかもしれませんが、そこに書き込むアプリケーションを無効化する前に上書きした場合は、確認が必要です。怠け者の私には無理です。それでも純粋に理論的には、毎回ディスクに書き込むとなると、上記の機能はガラガラになってしまう。

 
Sergey Likho:

そんなの無理だよ。

フォルダ内のデータを同期さ せるWindowsのプログラムを探してください。そして、Expert Advisorが新しいターミナルに自動的にコピーされるように設定します。

私の理解では、このようなプログラムはありますが、ファイルを扱うだけで、テキスト文書であれば、内容をコピーすることもなく、ファイルを置き換えることもなく、もしかしたら、正常なプログラムが見つかっていないのかもしれませんね。Expert Advisorやロボットファイルのダウンロード元を指定するオプションを開発者が考慮しなかったのは残念です。通常行われているようにパスを指定できると思ったのですが、上でご指摘のように不可能です。

 
Seric29:

私の理解では、そのようなプログラムはありますが、それはファイルに対してのみ動作し、テキスト文書であれば、内容はコピーされず、ファイルは置き換えられません、多分、私は正常なプログラムを見つけられませんでした。ロボットファイルやエキスパートファイルの取得にパスを設定できることを開発者が考慮していないのはまずいと思います。 普通にパスを設定できるかと思いきや、既にご指摘の通りできないようです。

この記事の中で、"すべての端末に共有フォルダーがある "という言葉に注目してください。

これは不可能です。 トレーディング、自動取引システム、取引戦略のテストに関するフォーラム

マーケットプレイスの製品を使いたい場合はどうすればよいですか?

セルゲイ・タボリン, 2019.11.23 08:17

私がどこでどうインストールすればいいのかわからないと本気で思っているのでしょうか?)))

全端末に共通フォルダーを搭載

マーケットから無料のインジケータをダウンロードしました。ハードウェアにバインドされます。

一方のハードでは動作するが、もう一方のハードでは動作しないのはなぜか?

明らかな結論は、少なくともハードウェアだけでなく、バインドされる...ということです。


どのように行われるのか、情報を検索して、出発...これをフォルダーリンクと呼びます。