Небольшая статья с ресурса http://www.talaikis.com/ о построении простой стратегии, использующую наивный байесовский классификатор при создании процесса возврата к среднему. Весь код в статье приведен на языке Python. Это достаточно большая область исследований, но расскажем все очень кратко. Мы попытаемся найти взаимоотношение между...
MetaTrader 5 allows us to simulate automatic trading, within an embedded strategy tester, by using Expert Advisors and the MQL5 language. This type of simulation is called testing of Expert Advisors, and can be implemented using multithreaded optimization, as well as simultaneously on a number of instruments. In order to provide a thorough testing, a generation of ticks based on the available minute history, needs to be performed. This article provides a detailed description of the algorithm, by which the ticks are generated for the historical testing in the MetaTrader 5 client terminal.
http://www.quantalgos.ru/?p=1898 もしかしたら、このトピックの著者は得をするかもしれません...
疑似乱数発生器。(PRNG)
上で提案した極座標法を用いて、МТ4 PRNGを正規分布の乱数値を持つPRNGに変換してみました。
コードの正しさを視覚的に確認するために、結果を価格チャートに投影してみました。
これは、基本的なPRNGが1000回呼び出した後に表示されるものです。ヒストグラムの矩形の面積は、その垂直スケールの範囲に収まるように生成された乱数の数に比例しています。
さて、その数千のヒット曲をメソッドの計算式で変換すると、次のような結果になります。
というのも、このベルは非常に優秀なのです。
上記で提案した極座標法を用いて、MT4のPRNGを正規分布の確率変数を持つPRNGに変換した。
ベイズ式を応用した試みに。もう一度。
タスクベイズの定理を用いて、まだ来ていない目盛りの値が最も可能性が高いのはどれかを判断する。
与えられた。時系列 x,y.
y=ax+b 最後の目盛から未来への直線。
P(a,b|x,y)=P(x,y|a,b)*P(a)*P(b)/P(x,y); (1) ベイズ式。
P(a,b|x,y) は係数 a と b が将来の目盛りの x と y 座標に対応する確率 である。
この確率(より正確には確率測度)が最大と なるようなa、bを見つける必要が ある。
P(x,y|a,b) - 価格水準によるティック分布の実ヒストグラムを尤度関数とします。この関数は2次元の配列(行列)で定義されます:価格帯 - 確率、ティックの総数に対するこの範囲に入るティックの割合。
P(b) - 増分の正規分布を先験的確率bとする。正規分布の値を持つPRNGが使用されます。
P(a) 係数 a は直線の傾きと予測される増分の符号を決定する。今のところ、以前投稿した線形回帰の コードを使おうと思っています。つまり、そこにある係数aが見つかる確率を一とする。そして、(1)には、このaと与えられたyについて計算されたaとの差を考慮して計算された確率P(a)を代入する。
もしかしたら、各ティックの増分の符号がどのように振る舞うかについて、何かお考えがあるのでしょうか?
数式に刻みを入れる必要は絶対にない。そのティックを、毎日行われているFORTSで誰でも生成することができるのです。
問題は、むしろ数学的手法にあるのではない。しかし、適用するデータの選択の妥当性において。
なぜ、人工チックを全く取らないのか?高度な数学がなくても予測できるようになります。方法はMQに聞け。
つまり、(1)の尤度関数P(x,y|a,b) は、実際のティック(ティック量)の分布であるわけです。正常であることは極めて稀である。そして、P(a)とP(b)は、アプリオリな確率としてとらえた法則による補正確率である。
MQに何を聞けばいいのか?ストラテジーテスターで刻みをモデリングする原理?そう、何らかの原理があるはずなのです。それを知ることで、テスターの「グレイル」を作ることができるかもしれません。しかし、チックの履歴もなく、動作の練習もしていないので、テストモードで開発することはできません。 すべてリアルタイムで行うことになります。
あなたの言葉に興味津々。
"私の実験では回帰や価格値(あるいはその変換)は全く行わず、符号を予測するのですが、これも価格情報の一部と言えるかもしれません。
私のエラーは次のようなものです。
0 1
0 0,58 0,42
1 0,43 0,57
あるいは、おおよそ原文のまま。
1 - 正、0 - 誤:1, 1, 1, 0, 0, 1 , 1, 1, 0, 1
そして、結果として得られる確率分布は、0.5 / 0.5とできるだけ異なるものであるべきです。このような結果の相互不可分性を求めると、二項分布に行き着き、その公式や統計的検定が 数多く存在する」引用終わり。
符号を予測する場合、二項分布はどのような法則になるのでしょうか?成果の相互独立性とは?ありがとうございます。
つまり、(1)の尤度関数P(x,y|a,b) は、実際のティック(ティック量)の分布であるわけです。正常であることは非常に稀です。そして、P(a)とP(b)は、アプリオリな確率としてとらえた法則による補正確率である。
MQに何を聞けばいいのか?ストラテジーテスターで刻みをモデリングする原理?そう、何らかの原理があるはずなのです。それを知ることで、テスターの「グレイル」を作ることができるかもしれません。しかし、今のところテストモードで開発することはできません。 すべてはリアルタイムで行われます。
あなたの言葉に興味津々。
"私の実験では回帰や価格値(あるいはその変換)は全く行わず、符号を予測するのですが、これも価格情報の一部と言えるかもしれません。
私のエラーは次のようなものです。
0 1
0 0,58 0,42
1 0,43 0,57
あるいは、おおよそ原文のまま。
1 - 正、0 - 誤:1, 1, 1, 0, 0, 1 , 1, 1, 0, 1
そして、結果として得られる確率分布は、0.5 / 0.5とできるだけ異なるものであるべきです。このような結果の相互独立性を求めると、二項分布になり、これには多くの公式や統計検定が ある」引用終わり。
符号を予測する場合、本当に二項分布が成り立つのでしょうか?成果の相互独立性とは?ありがとうございます。
予測にティックを使うのは危険だと思いますし、モデルはブローカーごとに別々に設定すべきです。
テスターのティックは分足バーのohlc値からテンプレートで生成されているため、ストラテジーテスターからティックを取得すると、実際のものとは大きな違いが生じます(https://www.mql5.com/en/articles/75)。だから、誰もスキャルパーをテストすることなく、すぐに実際の口座に入れ、途中で最適化するのです。
リアルティクについて - ブローカーによって大きく異なる場合があります。例えば、このスレッドhttps://www.mql5.com/en/forum/64228/page2#comment_1960403 (https://c.mql5.com/3/78/tbd.png ) にスクリーンショットが添付されていますが、これは2つの異なるブローカーでの同じ時間枠でのティック増分の分布です。1日から1週間くらいか。一般的に両者は一致するが、一方は価格変動がないまま2倍以上のティックを持つ。10社以上のブローカーを比較すると、特に「サプライズローソク足」については大きな差が出るのではないかと思います。
また、価格を変更せずに全ての目盛りを削除することも可能です。それから、EAではOnTick()イベントをスキップして、前の価格と新しい価格をターミナルに送ることができるというニュアンスもあります。すなわち、1.23456 -> 1.23490 -> 1.23410 ではなく、単に 1.23456 -> 1.23410 です。そして、2回の変更ではなく、あなたのモデルは1回になります。
2つの隣接するティックの時間間隔が定義されていないことが判明し、データのギャップが発生することになりますが、これはまずいのではないでしょうか。
MT4とTickstory Liteプログラム(無料版あり)を使用して、テスターに実際のティックを挿入する必要があります(ブローカーDukascopyから取得されます)。MT4ターミナルのみ、ビルド950未満で使用しないと、無料版のtickstoryではスプレッドが0のテストデータが作成されます。
ティックを使って、平均値を求め、現在の価格が平均値から強く乖離していたら売買するようなことをやってみました。もし利益があったとしても、スプレッドがすべてを食いつぶしていたので、より大きなタイムフレームに移行しました。