[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 1084

 
khorosh:

こう言った方が正確でしょう。



それがさらに真実味を帯びて、今に至っているのです。

//--------------------------------------------------------------------
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("Сформировался новый бар"); // Вывод на экран
}
}
//--------------------------------------------------------------------

 
ところで、コメントを書くときにコードをコードとしてハイライトすると、同じ色になるのはなぜでしょう?それとも、色で本物のコードのように見えるように、何としてハイライトすればいいのでしょうか?
 
kolyango:

M1で試したところ、次のバーが形成された後、メッセージが表示されません。効かないということでしょうか。


そして、それは動作しません。あなたはプログラムを正しく記述していないのです。それは、自分のコードがどのように動くのかがわからないからです。分解してみよう。Expert Advisor本体。

int start(){ // Спец. функция start
  if(Fun_New_Bar()){ //проверка наличия нового бара
    Alert("Сформировался новый бар"); // Вывод на экран
  }
  return(0); // Выход из start()
}

新しいティックが到着し、Fun_New_Bar()関数が呼び出されます。メインプログラムにtrueを返すと、Alertがポップアップ表示されます。そうでない場合は、EAはリターンでその作業を終了し、新しいティックを待ちます。すべては新しい刻みで繰り返される。

コードが動作しないとのことですが?さて、サブプログラムの中身を見てみましょう。

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; // Поймался новый бар
  }
}

ブーリアン関数が宣言されている。これは関数であり、プロシージャではないので、呼び出されたメインプログラムに何かを返す必要があります。この関数はブーリアンなので、ブーリアン値を返すはずです。メインプログラムに何かを返す文字列はどこにあるのでしょうか?これは、プログラムの開始時に、関数から何も返されないので、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からグローバル変 数を利用できるようにするにはどうすればよいですか?

 
DhP:

起動している2台目のMT4端末で動作しているEAからグローバル変数を利用できるようにするにはどうすればよいですか?


apiを通じて、あるいはテキスト文書を通じて。
 
drknn:

apiを通じて、あるいはテキスト文書を通じて。

どうやって?
 
DhP:

どうやって?

apiを通して、私は方法を知りません - 私はそれが可能であることを読んだことがある。テキストドキュメントを通して - MQL4以外の言語でDLLを記述する必要があります。例えば、DelphiやC++で。dllは、端末の外にあるファイルにアクセスできる必要があります。かなり達成感があります。エキスパートアドバイザーがグローバル変数の 新しい値をテキスト文書に入力し、もう一人のエキスパートアドバイザーがそれを読み取るというものです。このDLLは、両方のExpert Advisorにテキスト文書へのアクセスを提供します。このような質問は、以前にもここでされたことがあります。2chでEAを連動させるにはどうしたらいいか...というような質問がありました。
 
kolyango:

それがさらに真価を発揮し、今に至っています。

いいえ、それはありません - あなたの警告は、新しいローソクの最初のティックに一度ではなく、すべてのティックに あなたをビープします。
 
kolyango:



これはさらに正しく、今では機能するようになりました。

//--------------------------------------------------------------------
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人抜けていますね。

これが正しいやり方なのです。

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);
}
 
drknn:

apiを通して......方法は知らないが......可能だと読んだ。テキストドキュメントを通して - MQL4以外の言語でDLLを記述する必要があります。例えば、DelphiやC++で。dllは、端末の外にあるファイルにアクセスできる必要があります。かなり達成感があります。エキスパートアドバイザーがグローバル変数の新しい値をテキスト文書に入力し、もう一人のエキスパートアドバイザーがそれを読み取るというものです。このDLLは、両方のExpert Advisorにテキスト文書へのアクセスを提供します。このような質問は、以前にもここでされたことがあります。2chでEAを連動させるにはどうしたらいいか...というような質問がありました。

ありがとう、探してみるよ...。
理由: