多くの人にとって興味深いトピック:MetaTrader 4とMQL4の新機能 - 大きな変更が控えています。 - ページ 49

 
hrenfx:


無理 でしょう。

厨房で育った男の戯言))
 
Avals:
戯言はいいから、キッチンをPRしろ;)

ジャケット、あなたの分類によると「ナベと広報の人」の間で、ここであなたのイメージを汚さないでください。自分のQQに 行く。

追伸:トレーダーにとっては、普段の取引所からFOREX市場の実態やその様々な特徴についての知識を補充することができるリテラシーが 存在します。視野を広げよう

Poul Trade Forum: Два ку
  • forex.kbpauk.ru
Как ущербный, могу позволить себе написать правду. И паук и qq - для новичка полное дерьмо. Когда человек, вне зависимости от опыта, приходит на рынок, он сталкивается со сложной задачей: найди то, не знаю что. Но чтобы был профит. И самое сложное определиться, ГДЕ именно копать и КАК копать. На форумах этой информации практически нет. А если и...
 
hrenfx:
ジャケット、あなたの分類によると「ナベと広報の人」の間で、ここであなたのイメージを汚さないでください。自分のQQに 行く。
ここの人たちはほとんど能天気じゃないし、広報はあなた一人dc)
 

MetaQuotesはもちろん、保存された履歴のフォーマット(MqlRates)をやりすぎました(過小評価しました)。 これは理解できます。 このフォーマットが開発されたとき、FX市場では固定スプレッドが主流で、マーケット(変動)スプレッドはまだエキゾチックなものでした。しかし、証券会社が「ニュースや市場の急激な変化の瞬間には、その固定性を保証しない」(逆カンマは、当時のほぼすべての証券会社の典型的な申し出からの引用)ため、実際には固定スプレッドでさえも変動することが明らかであった。

しかし、時代は変わり、スプレッドが1ティックごとに浮いている、それでいいのだ、ということになった。歴史的な引用だけでは反映されない。 残念ながら。

履歴には、各バーのスプレッド値が1つだけ保存されます。また、履歴を使ったテストでは、ブローカーが絶対的に正直な(実際のティックフィードの翻訳に対応する)履歴ベースを提供したとしても、実際の取引履歴とテスターでの取引が一致しないため、歪みが生じる。 理由はMqlRates形式の記述力が不十分であるため。

struct MqlRates
  {
   datetime time;         // время начала периода     8 байт
   double   open;         // цена открытия             8 байт
   double   high;         // наивысшая цена за период  8 байт
   double   low;          // наименьшая цена за период 8 байт
   double   close;        // цена закрытия           8 байт   
   long     tick_volume;  // тиковый объем           8 байт  
   int      spread;       // спред                  4 байта
   long     real_volume;  // биржевой объем            8 байт
  };
// итого: size_of(MqlRates) = 52 байта 

この構造は、バー内のスプレッドが不変であることを前提としており、現在の取引の実態に即していない。

さらに「完全な」フォーマットが何であるかを議論し、現在サポートされていないことを明確にするために、条件付きで「Mql_6_Rates」と呼ぶことにしました。

1つは、特殊なアルゴリズムによる圧縮を行わないパック構造(ディスク用)である。転送量を減らすために何倍にも小さく(推定2~3倍)圧縮することも可能です。 圧縮形式については、ここでは触れません。

struct Mql_6_PackedRates  
  {
   time_t time;            // время начала периода  4 байта  // восьмибайтный time64_t неактуален до 2038 года
   float    average_price; // средняя цена бара грубо (на три значащих цифры меньше точности _digits) 4 байта
   float    d_open;        // поправка к цене открытия 4 байта
   float    d_high;        // поправка к наивысшей цене за период 4 байта
   float    d_low;         // поправка к наименьшей цене за период 4 байта
   float    d_close;       // поправка к цене закрытия 4 байта
   ushort   spread;        // средний спред 2 байта
   char     d_open_spread; // поправка к спреду открытия 1 байт
   char     d_high_spread; // поправка к спреду high 1 байт
   char     d_low_spread;  // поправка к спреду low 1 байт
   char     d_close_spread;// поправка к спреду close 1 байт
   uint     tick_volume;   // тиковый объем 4 байт
   uint     real_volume;   // биржевой объем  4 байт
   double   OpenBid() {return (average_price+d_open); } // функции на лету вычисляющие точные значения
   double   OpenAsk() {return (average_price+d_open+OpenSpread()); }
   double   HighBid() {return (average_price+d_high); }
   и т.д...... // функции на лету вычисляющие точные значения
   ...
   ...
   double OpenSpread() { return ((spread+d_open_spread) * _digits); }
   ...
   и т.п ......
   Mql_6_Rates UnpackRates() { Mql_6_Rates Rates; ..../*заполняем*/.....  return (Rates);}
  };
// Итого у меня получилось 38 байт, всё правильно? Вся информация об 4 точках bid-ask упакована без искажений

Packed」形式は、トレーダーのディスクに格納されているときに最適とされています。 ディスクからメモリにロードされたとき、その場で解凍することができ、解凍関数は構造体に「添付」されています。

解凍された履歴(MQLからのアクセス用)は、例えばこんな感じです。

struct Mql_6_Rates
  {
   datetime time;         // время начала периода     8 байт
   double   open_bid;     // цена открытия             8 байт
   double   open_ask;     // цена открытия             8 байт
   double   high_bid;     // наивысшая цена за период  8 байт
   double   high_ask;     // наивысшая цена за период  8 байт
   double   low_bid;      // наименьшая цена за период 8 байт
   double   low_ask;      // наименьшая цена за период 8 байт
   double   close_bid;    // цена закрытия           8 байт   
   double   close_ask;    // цена закрытия           8 байт   
   long     tick_volume;  // тиковый объем           8 байт  
   long     real_volume;  // биржевой объем            8 байт
  };

//итого = 88 байт

今より大きくなりますが、バーのすべての定点でスプレッドを計算します。つまり、従来のスキーム{Open+High+Low+Close}に従って分足で情報を書かなければならないのであれば、「全文」を書くべきなのである。

私の意見では、この情報は冗長であり、オープン ポイントで最大の錯覚を引き起こす傾向があります。 異なるシンボルのバーが開く瞬間は一致しませんが、分足が始まる瞬間(天文学的)には、シンボルの入札-呼値は最後に取引された入札、すなわち終値に 対応します。 したがって、分足をテストするのに最も適した形式(伝統と常識の最も健全な妥協点)は、次のようになります。

struct Mql_6_Rates
  {
   datetime time;         // время начала периода     8 байт
   double   high_bid;     // наивысшая цена за период  8 байт
   double   high_ask;     // наивысшая цена за период  8 байт
   double   low_bid;      // наименьшая цена за период 8 байт
   double   low_ask;      // наименьшая цена за период 8 байт
   double   close_bid;    // цена закрытия           8 байт   
   double   close_ask;    // цена закрытия           8 байт   
   long     tick_volume;  // тиковый объем           8 байт  
   long     real_volume;  // биржевой объем            8 байт
  };

//итого = 72 байта

// つまり、SizeOf(Mql_6_PackedRates)は31バイトに減少することになる。

生態学的な(最も合理的な)「始値による」テストでは、天文学的な1分間の開始時間、つまり前のバーの終値が取られるべきです。この場合、正確な多通貨の価格同期が達成されるでしょう。この同期性は、成行注文を行う多通貨EAのデバッグに不可欠です。 指値・逆指値注文取引では、各バーでの極値情報が不可欠です。 また、今回ご紹介するフォーマットでも十分に利用可能です。

--

実は、このフォーマットは今、自分のために開発しているもので、ここで公開するのはその副産物です。 もしかしたら、誰かが役に立つかもしれません。

 
MetaDriver:


環境にやさしい(最も賢明な)「始値」テストでは、天文学的な分足の開始時間、すなわち前のバーの終値を取るべきです。

隙を見ては事を仕損じる

p.s. トラフィックの削減が必要な場合は、価格の絶対値ではなく オフセットを格納することができます。

Документация по MQL5: Математические функции / MathAbs
Документация по MQL5: Математические функции / MathAbs
  • www.mql5.com
Математические функции / MathAbs - Документация по MQL5
 
MetaDriver:

MetaQuotesはもちろん、保存された履歴のフォーマット(MqlRates)をやりすぎました(過小評価しました)。 これは理解できます。このフォーマットが開発されたとき、FX市場では固定スプレッドが主流で、マーケット(変動)スプレッドはまだエキゾチックなものでした。しかし、証券会社は「ニュースや市場の急変時にその固定性を保証しない」(ここでの逆カンマは、当時のほぼすべての証券会社の典型的なオファーからの引用)ので、固定スプレッドでさえ実際には変動することが明らかであった。

MT5は、もともと取引所端末として位置づけられていた。また、取引所では、ECNの価格設定に関する法律が非常に長い間実施されています。つまり、業績不振という言い訳は通用しないのです。彼らのチームには、話を聞いてくれるような強力なアルゴトレーダーがいなかった(今もいない)のです。どうやら、健全な論理よりも「プラットフォーム開発に成功した年数」だけがルールになっているようです。
 
hrenfx:
MT5はもともと取引所端末として位置づけられたものです。そして、取引所のECNでは、価格形成の法則は非常に古いものです。だから、欠陥品という言い訳は通用しない。彼 らのチームには、話を聞いてくれるような強力なアルゴトレーダーがいなかった(今もいない)のです。どうやら、健全な論理よりも「プラットフォーム開発に成功した年数」だけがルールになっているようです。

言い訳をするつもりはなかったんだ。 言い訳をするには、まず非難しなければならない。 なんとなくそんな時間はないんだ......。:)

 

そうすると、それは甘えである(そのようなものには注意すべきである-裸の批判より悪いのである)。

MetaDriver:

履歴を保存するフォーマット(MqlRates)が開発されたとき、MetaQuotesはもちろんオーバー(アンダー)しました。 それは理解 できます。 FX市場でフォーマットが開発されたとき、固定スプレッドが優勢で、市場(変動)スプレッドはまだエキゾチックなものだったからです。しかし、証券会社は「ニュースや市場の急変時にその固定性を保証しない」(ここでの逆カンマは、当時のほぼすべての証券会社の典型的なオファーからの引用)ので、固定スプレッドでさえ実際には変動することが明らかであった。

 
Avals:

隙を見ては事を仕損じる

そんな文字があるのです。しかし,ギャップ(引用符の不連続なジャンプ)はバーの最初だけでなく,いつでも起こりうる。 だから,どんな「間引き」フォーマットも,定義上,罪がないわけではない。 ティックの中だけでフルフィード。 そして,ヒストリーではさらにフルになりうる。 そんな妥協点を見つけつつ,自分用に分単位のフォーマットを作ろうとしているところだ。私は上記のように(オープンなし、{Hi-Lo-Close}のみ)残すかもしれません、私はすべての欠点を理解し、それは私のテスターのための私のコーディングの1つのバージョンです。 私はまた、生のティック、または任意の方法で人為的に薄く(保存ティックの形式{bid-ask-time})でテストを予見しています。
 
hrenfx:

それから、見下し(こういうのは要注意、裸の批判よりたちが悪い)です。

:-)

ボルジョミを飲むのも、償いをするのも、今更なのだ。地獄に落ちるのは、ずっと前からだ。

判断せずに理解しようとすることは、私の最も重大な罪であるとは思いません。;)