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

 
costy_:

呼び出すと、次のようになります。

2013.05.31 13:08:41 temp (AUDUSD,M5) TERMINAL_COMPANY = MetaQuotes Software Corp.です。

他のブローカーであるべきだ、あるいは何かが間違っている、ありがとう。

 AccountInfoString(ACCOUNT_SERVER)

ターミナルはMetaQuotes Software Corp.に属しています。

ブローカーAccountInfoString(ACCOUNT_SERVER)

 
pako:

ターミナルはMetaQuotes Software Corp.に属しています。

ブローカーAccountInfoString(ACCOUNT_SERVER)

ありがとうございます、やっぱり失くしてしまいました。
 

こんにちは。

多通貨のインジケーターを書いて います。再度コードを変更すると、コンパイルはうまくいくのですが、インジケータをチャートに載せようとすると、「無効なex5ファイルです」と表示されます。別の名前で保存し直しても、同じです。コードに問題があることが判明したが、コンパイルは問題ない。

//+------------------------------------------------------------------+
//|                                                      Therm02.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+

#include <ST_ServicesAndAbstracts.mqh>

#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 120
#property indicator_buffers 1
#property indicator_plots   2
//--- plot Label1
#property  indicator_label1  "Label1"
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrBlack
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//--- indicator buffers
double         gThermB[];

double         gEURThermB[];
double         gCHFThermB[];

CRangeManager  *gEURRM, *gCHFRM;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,gEURThermB,INDICATOR_DATA);
   SetIndexBuffer(0,gCHFThermB,INDICATOR_DATA);
   gEURRM = new CRangeManager(1,0.2,20,"EURUSD");
   gCHFRM = new CRangeManager(1,0.2,20,"USDCHF");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,      // size of input time series
                 const int prev_calculated,  // bars handled in previous call
                 const datetime& time[],     // Time
                 const double& open[],       // Open
                 const double& high[],       // High
                 const double& low[],        // Low
                 const double& close[],      // Close
                 const long& tick_volume[],  // Tick Volume
                 const long& volume[],       // Real Volume
                 const int& spread[]         // Spread
   )

  {
//---
   double lEUR[], lCHF[];
   int copied;
   copied=CopyClose("EURUSD",PERIOD_CURRENT,0,5000,lEUR); 
   if (copied==-1){Print("Ждите...EUR");return(0);}
   copied=CopyClose("USDCHF",PERIOD_CURRENT,0,5000,lCHF); 
   if (copied==-1){Print("Ждите...CHF");return(0);}


   sThermometer lT;
   for(int i=prev_calculated;i<rates_total;i++)
      {
         lT = gEURRM.getState(lEUR[i]);
         gEURThermB[i] = lT.currentT; 
         
         lT = gEURRM.getState(lCHF[i]);
         gEURThermB[i] = lT.currentT; 
      }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
  {
//---
   
  }
//+------------------------------------------------------------------+

どうすればいいですか?

ありがとうございました。

 
ns_k:

こんにちは。

多通貨のインジケーターを書いて います。再度コードを変更すると、コンパイルはうまくいくのですが、インジケータをチャートに載せようとすると、「無効なex5ファイルです」と表示されます。別の名前で保存し直しても、同じです。コードに問題があることが判明したが、コンパイルは問題ない。

どうすればいいですか?

ありがとうございました。

エラーや警告が 出ることなく、コンパイルが完了しますか?正確ですか?
 
tol64:
エラーや警告を 出さずにコンパイルできますか?本当ですか?
エラーはなく、警告が出ますが、ほとんどは未使用の値などの無害なものです。しかし、この指標となるバッファの量が必要量より少ないということがあります。ここを掘ってみる

 
ns_k:
エラーはなく、警告が出ますが、ほとんどは未使用の値などの無害なものです。しかし、この指標となるバッファの量が必要量より少ないことがあります。ここを掘ってみる。

はい、まさにその通りです。そこに間違いがあるのです。

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,gEURThermB,INDICATOR_DATA);
   SetIndexBuffer(0,gCHFThermB,INDICATOR_DATA);
   gEURRM = new CRangeManager(1,0.2,20,"EURUSD");
   gCHFRM = new CRangeManager(1,0.2,20,"USDCHF");
//---
   return(INIT_SUCCEEDED);
  }
赤色でハイライトされています。 1に置き換えて ください。
 
#property indicator_buffers 1
#property indicator_plots   2
バッファの数は、プロットの数より少なくすることはできません。これは、コンパイラがメッセージで伝えていることです。
 
tol64:

はい、まさにその通りです。そこがダメなんです。

赤色でハイライトされています。 1に置き換えて ください。
#property indicator_buffers 1
#property indicator_plots   2
Спасибо всем!
 
ns_k:

MT4ビルトイン500。アラートをあるレベルに設定すると、それが鳴り、すべてがうまくいくのです。アラート(スペース)を解除すると、中断と表示されるのですが。そして、計測器がしきい値に達すると、アラートが発動されます。こうあるべきなのだろうか。

ps.はい、余談です。まず、すべてのアラートをマウスでハイライトし(6個)、スペースキーを押したら、すべてサスペンド状態になりました。1回トリガーした後、すでにスペースキーだけでオフにしていますが、まだトリガーしています

 

さらに振りかけていく。

//+------------------------------------------------------------------+
//|                                                      Therm02.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+

//#include <ST_ServicesAndAbstracts.mqh>

#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 120
#property indicator_buffers 2
#property indicator_plots   2
//--- plot Label1
#property  indicator_label1  "Label1"

#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrBlack
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//--- indicator buffers
double         gThermB[];

double         gEURThermB[];
double         gCHFThermB[];

//CRangeManager  *gEURRM, *gCHFRM;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,gEURThermB,INDICATOR_DATA);
   SetIndexBuffer(1,gCHFThermB,INDICATOR_DATA);
   //gEURRM = new CRangeManager(1,0.2,20,"EURUSD");
   //gCHFRM = new CRangeManager(1,0.2,20,"USDCHF");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,      // size of input time series
                 const int prev_calculated,  // bars handled in previous call
                 const datetime& time[],     // Time
                 const double& open[],       // Open
                 const double& high[],       // High
                 const double& low[],        // Low
                 const double& close[],      // Close
                 const long& tick_volume[],  // Tick Volume
                 const long& volume[],       // Real Volume
                 const int& spread[]         // Spread
   )

  {
//---
   double lEUR[], lCHF[];
   int copied;
  // copied=CopyClose("EURUSD",PERIOD_CURRENT,0,5000,lEUR); 
   if (copied==-1){Print("Ждите...EUR");return(0);}
  // copied=CopyClose("USDCHF",PERIOD_CURRENT,0,5000,lCHF); 
   if (copied==-1){Print("Ждите...CHF");return(0);}


   //sThermometer lT;
   for(int i=prev_calculated;i<5000;i++)
      {
         //lT = gEURRM.getState(lEUR[i]);
       //  gEURThermB[i] = lT.currentT; 
         
     //    lT = gCHFRM.getState(lCHF[i]);
     //    gCHFThermB[i] = lT.currentT; 
      }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
  {
//---
   
  }
//+------------------------------------------------------------------+

起動時に 指定したシンボルが選択されていないことを端末が 宣誓する。クラウド経由で別のMT5にドラッグすると、ティッカーを使ったコメント付きの文字列で、動作します。

原因を探ろうと思うのですが、そんな迷走したエラーはどこから探せばいいのかわかりません。端末を一気に再インストールしたほうがいいのでは?