MT4開発者、プログラマーからのヘルプが欲しい - ページ 3

 
固定化された専門家は、モーヴェ・トンです。
 
Integer:

2.新フィーチャの途中経過以前は、ループしたExpert Advisorのプロパティウィンドウが開かなかった。今はそうなっているので、パラメータの変化に対するリアクションがあってもいいと思います。あるいは、ユーザーの混乱を避けるために、プロパティウィンドウを閉じることもできる。

そのとおりです。それを言いたいのに、誰も聞いてくれない。

サービスデスク」は、状況も把握せず、断ったのだと思います。以下は、リクエストメッセージの抜粋である。

なぜ、プログラマーに何ができて何ができないかを言うのですか?放送はエラーなく行われた。実行は間違いなく行われます。ユーザーは入力パラメータタブに「A=5」と表示され、システムはExpert Advisorに「A=1」を与えます。start() ループとwhile() ループのどちらを使うかは好みの問題です。あなたが主張するように、ループは無限ではありません。Expert Advisorのテキストを注意深く見ていると、while(true)ではなくwhile(!IsStopped()&&IsConnected()&&IsExpertEnabled()) になっていますね。以前のMT4ビルドでは、Sleep() 関数実行中にユーザーが入力パラメータの値を変更することはできませんでした。新しい建物には、もうそのような障壁はありません。このような場合、入力パラメータの変更を禁止するか、「入力」タブだけでなく「カウンタ」でも入力パラメータを変更するようにしてください。それだけです。


整数値

1.MetaTrader4ターミナルをインストールした際、インストールウィンドウにフォーラムへの招待状がありますが、このフォーラムは別のものではありません。

申し訳ございませんでした。しかし、MT4とMT5の境界線がだんだんなくなってきていることに気づきました。そして、「www.mql5.com」の私のプロフィールから、「サービスデスク」に応募したのです(できれば最初で最後にしてほしい)。私は、ターミナルのバージョンを選択する可能性を明確に示すフォームに記入しました - 私は "MT4 "を選択しました。

ここにもすでに閉じた注文書からの抜粋がある(自分たちで急いで閉じた後に注文書を読むのかどうかは知らない)(もちろん、おかしいが、ノミを捕まえるという諺しか思い浮かばない)。

このような場合、なぜユーザーは新しい値を明確に見ることができるのでしょうか?EAが完全に機能する間は、これらの新しい価値はフィクションであり、EAが利用することはできません。RefreshRates() 関数は、EAが任意のサイクルで現在の相場を取得することを可能にします。入力パラメータの更新値を取得する同様の機能を提供するか、既存のRefreshRates() 関数にこの機能を追加してはいかがでしょうか。

AutoTrading」ボタンを2回押すと(EAをオフとオンに切り替える)、サイクルが中断され、その後新しい値が利用可能になりますが、GRAPHICS SYMBOLのティック(新しい気配値)の後にのみ利用可能です。しかも、いつ来るかわからないし、Expert Advisorは他のシンボルも処理することが禁じられているわけではないので、ユーザーはこのタイムロスを必要としない。だから、「バック・トゥ・ザ・フューチャー」みたいなものが出てくるんです。新しいMT4がリリースされました。よりモダンに、より速く。他のシンボルの相場が盛り上がっているときに、ONEシンボルの相場を待っていると、画面上でとてもよく減速するそうです。つまり、今はお客様に「パラメータを変えて、『Expert Advisors』のボタンを2回押してオフとオンにして、海辺で待っていれば、いつか "カチカチ "になりますよ」と言っているんです。

これまで助けを求めたことはなかったし、今後も求めないことを望んでいる。遅かれ早かれ、この "フック "を回避する方法を見つけることができるだろう。これはMT4がある限り、そしてもちろん今は話したくないが、その「ストラテジーテスター」がある限り、常にそうであった。しかし、もちろんリアルタイムでの不正確さは、特に、時にはかなり大きな金額を賭けているユーザーにとっては、非常に重大なことです。このバグを回避する効率的な方法が他に見当たらないので、「サービスデスク」を頼ったのですが、正直なところ、修理を拒否されるのではないかとさえ思っていました。まあ...

何事も「おかげさま」ではなく「にもかかわらず」やらなければならないのが悪いのです。

 
Integer:
Wexさん、タイマーを使ってください、今はループしなくても大丈夫です。

もちろん、おっしゃるとおり、新しいEAは非常に異なるプログラムを組むことができます。しかし、すでによくプログラムされたEAがたくさんあるのです。そして、お客様は、お金を払ったものがなぜ突然正常に動かなくなるのか、理解できない。

つまり、すでに開発されたEA(Expert Advisorやスクリプト、あるいはインジケーター)が、MT4の新しいビルドと原則的に互換性がない、という非常に不愉快な傾向があるのです。

それに、プログラミングで非標準のものを使うことは、原則的になかったんです。私のEAは、MQL4 BOMBの特徴と機能のみをベースにしています。すでに多くのインディケータやEA(ほとんどが複雑なもの、いわゆる「多通貨対応」のもの)が氾濫しており、MT4の新しいビルドではまったく動作しないか、一見うまく動作していても、私の例のような状況が現れるのです。(翻訳ミスについては、例えば、予約語リストの拡張により、"new "という名前の変数があることに気づきました(なるほど)。

 

一つは、ドキュメントを読むのが億劫なこと。残りはとても賢いことを示す...。ふぅ〜。

コードをキャッチする :)

あなたの問題が何なのか、まだわかりません。

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright     "Grizzly_v :)"
#property link          "http://www.mql5.com"
//+------------------------------------------------------------------+
extern int      A1=      1;
extern int      A2=      2;
int      C1,C2;
//+------------------------------------------------------------------+
int OnInit(){
   C1=A1;
   C2=A2;
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason){
   Comment("");
}
//+------------------------------------------------------------------+
void OnTick(){
   string   t;

   t=TimeToStr(TimeCurrent(),TIME_MINUTES|TIME_SECONDS);
   Comment(t+"\nA1="+A1+"   A2="+A2+"\nC1="+C1+"   C2="+C2);
}
//+------------------------------------------------------------------+
 
grizzly_v:

一つは、ドキュメントを読むのが億劫なこと。残りはとても賢いことを示す...。ふぅ〜。

コードをキャッチする :)

あなたの問題が何なのか、まだわかりません。

問題は、Expert Advisor がループしているため、OnTick イベントが発生せず、変更されたパラメータが見えないことです。
 

それじゃ、これでおしまい。新機能を通すだけで、同じサイクルになります。

  extern int      A1=      1;
  extern int      A2=      2;
         int      C1,C2;
//+------------------------------------------------------------------+
int OnInit(){
   C1=A1;
   C2=A2;
   EventSetMillisecondTimer(100);
   return(0);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason){
   EventKillTimer();
}
//+------------------------------------------------------------------+
void OnTimer(){
   string   t;
   RefreshRates();
   t=TimeToStr(TimeCurrent(),TIME_MINUTES|TIME_SECONDS);
   Comment(t+"\nA1="+A1+"   A2="+A2+"\nC1="+C1+"   C2="+C2);
}
//+------------------------------------------------------------------+
 
stringo:

1.Wexのプロフィールを見てみましょう。こちらはMQL4開発のプロフェッショナルです。とぼけること。あるいは荒らし。なぜかわからないけど。

2.考える必要がある新しいパラメータが来ても、ループを強制的に中断することはできません。エンドレスループの中でプログラマ自身が呼び出すべきIsNewParameter関数のようなもの

1.また、変なことに気づいた...。

2.それはとても嬉しいですね。

 
stringo:

1.Wexのプロフィールを見てみましょう。こちらはMQL4開発のプロフェッショナルです。とぼけること。あるいは荒らし。理由は定かではありません。

2.ここで考えなければならないことがあります。新しいパラメータが到着しても、強制的にループを中断することはできない。エンドレスループの中でプログラマ自身が呼び出すべきIsNewParameter関数のようなもの

ストリンゴ

変数は、ただ、そんな永遠のループに陥ることはないようです。値が変更された場合、initメソッドが動作しない。また、外部変数はinitを通してのみ渡されます。Expert AdvisorでOnTick関数とOnTimer 関数が使用できるようになりました。

OnChartEvent.私の記憶では、Expert Advisorのスタート機能は、新しいティックでトリガーされるものでした。

ドキュメントからの抜粋です。

プログラムは、起動したチャートからのイベントのみを受信します。すべてのイベントは、受信した順番に次々と処理されます。キューに既にイベントNewTickが 存在する場合、またはこのイベントが処理中の場合、新しいイベントNewTickはmql4-programのキューに配置されない。同様に、mql4-programのキューにすでにChartEvent イベントが含まれているか、そのようなイベントが処理されている場合、このタイプの新しいイベントはキューに配置されません。タイマーイベントは同じ方式で処理されます。もしキューにイベントタイマーが あるか、すでにある場合は、このタイプの新しいイベントはキューに入れられません。

つまり、start関数が無限にループしているので、新しいイベントが発生しても、関数はスタートせず、中の変数も更新されない。

そのためには、言語の新しい機能を使い、古い機能に煩わされないようにするしかない。

События клиентского терминала - Документация на MQL4
  • docs.mql4.com
События клиентского терминала - Документация на MQL4
 
artmedia70:

1.私も異変に気づきました...。

そして、他人の目には、いつも藁をもつかむ思いで見ることができます。そして、目の中にある丸太が多ければ多いほど、藁は小さく見分けることができる。

どんなビジネスでも、大切なのはプロセスではなく、結果です。その結果、黒は白として表示され、文字通り(比喩ではなく)、実行システムはユーザーに1つの値ではなく、別の値を表示します。これは、ある関数の内部で行われるか、外部で行われるかは問題ではありません。リアルタイムマルチタスクシステムは、複数のプロセスを同時に処理することが可能です。その際、Sleep() 関数はほとんどの時間「実行」され、システムリソースを全く消費しない。これは本来、処理を中断するために使われる古典的なものです。それ以外のプロセスは、支障なく実行できる。

- 同志たちよ、102%の計画を実現できるのか?

- ...はい、できます。