MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1190

 
MakarFX:

MetaQuotesデモサーバーの終了

メタクォーツ・ソフトウェア株式会社

2009年3月4日

2009年4月5日、サーバー「demo.metaquotes.net」を停止します。しかし、分史のあるヒストリーセンターは、その活動を継続します。

この日以来、弊社ではデモサーバーの利用を拒否しています。現在、MetaTrader 4 プラットフォームを 実行している企業の数は非常に多いため、自社でサーバーを維持する必要性はないと考えています。

これはある種の反面教師です(別のサーバーの話も出ています)。今年に入ってから何度も行われていますが、前回は1ヶ月前にMetaQuotes-Demoで新しいデモ口座が普通に作成されました。

また、サーバーが削除された場合、なぜアカウント開設ウィザードに表示され、Pingが送信されるのでしょうか?最後のステップでだけ、ジャムが発生する。

 
Artyom Trishkin:

インジケータから初めてヒストリカルデータにアクセスする際、ローカルデータが不十分な場合、データの読み込みが開始され、関数がエラーを返します。

これはよくわかります。しかし、片方は0を返し、もう片方は正しくヒストリーのバーの 数を返します。しかも、次から次へと呼び出される。

Loader(): symbol(Symbol()), timeframe(Period()) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(symbol, timeframe)); // Данный вызов iBars() даёт 0 при перезапуске терминала
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(Symbol(), Period())); // Этот же вызов iBars() работает нормально
  }

最初のケースでは、データのみがLoaderクラスの準備されたプリメンバー(symbolとtimeframe)から取得されます(正しく初期化されています)。一方、2番目のケースでは、Symbol()とPeriod()関数から(symbolとtimeframeに書かれているのと全く同じ値を返します)。変数の値は、関数の値と同じです(確認しました)。しかし、iBars(symbol, timeframe)が絶対に正しいシンボルとタイムフレームでねじ込むところは明確ではありません。iBars(Symbol(), Period())は間違えないが。そこで、端末自体のエラーか、ソースコードのコンパイルミスに違いないと判断しました。

Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Если указаны параметры start_time и stop_time, то функция возвращает количество баров в диапазоне дат. Если эти параметры не указаны, то функция возвращает общее количество баров. Если данные для таймсерии с указанными параметрами при вызове функции Bars() еще не сформированы в терминале, или данные таймсерии в момент вызова функции не...
 
Mihail Matkovskij:

これはとてもよくわかります。もし、ヒストリーのバーの数が足りないということであれば、どちらの関数も0を返します。 しかし、そのままでは、一方の関数が0を返し、もう一方がヒストリーのバーの数を 正しく返します。しかも、次から次へと呼び出される。

最初のケースでは、データのみがLoaderクラスの準備されたプリメンバー(symbolとtimeframe)から取得されます(正しく初期化されています)。一方、2番目のケースでは、Symbol()とPeriod()関数から(symbolとtimeframeに書かれているのと全く同じ値を返します)。変数の値は、関数の値と同じです(確認しました)。しかし、iBars(symbol, timeframe)が絶対に正しいシンボルとタイムフレームでねじ込むところは明確ではありません。iBars(Symbol(), Period())は間違えないが。そこで、端末の動作のどこかにエラーがあると判断しました。

では、イゴールのアドバイス通り、このように書いてみましょう。

Loader(): symbol(Symbol()), timeframe(Period()) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(Symbol(), Period())); // Данный вызов iBars() даёт 0 при перезапуске терминала
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(symbol, timeframe)); // Этот же вызов iBars() работает нормально
  }
そして、これはクラスのコンストラクタであり、初期化の前に呼び出されることを忘れないでください。
 
Mihail Matkovskij:

これはとてもよくわかります。もし、ヒストリーのバーの数が足りないということであれば、どちらの関数も0を返しますが、そのままでは、一方の関数が0を返し、もう一方がヒストリーのバーの 数を正しく返します。そして、次々と呼び出される。

あなたは物語を思い付く

で、それをクレームとして書くことにして、問

4401のエラーメッセージはどのような内容ですか?

何を書いたか?

バーがないことと、チャートが準備されていないことの違いを理解していますか?

端末の再起動後にインジケータを起動し、OnInit()の前に実行されるMQLプログラムのグローバル初期化(クラスコンストラクタ)でデータを要求した場合。


は、あなたが読むよりも速く、フォーラム4401を検索書き込みました - すべての答え

 
MakarFX:

ロットは次のように計算します。

EAの冒頭にある...と思いきや、コードの一番最後に置いてある

#property link      "http://www.mql5.com"
input double CheckLots = 0.01;
input int    Persent   = 5;
   double Lots=NormalizeDouble(AccountBalance()*CheckLots/1000-0.005,2);  

OnTick関数でLots変数が呼ばれると、EAがそれを見つけて再計算します。

そんなはずはないのです。宣言と初期化が行われ、Lots 変数に式が代入されているところです。

NormalizeDouble(AccountBalance()*CheckLots/1000-0.005,2)

Lotsに アクセスするたびに式が自動的に代入されるようなことはありえない。mqlでそんなことができるなんて聞いたことがない。

 
Seric29:

そんなはずはないのです。宣言と初期化があり、Lots 変数に式が代入されていますね。

この代入は起動時に一度だけ行えばよく、Lotsに アクセスするたびに自動的に式が代入されるようなことはありえません。mqlでそんなことができるなんて聞いたことがない。

確認したところ、バランスが変わるとロットも変わるようです
 
MakarFX:
確認したところ、バランスが変わると、ロットも変わるようです

わぁ、チェックしてみますね。配列要素の ある変数を関数で初期化できるのは知っていますが、自動的に変わるのは知りませんでした、C++でもそんなことはないと思います、後で調べてみます。

 
Artyom Trishkin:
そして、これはクラスのコンストラクタであり、初期化の前に呼び出されることを忘れないでください。

これは、対象が自動である場合です。しかし、キーワードnew (in OnInit()) で作成し、キーワードdelete (in OnDeinit()) で削除しています。つまり、Loader型のオブジェクトへのポインタを使用しています。でも、その辺は全部わかっているんでしょうね。そのため、OnInit()でloaderが作成され、ここでエラーが発生することはあり得ません。

機能を入れ替えるということであれば、試してみましたが、結果は同じです。メッセージの順番が違うだけです :)

public:  
  Loader(): symbol(Symbol()), timeframe(Period()) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(Symbol(), Period())); 
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(symbol, timeframe)); 
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
  }

結果

2020.06.24 23:10:48.568 ローダー::Loader シンボル: EURUSD タイムフレーム: PERIOD_H1

2020.06.24 23:10:48.568 ローダー::ローダーバー (2): 140435

2020.06.24 23:10:48.568 Loader::Loader bars::0

2020.06.24 23:10:48.568 Loader::Loader Error: 4401

これは、端末を再起動した場合にのみ発生することに注意してください。なぜなら、ターミナルの 初回起動 時(Windows起動後)には、この例は正常に動作するからです。
Запуск платформы - Для продвинутых пользователей - Справка по MetaTrader 5
Запуск платформы - Для продвинутых пользователей - Справка по MetaTrader 5
  • www.metatrader5.com
По завершении установки в меню "Пуск" создается группа программ торговой платформы, а на рабочем столе дополнительно помещается ярлык программы. Используйте их для запуска. Нельзя запускать одновременно две копии платформы из одной директории. Чтобы одновременно запустить несколько копий, установите соответствующее количество программ в разные...
 
Igor Makanu:

作り話でしょ?

と、クレームにすることにしました。

ノークレーム!?また、ソースコードを提供し、その動作をテストするための一連の動作まで記述した場合、どのようなストーリーになるのでしょうか。明らかに誤解していますね.

イゴール・マカヌ

そして、OnInit()の前に実行されるMQLプログラムのグローバル初期化(クラス・コンストラクタ)でデータを要求しているのです。


あなたは読むよりも速く書いている、フォーラムを検索4401 - すべての答えが あります。


OnInit()の 前に実行してはいけないと、以前の記事で 書きました。投稿も、私がテストのために追加したソースコードも、よく読んでいないのはあなたの方です。

 
Stanislav Korotky:

これはある種の反面教師です(別のサーバーの話も出ています)。今年に入ってから1回以上、前回は1ヶ月前にMetaQuotes-Demoで新しいデモ口座が普通に作成されました。

また、サーバーが削除された場合、なぜアカウント開設ウィザードに表示され、Pingが送信されるのでしょうか?最後のステップでだけ、ジャムが発生する。

うん、なんか携帯端末 でも登録されてないね。今年の初めには、すべてが登録されました。