ライブラリ: MT4Orders - ページ 52 1...454647484950515253545556575859...95 新しいコメント Amanda Griet 2020.08.29 01:09 #511 traveller00: 念のために言っておくと、ZIP-archivesは私の記憶では修正されていた。しかし、今はまためちゃくちゃで、そこには古いバージョンがあるので、ファイル単位でアップデートしなければならない。 fxsaber 2020.08.29 03:36 #512 // 変更リスト: // 29.08.2020 // 修正:トレードの履歴に関する作業が加速されました。 fxsaber 2020.08.29 03:45 #513 取引、自動取引システム、取引戦略のテストに関するフォーラム ライブラリ: MT4Orders fxsaber, 2020.08.29 00:03 2020.08.29 00:57:38.561 HistoryDealsTotal() = 9435 2020.08.29 00:57:38.813 2046.04.30 00:13:20 2020.08.29 00:57:38.813 Time[Bench(LastTimeMQL4)] = 252274 2020.08.29 00:57:38.820 2046.04.30 00:13:20 2020.08.29 00:57:38.820 Time[Bench(LastTimeMQL5)] = 7162 純粋なMQL5は、このタスクで40倍高速でした。MQL5を学びましょう! アップデート後 HistoryDealsTotal() = 9435 2046.04.30 00:13:20 Time[Bench(LastTimeMQL4)] = 16984 2046.04.30 00:13:20 Time[Bench(LastTimeMQL5)] = 4194 このタスクのスピードが15倍速くなりました。HistorySelect関数の特殊性を研究した結果、明らかな操作ではありませんでした。 fxsaber 2020.08.29 04:17 #514 MT4OrdersがMQL5+SBに移行してしまった。 // スクリプトは、すべてのクローズド・ポジションの合計継続時間を計算する。 #include <MT4Orders.mqh> // https://www.mql5.com/en/code/16006 // すべてのクローズドポジションの合計継続時間を返します。 int SumPositionsLengthMQL4( void ) { int Res = 0; for (int i = OrdersHistoryTotal() - 1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL)) Res += (int)(OrderCloseTime() - OrderOpenTime()); return(Res); } #include <Generic\HashMap.mqh> // すべてのクローズドポジションの合計継続時間を返します。 int SumPositionsLengthMQL5( void ) { int Res = 0; if (HistorySelect(0, INT_MAX)) { CHashMap<ulong, ulong> DealsIn; // By PositionID returns DealIn. const int TotalDeals = HistoryDealsTotal(); for (int i = 0; i < TotalDeals; i++) { const ulong TicketDeal = HistoryDealGetTicket(i); if (HistoryDealGetInteger(TicketDeal, DEAL_ENTRY) == DEAL_ENTRY_IN) DealsIn.Add(HistoryDealGetInteger(TicketDeal, DEAL_POSITION_ID), TicketDeal); else if (HistoryDealGetInteger(TicketDeal, DEAL_TYPE) <= DEAL_TYPE_SELL) { ulong TicketDealIn; if (DealsIn.TryGetValue(HistoryDealGetInteger(TicketDeal, DEAL_POSITION_ID), TicketDealIn)) Res += (int)(HistoryDealGetInteger(TicketDeal, DEAL_TIME) - HistoryDealGetInteger(TicketDealIn, DEAL_TIME)); } } } return(Res); } typedef int (*SumPositionsLength)( void ); void Bench( SumPositionsLength GetSumPositionsLength, const int Amount = 100 ) { long Tmp = 0; for (int i = 0; !IsStopped() && (i < Amount); i++) Tmp += GetSumPositionsLength(); Print(Tmp); } #define BENCH(A) \ { \ const ulong StartTime = GetMicrosecondCount(); \ A; \ Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - StartTime)); \ } #define PRINT(A) Print(#A + " = " + (string)(A)) void OnStart() { if (HistorySelect(0, INT_MAX)) PRINT(HistoryDealsTotal()); BENCH(Bench(SumPositionsLengthMQL4)) BENCH(Bench(SumPositionsLengthMQL5)) }結果 HistoryDealsTotal() = 9435 3132754100 Time[Bench(SumPositionsLengthMQL4)] = 871406 3132754100 Time[Bench(SumPositionsLengthMQL5)] = 109411パフォーマンスに9倍の差。MQL5を学ぶ。 Igor Makanu 2020.08.29 08:11 #515 fxsaber:結果 差し支えなければ、4kとMT5(ターミナル)のこのテストの実行時間の違いを示してください。 fxsaber: MQL5+SBの前にMT4Ordersの恥ずかしい損失。 5行のコードとMT5用の数十行のコード - アイデアをテストするなら5-stockが望ましく、最適化するなら間違いなく2番目のオプションです。 fxsaber 2020.08.29 08:36 #516 Igor Makanu:難しくなければ、4とMT5(ターミナル)の違いは、このテストの実行時間を示しています。 MT4: OrdersHistoryTotal() = 10291 Time[Bench(SumPositionsLengthMQL4)] = 56548 OrdersHistoryTotal() = 32020 Time[Bench(SumPositionsLengthMQL4)] = 186761 OrdersHistoryTotal() = 41815 Time[Bench(SumPositionsLengthMQL4)] = 249371 MT4x32はMT5x64より、同じクローズポジション 数で4倍以上速い。 ZЫ おそらく、MT4Ordersのメモリセーブを忘れて、履歴を内部配列にセーブすれば、MT4にも勝てる。おそらくそのようにすべきです。 Igor Makanu 2020.08.29 09:01 #517 fxsaber:MT4x32はMT5x64の4倍以上速く、クローズポジション 数は同じです。 ありがとう、これはMKの欠点だと思うが、生産性の高いMT5をどのような目的で使うべきか、彼らには彼らのビジョンがある。 fxsaber: ZЫ おそらく、MT4Ordersのメモリ保存を忘れて、履歴を内部配列に保存すれば、MT4に勝てる。おそらくそのようにするべきだ。 少なくとも、あなたのコードには常にそのような機能がありました。 SZY: ターミナルを殺すために文字列のサイズをテストしましたが、MT5は殺すことができません。一般的には、テストが必要です。 SZYZY:取引履歴データを含む構造体の配列が、どれだけのメモリを占有できるか確認したことはないのか? 構造体の重さを200バイト、取引履歴を100Kレコードとすると、20MBになる。洗練されたタスクでターミナルを停止させなければ、まったく問題ないだろう。一般的には、すべて同じようにテストしてください。 fxsaber 2020.08.29 09:29 #518 Igor Makanu:ZYZY:確認したことはありませんが、取引履歴データを含む構造体の配列は、どれくらいのメモリを占有するのでしょうか? sizeof(MT4_ORDER) = 280 Igor Makanu 2020.08.29 11:24 #519 夏の日々から体調が戻らないんだ...。 fxsaber:MT4:MT4x32はMT5x64の4倍以上速く、クローズポジション 数は同じ。 このテストを仮想環境で 確認できますか?( Virtual.mqhライブラリ ) fxsaber 2020.08.29 12:09 #520 Igor Makanu:この テストを仮想環境で確認できますか?(仮想.mqhライブラリ) #include <MT4Orders.mqh> // https://www.mql5.com/en/code/16006 #include <fxsaber\Virtual\Virtual.mqh> // すべてのクローズドポジションの合計継続時間を返します。 int SumPositionsLengthMQL4( void ) { int Res = 0; for (int i = OrdersHistoryTotal() - 1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL)) Res += (int)(OrderCloseTime() - OrderOpenTime()); return(Res); } typedef int (*SumPositionsLength)( void ); void Bench( SumPositionsLength GetSumPositionsLength, const int Amount = 100 ) { long Tmp = 0; for (int i = 0; !IsStopped() && (i < Amount); i++) Tmp += GetSumPositionsLength(); Print(Tmp); } #define BENCH(A) \ { \ const ulong StartTime = GetMicrosecondCount(); \ A; \ Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - StartTime)); \ } #define PRINT(A) Print(#A + " = " + (string)(A)) bool CreateHistory( const int Amount = 10000 ) { const bool Res = VIRTUAL::GetHandle(); if (Res) { MqlTick Tick; _V(0, SymbolInfoTick(_Symbol, Tick)); VIRTUAL::NewTick(Tick); for (int i = 0; i < Amount; i++) { const TICKET_TYPE Ticket = OrderSend(_Symbol, OP_BUY, 1, Tick.ask, 0, 0, 0); Tick.time_msc += 1000; VIRTUAL::NewTick(Tick); OrderClose(Ticket, 1, Tick.bid, 0); } } return(Res); } void OnStart() { PRINT(OrdersHistoryTotal()); BENCH(Bench(SumPositionsLengthMQL4)) VIRTUAL::SelectByHandle(VIRTUAL::Create()); if (CreateHistory()) { PRINT(OrdersHistoryTotal()); BENCH(Bench(SumPositionsLengthMQL4)) } } 結果 // MT4 // リアル: VIRTUAL::VirtualOrdersHistoryTotal() = 10291 Time[Bench(SumPositionsLengthMQL4)] = 63774 // バーチャル VIRTUAL::VirtualOrdersHistoryTotal() = 10001 Time[Bench(SumPositionsLengthMQL4)] = 158218 // MT5 // バーチャル VIRTUAL::VirtualOrdersHistoryTotal() = 10001 Time[Bench(SumPositionsLengthMQL4)] = 43343 MT4のヒストリーがMT4の仮想環境より3倍速いことがよくわかります。同時にMT5では、同じ仮想環境がMT4の4倍速くなっています。 つまり、MT5の仮想環境はMT4の実環境よりも高速です。 1...454647484950515253545556575859...95 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
念のために言っておくと、ZIP-archivesは私の記憶では修正されていた。しかし、今はまためちゃくちゃで、そこには古いバージョンがあるので、ファイル単位でアップデートしなければならない。
取引、自動取引システム、取引戦略のテストに関するフォーラム
ライブラリ: MT4Orders
fxsaber, 2020.08.29 00:03
純粋なMQL5は、このタスクで40倍高速でした。MQL5を学びましょう!
アップデート後
このタスクのスピードが15倍速くなりました。HistorySelect関数の特殊性を研究した結果、明らかな操作ではありませんでした。
結果
パフォーマンスに9倍の差。MQL5を学ぶ。
結果
差し支えなければ、4kとMT5(ターミナル)のこのテストの実行時間の違いを示してください。
MQL5+SBの前にMT4Ordersの恥ずかしい損失。
5行のコードとMT5用の数十行のコード - アイデアをテストするなら5-stockが望ましく、最適化するなら間違いなく2番目のオプションです。
難しくなければ、4とMT5(ターミナル)の違いは、このテストの実行時間を示しています。
MT4:
MT4x32はMT5x64より、同じクローズポジション 数で4倍以上速い。
ZЫ おそらく、MT4Ordersのメモリセーブを忘れて、履歴を内部配列にセーブすれば、MT4にも勝てる。おそらくそのようにすべきです。
MT4x32はMT5x64の4倍以上速く、クローズポジション 数は同じです。
ありがとう、これはMKの欠点だと思うが、生産性の高いMT5をどのような目的で使うべきか、彼らには彼らのビジョンがある。
ZЫ おそらく、MT4Ordersのメモリ保存を忘れて、履歴を内部配列に保存すれば、MT4に勝てる。おそらくそのようにするべきだ。
少なくとも、あなたのコードには常にそのような機能がありました。
SZY: ターミナルを殺すために文字列のサイズをテストしましたが、MT5は殺すことができません。一般的には、テストが必要です。
SZYZY:取引履歴データを含む構造体の配列が、どれだけのメモリを占有できるか確認したことはないのか? 構造体の重さを200バイト、取引履歴を100Kレコードとすると、20MBになる。洗練されたタスクでターミナルを停止させなければ、まったく問題ないだろう。一般的には、すべて同じようにテストしてください。
ZYZY:確認したことはありませんが、取引履歴データを含む構造体の配列は、どれくらいのメモリを占有するのでしょうか?
夏の日々から体調が戻らないんだ...。
MT4:
MT4x32はMT5x64の4倍以上速く、クローズポジション 数は同じ。
このテストを仮想環境で 確認できますか?( Virtual.mqhライブラリ )
この テストを仮想環境で確認できますか?(仮想.mqhライブラリ)
結果
MT4のヒストリーがMT4の仮想環境より3倍速いことがよくわかります。同時にMT5では、同じ仮想環境がMT4の4倍速くなっています。
つまり、MT5の仮想環境はMT4の実環境よりも高速です。