エラー、バグ、質問 - ページ 1989 1...198219831984198519861987198819891990199119921993199419951996...3185 新しいコメント fxsaber 2017.09.05 10:12 #19881 テスターの性能は、トレードサーバーに大きく依存します。テスターの設定。Netting USD、Core1のみ有効。エキスパートアドバイザー#include <TesterBenchmark.mqh> // https://www.mql5.com/ru/code/18804 input int Interval = 60; input int AmountLastDeals = 5; input double Lots = 1; double CorrectLot( const double Lot ) { static const double StepVol = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP); static const double MaxVol = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX); static const double MinVol = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN); const double Vol = StepVol * (int)(Lot / StepVol + 0.5); return((Vol < MinVol) ? MinVol : ((Vol > MaxVol) ? MaxVol : Vol)); } void OnTick() { if (!PositionGetTicket(0)) { if (HistorySelect(0, TimeCurrent())) { const int Total = HistoryDealsTotal() - 1; double SumProfit = 0; double SumLots = 0; for (int i = Total, Count = 0; (i >= 0) && (Count < AmountLastDeals); i--) { const ulong Ticket = HistoryDealGetTicket(i); if ((ENUM_DEAL_ENTRY)HistoryDealGetInteger(Ticket, DEAL_ENTRY) == DEAL_ENTRY_OUT) { SumProfit += HistoryDealGetDouble(Ticket, DEAL_PROFIT) * (AmountLastDeals - Count); SumLots += HistoryDealGetDouble(Ticket, DEAL_VOLUME) * (AmountLastDeals - Count); Count++; } } SumLots /= (AmountLastDeals * (1 + AmountLastDeals)) >> 1; MqlTradeRequest Request = {0}; Request.action = TRADE_ACTION_DEAL; Request.symbol = _Symbol; Request.type = ((Total >= 0) && ((ENUM_DEAL_TYPE)HistoryDealGetInteger(HistoryDealGetTicket(Total), DEAL_TYPE) == DEAL_TYPE_SELL)) ? ORDER_TYPE_SELL : ORDER_TYPE_BUY;; Request.volume = (SumProfit >= 0) ? Lots : CorrectLot(SumLots); Request.price = SymbolInfoDouble(Request.symbol, (Request.type == ORDER_TYPE_BUY) ? SYMBOL_ASK : SYMBOL_BID); // MqlTradeCheckResult CheckResult; // if (OrderCheck(Request, CheckResult)) { MqlTradeResult Result; const bool AntiWarning = OrderSend(Request, Result); } } } else if (TimeCurrent() - PositionGetInteger(POSITION_TIME) >= Interval) { MqlTradeRequest Request = {0}; MqlTradeResult Result; Request.action = TRADE_ACTION_DEAL; Request.position = PositionGetInteger(POSITION_TICKET); Request.symbol = PositionGetString(POSITION_SYMBOL); Request.type = (ENUM_ORDER_TYPE)(1 - PositionGetInteger(POSITION_TYPE)); Request.volume = PositionGetDouble(POSITION_VOLUME); Request.price = PositionGetDouble(POSITION_PRICE_CURRENT); const bool AntiWarning = OrderSend(Request, Result); } }FIBOGroup-MT5 サーバーでの 実行結果------ OnTesterInit i = 0 Pass = 0 OnTester = 7.994 s.: Count = 15925124, 1992134.6 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1653 i = 1 Pass = 1 OnTester = 7.831 s.: Count = 15925124, 2033600.3 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1653 i = 2 Pass = 2 OnTester = 7.811 s.: Count = 15925124, 2038807.3 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1653 i = 3 Pass = 3 OnTester = 7.825 s.: Count = 15925124, 2035159.6 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1653 i = 4 Pass = 4 OnTester = 7.831 s.: Count = 15925124, 2033600.3 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1653 i = 5 Pass = 5 OnTester = 7.832 s.: Count = 15925124, 2033340.7 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1653 iMin = 2 Results[iMin] = 7.811 s. iMax = 0 Results[iMax] = 7.994 s. Amount = 6 Mean = 7.854 s. - 90.11% OnTesterDeinit ------ Interval = 52.296 s., Count = 0, 0.0 unit/secMetaQuotes-Demoでの 結果OnTesterInit i = 0 Pass = 0 OnTester = 1.497 s.: Count = 2456073, 1640663.3 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1653 i = 1 Pass = 1 OnTester = 1.494 s.: Count = 2456073, 1643957.8 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1653 i = 2 Pass = 2 OnTester = 1.496 s.: Count = 2456073, 1641760.0 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1653 i = 3 Pass = 3 OnTester = 1.493 s.: Count = 2456073, 1645058.9 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1653 i = 4 Pass = 4 OnTester = 1.499 s.: Count = 2456073, 1638474.3 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1653 i = 5 Pass = 5 OnTester = 1.498 s.: Count = 2456073, 1639568.1 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1653 iMin = 3 Results[iMin] = 1.493 s. iMax = 4 Results[iMax] = 1.499 s. Amount = 6 Mean = 1.496 s. - 49.11% OnTesterDeinit ------ Interval = 18.279 s., Count = 0, 0.0 unit/secFIBOGroup-MT5 Serverの総ティック数は15925124、テスターの性能は2038807.3 units/secです。MetaQuotes-Demoは 2456073ティック、テスター性能1645058.9 unit/secです。つまり、2台目のサーバーでは、テスターの性能が20%低下しているのです。しかし、テスターはトレードサーバーに依存してはいけないのです!問題なく再現可能です。 Alexey Viktorov 2017.09.05 10:16 #19882 Alexey Kozitsyn: 役に立たなかった:)よし、推測する必要はない、SDからの回答が必要だ。そんな松葉杖は、とにかく許されてはならないのです不思議ですね。投稿前に10分ほど突いているので、チャート期間を 切り替えたり、インジケーターのパラメーターをtrueからfalseに変えたりして、定期的にキープポキングしています。問題ないと思います。もちろん松葉杖です、だから一時的な解決策と言ったのです。 Vitaly Muzichenko 2017.09.05 10:22 #19883 Alexey Kozitsyn: うまくいかなかった:)OK、なぜ推測するのか、SDから回答を得る必要がある。そんな松葉杖は、どうせ通用しないはずだ!特に問題なく動作しています。もちろん、出力バッファを先に定義し、次にカラーバッファを 定義することは理にかなっています。 削除済み 2017.09.05 10:23 #19884 Vitaly Muzichenko:特に問題なく動作しています。もちろん、出力バッファを先に定義し、次にカラーバッファを定義することは理にかなっています。 Vitaly まずは問題の真相究明をお願いします。設定がオンになっているときは、すべて正常に動作します。設定を無効にすると問題が発生します。 削除済み 2017.09.05 10:28 #19885 Alexey Viktorov: あなたのバージョンの方が安定しているし、(TFを切り替えなければ)ほとんど正常に動作するくらいです。でも、切り替えても切り替えても......。また散々な目に遭いました。 Evgeny Chernyshev 2017.09.05 10:32 #19886 fxsaber: (string)NormalizeDouble(0.99872, 5) - 非常に長い結果です。エラーなし、10進数表記では正確にdoubleで表現できない数値もある 以下のコードでは正常な結果が得られるDoubleToString(0.99872, 5) fxsaber 2017.09.05 10:33 #19887 Evgeny Chernyshev:エラーなし、10進数表記では正確に2進数で表せない数値もある 次のコードでは、正常な結果が得られます。 DoubleToString(0.99872, 5)了解です、ありがとうございます Alexey Viktorov 2017.09.05 10:38 #19888 Alexey Kozitsyn: Vitaly まず問題の真相究明をお願いします。設定がオンになっているときは、すべて正常に動作します。設定をOFFにすると不具合が発生します。アレクセイ、申し訳ありません、もう一つ訂正を忘れていました。 //if(inpUseArrows) // Если отображать нужно // { SetPlotParametersArrow(0,0,bufArrowUp,false,"test up",EMPTY,clrLime,233,10); SetPlotParametersArrow(1,1,bufArrowDn,false,"test dn",EMPTY,clrRed,234,-10); // } その記事でも赤でマークして修正しました。 削除済み 2017.09.05 10:45 #19889 Alexey Viktorov:Alexeiさん、すみません、また訂正を見逃していました。その記事でも、赤でマーキングしたものを修正。そこが肝心なんです!オフにしただけで、すべてのグラフシリーズの下のすべての配列が使われていることがわかります。しかし、ポイントはまさに、必要に応じてグラフの系列の一部を無効にする機能をユーザーに提供することです。そして、必要であれば、スイッチを入れてください。 Alexey Viktorov 2017.09.05 10:53 #19890 Alexey Kozitsyn:そういうことなんです!だから、それをオフにするだけで、すべてのグラフシリーズのすべての配列が使用されます。しかし、ポイントはまさに、必要に応じてグラフシリーズの一部を無効化するオプションをユーザーに提供することです。そして、必要に応じて、スイッチを入れてください。まあ、グラフの系列数はコードの最初に定義されているので、TFを切り替えても変わらないんですけどね。mql5で無敵とは恐れ入りました。しかし、もう一つ、データウィンドウ のグラフ系列の表示を除外するためのトリックがあります PlotIndexSetString(plotIndex, PLOT_LABEL, NULL);mql4で動作します。mql5ではどうなのか、まだテストしていないので確認しなければなりません。いや...mql5では動作しません。mql5で動作します。 PlotIndexSetInteger(0, PLOT_SHOW_DATA, true); PlotIndexSetInteger(1, PLOT_SHOW_DATA, true); if(!inpUseArrows) // Если отображать не нужно { PlotIndexSetInteger(0, PLOT_SHOW_DATA, false); PlotIndexSetInteger(1, PLOT_SHOW_DATA, false); } 1...198219831984198519861987198819891990199119921993199419951996...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
テスターの性能は、トレードサーバーに大きく依存します。
テスターの設定。
Netting USD、Core1のみ有効。
エキスパートアドバイザー
FIBOGroup-MT5 サーバーでの 実行結果
MetaQuotes-Demoでの 結果
FIBOGroup-MT5 Serverの総ティック数は15925124、テスターの性能は2038807.3 units/secです。MetaQuotes-Demoは 2456073ティック、テスター性能1645058.9 unit/secです。つまり、2台目のサーバーでは、テスターの性能が20%低下しているのです。しかし、テスターはトレードサーバーに依存してはいけないのです!
問題なく再現可能です。
役に立たなかった:)よし、推測する必要はない、SDからの回答が必要だ。そんな松葉杖は、とにかく許されてはならないのです
不思議ですね。投稿前に10分ほど突いているので、チャート期間を 切り替えたり、インジケーターのパラメーターをtrueからfalseに変えたりして、定期的にキープポキングしています。問題ないと思います。もちろん松葉杖です、だから一時的な解決策と言ったのです。
うまくいかなかった:)OK、なぜ推測するのか、SDから回答を得る必要がある。そんな松葉杖は、どうせ通用しないはずだ!
特に問題なく動作しています。もちろん、出力バッファを先に定義し、次にカラーバッファを 定義することは理にかなっています。
特に問題なく動作しています。もちろん、出力バッファを先に定義し、次にカラーバッファを定義することは理にかなっています。
(string)NormalizeDouble(0.99872, 5) - 非常に長い結果です。
エラーなし、10進数表記では正確にdoubleで表現できない数値もある
以下のコードでは正常な結果が得られる
DoubleToString(0.99872, 5)
エラーなし、10進数表記では正確に2進数で表せない数値もある
次のコードでは、正常な結果が得られます。
DoubleToString(0.99872, 5)
了解です、ありがとうございます
Vitaly まず問題の真相究明をお願いします。設定がオンになっているときは、すべて正常に動作します。設定をOFFにすると不具合が発生します。
アレクセイ、申し訳ありません、もう一つ訂正を忘れていました。
その記事でも赤でマークして修正しました。
Alexeiさん、すみません、また訂正を見逃していました。
その記事でも、赤でマーキングしたものを修正。
そこが肝心なんです!オフにしただけで、すべてのグラフシリーズの下のすべての配列が使われていることがわかります。しかし、ポイントはまさに、必要に応じてグラフの系列の一部を無効にする機能をユーザーに提供することです。そして、必要であれば、スイッチを入れてください。
そういうことなんです!だから、それをオフにするだけで、すべてのグラフシリーズのすべての配列が使用されます。しかし、ポイントはまさに、必要に応じてグラフシリーズの一部を無効化するオプションをユーザーに提供することです。そして、必要に応じて、スイッチを入れてください。
まあ、グラフの系列数はコードの最初に定義されているので、TFを切り替えても変わらないんですけどね。
mql5で無敵とは恐れ入りました。
しかし、もう一つ、データウィンドウ のグラフ系列の表示を除外するためのトリックがあります
PlotIndexSetString(plotIndex, PLOT_LABEL, NULL);mql4で動作します。mql5ではどうなのか、まだテストしていないので確認しなければなりません。
いや...mql5では動作しません。mql5で動作します。