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

 
abeiks:

こんにちは。

MQL5を使おうとしているのですが、どうすればいいですか?exp_tema.mq5を逆アセンブル し、コードを修正しました。今、私は各ローソク(最後の20)のログMAで印刷する必要があります。しかし、なぜログにいくつかのエントリが欠落しているのか理解できない。ログにma[3]がない場合、ma[13]がないことに 気がつきました。なぜ、このようなことが起こるのでしょうか?そこでのエラーはどこにあるのでしょうか?

これです。

if(CopyBuffer(Handle[Number],0,0,20,ma)<0)

は明らかにチェックが抜けています。

  1. BarsCalculated>= 20
  2. CopyBuffer==20
ファイル:
exp_tema.mq5  27 kb
 
sergeev:

動画は必要ありません。

コード内で詳細なPrintを行い、中間変数が何に等しいかをログで確認できるようにします。

#property copyright "Copyright 2011, "

#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   double Vhod=0;
      Print("Начало_Vhod="+DoubleToString(Vhod,2));
   Vhod=linfunc(15);
      Print("Конец_Vhod="+DoubleToString(Vhod,2));
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
double  linfunc(double b) // имя функции и список параметров
  {
   double a=1;

   while((a/b)<1 && !IsStopped())//-------------------
     {
      Print("а="+DoubleToString(a,2)+", b="+DoubleToString(b,2)+", a/b="+DoubleToString(a/b,2));
      a=a+1;
     }
   Print("а="+DoubleToString(a,2)+", b="+DoubleToString(b,2)+", a/b="+DoubleToString(a/b,2));
   Print("a+b="+DoubleToString(a+b,2));
         double f=a+b;
         // составной оператор
         return(f);           // возвращаемое значение
         }
//+------------------------------------------------------------------+

以下はそのコードです。

以下はそのプリントです。

GM 0 1 (EURUSD,M1) 18:11:11 Start_Vhod=0.00
FO 0 1 (EURUSD,M1) 18:11:13 a=1.00, b=15.00, a/b=0.07
JF 0 1 (EURUSD,M1) 18:11:13 a=2.00, b=15.00, a/b=0.13
CQ 0 1 (EURUSD,M1) 18:11:13 a=3.00, b=15.00, a/b=0.20
EH 0 1 (EURUSD,M1) 18:11:13 a=4.00, b=15.00, a/b=0.27
KS 0 1 (EURUSD,M1) 18:11:13 a=5.00, b=15.00, a/b=0.33
PJ 0 1 (EURUSD,M1) 18:11:13 a=6.00, b=15.00, a/b=0.40
PE 0 1 (EURUSD,M1) 18:11:13 a=7.00, b=15.00, a/b=0.47
HL 0 1 (EURUSD,M1) 18:11:13 a=8.00, b=15.00, a/b=0.53
MF 0 1 (EURUSD,M1) 18:11:13 a=9.00, b=15.00, a/b=0.60
JR 0 1 (EURUSD,M1) 18:11:13 a=10.00, b=15.00, a/b=0.67
FK 0 1 (EURUSD,M1) 18:11:13 a=11.00, b=15.00, a/b=0.73
OP 0 1 (EURUSD,M1) 18:11:13 a=12.00, b=15.00, a/b=0.80
MI 0 1 (EURUSD,M1) 18:11:13 a=13.00, b=15.00, a/b=0.87
KF 0 1 (EURUSD,M1) 18:11:13 a=14.00, b=15.00, a/b=0.93
EO 0 1 (EURUSD,M1) 18:11:13 a=15.00, b=15.00, a/b=1.00
DJ 0 1 (EURUSD,M1) 18:11:14 a+b=30.00
RL 0 1 1 (EURUSD,M1) 18:11:17 End_Vhod=0.00
NH 2 1 (EURUSD,M1) 18:11:24 デバッグを終了しました。

 
Fia:


デバッグEX5をエディタからではなく、ターミナルから直接実行しても、同じ結果になるのでしょうか?

デバッグEX5を添付していただけますか?

 
Fia:

彼のプリントはこちら

GM 0 1 (EURUSD,M1) 18:11:11 Start_Vhod=0.00
FO 0 1 (EURUSD,M1) 18:11:13 a=1.00, b=15.00, a/b=0.07
JF 0 1 (EURUSD,M1) 18:11:13 a=2.00, b=15.00, a/b=0.13
CQ 0 1 (EURUSD,M1) 18:11:13 a=3.00, b=15.00, a/b=0.20
EH 0 1 (EURUSD,M1) 18:11:13 a=4.00, b=15.00, a/b=0.27
KS 0 1 (EURUSD,M1) 18:11:13 a=5.00, b=15.00, a/b=0.33
PJ 0 1 (EURUSD,M1) 18:11:13 a=6.00, b=15.00, a/b=0.40
PE 0 1 (EURUSD,M1) 18:11:13 a=7.00, b=15.00, a/b=0.47
HL 0 1 (EURUSD,M1) 18:11:13 a=8.00, b=15.00, a/b=0.53
MF 0 1 (EURUSD,M1) 18:11:13 a=9.00, b=15.00, a/b=0.60
JR 0 1 (EURUSD,M1) 18:11:13 a=10.00, b=15.00, a/b=0.67
FK 0 1 (EURUSD,M1) 18:11:13 a=11.00, b=15.00, a/b=0.73
OP 0 1 (EURUSD,M1) 18:11:13 a=12.00, b=15.00, a/b=0.80
MI 0 1 (EURUSD,M1) 18:11:13 a=13.00, b=15.00, a/b=0.87
KF 0 1 (EURUSD,M1) 18:11:13 a=14.00, b=15.00, a/b=0.93
EO 0 1 (EURUSD,M1) 18:11:13 a=15.00, b=15.00, a/b=1.00
DJ 0 1 (EURUSD,M1) 18:11:14 a+b=30.00
RL 0 1 1 (EURUSD,M1) 18:11:17 End_Vhod=0.00
NH 2 1 (EURUSD,M1) 18:11:24 デバッグを終了しました。

再生されない。

2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   Конец_Vhod=30.00
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   a+b=30.00
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=15.00, b=15.00, a/b=1.00
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=14.00, b=15.00, a/b=0.93
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=13.00, b=15.00, a/b=0.87
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=12.00, b=15.00, a/b=0.80
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=11.00, b=15.00, a/b=0.73
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=10.00, b=15.00, a/b=0.67
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=9.00, b=15.00, a/b=0.60
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=8.00, b=15.00, a/b=0.53
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=7.00, b=15.00, a/b=0.47
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=6.00, b=15.00, a/b=0.40
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=5.00, b=15.00, a/b=0.33
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=4.00, b=15.00, a/b=0.27
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=3.00, b=15.00, a/b=0.20
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=2.00, b=15.00, a/b=0.13
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=1.00, b=15.00, a/b=0.07
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   Начало_Vhod=0.00

Win7 x64

MT5 x64ビルド687

 
alexvd:

デバッグEX5をエディタからではなく、ターミナルから直接実行しても、同じ結果になるのでしょうか?

デバッグEX5を添付できますか?

面白いことに、テスターから実行すると30、EAとして実行すると印刷でも30が出ます。

デバッグに戻ると、0が返ってくる。


メタドライバ

どのような作りで、どのような種類(失礼)で効果があったのでしょうか。

この奇跡を再現できない人がいるならば、やはりビデオを並べるべきだろう。

ファイル:
1.ex5  5 kb
 
alexvd:

そこそこ

明らかにチェックが甘い

  1. BarsCalculated >= 20
  2. CopyBuffer==20

ありがとうございます、追加してみます。

 

動画はこちら(ただし、720以上の解像度を選択しないと、すべてがソープになります)。

https://www.youtube.com/watch?v=Prpw6DUYvjY&feature=youtu.be

Win7 64bit MT5 687ビルド

調べたところ、returnが0になったときの効果は、デバッガでしか起きないようです。

同時に、「ながらステップ」ボタンだけを使うと、うまくいくようです。

ステップインボタンでwhileループに入り終了させると、出力が0になったままうまくいきません。

一般的に、ビデオはすべてを示していますが、私は理解していないまで、どのようにあると何をすべきか(そして、なぜそれが唯一の私をそうですか?)

 
Fia:
Win7 64bit MT5 687ビルド
端末のビットレートは?
 

最適化中に理解不能な記号が表示される。

垂直方向の最適化グラフタブでは、すべての値が-1になっています

 
alexvd:

そこそこ

明らかにチェックが甘い

  1. BarsCalculated >= 20
  2. CopyBuffer==20

しかし、バッファについてはまだ問題があります。 読めばすべてがわかるのですが、コードでどのように実装すればよいのかがわかりません。もしご面倒でなければ、コードに挿入していただけませんでしょうか?