MQL5でiClose/iOpenの時系列アクセスなどを操作した場合の不具合。 - ページ 5 12345678910 新しいコメント fxsaber 2018.11.14 20:21 #41 Renat Fatkhullin:Market Watchから各シンボルの最新 2000ティックを常に保持するインジケータのリファレンスコードを教えてください。 そうしないと、片方は推測で、もう片方は言葉という形でしか提言ができなくなります。 _o0O 2018.11.14 20:24 #42 Renat Fatkhullin:コードを見なければならない。 上のコードは、明らかに論理的、資源的な問題が山積みです。このようなことをやっているのですが、どのように、そして必要なら何をいじればいいのか、アドバイスをお願いします。 bool flag = true; //+————————————————————————————————————————————————————————————————————————————+ int OnInit () { /* тут определены и настроены буферы */ flag = true; //--- return (INIT_SUCCEEDED); } //+————————————————————————————————————————————————————————————————————————————+ //+————————————————————————————————————————————————————————————————————————————+ void OnDeinit (const int reason) { //--- destroy timer EventKillTimer (); } //+————————————————————————————————————————————————————————————————————————————+ //+————————————————————————————————————————————————————————————————————————————+ int OnCalculate (const int rates_total, const int prev_calculated, const datetime &time [], const double &open [], const double &high [], const double &low [], const double &close [], const long &tick_volume [], const long &volume [], const int &spread []) { //Print ("---"); //Print (rates_total, " ", prev_calculated); //Print ("---"); if (flag) { if (SeriesInfoInteger (Symbol (), Period (), SERIES_SYNCHRONIZED)) { Print ("1 История синхронизирована"); int bars = Bars (Symbol (), Period ()); Print ("Баров в истории ", bars); MqlTick ticks_array []; datetime from = TimeByNumberOfCandles (Symbol (), PERIOD_M1, ParentCandles_P); MqlDateTime sdt; ulong from_msc = ((ulong)from) * 1000; ResetLastError (); int count = CopyTicksRange (Symbol (), ticks_array, COPY_TICKS_INFO, from_msc); //, to_msc); Print ("Скопировано ", count, " тиков"); int error = GetLastError (); Print (error); if (count <= 0 || error != 0) { Print ("Ошибка при получении данных"); return (rates_total); } Print (ticks_array [0].time_msc, " ", ticks_array [count - 1].time_msc); // 0-й самый старый for (int i = 0; i < count; i++) { // тут вычисления и операции с тиками } /* тут заполнение индикаторных буферов значениями полученными после работы с тиками */ } flag = false; } else { Print ("2 История НЕ синхронизирована!"); return (rates_total); } } return (rates_total); } //+————————————————————————————————————————————————————————————————————————————+ Vitaly Muzichenko 2018.11.14 20:26 #43 Renat Fatkhullin:コードを見なければならない。 上のコードは、明らかに論理的、資源的な問題が山積みです。このコードに論理的な問題があるのか、それとも私が何かを見逃しているのか? トレーディング、自動売買システム、ストラテジーテストに関するフォーラム MQL5 iClose/iOpenの時系列アクセス等の不具合について スタニスラフ・ドレイ 2018.11.14 16:28 バグレポートに対する姿勢がおかしい。何かを証明するためにお金をもらっているわけではありません。できる限り状況を整理してみました。 私だけが問題なのではなく、30回目のアップデート後に問題が発生したのですが、それでもあなたは私が馬鹿だとほざき、一部の遅れたインジケーターのせいにしています。 その前の1年間は遅かったのでは? 以下は、M30で起動から25分後にハングアップするコードの例です。 //+------------------------------------------------------------------+ //| Feezzzz.mq5 | //| Copyright 2018, Dray Stanislav | //| https://www.mql5.com/ru/users/fan9 | //+------------------------------------------------------------------+ #property copyright "Copyright 2018, Dray Stanislav" #property link "https://www.mql5.com/ru/users/fan9" #property version "1.00" //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- datetime CM1_T[1]; if(CopyTime(_Symbol,PERIOD_M1,0,1,CM1_T)==-1){ Comment("\n\n CopyTime return -1"); return; } Comment("\n\n CopyTime : "+TimeToString(CM1_T[0],TIME_DATE | TIME_SECONDS)); } //+------------------------------------------------------------------+ //| Trade function | //+------------------------------------------------------------------+ void OnTrade() { //--- } //+------------------------------------------------------------------+ חולםטרנסצנדר ᨖ 2018.11.14 20:46 #44 Renat Fatkhullin:一度にすべてを手に入れられるわけではないことをきちんと理解した上で、指標を書く必要があります。 OnInitでは、CopyXXXを1回呼び出すことによって、必要な測定器の履歴の読み込みを促す必要がありますが、OnCalculateでは完全な初期化まで待つ必要があります。 初期化フェーズにエラーがあるようです。不正確なデータ待ちでブロックしています。していこうと思います。 今はOnCalculateにリクエストしてそこで待っています(もちろん毎ティックではなく、最初の計算時のみです)。 חולםטרנסצנדר ᨖ 2018.11.14 20:52 #45 fxsaber:Market Watchから各シンボルの最新 2000ティックを常に保持するインジケータのリファレンスコードを教えてください。 同感です!ダニどころか、棒の方が良いですね。 Approved True Multicurrency Codeの例が必要です。 そうでなければ、私たちは暗闇の中にいることになる...。 Vitaly Muzichenko 2018.11.14 20:55 #46 エラーの場所を特定し、見つけ次第報告します。 _o0O 2018.11.14 20:59 #47 transcendreamer:そうですね!ダニではなく、棒の方が良いですね。 Approved True Multicurrency Codeの例が必要です。 そうでなければ、まだ暗闇の中にいるようなものだ...。 棒グラフと目盛りは、MT5で独立して生きている異なるエピスタシスです。 Farkhat Guzairov 2018.11.15 04:24 #48 Vladimir Karputov:また、他の人のタイムフレームで作業している場合、そのタイムフレームから1分に1回OHLCを取得することが常に推奨されています(任意のCopyXXXX関数)。これは昔からそうでした。もう、ここで全てを吐き出したいくらいですが、残念ながら私はMQの製品に10年程費やしてきました。 今はビジネス一色です。VladimirさんのCopyXXXX関数の使用についてのアドバイスは、私の専門家ではない書き方のコードから見て、特に支障はなかったので、私が使用しました。 正直、自分の曲がった手だけが問題であってほしかったのですが、問題は手だけではありません。私はテクニカルサポートから、私が間違ってコーディングしていると言って奇妙な説明を期待して、以下のスクリーンショットを持っていると100500他の指標、だからあなたは何をしたい、問題が発生することがあります。私は100500の他の指標を持っていません、エキスパートもいません、私はターミナルで2つのツールだけを開いています、指標テストはEURUSD 1Mで実行されています、指標は同じツールのM15タイムフレームからデータを取得します、すなわち、私は他のシンボルのデータをロードしようとしていませんし、マーケットレビューにそれらのほんの数人がいます。 積載量という点では端末にとって理想的な状況であり、もちろん作業環境ではそうではないでしょうが、この場合でも問題があり、私の考えではこの問題を「BAG」と呼んでいます。 インジケータでは、iClose関数とiBars関数は、Commet()の状態を反映するためだけに呼び出されます。スクリーンショット作成時のマーケット概況では、iCloseとiBarsの関数呼び出しの状態がターミナルウィンドウにあり、さらにインジケータの計算部分はCopyXXXX関数が使用されています。 ご覧の通り、16:31にインジケータを再読み込みして正常に動作したのですが(嬉しくもなってきた)、iCloseのデータ更新が00:15以降止まってしまい、それぞれCopyXXXX関数も更新データを返さない、つまりMTの奥の方でエラーが発生しているのです。 私見ですが、サーバーからデータを読み込む際に障害が発生し、その理由は質量(インターネットがない、サーバーが忙しかったなど)かもしれませんが、なぜ通信の原因を排除した後の作業の再開が起こらないのか、だから、ユーザーのソースコードをいくらでもテストできるのに、隣のサーバーがあれば、この問題を特定できない、存在するのに手の悪いコーダーのせいだけで発生しない、という結論なのだと思います。 Sergey Klimov 2018.11.15 08:53 #49 また、昨日Stanislavからのコードをテストすることにしました。数時間後、時刻の更新が止まりました。タイムフレームを切り替えたわけではなく、チャートのコンテキストメニューから 更新しただけで時間が経過してしまったのです。 今日は、時間と現在のタイムフレームを見るために、コードを少し修正しました。 void OnTick() { datetime CM1_T[1]; datetime CM2_T[1]; CopyTime(_Symbol,PERIOD_M1,0,1,CM1_T); CopyTime(_Symbol,PERIOD_CURRENT,0,1,CM2_T); Comment("CopyTime PERIOD_CURRENT: "+TimeToString(CM2_T[0],TIME_DATE | TIME_SECONDS)+"\nCopyTime PERIOD_M1: "+TimeToString(CM1_T[0],TIME_DATE | TIME_SECONDS)); }15分後、「not native」タイムフレームで更新が停止しましたが、現在のタイムフレームでは正常に更新されていました。グラフの更新後、再び時刻が始まりました。 端末はポータブルモードで動作しています。システムと端末本体は、SSDディスクに配置されています。 Farkhat Guzairov 2018.11.15 09:09 #50 何があったのかわかりませんが、MQL5で最新のMQ Championship用のbotを書いたときは多通貨対応で、他の金融商品のデータ読み込みに問題は感じられませんでした。 リソースは大量に消費されたかもしれませんが、期待通りの結果が得られたわけで、今のようなルーレットゲームではありません。 この問題は、例えばMQL5用の商用製品の開発者として、私の性格をあまり良くはしませんし、マーケットから購入した製品にお金を払った人が、このような「BOGS」のせいで不具合にしか見えないとしたら、二重に不愉快でしょう。 12345678910 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
Market Watchから各シンボルの最新 2000ティックを常に保持するインジケータのリファレンスコードを教えてください。
そうしないと、片方は推測で、もう片方は言葉という形でしか提言ができなくなります。
コードを見なければならない。
上のコードは、明らかに論理的、資源的な問題が山積みです。
このようなことをやっているのですが、どのように、そして必要なら何をいじればいいのか、アドバイスをお願いします。
コードを見なければならない。
上のコードは、明らかに論理的、資源的な問題が山積みです。
このコードに論理的な問題があるのか、それとも私が何かを見逃しているのか?
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
MQL5 iClose/iOpenの時系列アクセス等の不具合について
スタニスラフ・ドレイ 2018.11.14 16:28
バグレポートに対する姿勢がおかしい。何かを証明するためにお金をもらっているわけではありません。できる限り状況を整理してみました。
私だけが問題なのではなく、30回目のアップデート後に問題が発生したのですが、それでもあなたは私が馬鹿だとほざき、一部の遅れたインジケーターのせいにしています。
その前の1年間は遅かったのでは?
以下は、M30で起動から25分後にハングアップするコードの例です。
一度にすべてを手に入れられるわけではないことをきちんと理解した上で、指標を書く必要があります。
OnInitでは、CopyXXXを1回呼び出すことによって、必要な測定器の履歴の読み込みを促す必要がありますが、OnCalculateでは完全な初期化まで待つ必要があります。
初期化フェーズにエラーがあるようです。不正確なデータ待ちでブロックしています。
していこうと思います。
今はOnCalculateにリクエストしてそこで待っています(もちろん毎ティックではなく、最初の計算時のみです)。
Market Watchから各シンボルの最新 2000ティックを常に保持するインジケータのリファレンスコードを教えてください。
同感です!ダニどころか、棒の方が良いですね。
Approved True Multicurrency Codeの例が必要です。
そうでなければ、私たちは暗闇の中にいることになる...。
エラーの場所を特定し、見つけ次第報告します。
そうですね!ダニではなく、棒の方が良いですね。
Approved True Multicurrency Codeの例が必要です。
そうでなければ、まだ暗闇の中にいるようなものだ...。
また、他の人のタイムフレームで作業している場合、そのタイムフレームから1分に1回OHLCを取得することが常に推奨されています(任意のCopyXXXX関数)。これは昔からそうでした。
もう、ここで全てを吐き出したいくらいですが、残念ながら私はMQの製品に10年程費やしてきました。
今はビジネス一色です。VladimirさんのCopyXXXX関数の使用についてのアドバイスは、私の専門家ではない書き方のコードから見て、特に支障はなかったので、私が使用しました。
正直、自分の曲がった手だけが問題であってほしかったのですが、問題は手だけではありません。私はテクニカルサポートから、私が間違ってコーディングしていると言って奇妙な説明を期待して、以下のスクリーンショットを持っていると100500他の指標、だからあなたは何をしたい、問題が発生することがあります。私は100500の他の指標を持っていません、エキスパートもいません、私はターミナルで2つのツールだけを開いています、指標テストはEURUSD 1Mで実行されています、指標は同じツールのM15タイムフレームからデータを取得します、すなわち、私は他のシンボルのデータをロードしようとしていませんし、マーケットレビューにそれらのほんの数人がいます。
積載量という点では端末にとって理想的な状況であり、もちろん作業環境ではそうではないでしょうが、この場合でも問題があり、私の考えではこの問題を「BAG」と呼んでいます。
インジケータでは、iClose関数とiBars関数は、Commet()の状態を反映するためだけに呼び出されます。スクリーンショット作成時のマーケット概況では、iCloseとiBarsの関数呼び出しの状態がターミナルウィンドウにあり、さらにインジケータの計算部分はCopyXXXX関数が使用されています。
ご覧の通り、16:31にインジケータを再読み込みして正常に動作したのですが(嬉しくもなってきた)、iCloseのデータ更新が00:15以降止まってしまい、それぞれCopyXXXX関数も更新データを返さない、つまりMTの奥の方でエラーが発生しているのです。
私見ですが、サーバーからデータを読み込む際に障害が発生し、その理由は質量(インターネットがない、サーバーが忙しかったなど)かもしれませんが、なぜ通信の原因を排除した後の作業の再開が起こらないのか、だから、ユーザーのソースコードをいくらでもテストできるのに、隣のサーバーがあれば、この問題を特定できない、存在するのに手の悪いコーダーのせいだけで発生しない、という結論なのだと思います。
また、昨日Stanislavからのコードをテストすることにしました。数時間後、時刻の更新が止まりました。タイムフレームを切り替えたわけではなく、チャートのコンテキストメニューから 更新しただけで時間が経過してしまったのです。
今日は、時間と現在のタイムフレームを見るために、コードを少し修正しました。
15分後、「not native」タイムフレームで更新が停止しましたが、現在のタイムフレームでは正常に更新されていました。グラフの更新後、再び時刻が始まりました。
端末はポータブルモードで動作しています。システムと端末本体は、SSDディスクに配置されています。
何があったのかわかりませんが、MQL5で最新のMQ Championship用のbotを書いたときは多通貨対応で、他の金融商品のデータ読み込みに問題は感じられませんでした。
リソースは大量に消費されたかもしれませんが、期待通りの結果が得られたわけで、今のようなルーレットゲームではありません。
この問題は、例えばMQL5用の商用製品の開発者として、私の性格をあまり良くはしませんし、マーケットから購入した製品にお金を払った人が、このような「BOGS」のせいで不具合にしか見えないとしたら、二重に不愉快でしょう。