//-------------------------------------------------------------------- int start() // Спец. функция start { if(Fun_New_Bar())//проверка наличия нового бара return; // Выход из start() } //-------------------------------------------------------------------- bool Fun_New_Bar() // Ф-ия обнаружения .. { // .. нового бара static datetime New_Time=0; // Время текущего бара bool New_Bar=false; // Нового бара нет if(New_Time!=Time[0]) // Сравниваем время { New_Time=Time[0]; // Теперь время такое New_Bar=true; // Поймался новый бар Alert("Сформировался новый бар"); // Вывод на экран } } //--------------------------------------------------------------------
int start(){ // Спец. функция startif(Fun_New_Bar()){ //проверка наличия нового бараAlert("Сформировался новый бар"); // Вывод на экран
}
return(0); // Выход из start()
}
bool Fun_New_Bar(){ // Ф-ия обнаружения нового бараstatic datetime New_Time=0; // Время текущего бараbool New_Bar=false; // Нового бара нетif(New_Time!=Time[0]){ // Сравниваем время
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
}
}
//-------------------------------------------------------------------- int start() // Спец. функция start { if(Fun_New_Bar())//проверка наличия нового бара return; // Выход из start() } //-------------------------------------------------------------------- bool Fun_New_Bar() // Ф-ия обнаружения .. { // .. нового бара static datetime New_Time=0; // Время текущего бара bool New_Bar=false; // Нового бара нет if(New_Time!=Time[0]) // Сравниваем время { New_Time=Time[0]; // Теперь время такое New_Bar=true; // Поймался новый бар Alert("Сформировался новый бар"); // Вывод на экран } } //--------------------------------------------------------------------
int start() // Спец. функция start
{
if(Fun_New_Bar())//проверка наличия нового бара
{
Alert("Сформировался новый бар"); // Вывод на экран
}
return(0); // Выход из start()
}
//--------------------------------------------------------------------bool Fun_New_Bar() // Ф-ия обнаружения ..
{ // .. нового бараstatic datetime New_Time=0; // Время текущего бараbool New_Bar=false; // Нового бара нетif(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
}
return(New_Bar);
}
こう言った方が正確でしょう。
それがさらに真実味を帯びて、今に至っているのです。
//--------------------------------------------------------------------
int start() // Спец. функция start
{
if(Fun_New_Bar())//проверка наличия нового бара
return; // Выход из start()
}
//--------------------------------------------------------------------
bool Fun_New_Bar() // Ф-ия обнаружения ..
{ // .. нового бара
static datetime New_Time=0; // Время текущего бара
bool New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
Alert("Сформировался новый бар"); // Вывод на экран
}
}
//--------------------------------------------------------------------
M1で試したところ、次のバーが形成された後、メッセージが表示されません。効かないということでしょうか。
そして、それは動作しません。あなたはプログラムを正しく記述していないのです。それは、自分のコードがどのように動くのかがわからないからです。分解してみよう。Expert Advisor本体。
新しいティックが到着し、Fun_New_Bar()関数が呼び出されます。メインプログラムにtrueを返すと、Alertがポップアップ表示されます。そうでない場合は、EAはリターンでその作業を終了し、新しいティックを待ちます。すべては新しい刻みで繰り返される。
コードが動作しないとのことですが?さて、サブプログラムの中身を見てみましょう。
ブーリアン関数が宣言されている。これは関数であり、プロシージャではないので、呼び出されたメインプログラムに何かを返す必要があります。この関数はブーリアンなので、ブーリアン値を返すはずです。メインプログラムに何かを返す文字列はどこにあるのでしょうか?これは、プログラムの開始時に、関数から何も返されないので、if(Fun_New_Bar()) 式の括弧は常に false になり、アラートは決してポップアップされないことを意味します。
さらに上を目指そう。なぜ、datetime New_Time=0; を static として宣言したのですか?その理由は何ですか?変数を宣言して、すぐにゼロで初期化したんですね。次のティックでは、同じことが起こります - 変数は再びゼロで宣言され、初期化されます。If(New_Time!=Time[0]){ この行は、変数の値が現在の時刻と 等しくないかどうかをチェックします。そうですね、変数にはゼロがありますが、現在の時刻はゼロではありません。条件成立で現在時刻が変数に書き込まれ、パラメータ New_Bar がtrue になる。次のtickでは 、New_Timeは再び Time[0]と等しくならないので、再び不等号のチェックに成功し、次の二つの演算が実行されます。つまり、if(New_Time!=Time[0])という条件をチェックする場合、括弧内の式が毎回の目盛りで真となる。ALWAYS.もしそれが常に真実であるなら、なぜこのチェックがここにあるべきなのか?削除したほうがいいのでは?New_Time=Time[0] と New_Bar=true はどこにも使われない のに、なぜ代入しなければならないのでしょうか?なぜこの2つの割り当てが必要なのか?遊びたいですか?それとも、考えるのが面倒なのか?
起動している2台目のMT4端末で動作しているEAからグローバル変 数を利用できるようにするにはどうすればよいですか?
起動している2台目のMT4端末で動作しているEAからグローバル変数を利用できるようにするにはどうすればよいですか?
apiを通じて、あるいはテキスト文書を通じて。
apiを通じて、あるいはテキスト文書を通じて。
どうやって?
どうやって?
apiを通して、私は方法を知りません - 私はそれが可能であることを読んだことがある。テキストドキュメントを通して - MQL4以外の言語でDLLを記述する必要があります。例えば、DelphiやC++で。dllは、端末の外にあるファイルにアクセスできる必要があります。かなり達成感があります。エキスパートアドバイザーがグローバル変数の 新しい値をテキスト文書に入力し、もう一人のエキスパートアドバイザーがそれを読み取るというものです。このDLLは、両方のExpert Advisorにテキスト文書へのアクセスを提供します。このような質問は、以前にもここでされたことがあります。2chでEAを連動させるにはどうしたらいいか...というような質問がありました。
それがさらに真価を発揮し、今に至っています。
これはさらに正しく、今では機能するようになりました。
//--------------------------------------------------------------------
int start() // Спец. функция start
{
if(Fun_New_Bar())//проверка наличия нового бара
return; // Выход из start()
}
//--------------------------------------------------------------------
bool Fun_New_Bar() // Ф-ия обнаружения ..
{ // .. нового бара
static datetime New_Time=0; // Время текущего бара
bool New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
Alert("Сформировался новый бар"); // Вывод на экран
}
}
//--------------------------------------------------------------------
この機能は私のものではありません。オンラインで手に入れましたが、まだ使っていません。今よく見てみると、オペレーターが1人抜けていますね。
これが正しいやり方なのです。
apiを通して......方法は知らないが......可能だと読んだ。テキストドキュメントを通して - MQL4以外の言語でDLLを記述する必要があります。例えば、DelphiやC++で。dllは、端末の外にあるファイルにアクセスできる必要があります。かなり達成感があります。エキスパートアドバイザーがグローバル変数の新しい値をテキスト文書に入力し、もう一人のエキスパートアドバイザーがそれを読み取るというものです。このDLLは、両方のExpert Advisorにテキスト文書へのアクセスを提供します。このような質問は、以前にもここでされたことがあります。2chでEAを連動させるにはどうしたらいいか...というような質問がありました。
ありがとう、探してみるよ...。