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

 

実行中にエラーが発生しました。

class A {
public:
        A( int ) { Print( 1 ); }
        A( A&  ) { Print( 2 ); }
};
void OnStart()
{       
        int a = 5;
        {
                A a( a );         //(1)
        }
}

  • MQLの結果。2
  • MQLで期待されること。1

実際には、この例はC++のルールで実行されます

void OnStart()
{
        int a = 5;
        {
                A a( a );         //(2)
        }
}

一方、次の例は、MQLの(C++とは異なる)ルールによって動作します。

void OnStart()
{       
        int a = 5;
        {
                int a = a;         //(3)
                printf( "%d", a );
        }
}

  • MQLでの結果(3)。5
  • C++の場合:0(または乱数)

変数が宣言されているとみなされるのは、次のいずれかです。

  • 登場時(*)から、または
  • 宣言の末尾から (**)

С++では(*)のアプローチが1つですが、MQLでは(2)の場合は(*)、(3)の場合は(**)です。(2)(3)の根本的な違いは何でしょうか?

これは、なぜMQLでは変数が出現した時点から宣言されたとみなされる場合と、宣言が終了した時点から宣言されたとみなされる場合があるのかという質問です。

 

コンパイルエラーです。

#import "z.ex5"
#import
#define  MACRO1( x )    (x) //(*)
#define  MACRO2( x )    MACRO1(x)
int f( int z )
{
        return MACRO2( z ); //Error: '()' - operand expected
}

それ以外は。

#define  MACRO1( x )    x  //(**)

OKです。(*)と(**)の違いは何ですか?

 
Fast235:

空のターミナルや以前使用していなかったシンボルで履歴を読み込むことができない

M1では全て読み込み、H1では720本のバーを 読み込んで終わりですが、それ以上のバーの読み込みが止まり、インジケータが正しく表示されません(約900本のバーをチェックすると、インジケータが全く動かなく なります)。

.....

https://www.mql5.com/ru/docs/series/timeseries_access のスクリプトを添付します 面倒なのでずっと使いたくなかったんです。インジケータに追加して、2、3行追加したら、正常に動作するようになりました。

このスクリプトはよく設計されており、取引ロボットに組み込むのも簡単です。多通貨、多時間枠の取引には必須です作業指標によってロードしたりフリーズしたりしないため。

標準のMAでも同じようなことはできますが、その特殊性などから、多くの人は気づかず、チャートか期間を変えただけでリロードしてしまいます...。

Документация по MQL5: Доступ к таймсериям и индикаторам / Организация доступа к данным
Документация по MQL5: Доступ к таймсериям и индикаторам / Организация доступа к данным
  • www.mql5.com
Прежде чем ценовые данные будут доступны в терминале MetaTrader 5, их необходимо получить и обработать. Для получения данных требуется подключение к торговому серверу MetaTrader 5. Данные поступают с сервера по запросу терминала в виде экономно упакованных блоков минутных баров. Механизм обращения к серверу за данными не зависит от того, каким...
 
こんにちは!Android 4.4のMT5が 更新されなくなりました。アプリを開くことすらできない。どなたか遭遇したことのある方がいらっしゃいましたら、ご協力をお願いします。
ありがとうございました。
 
fxsaber:

Expert Advisor はフレームモードで動作し、パラメータを設定するため、OnTesterInit の Expert.mqh から取得することができます。

EXPERT::Parametersの呼び出しは、なぜか文字列型になって います。これはバグでしょうか、それとも制限でしょうか?

 
Stanislav Korotky:

EXPERT::Parametersを呼び出した結果、すべてのパラメータが何らかの理由で文字列型 になりました。これはバグなのでしょうか、それとも制限なのでしょうか?

もっといい例がある。

 
Andrey:
こんにちは!Android 4.4のMT5が 更新されなくなりました。アプリを開くことすらできない。どなたか遭遇された方がいらっしゃいましたら、ご協力をお願いします。
ありがとうございました。

最低でもAndroid5というのは、最近開発者が書いて いることです。

 
fxsaber:

例を挙げるとすれば、もっといい。

まあ例はこの方法の標準的なもの、みたいなものです。

    EXPERT::Parameters(0, parameters, names);
    for(int i = 0; i < ArraySize(parameters); i++)
    // здесь parameters[i].type всегда равно TYPE_STRING, вне зависимости от фактического типа параметра

これは、Expert.mqhライブラリのソースコード自体からも確認することができる。

PS.図書館のトピックに議論を移した。

 

ParameterGetRange/ParameterSetRangeの別のバグです。

ParameterSetRange を 呼び出しても、その後に呼び出すParameterGetRange の最適化にそのパラメータを含めるかどうかのフラグが変更されることはありません。

// параметр "name" изначально включен в оптимизацию
// в одной части кода...
ParameterSetRange("name", false, value, start, step, stop);
...
// в другой части кода финализация проверок
ParameterGetRange("name", enabled, value, start, step, stop); // получаем enabled=true, т.е. изменения внесенные ParameterSetRange не применились
 
Stanislav Korotky:

ParameterGetRange/ParameterSetRangeの別のバグです。

ParameterSetRange を呼び出しても、その後に呼び出すParameterGetRange の最適化にパラメータを含めるフラグが変更されることはありません。

私がこのテーマにのめり込んでいた頃、いろいろなニュアンスがあったのを覚えています。OnTester*関数によって、何かが正しく、あるいは間違っていることが示されました。異なるOn-functionsで呼び出してみてください。