どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 768

 
AlexeyVik:

まあ、私のローカルタイムはサーバータイムより1時間長いのですが。

では、この数値のどこがわかりにくいのか、説明していただけますか?

この値には何の混乱もなく、正しいのですが、そういう話ではないのです。

特に金曜日の問題は、あなたの現地 時間がブローカーの時間よりX時間長い場合は関係ありません。

しかし、あなたのローカルコンピュータ上でブローカーとの間に+1ではなく、-1時間の差がある場合を想像してみてください。

そして、このシンプルな条件があります。

if(TimeDayOfWeek(TimeCurrent()) == 5 && TimeCurrent() >= StringToTime("21:30"))
   Print("Настала пятница и время больше чем 21:30");

この場合

1.ブローカーは金曜日の最初のティック、例えば今日のティックは、2014.11.07 00:00の時刻を持っています。

2.1970年01 月01日00:00から当該ティックまでの経過秒数、すなわち2014.11.07 00:00を 取る。

3. 1970年01 月01日00:00から2014年11月0621:30までの 経過秒数を取る(ローカルPCの時刻を取るので昨日の日付になる、刻んだ時点では金曜日ではなく6日目の木曜日、より正確には2014.11.06 23:00 で1時間差となる)

ほら、ポイント2の方がポイント3より秒数が大きい。

StringToTime() 関数がブローカーのサーバーから日付を取得する場合、すべてが計画通りに動作し、時間が21:30を 超えた後、金曜日に印刷がポップアップ することになりますが、これは、最初の金曜日のティックがコードで指定した印刷を実行することを意味します。

 
Leonid123456:

こんにちは。

こんなタスクがあるんです。(ティックに添付することができません)。

保留中の注文がトリガーされた場合{then...}。

私のEAでは、Terminal.mqhを使って注文の計算をしています。

ターミナル // Mas_Tip[0]オープン 買い

// 買い注文の数が1つ 増えた場合

if (Mas_Tip[0]+1)

{

機能

}

すべてがうまくいく。しかし、次のティックごとにトリガーされます。

このケースをダニに付けるには?そして、前のティックと現在のティックの値を比較します。

そして、そのハイライトされた文字列を私たち人間の言葉に翻訳することができるでしょうか?あるべき姿と、この行を実行したときに得られるもの...。
 
AlexeyVik:
ハイライトされた行を私たちの言語に翻訳してもらえますか?あるべき姿と、この行を実行したときに得られるもの...。

//買い注文の数が1つ増えたら...

{

機能 例:他の注文をオープンまたはクローズする...

}

こうでなくちゃいけないif (Mas_Tip[0]+1)if (Mas_Tip[0] >Mas_Tip[1]) // CellよりBuy注文が 多い場合に行うことができる。保留中のものを開く、など。

ポイントは、次のティックでこのデータが再び真になることです。

 
Leonid123456:

//買い注文の数が1つ増えたら...

{

機能 例:他の注文をオープンまたはクローズする...

}

if (Mas_Tip[0]+1)

ifの括弧内にはbool、つまりtrueかfalseを指定する必要があります。

ここでは、明らかにintである。それは整数です。

もちろん、trueは1、falseは0です(私の勘違いでなければ)。でも、やっぱりおかしい。Mas_Tip[0] は何を返すのですか?

 
ikatsko:

if (Mas_Tip[0]+1)

の括弧内のifはbool、すなわちtrueかfalseでなければならない。

しかし、ここでは明らかにintである。それは整数です。

もちろん、trueは1、falseは0です(私の勘違いでなければ)。でも、やっぱりおかしい。Mas_Tip[0] は何を返すのですか?

買いの未決済注文の数。

 
Leonid123456:

//買い注文の数が1つ増えたら...

{

機能 例:他の注文をオープンまたはクローズする...

}

いや、それがいいんだろう。実はそうではないんです。配列Mas_Tip[0]に何らかの値があり、それが0より大きい場合、条件if(Mas_Tip[0])が真となる。そして、この値に1を足すと、未決済注文の数が-1になることはありえないので、常に真となるのです。

 
AlexeyVik:

いや、それがいいんだろう。実は、そうではないんです。配列Mas_Tip[0]に何らかの値があり、それが0より大きい場合、条件if(Mas_Tip[0])は既に真となる。そして、この値に1を足すと、未決済注文の数が-1になることはありえないので、常に真となるのです。


こんな風にやってみました

   bool  Fact_1 = false;                    // Глобальная перемен.
       bool  Fact_2 = false;                    // Глобальная перемен.
//--------------------------------------------------------------------
int start()                                     // Спец. функция start
  {
                          // Локальная перемен.
   if (Fact_2==true)                            //Если сообщение уже..
      return;                                   //..было, то выходим
 
   if (Mas_Tip[0]+1)
      Fact_1 = true;                            // Произошло событие 1
 
   
 
   return;                                      // Выход из start()
  }
//--------------------------------------------------------------------
                               // Пользовательс. ф-ия
  {
             // Сообщение
   Fact_2 = true;                               // Произошло событие 2
   return;                                      // Выход из польз.ф-ии

}

一過性のものであることがわかります。

 
ikatsko:

if (Mas_Tip[0]+1)

の括弧内のifはbool、すなわちtrueかfalseでなければならない。

しかし、ここでは明らかにintである。それは整数です。

もちろん、trueは1、falseは0です(私の勘違いでなければ)。でも、やっぱりおかしい。Mas_Tip[0] は何を返すのですか?

falseは0、0でない場合はtrueとなります。

この行を試してみてください

bool b;
b = 7.40;
if(b) Print("b = ", b);
コンパイラは精度が 落ちる可能性があると警告するかもしれませんが、動作はします。
 

Mas_Tip[0] を破棄することができます。

イベントの取得方法A Buyがオープンしました。

 
Leonid123456:

Mas_Tip[0] を破棄することができます。

イベントの取得方法A Buyがオープンしました。

古いBuyカウントを何らかの変数に記憶させておき、Buyカウント関数が返す現在の値と比較する、これ以外の方法は?