エラー、バグ、質問 - ページ 1680

 

ログブックに

2016.09.12 22:20:37.728 Books   invalid book item[RTS-9.16,buy,99040.00000,-4]
BCS-MetaTrader5、リアル、1415。デモ口座からリアル口座に切り替えたときに発生した。Expert Advisorやインジケータは実行されていません。ダミーの窓が開いていた。
 
fxsaber:

誌面では

BCS-MetaTrader5、リアル、1415。デモからリアルアカウントに切り替えたときに起こった。Expert Advisorやインジケータは動作していませんでした。コルドロンの窓が開いていた。

このバグについて書きました

https://www.mql5.com/ru/forum/95131

invalid book transaction
invalid book transaction
  • レビュー: 2
  • www.mql5.com
Раньше не было, появилось сегодня (реал). Что это...
 
prostotrader:
題名の下にあるアスタリスクは何ですか?そして、レビューの数も。
 
fxsaber:
題名の下にあるアスタリスクは何ですか?そして、レビューの数。
ところで、このテーマ用の星はどこに設定すればいいのか、ずっと悩んでいました。
 

デバッグモードで、今いる関数が どこから呼び出さ れたかを知るにはどうしたらいいですか?

大雑把に言うと、ネストした関数/メソッドのコールツリーにアクセスできるようにしたい。これは可能なのでしょうか?

 
fxsaber:
デバッグモードで、今いる関数が どこから呼ば れたかを調べるにはどうしたらいいですか?

ステップバイステップ」モードでは、「デバッグ」タブを1つずつ表示します。

段階

 
Karputov Vladimir:

ステップバイステップ」モードでは、「デバッグ」タブを1つずつ表示します。

ありがとうございます。インジケータが最初にOnCalculateを 2回呼び出す理由がわかりません。どのような事象に反応するのか調べたい。残念ながら、デバッグタブにイベントが表示されないのですが。
 
fxsaber:
ありがとうございます。なぜ、最初のほうでOnCalculateを2回呼び出すのかが理解できません。この回答がどのようなイベントなのか調べたい。デバッグでは、残念ながらイベントは表示されません。

時には2回、時には1回、もしかしたら3回起こるかもしれません:Oncalculate()- にこのコードを入れてください。

//+------------------------------------------------------------------+
//|  Accelerator/Decelerator Oscillator                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   Print(__FUNCTION__,", rates_total ",rates_total,", prev_calculated ",prev_calculated);

は、履歴が入れ替わったときにクリアされます(履歴が入れ替わったとき prev_calculated==0)。

 
Karputov Vladimir:

時には2回、時には1回、もしかしたら3回起こるかもしれません: Oncalculate() - にこのコードを記述します。

は、ヒストリスワップが発生したとき(ヒストリスワップprev_calculated==0のとき)、明確になります。

いや、今はRTSでコチルが立っている時に動かしています。デバッガは1回呼ばれると、2回呼ばれたように表示するという嘘をつくことがわかりました。プレイするためのコード(ティックが進行していないキャラクターで実行する)

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1

int Func(){ return(0); }

int OnCalculate( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[] )
{
//  return(0); // если расскоментировать и здесь поставить точку останова, то отладчик отработает, как надо
  return(Func()); // здесь поставить точку останова (F9)
}

F5を押した後、ブレークポイントに ヒットします。そして、F5を2回目押した後 - 同様に。これはあってはならないことですが......確認として、コードにある行のコメントを解除して、それで試してみてください。

 
fxsaber:

いや、今はRTSで動かしてるよ、コチルが立ってる時に。デバッガは1回呼ばれると、あたかも2回呼ばれたかのように表示し、嘘をついていることが分かりました。プレイするためのコード(ティックが進行していないキャラクターで実行する)

F5を押した後、ブレークポイントにヒットします。そして、F5を2回目押した後 - 同様に。しかし、このようなことはないはずです。確認として、コードにある行を破棄して、それで試してみてください。

引用者が行っても、立っても、何の違いもない。あなたは、インジケータ内の条件prev_calculate=0を制御する必要があります - これは歴史のスワップと2番目のポイントです - 変更されたバーの再計算のスペアモード、すなわち、実際には、レート_合計 -prev_calculate +1.
理由: