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

 

開発者の皆様へのメッセージです。特定の状況下でcopy_rates_from_pos を介してデータを受信すると、Python スクリプトがハングアップする。

状況を説明します。ブローカーは約4kの商品を持っています。
楽器の一次選定は、あるルールに従って検索・フィルタリングして行っています。

ターミナルにある商品の1つに履歴がありません(つまり、マーケットウォッチとシンボルリストで、商品は存在しますが、データは空です)。

スクリプトを実行しようとしたとき。rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1,1, analysis_days),
スクリプトはただハングアップするだけです。エラーそのものが発生せず、すべてがこの行でハングアップするため、Noneを試したり確認したりするのは役に立ちません。

rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1,0, analysis_days),
, つまり0から始まるバー番号を指定しようとすると、ハングせず、空のテーブルが返されます。

追記また、copy_rates_from_posでデータをFIRSTで取得すると、要求されたバーの数が履歴の数よりも多いという同様の問題が発生しました。また、スクリプトがハングアップする。第二の請求については、このような誤りはない。そのため、エラーを繰り返すことは難しいようです(おそらく、そのシンボルの履歴をすべて削除することで、初めて可能になるのでしょう)。

間違っているか見逃しているかもしれませんが、この関数はデータを返すかエラーを出すはずなので、バグと思われます。

 
Alexander Mikheev:

開発者の皆様、もし私の勘違いや考慮不足があれば、ご指摘ください。

あなたのデータを基にソースコードを書き、様々な取引サーバーでテストする時間を誰かに求めていますか?

それはないでしょう。他人の時間を尊重する:ソース、サーバー、マシン構成など、問題を再現するためのデータを完全に提供すること。


ソースは簡潔で、コメント付きなので、そこに書かれていることを解析するのに無駄な時間がかかりません。何を手に入れたかったのか、何を手に入れたのかを伝える。

 
fxsaber:

パスワードで保護されたZIPアーカイブです。

ロックされたアーカイブは、MQLでサポートされていますか?

 
Stanislav Korotky:

ロックされたアーカイブは、MQLでサポートされていますか?

どうだろう。

 
suncrypto:

開発者の皆様へのメッセージです。特定の状況下で copy_rates_from_pos を介してデータを受信すると、Python スクリプトがハングアップする。

状況を説明します。ブローカーは約4kの商品を持っています。
楽器の一次選定は、あるルールに従って検索・フィルタリングして行っています。

ターミナルにある商品の1つに履歴がありません(つまり、マーケットウォッチとシンボルリストで、商品は存在しますが、データは空です)。

スクリプトを実行しようとしたとき。rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1,1, analysis_days),
スクリプトはただハングアップするだけです。エラーそのものが発生せず、すべてがこの行でハングアップするため、Noneを試したり確認したりするのは役に立ちません。

rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1,0, analysis_days),
, つまり0から始まるバー番号を指定しようとすると、ハングせず、空のテーブルが返されます。

追記また、copy_rates_from_posでデータをFIRSTで取得すると、要求されたバーの数が履歴の数よりも多いという同様の問題が発生しました。また、スクリプトがハングアップする。第二の請求については、このような誤りはない。そのため、エラーを繰り返すことは難しいようです(おそらく、そのシンボルの履歴をすべて削除することで、初めて可能になると思われます)。

何か勘違いしていたのか、見落としていたのか、関数はデータを返すか、エラーを出すかのどちらかでなければならないので、バグと思われます。

再現、修正。

 
TesterHideIndicators(false)の動作が停止しました。
 
suncrypto:

開発者の皆様へのメッセージです。特定の状況下で copy_rates_from_pos を介してデータを受信すると、Python スクリプトがハングアップする。

状況を説明します。ブローカーは約4kの商品を持っています。
楽器の一次選定は、あるルールに従って検索・フィルタリングして行っています。

ターミナルにある商品の1つに履歴がありません(つまり、マーケットウォッチとシンボルリストで、商品は存在しますが、データは空です)。

スクリプトを実行しようとしたとき。rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1,1, analysis_days),
スクリプトはただハングアップするだけです。エラーそのものが発生せず、すべてがこの行でハングアップするため、Noneを試したり確認したりするのは役に立ちません。

rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1,0, analysis_days),
, つまり0から始まるバー番号を指定しようとすると、ハングせず、空のテーブルが返されます。

追記また、copy_rates_from_posでデータをFIRSTで取得すると、要求されたバーの数が履歴の数よりも多いという同様の問題が発生しました。また、スクリプトがハングアップする。第二の請求については、このような誤りはない。そのため、エラーを繰り返すことは難しいようです(おそらく、そのシンボルの履歴をすべて削除することで、初めて可能になるのでしょう)。

間違っているか見逃しているかもしれませんが、この関数はデータを返すかエラーを出すはずなので、バグと思われます。

修正済み、次回のベータ版に搭載予定
 
Aleksey Vyazmikin:
TesterHideIndicators(false)の動作が停止しました。

TesterHideIndicatorは、その後に作成されるインジケータの可視化フラグを 設定します。

以前に作成したインジケータの可視化フラグは 変更されません。

以下の専門家に確認することができます。

//+------------------------------------------------------------------+
//|                                     TestTesterHideIndicators.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

int ExtHandleMacd;
int ExtHandleEma;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   TesterHideIndicators(true);
   ExtHandleMacd=iMACD(NULL,0,12,26,9,PRICE_CLOSE);
   TesterHideIndicators(false);
   ExtHandleEma=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  }
//+------------------------------------------------------------------+

ビジュアライザーと簡易テスト後に開いたチャートでは、MACDは 表示されず、移動平均線が表示されています。

だから、意図したとおりに動作する

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
  • www.mql5.com
Комбинация флагов видимости объекта определяет таймфреймы графика, на которых объект отображаем. Для установки/получения значения свойства OBJPROP_TIMEFRAMES можно использовать функции ObjectSetInteger()/ObjectGetInteger...
 
DMITRII PECHERITSA:
バグ - ポインタの操作に一貫性がない (5.00, 2650)

コンパイルエラー です。何か感想はありますか?



明示的にdereference文を使用する

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   C201022_090654 c_1(* new C201022_090641); //works
   C201022_090654 c_3(* new C201022_092325(1)); //works
//---'new' - parameter passed as reference, variable expected
   C201022_090654 c_2(* new C201022_090641(1)); //not works
                      ^
  }
 

A100:
Ошибка при компиляции:

typedef void (*fn)();
void f() {}
fn g() { return f; }
oid OnStart()
{
        g()(); //Error: ')' - expression expected
}

以前、この質問について調べたところ、このようなことがわかりました。

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

バグ、バグ、質問

セルゲイ・デジブリク, 2020.04.04 21:46

バグ MT5(build 2375) 関数へのポインタの配列が使用されている場合、そのポインタを介して関数を呼び出すとコンパイルエラーに なる

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

void test(){
   PRINT(__FUNCSIG__);
}

template<typename T>
void call(T f_ptr){
   f_ptr();
}


template<typename T>
class A{
public:
   T arr_1[1];
   
   typedef void (*ff)();
   ff arr_2[1];  
   
   
   T test_1(){
      return arr_1[0];
   } 
   
   ff test_2(){
      return arr_2[0];
   } 
   
   T operator[](int index){
      return arr_1[index];
   }
};

void OnStart(){
   typedef void (*ff)();
   ff arr[1];
   arr[0] = test;   
   
   ff f_ptr = arr[0];
   f_ptr();             //Ok
   call(arr[0]);        //Ok
   arr[0]();            //Compile Error: ')' - expression expected   
   
   
   A<ff> a;             
   a.arr_1[0] = test;
   a.arr_2[0] = test;
   
   
   a.arr_1[0]();        //Compile Error: ')' - expression expected   
   a.arr_2[0]();        //Compile Error: ')' - expression expected   
   
   a.test_1()();        //Compile Error: ')' - expression expected   
   a.test_2()();        //Compile Error: ')' - expression expected   
   
   a[0]();              //Ok ???
}