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

 
A100:

質問:OnDeinit->M5はいつ呼び出されるのですか?

私の答えは、「絶対にしない」です。

上記の回答:非同期かつ遅延あり

30分以上経過してもOnDeinit->M5が呼び出されない。

そして今度はExpert Advisorのコードを変更してみましょう(順番を少し変更) ...

結果

2017.02.06 01:31:45.002 OnInit->M5
2017.02.06 01:31:48.340 OnDeinit->M5:1 すぐに、滞りなくコールされました!
2017.02.06 01:31:48.409 OnInit->M15

ファイル:
Test.mq5  2 kb
 
A100:

30分以上経過してもOnDeinit->M5が呼び出されない。

そして、今度はExpertのコードを変えてみましょう(順番を少し変えて).

コードの添付をお願いします。
 
Renat Fatkhullin:
コードの添付をお願いします。
前回の同名の投稿に添付しました。実際には、静的な呼び出しが動的な呼び出しに置き換えられており、結果は根本的に異なっている
 
A100:
前回の同名の投稿に添付しました。実際には、静的な呼び出しが動的な呼び出しに置き換えられており、結果は根本的に異なっている
ありがとうございます、調べてみます。

最初のケースでは、OnDeinitがないことと、スタティック変数が あり、その結果デストラクタを呼び忘れていたことが、最適化に悪さをしたようです。
 
Alexey Kozitsyn:
どのスレッドについて話しているのか、明確にしてもらえますか?同じシンボルのインジケータは、すべて同じスレッドで動作しないのでしょうか?
はい、異なるスレッドは、時間枠ではなく、チャートがシンボルを変更した場合になります。

タイムフレームのみを変更した場合、新しいコピーのインジケータは古いものと同じスレッドで計算されます。

しかし、M5のDeinitコマンドがM15のInitコマンドより早く処理されるという事実も当てにならない
 
Slawa:
タイムフレームのみを変更した場合、新しいコピーのインジケータは古いものと同じスレッドで計算されます。

しかし、ここでは、M5のDeinitコマンドがM15のInitコマンドより早く処理されることに頼ることはできない。
ヘルプに追加してください、お願いします。
 
Slawa:

こんにちは。

メッセージに細心の注意を払ってくださいhttps://www.mql5.com/ru/forum/166358/page4#comment_4064293

これはとても重要なことです。

は、新しいエラー1158があるのですが、ヘルプに載っていないのでしょうか?

cannot set millisecond timer (500)
cannot set millisecond timer (500)
  • www.mql5.com
Здравствуйте, клиент прислал лог файл, в котором я увидел такую запись cannot set millisecond timer (500) что она значит? и почему...
 

実行エラー

Test_s.ex5' の 0x030A00AD から 0x00000005 への読み込みでアクセス違反が発生しました。

//Test_s.mq5 //Скрипт
class A {};
#import "TestA.ex5"
        A *error();
#import
class B { protected:
    B( const string& name ) : name( name ) {}
    virtual int g( const MqlParam& param[] ) const { return ::IndicatorCreate( NULL, PERIOD_CURRENT, IND_CUSTOM, ::ArraySize( param ), param ); }
        const string name;
bool f( int h ) const
{
        if ( ::ChartIndicatorAdd( 0, 0, h ) )
                return true;
        error();
        return false;
}
};
class C : protected B { protected:
    C( int h, string name ) : B( name ), h( h ) { f( this.h ); }
        const int h;
};
class D : C { public:
    D( string path ) : C( g( path ), path ) {}
int g( const string& path )
{
        MqlParam param[ 1 ];
        param[ 0 ].type         = TYPE_STRING;
        param[ 0 ].string_value = path;
        return g( param );
}
};
void OnStart() { D d( "Test_i" ); }
//TestA.mq5
#property library
class A {};
A * error() export { return NULL; }

すべてのファイル(Indicatorを除く)はMQL5 folderScriptsの中にあります。

Indicator自体は必要ありませんが、例えば、https://www.mql5.com/ru/forum/1111/page18 03#comment_4063671 からダウンロードすることができます。

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • www.mql5.com
Форум алго-трейдеров MQL5
 
fxsaber:
ヘルプに載せてください。
ここをクリック -実行中のプログラム

MQL5のプログラムの概要については、以下の表をご覧ください。

プログラム

実行

備考

スクリプト

自分のスレッドで、スクリプトの実行スレッドの数だけ

ループしたスクリプトは、他のプログラムの作業を中断できない

専門家

独自のスレッドで、専門家の数だけ - 彼らのための実行スレッドの数だけ

ループしたエキスパートが他のプログラムの作業を中断させることはない

インジケーター

1つのシンボルに対して、すべてのインジケータを1つの実行スレッドで実行します。イ ンジケータ・シンボルの数だけ、その実行スレッドがある

1つのインジケータが無限ループすると、このシンボルの他のすべてのインジケータが停止します。

 
A100:

B'111111111111111111111111'という形で書かれています。

残念ながら、私はこのフォーマットにはなじみがありません。

実験では、グラフィカルバッファの中の数値はdoubleと同じルールで表現されることがわかった--つまり、こんな長い数値はグラフィカルバッファに通せないということだ--悔しい。