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

 
Igor Zakharov:

だから、秒単位じゃないんです...。

そもそも言語表記はそういうものであるべきなのです。

検索しなければならないような記事ではありません。最後にフォーラムで探してほしいのはこれです。

そうでない場合は、「本を見ても、図鑑を見ても......」という感じです。

 

なぜ、そうなるのでしょうか?

IM      0       17:19:04.403    Terminal        MetaTrader 5 x64 build 2056 started (MetaQuotes Software Corp.)
NG      0       17:19:04.403    Terminal        Windows 7 Service Pack 1 (build 7601) x64, IE 11, AMD FX-4170 Quad-Core Processor , Memory: 9408 / 12255 Mb, Disk: 20 / 238 Gb, GMT+3

ツール仕様の最小ボリュームが100で、ステップも100であることを今日知りました。しかし、Invalid volumeという エラーが出て、ポジションを開くことができません。 0.01を設定すると、ボタンは非アクティブになります。

バージョンを "若い "ものに変更しました。

KK      0       17:35:14.046    Terminal        MetaTrader 5 x64 build 2025 started (MetaQuotes Software Corp.)
IE      0       17:35:14.046    Terminal        Windows 7 Service Pack 1 (build 7601) x64, IE 11, AMD FX-4170 Quad-Core Processor , Memory: 9182 / 12255 Mb, Disk: 20 / 238 Gb, GMT+3

は変更なし。

その後、リリース版と入れ替えました。

FI      0       17:37:23.049    Terminal        MetaTrader 5 x64 build 2007 started (MetaQuotes Software Corp.)
RS      0       17:37:23.049    Terminal        Windows 7 Service Pack 1 (build 7601) x64, IE 11, AMD FX-4170 Quad-Core Processor , Memory: 9180 / 12255 Mb, Disk: 20 / 238 Gb, GMT+3

そして、その結果がこれです。



なぜ、1社だけに起きているのか?もし普及していれば、とっくに問題は解決しているはずです。

会社のサポートにどのような方向で送ればいいのでしょうか?


追記:同じ会社のセントアカウントでビルド2025が正常に動作するのは非常に不思議です。すべてのツールパラメータは、あるべき姿になっています。

セントで取引することができます。自分で考えたんだ......でも、もっと欲しい。

 
Ilyas:

メッセージをありがとうございました。
初歩的なことだから、直せばいいんだ。

Ilyas さん、NonPOD構造体でも同じような問題があります。

struct NonPod{
   uchar data[];
};   
   
void OnStart(){
   NonPod obj;
   
   obj = (NonPod)(obj);   // '(' - invalid cast operation	
}
 
クラスの名前空間をサポートする新しいビルドを待つ以外に、この制限を回避する方法を知っている人はいますか?
template<typename T>
class TestTypedef{
public:
   typedef void (* callback)(T &);    // 'callback' - identifier already used
   callback eq;
};


void ff(int&) {Print(__FUNCSIG__);}

void OnStart(){  

   TestTypedef<int> int_value;
   int_value.eq = ff;
   
   int x = 5;
   int_value.eq(x);                 // Ok

   TestTypedef<string> int_value;   //Compile error 'callback' - identifier already used
}

typedef 機能内のグローバル名前空間宣言領域の問題

 
MT5(ビルド2057)

typedef 内で同じ関数シグネチャを繰り返し使用すると、コンパイルエラーが 発生する。
typedef void (* callback_0)();     // а без этой строки все ОК
typedef void (* callback)();

void test_func(){}

void OnStart(){
   callback func_ptr = test_func;  //'test_func' - type mismatch
   func_ptr();
}
 
Sergey Dzyublik:
MT5(ビルド2057)

typedef内で同じシグネチャを再利用することを「禁止」するバグ。

また、2年以上前に作成した同様のスクリプトでは、2056x32の結果「EX5の読み込みに失敗しました」と表示されます。

 
Sergey Dzyublik:
クラスの名前空間をサポートする新しいビルドを待つ以外に、この制限を回避する方法を知っている人はいますか?

コンパイル

void f(int&) {}
void OnStart()
{
   TestTypedef<int> int_value;
   TestTypedef<string> string_value;

を書くことは可能ですが、それ以上のことはできません。

   int_value.eq = f;
}

ということを書かないように

 
A100:

コンパイルするので、どのように書かない

なーんだ、やっぱり難しいけど、うまくいくんだ・・・。
例のtypedefでbool型が 迷子になった。

#define PRINT(x) ; Print(#x, ":", string(x))

#define  CREATE_TestTypedef(type)                              \
class TestTypedef_##type{                                     \
public:                                                       \
   typedef bool (* callback_##type)(type &);                  \
   callback_##type  eq;                                        \
}
   
bool f(int&) {return true;}


void OnStart(){
   CREATE_TestTypedef(int) int_value;
   CREATE_TestTypedef(string) string_value;                     
   
   int data = 5;
   int_value.eq = f;
   PRINT(int_value.eq(data));                    // result: true
}
 
typedefの修正と名前空間の更新(もしあれば)がリリースされるまで。
となると、それぞれの型の用途をマクロで個別に宣言し、生成されたクラスの名前をマクロで取得してクラスオブジェクトを 作成しなければならない...。
 

CChartObjectLabelを 作成する際、このコードで非初期化する際にインジケータ内のオブジェクトを削除しない理由を説明してください。

//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
#property indicator_separate_window
#include <ChartObjects\ChartObjectsTxtControls.mqh>
CChartObjectLabel *LabelUP,*LabelDN;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   CreateLabel(LabelUP,"LabelUP",0);
   CreateLabel(LabelDN,"LabelDN",30);
/*   
   LabelUP=new CChartObjectLabel;
   LabelDN=new CChartObjectLabel;
   LabelUP.Create(0,"LabelUP",ChartWindowFind(),0,0);
   LabelUP.Color(clrYellow);
   LabelUP.FontSize(14);
   LabelUP.Description("LabelUP");
   
   LabelDN.Create(0,"LabelDN",ChartWindowFind(),0,10);
   LabelDN.Color(clrYellow);
   LabelDN.FontSize(14);
   LabelDN.Description("LabelDN");
*/
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   delete LabelUP;
   delete LabelDN;
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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(rates_total);

  }
//+------------------------------------------------------------------+
void CreateLabel(CChartObjectLabel *l,string name,int y)
  {
   l=new CChartObjectLabel;
   l.Create(0,name,ChartWindowFind(),0,y);
   l.Color(clrYellow);
   l.FontSize(14);
   l.Description(name);
  }
//+------------------------------------------------------------------+

TFを切り替えるとジャーナルエントリーが表示されます: 2019.05.23 09:49:02.044 tstlabel EURUSD,M30: 2 objects of type CChartObjectLabel left.

テキストラベル(CChartObjectLabel)の作成をOnInit()でアンコメントすると、すべてが正しく動作するようになります。

CreateLabel() 関数にポインタを 渡しますが、後でOnDeinit()で削除 できません。