mql5言語の特徴、微妙なニュアンスとテクニック - ページ 231 1...224225226227228229230231232233234235236237238...247 新しいコメント rrb1002 2023.02.23 21:59 #2301 初心者の質問で申し訳ないのですが......コード開発にはどれに集中すればいいのでしょうか?MQL4よりいいのでしょうか? Fernando Carreiro 2023.02.23 22:05 #2302 @rrb1002 #: 初心者の質問で申し訳ないのですが......コード開発にはどれに集中すればいいのでしょうか?MQL4よりいいのでしょうか? まあ、どちらを選ぶかはあなた次第ですが、もし古い方はもう開発されていなくて、最新の開発はすべて新しい方で行われていると言われたら、(他の事情がない限り)私の選択は明らかだと思います。 編集部:しかし、あなたのプロフィールが米国にいることを示していることを考えると、どのブローカーを使うつもりで、どのプラットフォームを提供しているかにもよるかもしれません。 fxsaber 2023.03.13 07:28 #2303 取引、自動取引システム、取引戦略のテストに関するフォーラム mql5言語の特殊性、作業の微妙さとテクニック fxsaber, 2023.01.07 23:01 アメリカ/ヨーロッパで時間を翻訳するブローカーの2つのタイプがあります。このため、特にロールオーバーの時間がずれます。 ブローカーの種類は自動的に判断できます。 // Вычисление типа брокера (USA/Europe). bool IsEuropeBroker() { MqlCalendarValue Value[1]; CalendarValueHistoryByEvent(840030016, Value, D'2022.11.03', D'2022.11.05'); return(Value[0].time == ChartNewsTime(Value[0].time)); // https://www.mql5.com/ru/forum/357793/page5#comment_44225999 } void OnStart() { Print(AccountInfoString(ACCOUNT_SERVER) + " - " + (IsEuropeBroker() ? "Europe" : "USA")); } いくつかのブローカーで実行した結果。 RannForex-Server - Europe MetaQuotes-Demo - Europe FXOpen-MT5 - USA Alpari-MT5 - Europe Tickmill-Live - USA ICMarketsSC-MT5-2 - USA Darwinex-Live - USA 現時点では、スクリプトはかなり異なる結果を生成する。MT5-calendarの特殊性を完全に理解するまで、MT5-calendarを使用することはお勧めしません。 fxsaber 2023.03.31 09:35 #2304 MQL5の非常にシンプルなテクニックを使えば、無料でバックテストを高速化することができます。 以前公開したクイック コードを高速化した例。 #include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006 input int inAmountMagics = 50; // Сколько ТС эмулировать // Для каждой ТС открываем позицию и отложку. MT4-код для лаконичности. void OnInit() { MqlTick Tick; if (SymbolInfoTick(_Symbol, Tick)) for (int i = 0; i < inAmountMagics; i++) { OrderSend(_Symbol, OP_BUY, 1, Tick.ask, 0, 0, 0, NULL, i); OrderSend(_Symbol, OP_BUYLIMIT, 1, Tick.ask - 1 e4*_Point, 0, 0, 0, NULL, i); } } #define MAX_ORDERS 100 // Индексы позиций/ордеров по типам. struct TYPE_INDEXES { int Index[OP_SELLSTOP + 1][MAX_ORDERS]; int Amount[OP_SELLSTOP + 1]; // Заполнение индексов. void Fill( void ) { ::ArrayInitialize(this.Amount, 0); for (int i = ::PositionsTotal() - 1; i >= 0; i--) if (::PositionGetTicket(i)) { const int Type = (int)PositionGetInteger(POSITION_TYPE); this.Index[Type][this.Amount[Type]++] = i; } for (int i = ::OrdersTotal(true) - 1; i >= 0; i--) if (::OrderGetTicket(i)) { const int Type = (int)OrderGetInteger(ORDER_TYPE); this.Index[Type][this.Amount[Type]++] = i; } return; } }; #undef MAX_ORDERS // Сбор информации с нужных позиций/ордеров. Максимально быстрый MT5-код. double CountOrders( const int Type, const int Magic, const TYPE_INDEXES &TypeIndexes ) { double Res = 0; if (Type <= OP_SELL) { for (int i = TypeIndexes.Amount[Type] - 1; i >= 0; i--) if (PositionGetTicket(TypeIndexes.Index[Type][i]) && PositionGetInteger(POSITION_MAGIC) == Magic) Res += PositionGetDouble(POSITION_PRICE_OPEN) + PositionGetDouble(POSITION_PRICE_CURRENT) + PositionGetDouble(POSITION_TP) + PositionGetDouble(POSITION_SL); } else for (int i = TypeIndexes.Amount[Type] - 1; i >= 0; i--) if (OrderGetTicket(TypeIndexes.Index[Type][i]) && OrderGetInteger(ORDER_MAGIC) == Magic) Res += OrderGetDouble(ORDER_PRICE_OPEN) + OrderGetDouble(ORDER_PRICE_CURRENT) + OrderGetDouble(ORDER_TP) + OrderGetDouble(ORDER_SL); return(Res); } // Число для контроля корректности альтернативных реализаций. double OnTesterValue = 0; double OnTester() { return(OnTesterValue); } void OnTick() { TYPE_INDEXES TypeIndexes; // Индексы позиций/ордеров по типам. TypeIndexes.Fill(); // Заполнение индексов. // Симулируем работу по всем ТС. for (int i = 0; i < inAmountMagics; i++) OnTesterValue += CountOrders(POSITION_TYPE_BUY, i, TypeIndexes) + CountOrders(POSITION_TYPE_SELL, i, TypeIndexes) + CountOrders(ORDER_TYPE_BUY_LIMIT, i, TypeIndexes) + CountOrders(ORDER_TYPE_SELL_LIMIT, i, TypeIndexes); } ポジション/注文をタイプ別に分けることは理にかなっています。 三金德道 2023.04.14 14:35 #2305 MQL4のEAをMQL5に変換するには? fxsaber 2023.05.08 07:34 #2306 任意のダブルに虚数ゼロが必要な場合。 void OnStart() { double d = 1; Print(d + d * 1 e-17 == d); // true Print(d * 1 e-17); } Slava 2023.05.08 09:09 #2307 fxsaber #: 任意の double に虚数ゼロが必要な場合。 DBL_EPSILON 1.0+DBL_EPSILON != 1.0 が成り立つ最小の数。 2.2204460492503131e-016 fxsaber 2023.05.08 09:20 #2308 Slava #: DBL_EPSILON 1.0+DBL_EPSILON != 1.0 の条件を満たす最小の数。 2.2204460492503131e-016 ありがとうございました! amrali 2023.05.08 22:50 #2309 DBL_EPSILON 1.0+DBL_EPSILON != 1.0 という条件を満たす最小の数 2.2204460492503131e-016 ロシア語は話せませんので、英語でのコメントをお許しください。 という意味です: d * (1 + DBL_EPSILON) != d d * (1 + 0.5 * DBL_EPSILON) == dDBL_EPSILONは相対誤差率だからです。relativeは数値の大きさに対する相対的なという意味です。 1.0の場合、エラー率 = 1 * 2.2204460492503131e-016 (DBL_EPSILON) dの場合、エラーレート = d * DBL_EPSILON . コンピュータはdとd * (1 + 0.5*DBL_EPSILON)を区別できないので、両者を同じ2進数にエンコードする。つまり、正確な(2進数の)比較でtrueが得られる==。 fxsaber 2023.05.08 23:33 #2310 Slava #: DBL_EPSILON 1.0+DBL_EPSILON != 1.0 の条件を満たす最小の数。 2.2204460492503131e-016 これは悪い説明だ。 void OnStart() { double d = 1 e5; Print(d + d * 0.1 == d * (1 + 0.1)); // false } 1...224225226227228229230231232233234235236237238...247 新しいコメント 理由: キャンセル 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
初心者の質問で申し訳ないのですが......コード開発にはどれに集中すればいいのでしょうか?MQL4よりいいのでしょうか?
まあ、どちらを選ぶかはあなた次第ですが、もし古い方はもう開発されていなくて、最新の開発はすべて新しい方で行われていると言われたら、(他の事情がない限り)私の選択は明らかだと思います。
編集部:しかし、あなたのプロフィールが米国にいることを示していることを考えると、どのブローカーを使うつもりで、どのプラットフォームを提供しているかにもよるかもしれません。取引、自動取引システム、取引戦略のテストに関するフォーラム
mql5言語の特殊性、作業の微妙さとテクニック
fxsaber, 2023.01.07 23:01
アメリカ/ヨーロッパで時間を翻訳するブローカーの2つのタイプがあります。このため、特にロールオーバーの時間がずれます。
ブローカーの種類は自動的に判断できます。
いくつかのブローカーで実行した結果。
RannForex-Server - Europe MetaQuotes-Demo - Europe FXOpen-MT5 - USA Alpari-MT5 - Europe Tickmill-Live - USA ICMarketsSC-MT5-2 - USA Darwinex-Live - USA
現時点では、スクリプトはかなり異なる結果を生成する。MT5-calendarの特殊性を完全に理解するまで、MT5-calendarを使用することはお勧めしません。
MQL5の非常にシンプルなテクニックを使えば、無料でバックテストを高速化することができます。
以前公開したクイック コードを高速化した例。
ポジション/注文をタイプ別に分けることは理にかなっています。
任意の double に虚数ゼロが必要な場合。
DBL_EPSILON
1.0+DBL_EPSILON != 1.0 が成り立つ最小の数。
2.2204460492503131e-016
DBL_EPSILON
1.0+DBL_EPSILON != 1.0 の条件を満たす最小の数。
2.2204460492503131e-016
ありがとうございました!
DBL_EPSILON
1.0+DBL_EPSILON != 1.0 という条件を満たす最小の数
2.2204460492503131e-016
ロシア語は話せませんので、英語でのコメントをお許しください。
という意味です:
DBL_EPSILONは相対誤差率だからです。relativeは数値の大きさに対する相対的なという意味です。
1.0の場合、エラー率 = 1 * 2.2204460492503131e-016 (DBL_EPSILON)
dの場合、エラーレート = d * DBL_EPSILON .
コンピュータはdとd * (1 + 0.5*DBL_EPSILON)を区別できないので、両者を同じ2進数にエンコードする。つまり、正確な(2進数の)比較でtrueが得られる==。
DBL_EPSILON
1.0+DBL_EPSILON != 1.0 の条件を満たす最小の数。
2.2204460492503131e-016
これは悪い説明だ。