mql5言語の特徴、微妙なニュアンスとテクニック - ページ 157

 
Andrey Khatimlianskii:

こんにちは。

MT4のオフラインチャートのアナログがカストゥムインストゥルメントです。1バー=1ティックにするなど、任意の履歴を記入することができます。

しかし、MT4と同じように、各バーは前のバーと少なくとも1分異なる時間でなければならないので、通常の時間スケールは存在しないことになります。

ps: 既製のインジケーターがあります -https://www.mql5.com/en/blogs/post/719145

MT4では、バーの時間が前のバーより長ければ、MT4はバーを表示します。つまり、MT4では、オフラインのチャートに秒単位の精度でバーを描くことができ、私はQBで秒単位のチャートを投稿しました。

しかし、MT5では、これは「機能しません」、あなたがカスタムシンボルに同じオープンタイムで2つのバーを送信しようとすると、秒を考慮せずに、1つのバーが表示されます、つまり、MT5のカスタムチャートのM1未満の精度は動作しません。

 
fxsaber:

ここに 図があります。効くんです。

TAを動かさずに?毎回うまくいくのか?運以外の何物でもない。


fxsaber

許容できる/すべき完璧さの境界線はどこにあるのか?たまに発生するリグレッションやリクオートは、テスターとどんな関係があるのでしょうか?

リビッドとは関係ない。

指値注文は、テスター上でもリアルタイムでも、最後に判明した 価格で執行される必要はありません。価格は送信中にどこにでも行くことができます。

もう一つは、0-delay(理想的な執行)のモードでは、テスターは注文がブローカーに送られ、直ちに執行されたように装うことができますが、私はそれに利益を見出すことはありません、なぜなら、やはり、どうせ実際の状況では逆のことが起こるなら理想的なテストの意味はありません。

 
Igor Makanu:

MT4では、バータイムが前のバーより長ければ、MT4はバーを表示します。つまり、MT4では、オフラインのチャートに秒単位でバーを描くことができ、KBに秒単位のチャートを掲載しました。

編集ありがとうございます、もう忘れていました。昔々、時刻が分の倍数でないと間違いなくエラーになったことがありましたが、その時もそのように動作したようです。

5では絶対にそのやり方はできない。

 
Andrey Khatimlianskii:

こんにちは。

MT4のオフラインチャートのアナログがカストゥムインストゥルメントです。1バー=1ティックにするなど、任意の履歴を記入することができます。

しかし、MT4のように、各バーは前のバーと1分以上時間が違う必要があるため、通常のタイムラインにはなりません。

ps: 既製のインジケーターがあります -https://www.mql5.com/en/blogs/post/719145

ああ、カスタムシンボルはまさにそれだ!」。そして、ティックタイムは私にとって重要ではありません。ありがとうございます。良い方向へのインパルスですね。)))

 
Andrey Khatimlianskii:

TAを動かさずに?毎回正しく動作するのか?運以外の何物でもない。

いいえ、もちろんそんなことはありません。そのためのサイクルです。

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

mql4言語の特徴、複雑な仕組みとコツ

fxsaber さん 2019.12.13 00:27

緊急のポジションのクローズは、以下の手順で行われます。
const double ClosePrice = OrderType() ? MathMin(OrderClosePrice(), Bid + MaxSpread * _Point) 
                                      : MathMax(OrderClosePrice(), Ask - MaxSpread * _Point);
    
OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), ClosePrice, 0); // StopLoss оставлен для истории
もちろん、ループの中で。他に選択肢はないのか?

レギュレーションは関係ない。

リミッターは、テスターでも実機でも、最後の既知の 価格で作動させる必要はありません。送っている間に価格がどこまでも上がっていく可能性があります。

もう一つのポイントは、0-delay(理想的な執行)のモードでは、テスターは注文がブローカーに送られ、即座に執行されたように装うことができますが、私はそれに利益を見出すことはできません。

現実には、現在の価格(またはそれ以上)で完全(または一部)約定するか、反故にするかのどちらかでしょう。つまり、実行が完璧であるかどうかは別として。

このように、テスターは成行注文では常に完璧に動作しますが、指値注文では常に失敗します。

 
fxsaber:

つまり、テスターはある市場に対しては常に完璧なパフォーマンスを発揮しますが、リミッターに対してはそうではないということです。

むしろ、市場のために次の刻みを作りたい。テスターでは、実物よりも損失を見せたほうがいいのでしょう。そして、ここから聖杯が 失われることはまずない。

 
Andrey Khatimlianskii:

ここで、私はむしろ市場のために次のティックを実行するようにします。テスターでは、実機よりも急降下が見られるのが良い。そして、ここから聖杯が失われることはまずない。

次のティックが正しくないと、あなたのマーケットはティックを生成し、取引 量を考慮して、最も近いビッドまたはアスクで実行される必要があります。
また、指値は出来高に応じた保証価格で入れる必要があります。
現在作られている他のすべてのアルゴリズムは、誤解を招くだけで、実際の結果を得ることはできません。
そのため、私はテスターを全く使っていません。基本中の基本で、実行の代替があるのでは意味がない。

 
Roman:

次のティックが正しくない、あなたの市場はティックを生じさせるべきであり、取引量を 考慮し、最も近いビッドまたはアスクで実行されるでしょう。
また、指値注文は、出来高に応じた保証価格で充当する必要があります。
現在作られている他のすべてのアルゴリズムは、誤解を招くだけで、実際の結果を得ることはできません。
そのため、私はテスターを全く使っていません。基本中の基本で、実行の代替があるのでは意味がない。

そのためには、カップの履歴か、少なくとも極端なビッド/アスクのボリュームが必要です。そして、何もないんです。

また、マーケットがテスターでティックを生成してはいけません。そうしないと、履歴はテストされるストラテジーに依存することになります。

 
Andrey Khatimlianskii:

そのためには、カップの履歴か、少なくとも極端なビッド/アスクのボリュームが必要です。そして、何もないんです。

そして、マーケットはテスターでティックを生成してはいけません。そうしないと、履歴はテストされるストラテジーに依存することになります。

司会者の一人が、mt5は株式市場のために開発されたと述べているように。
が、テスターの実装を見ると、その開発は、リアルティクでもディーリング実行と同じ原理で縮小されている。

じゃあ、どうやってテストするんだ?過去のどのようなデータで?
それから、そのような歴史的な引用に関するテストを信用するのですか?
:))

もちろん、ダニの履歴は 必要ですし、実際のダニでの検査も必要です。
ティック履歴をどこで入手するかはユーザーの問題で、自分で集める、買う、持っている人からもらう、などです。

しかし、開発者が3つのカラムを追加することを妨げるものは何 ですか?

  1. ボリューム欄 Ask
  2. ボリューム欄 入札
  3. コラム 最終売買の方向、買いか売りか


そうすれば、実際のティックでのテストの正しさに関する問題はすべて自動的に解決されます。
テスターでの為替注文の執行が本来の姿になります。

はい、生成ティック、そうではない私はテスターの市場は、価格レベルで流動性を収集し、最も近いBid Asksで実行されるべきであることを意味します。
つまり、25の出来高でBuyMarketを送ると、約定価格は10と15の2段階を集め、自動的にポジションの純価格を平均化するのです。

182.13 Ask1 15
182.12 Ask0 10
--------------------
182.11 Bid0 5
182.10 Bid1 8

指値注文の場合、最後の取引の数量は、指値注文が発注された保証価格で、指値注文の数量を満たす必要があります。
つまり、指値注文は部分的に満たされるはずです。25の数量で指値注文を出した場合、5の数量の最後の取引で、指値注文から5が取り出されます。
指値注文の出来高が20になり、次のLast tradeが出来高10で通過し、指値注文の出来高が10になりました。
Another Last trade passed with volume 10, your limit order is completely filled.
価格が反転し、指値注文の全量を約定しなかった場合、これが本当の状況、本当の約定となります。
そして、残りの指値注文の数量は、ラストが再びやってくるか、あなた自身がその注文を撤回するまで待ち続けることになります。

ですから、テスターに実装されたアルゴリズムのあり方は、現実とは全く関係ないのです。
目を洗うおもちゃのようなものです。


 

一つのフォーマットを開くために、PODの構造をいじっているわけではないのです。構造物には様々な分野があります。構造体の中には、継承されるものもあれば、プライベートフィールドを持つものもあります。


とにかく、これらの構造をゼロにして、研究対象のフォーマットを編集するという課題が出てきた。そして、本当に何も出てきません。その結果、このバリエーションを使うことにしました。

#include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280

// Обнуление переменной.
template <typename T>
void ToNull( T &Value )
{
  uchar Bytes[sizeof(T)];
  ArrayInitialize(Bytes, 0);
  
  _W(Value) = Bytes;
}


アプリケーションです。

struct A
{
private:
  int i;
  
public:
  int j;  
};

void OnStart()
{
//  A a = {0};     // 'a' - cannot be initialized with initializer list
//  ZeroMemory(a); // 'a' - not allowed for objects with protected members or inheritance
  
  ToNull(a);
}


代替案を歓迎する。

理由: