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

 
Andrey Pogoreltsev:

CSymbolInfoを多通貨で使用する場合、初期化時にNameメソッドで呼び出される。

テスト中はUSDCADのシンボルにエラーが発生します。

テスト中の入金通貨は 何ですか?

 
Slava:

テスト時のデポジットの通貨は

米ドル。EURUSDのM1テストペア。裸のEAで再現してみようと思います。今のところ成功はしていない。しかし、これらの方法によって、ログにエラーが発生し、まさに1対1になってしまったのです。

 
Slava:

テスト時のデポジットの通貨は

概ね再現され、特徴を見出すことができた。テスト設定を添付しました。

Expert Advisorのコードそのものをむき出しにする。

#include <Trade\SymbolInfo.mqh>

int OnInit()
  {
//---
   CSymbolInfo info;
   info.Name("EURCHF.m");
   info.Refresh();
   info.Name("EURJPY.m");
   info.Refresh();
   info.Name("EURUSD.m");
   info.Refresh();
   info.Name("EURGBP.m");
   info.Refresh();
   info.Name("USDCAD.m");
   info.Refresh();
//---
   return(INIT_SUCCEEDED);
  }


さて、お約束の「機能」ですが)こんな風にName()を使ってみると。

   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE,m_tick_value))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_PROFIT,m_tick_value_profit))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_LOSS,m_tick_value_loss))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_SIZE,m_tick_size))
      return(false);

の場合、エラーになります。しかし、この方法でエラーは消えます。

   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_SIZE,m_tick_size))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE,m_tick_value))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_PROFIT,m_tick_value_profit))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_LOSS,m_tick_value_loss))
      return(false);


PS.私のセントでは、接頭辞に".m "を付けたペアがあります。この例は、通常のペアでも同様に動作します。

ファイル:
test.png  11 kb
 
Andrey Pogoreltsev:

とにかく再現して、機能を発見した。テスト用の設定を添付します。


ありがとうございます。フィギュアリング・イット・アウト

 

バグMT5ビルド2007。最適化モードでは、入力文字列は63文字に切り捨てられます。

テスト用のコードです。

#property strict

sinput string symbols = "AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,NZDUSD,USDCAD,USDCHF,USDJPY";
input  bool fortestopt = false;
int OnInit(){
   Print("!!! ",StringLen(symbols)," | ",symbols);

   return INIT_FAILED;
}

void OnTick(){}


シングルランはすべてOK: !90|オーダスド、ユーロポンド、ユーロスド、GBPAUD、GBPCAD、GBPCHF、GBPJPY、GBPNZD、GBPUSD、NZDUSD、USDCAD、USDCHF、USDJPY

Fortestopt パラメータで最適化を設定し、エージェントのログにアクセスしてみましょう: !63|オーダスド、ユーロブップ、ユーロスド、ギブパウド、ギブパカド、ギブピッチフ、ギブピンジップ、ギブピウスド。

 

どなたか教えてください...

マイページの新着 情報が表示されないのですが...。以前は誰が何を投稿したのか見れたのに、今は真っ白なページです... 設定は何も変えてないのに......。

 

コンパイラのバグで、曖昧さエラーが発生します。最初のメソッドが最も適切なものとして呼ばれるはず です。C++でテストしています。

class A { };

class B
{
  A _a[];
 public:
        A * operator[](uint i)       { return &_a[i]; }
  const A * operator[](uint i) const { return &_a[i]; }  
};

void OnStart()
{
  B b;
  b[0]; // 'operator[]' - ambiguous call to overloaded function
}
 
Evgenii Kuznetsov:

バグMT5ビルド2007。最適化モードでは、入力文字列は63文字に切り捨てられます。

テスト用のコードです。


シングルランはすべてOK: !90|オーダスド、ユーロポンド、ユーロスド、GBPAUD、GBPCAD、GBPCHF、GBPJPY、GBPNZD、GBPUSD、NZDUSD、USDCAD、USDCHF、USDJPY

Fortestopt パラメータで最適化を設定し、エージェントのログにアクセスしてみましょう: !63|オーダスド、ユーロブップ、ユーロスド、ギブパウド、ギブパカド、ギブピッチフ、ギブピンジップ、ギブピウスド。

1回のテストでも63文字まで切れないのは、ただのまぐれです。

入力パラメータ型文字列の長さは63文字(ヌル文字ターミネータを含めると64文字)以内とする。

 
Slava:

シングルテストでも63文字まで切れないというのは、単なる偶然です。

文字列型の入力パラメータは63文字(ヌル文字を含めると64文字)以内でなければならない。

これはある種の強権的な規制です。今の時代、その根拠は何ですか?また、文字束のクラスターを指定するのは、どのように便利なのでしょうか?十数種類のパラメータをプロットする?便利ですか?

 
Slava:

シングルテストで63文字に切り捨てられないのは、単なる偶然です。

文字列型の入力パラメータは63文字(ヌル文字ターミネータと合わせて64文字)を超えてはならない

この制限は不適切で、私たちはジャガイモ1キログラムの価格を文字列に書き込んでいるわけではありません。