この機能の何が問題なのか、説明してください。

 
サービスデスクで開発者とコミュニケーション!」に関連するコメントはありません。".
 
MetaQuotes Software Corp.:

新しいソフトウェアには必ずバグがあり、社内で徹底的にテストしても発見できないことがあります。そのため、私たちはソフトウェアで発見されたすべてのユーザーの問題報告を重要視し、その一つひとつに対応するよう心がけています。

まず誤った反応があり、それを無視するようでは、どうやってコミュニケーションをとればいいのか。アプリケーション2016.06.22 08:06,#1499568

もしかしたら、コミュニティの人たちが説明してくれるかもしれませんね。


以下は、EAコードの一部です。内部 void OnTick()。

   bool openNew, newDay, newHour;

    if((int)mqlDateTime.hour == startHour) // startHour = 0 Это условие выполнено.
     {
      newDay = newBar.IsNewBar(_Symbol, PERIOD_D1, oldDay); // 
   if(newDay)
    Print("***** newDay ", newDay, " mqlDateTime.hour ", mqlDateTime.hour); // Судя по распечатке newDay = true
       newHour = newBar.IsNewBar(_Symbol, PERIOD_H1, oldHour);
    if(newHour)
     Print("***** newHour ", newHour); // Судя по распечатке newHour = true
        if(newDay && newHour) // A ЭТО УСЛОВИЕ НЕ ВЫПОЛНЕНО НЕСМОТРЯ НА ПРЕДЫДУЩИЕ РАСПЕЧАТКИ.
         {
          openNew = openNew_or_No();
           Print("***** openNew ", openNew, " ***** PositionsTotal ", PositionsTotal()); // Эта распечатка отсутствует
            if(openNew || PositionsTotal() == 0)
             
              // Продолжение кода...
              // На несоответствие количества открывающих и закрывающих фигурных скобок прошу не обращать внимания.

これは「エキスパート」タブの内容です。

2016.06.22 00:00:44.531 Toad Green (EURUSD,M15) ***** newHour true
2016.06.22 00:00:44.331 Toad Green (USDJPY,M15) ***** newHour true
2016.06.22 00:00:18.361 Toad Green (EURUSD,M15) ***** newDay true mqlDateTime.hour 0
2016.06.22 00:00:12.770 Toad Green (USDJPY,M15) ***** newDay true mqlDateTime.hour 0

21.06のログファイルの1行目には、上記のコードが正常に動作したことが明確に示されています。

GM      0       00:00:30.116    Trades  '3265046': instant buy 0.01 EURUSD at 1.13188 tp: 1.13388 (deviation: 55)
NK      0       00:00:30.246    Trades  '3265046': accepted instant buy 0.01 EURUSD at 1.13188 tp: 1.13388 (deviation: 55)
IE      0       00:00:30.246    Trades  '3265046': deal #73303810 buy 0.01 EURUSD at 1.13188 done (based on order #87892298)
KI      0       00:00:30.246    Trades  '3265046': order #87892298 buy 0.01 / 0.01 EURUSD at 1.13188 done in 130 ms
ON      0       00:00:30.256    Trades  '3265046': instant sell 0.01 EURUSD at 1.13093 tp: 1.12893 (deviation: 55)
LQ      0       00:00:30.366    Trades  '3265046': accepted instant sell 0.01 EURUSD at 1.13093 tp: 1.12893 (deviation: 55)
HG      0       00:00:30.376    Trades  '3265046': deal #73303813 sell 0.01 EURUSD at 1.13093 done (based on order #87892301)
RK      0       00:00:30.376    Trades  '3265046': order #87892301 sell 0.01 / 0.01 EURUSD at 1.13093 done in 120 ms
MJ      0       00:00:30.376    Trades  '3265046': modify #87608748 sell 0.01 EURUSD sl: 0.00000, tp: 1.12031 -> sl: 0.00000, tp: 1.12462
GK      0       00:00:30.476    Trades  '3265046': accepted modify #87608748 sell 0.01 EURUSD sl: 0.00000, tp: 1.12031 -> sl: 0.00000, tp: 1.12462
OK      0       00:00:30.486    Trades  '3265046': modify #87608748 sell 0.01 EURUSD -> sl: 0.00000, tp: 1.12462 done in 107 ms
OH      0       00:00:30.486    Trades  '3265046': modify #87892301 sell 0.01 EURUSD sl: 0.00000, tp: 1.12893 -> sl: 0.00000, tp: 1.12462
GJ      0       00:00:30.586    Trades  '3265046': accepted modify #87892301 sell 0.01 EURUSD sl: 0.00000, tp: 1.12893 -> sl: 0.00000, tp: 1.12462
KI      0       00:00:30.596    Trades  '3265046': modify #87892301 sell 0.01 EURUSD -> sl: 0.00000, tp: 1.12462 done in 109 ms
EN      0       04:20:25.608    Trades  '3265046': deal #73317674 sell 0.01 EURUSD at 1.13388 done (based on order #87906853)

EAは次の日の朝まで休んでいます。

21.06のログファイルの最後の2行

OD      0       23:09:20.196    Network '3265046': scanning network for access points
NR      0       23:09:33.496    Network '3265046': scanning network finished

と22.06以降のログの始まり

PM      1       02:13:39.422    Network '3265046': connection to MetaQuotes-Demo lost
GF      2       02:13:39.582    MQL5.community  authorization failed
DO      2       02:13:39.682    MQL5.community  authorization failed
IP      2       02:13:40.052    MQL5.community  authorization failed
PK      0       02:13:43.252    Network '3265046': authorized on MetaQuotes-Demo through Access Point RU Moscow (ping: 117.48 ms)
DI      0       02:13:43.252    Network '3265046': previous successful authorization performed from 31.173.80.184 on 2016.06.21 14:55:11
サポートチーム 2016.06.22 08:36

NewDayとNewHourを同時に印刷した場合、ログでは隣り合わせになるはずです。同時刻

そして、あなたのログでは、それらは異なるEA(EURUSDとUSDJPY)からだけでなく、異なる時間からです。
そして、応募は締め切られた...。
アレクセイ・ビクトロフ 2016.06.22 11:25

時間を気にしていなかったので、ご迷惑をおかけしました。しかし!!!次に、なぜ新しい日の最初のバーの外観で、それはまた、新しい時間と新しい分の最初のバーが同じ関数は、誰かの偽に誰かを真に返すと、それが望んでいるときにすべてを正しく返すことができるのですか?

この機能のどこが悪いのか、教えてください。

/*****************Определение появления нового бара******************/
class cNewBar
{
   public:
bool IsNewBar(string symbol, ENUM_TIMEFRAMES timeframe, datetime & m_tOld)
 {
  datetime tNew = (datetime)SeriesInfoInteger(symbol, timeframe, SERIES_LASTBAR_DATE);
   if(tNew > m_tOld)
    {
     m_tOld = tNew;
     return(true);
    }
   return(false);
 }
};
/********************************************************************/
何週間も順調に動いていたのに、突然おかしくなるのはなぜでしょうか?
このようなクラスの使用に関する評価はご遠慮ください。

サポートチーム 2016.06.22 11:31

のため、本機能を繰り返し使用することはできません。

m_tOld = tNew;

アレクセイ・ビクトロフ 2016.06.23 10:17

昨日、すぐに理解できなかったことが......。結局、変数m_tOldは参照渡しで、グローバル変数のレベルで宣言されており、異なる変数が参照渡しで関数に渡されたとしても多重呼び出しに影響しないはずです。そうでしょう?まず、TesterとDebugでは正常に動作しているのに、デモ口座では動作しないのはなぜでしょうか。

サポートチーム 2016.06.23 10:24

このチェックはどうでしょうか?

   if(tNew > m_tOld)


サポートチーム 2016.06.23 10:24

関数を2回連続で呼び出す。最初の呼び出しでtrueを返した場合、次の呼び出しでは、同じティックで呼び出したにもかかわらず、falseを返します。


アレクセイ・ビクトロフ 2016.06.23 10:36

なるほど......そう呼ばれていますね。必要なコードはすべて私が用意しました。テスターやデバッグ、デモで思い通りにいかないのはなぜですか?そこが理解できないのです。ま あ、テスターでたまにそういう問題が起こるのであれば、新しい方法を模索すればいいのですが、テスターでは問題がないので......。

同じように、今はmql4で同じ機能を使ってEAを保存していませんが、特に問題はありませんでした。この問題は、mql5でのみ出現しています。

アレクセイ・ビクトロフ 2016.06.23 10:41


それで?だから、テストは...なぜなら、チェックの前に変数tNewに値が代入され、それは変数m_tOldそのものではなく、参照渡しされた変数と比較されるからです。 そして、このm_tOldは指定した期間の前のバーの時間、または最初の呼び出しであれば1970年01月01日の値を持つことができるのです。そして、各期間の次のティックにのみ、同じバーの値が比較されます。

アレクセイ・ビクトロフ 2016.06.23 10:57


注意:異なる変数と異なる期間が関数に渡されます。

      newDay = newBar.IsNewBar(_Symbol, PERIOD_D1, oldDay);
   

       newHour = newBar.IsNewBar(_Symbol, PERIOD_H1, oldHour);


そしてすべて...その後、私は完全に無視されています。遅滞なく迅速な返信をありがとうございましたが、分かりやすい回答はありませんでした。mql5でバグがあっても、「修正中だから待っててね」と書けばいいんです。しかし、この場合、問題を無視しているに過ぎません。

mql4では同様の関数で時間変化を15秒の倍数で定義していたのですが、mql5で突然この問題が発生しました...。

 

これが、実験を行う際の不適切な観察整理の意味である。

 
ディミトリ、また始まったの?2016.06.21のワラントは問題なく開いたのに、なぜ2016.06.22はいきなり間違った監視組織なのか」とかの問題の方が答えやすいかも...。
 
Alexey Viktorov:
...

それに答えるには、コードが必要です。コードのスニペットがありますね。最小限のコードを作る - このコードを誰でも自分のところで実行できるようにする。

また、関数への入力と関数からの出力における変数の値をコードに表示するのもよいでしょう。


 
Alexey Viktorov:
ディミトリ、また始まったの?2016.06.21には何の問題もなく令状が開いたのに、2016.06.22に突然間違った監視組織になったのはなぜか」等の問題の方が答えやすいかもしれませんが...。
ストレートにありのままを答えたら、たぶん出入り禁止にされると思います。
 
Dmitry Fedoseev:
単純明快に答えると、たぶん出禁になる。
永く...
 
Alexander Bereznyak:
ずーっと

眠れないほど夢を見るのか?

何が言いたいの?なぜなら、それはあなたをより賢くするものではないからです。

生きる意味が憎しみになると、生きるのが楽しくなるのでは?А?

 
Karputov Vladimir:

それに答えるには、コードが必要です。コードのスニペットがありますね。誰でもこのコードを実行できるように、最小限のコードにする。

コード中の変数の値を、関数への入力時と関数からの出力時で表示するのが良いと思います。


問題ありません。

しかし、何の問題もなくいきなり...というのは要注意です。なんでコードスニペットとは別に、2016.06.21とそれ以前は何週間も正常に動作していたのに、ここにきて2016.06.22突然問題が発生したことを示すログがあります。SDに書き込む前に、テスターで実行し、履歴からデバッグを繰り返しましたが、問題は見つかりませんでした。

だから、コードを掲載することの有用性を疑っているのです。あくまでも遊び心です。

#property strict

datetime oldDay, oldHour;
MqlDateTime mqlDateTime;
/*******************Expert initialization function*******************/
int OnInit()
{
   return(INIT_SUCCEEDED);
}/*******************************************************************/

/************************Expert tick function************************/
void OnTick()
{
  bool newDay, newHour;
   TimeToStruct(TimeCurrent(), mqlDateTime);
    if((int)mqlDateTime.hour == 0)
     {
      newDay = IsNewBar(_Symbol, PERIOD_D1, oldDay); // Обратите внимание на то, что это отдельная переменная передаваемая в функцию по ссылке
   if(newDay)
    Print("***** newDay ", newDay, " mqlDateTime.hour ", mqlDateTime.hour); // Судя по распечатке newDay = true
       newHour = IsNewBar(_Symbol, PERIOD_H1, oldHour); // А это совсем другая переменная
    if(newHour)
     Print("***** newHour ", newHour); // Судя по распечатке newHour = true
        if(newDay && newHour) // A ЭТО УСЛОВИЕ НЕ ВЫПОЛНЕНО НЕСМОТРЯ НА ПРЕДЫДУЩИЕ РАСПЕЧАТКИ.
         {
          Print("Ордер должен откыться. ");
         }
     }
}/*******************************************************************/

/*****************Определение появления нового бара******************/
bool IsNewBar(string symbol, ENUM_TIMEFRAMES timeframe, datetime &m_tOld)
 {
  datetime tNew = (datetime)SeriesInfoInteger(symbol, timeframe, SERIES_LASTBAR_DATE);
   if(tNew > m_tOld)
    {
     m_tOld = tNew;
     return(true);
    }
   return(false);
 }
/********************************************************************/

/******************Expert deinitialization function******************/
void OnDeinit(const int reason)
{
 Comment("");
}/*******************************************************************/
 

筆者がやる気がないので、やってみることにする。

//+------------------------------------------------------------------+
//|                                                   test_1Vc2f.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   bool openNew,newDay,newHour;
//---
   newDay=IsNewBar(_Symbol,PERIOD_D1,oldDay); // 
   if(newDay)
      Print("***** newDay ",newDay," mqlDateTime.hour ",mqlDateTime.hour); // Судя по распечатке newDay = true
   newHour=IsNewBar(_Symbol,PERIOD_H1,oldHour);
   if(newHour)
      Print("***** newHour ",newHour); // Судя по распечатке newDay = true
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool IsNewBar(string symbol,ENUM_TIMEFRAMES timeframe,datetime &m_tOld)
  {
   datetime tNew=(datetime)SeriesInfoInteger(symbol,timeframe,SERIES_LASTBAR_DATE);
   if(tNew>m_tOld)
     {
      Print("in: m_tOld = ",m_tOld);
      m_tOld=tNew;
      Print("out: m_tOld = ",m_tOld);
      return(true);
     }
   return(false);
  }
//+------------------------------------------------------------------+

あとは、「mqlDateTime」の構造と、変数「oldDay」「oldHour」をどこに宣言するか...です。

 
Karputov Vladimir:

著者が不本意なので、私がやってみることにする。

あとは、「mqlDateTime」の構造と、変数「oldDay」「oldHour」をどこに宣言するか...です。

すべての答えは上の投稿にあります。
理由: