#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define LAPS 10000//Количество серий#define ELEMENTS 10000//Количество баров в одной серии#define INVOKE //Определено, если требуется эмулировать
//вызов функции//Представление бараstruct bar
{
longlong Open;
longlong High;
longlong Low;
longlong Close;
longlong AskLow;
longlong BidHigh;
};
int main(void)
{
struct bar bar_array[ELEMENTS];
//Общее время выполнения стратегии
clock_t eleps_time = 0;
//Общее время выполения
clock_t total_time = 0;
//К сожалению заявленный объем памяти (100 000 000 баров) выделить не удалось,//поэтому выделяем память порциями, 1000 раз, по 100 000 баров за раз.
clock_t ttime = clock();
for(int lap = 0; lap < LAPS; lap++)
{
//Заполняем бары случайными числамиfor(int i = 0; i < ELEMENTS; i++)
{
bar_array[i].Open = (longlong)rand();
bar_array[i].High = (longlong)rand();
bar_array[i].Low = (longlong)rand();
bar_array[i].Close = (longlong)rand();
bar_array[i].AskLow = (longlong)rand();
bar_array[i].BidHigh = (longlong)rand();
//if(i < 5)// printf("%i\n", bar_array[i].High);
}
//Эмулируем работу ТС c массивом котировок//Рассчитываем время на выполнение этого блока и суммируем его, получая общее время//выполнения
clock_t btime = clock();
//Наша стратегия будет проверять простое соответствие проверяемого бара настоящему.//Настоящий бар, это бар чей high > open, low, close а low < high, open, closeint signal = 0;
for(int i = 0; i < ELEMENTS; i++)
{
#ifndef INVOKE
if( bar_array[i].High > bar_array[i].Low &&
bar_array[i].High > bar_array[i].Open &&
bar_array[i].High > bar_array[i].Close)
signal++;
#endif
#ifdef INVOKE
signal += TradeSystem(&bar_array[i]);
#endif
}
eleps_time += clock() - btime;
}
printf("Bars was worked: %i\n", LAPS*ELEMENTS);
//Печатаем общее время выполненияdouble timedif = ((double)clock() / (double)CLOCKS_PER_SEC);
printf("Bars %f seconds\n", timedif);
//Печатаем время выполнения торговой системыdouble eleps_diff = (double)eleps_time / (double)CLOCKS_PER_SEC;
printf("The TradeSystem time is %f seconds\n", eleps_diff);
printf("The Eleps tik is %i tiks\n", eleps_time);
return0;
}
//// Функция торговой системы. Принимает на вход бар,// обрабатывает его и возвращает целочисленный результатint TradeSystem(struct bar &cbar)
{
if( cbar.High > cbar.Low &&
cbar.High > cbar.Open &&
cbar.High > cbar.Close)
return1;
return0;
}
まあ、ないでしょうけど。
マッチングやその自動的な結果の何が起きないのか?
もっと具体的に...;)
マッチングやその自動的な結果の何が起きないのか?
具体的にお願いします...;)
マッチングやその自動的な結果の何が起きないのか?
具体的にお願いします...;)
具体的に何が起きないのか?
ある意味MT5-platformでのMatchingの 大量導入は、理論的にはごく近い将来、FX市場に「反相場革命」をもたらす可能性があり、市場の「爆弾」となるかもしれません。革命」というのは大げさかもしれないが、そうでないかもしれない。 なぜなら、どんなトレーダーでもマーケットメーカー(価格に影響を与えること)ができるようになるからだ。 世界の市場のかなりの部分をカバーするネイティブ・アグリゲーターの大規模な広がりによって......。流動性供給者が通貨価格を独占する時代(というか、ほとんど)は永遠に終わらないかもしれない(かもしれない)。
このような背景から、「新時代」に対してトレーダーは準備ができているのか、「一般トレーダー」は拡散するアルゴリズムをテスト、最適化、デバッグするための通常のツールを持っているのか、という「画期的な」疑問が生じます。
なし。
テスターにはティック履歴もデバッグもありません。 クオートベースのフォーマットでは、指値注文を使用するHFT戦略( すべての スプレッドアルゴリズムがそうです)のテストや最適化に 使用するチャンスはありません。
ただ、現在の気配値の形式は、ブレイクアウト戦略にもリバース戦略にも使えないものですが、このような単純な方法では修正できません。少なくとも1つの戦略クラスは治るが、これからの状況では「劇的な形」(上記参照)になる。 そして、他の戦略は苦しまない! もしそれがわかったら、提案した方法でスプレッドを変更すると、テストや最適化が現実的でなくなる戦略クラスの例を挙げてください。
実際にはテスターはまだティックワイズなので、履歴のフォーマットの問題だけです。 また、必要に応じて「非標準の引用符」を使うことも可能です。もう少し「曲がったところを見よう」と思っています // 書いてあることはすべて正しいです。
「大量にマーケットメイクすることで、ドル円の「ユニバーサル・エクスチェンジャー」のポジションが失われる可能性があります。 これは、「マイナー」のスプレッドが崩壊することによる単純な結果です。 外国為替市場はよりダイナミックで効率的になるのでしょう。私の知る限り、為替レートの非市場的規制は、大きな悪用に満ちている。どんなに崇高な目標を掲げても、インサイダーがマネタイズされる可能性は常にあり、どんな法的メカニズムでもそれに対抗できると思うのは愚かなことだ。
要するに、私は「正直なFX」に興味があるのであって、もしかしたら私個人はこのような逆転劇から金銭的な利益を得られないかもしれない(あるいは得られるかもしれない)。 しかし、もし負けたとしても、少なくとも私は「騙された」のではなく「馬鹿なアルゴリズムを開発したから負けた」ということが分かるのである。
今のところノーコメントです。 もう少し考えてみます。 純粋にストップで一定ロットを取引する、儲かるストラテジーを見たことがないのです。1つもない。理論的には非常に理解しやすい。(そのような戦略が存在すると主張することは、H-ボラティリティが常に2.0より大きい取引ホライズンが存在すると主張することです。 私が見てきたすべてのトレンド戦略は、成行注文で満たされるか、リミッター(またはマーケットプット)を使ってプルバックで出入りします。 高アスク/低ビッドの市場では、履歴は低アスク/高ビットよりも価値がない。 彼らにとって重要な情報はむしろバーOHLCのすべての点でのスプレッドについてである。そして、HighBid+LowAskのような中途半端な対策では、十分なテスターとは言えないということを理解するようになりました。
最後にHighBid+LowAskのような中途半端な対策では、テスターとして十分でないことは明らかであろう。
もし、私の書いたものからそういう結論になるのなら......。...なら、あなたもわかっていないことになる)
どうするんだ!?彼が入ってきて、ひとこと言えば、それで終わり。眠れない夜が続くこと請け合いだ。)
自分には関係ない記事でしたが、私も寝ません。
(これらが存在すると言うことは、H-ボラティリティが常に2.0より大きい取引ホリゾントが存在すると言うことである)。
新しい取引のためにテスターを改良する必要がありました。新しいものを書くより、古いもののコードを理解する方が時間の無駄だった(数週間、時々アプローチを潰した)。
そのため、新しいテスターを一から書くのに5時間(デバッグを含めて)かかりました。 その性能(先発として満足のいくもの)。
MQL5でも同じように無意味なものを実装すれば、行列最適化モードでCloudを使うことができる。履歴だけを毎回送信する必要があります。このような情報は、内蔵の圧縮機能が必要です。
理論的には100Bb/sの速度に到達することが可能です(テストTSにおいて)。同じオウムのクラウド全体でMT5-testerの性能はどうなんだろう?
1秒間に1000億本というのは、あらゆる研究に適したスピード です。他の単位に換算すると、このスピードは1分間のFOREXの歴史の1年が、1つのシンボルで1秒間に30万回実行されていることになります。
ほとんどの時間は、言語の構文を学ぶこと、つまりググることに費やされました。プログラマーではない.
すぐにわかることですが、自分のささやかなニーズのために、普遍的なフレームワークを書くのは非常にもったいないことです。探検したほうがいい。何か配慮が必要なことがあれば、それを仕上げればよいのです。
これはあくまでコアで、あとはオプティマイザーのための狡猾なツールキットが必要です。ここではもっと時間がかかりますよ。よく考えてからにしてください。
この文章を読んでいて思ったのだが、この人は意識の流れに完全に迷い 込んでいるか、 少なくとも書いてあることの半分はよくある嘘 なのではないだろうか。
深い知識のない独学プログラマーが、1秒間に100 000 000バーの性能を持つシングルスレッド・テスターを数時間かけて書いたのか?対照的に、最高レベルのプロフェッショナリズムを持つ人々は、何年もかけて有能で高性能なHFTテスターを作り、それを扱うチーム全体を作り、戦略を詰め込む。そしてここで一人の人物がテスターを自分で作ることを決め、すぐに主要な(閉じた)HFTプラットフォームの一桁高い性能を手に入れたのです。
ここでは、1秒間に100 000 000本のバーを動かすために、どれだけの帯域幅のメモリが必要かを計算してみましょう。各バーは4つの価格+AskLow HighBidで、それぞれ64ビットの6つの整数型になる(価格は整数(long int))。毎秒100.000.000バールの場合、以下のようになります。
つまり、この性能は、基本的かつ純粋に理論的には、DDR2 533メモリモジュール 以上で達成可能であることを意味します。少なくとも、宣言された性能は、現代のハードウェアの物理的な限界に匹敵するものです。
しかし、ソフトウェアの時間的コストはさらに大きな制約となる。これらは無視することはできません。そこで、64ビットの高速CコンパイラWin-Lcc 64を 持ち出し、重い数学的計算をせずに棒グラフの配列を直接検索 する場合の性能を測定してみたのです。注意:ダイレクト、つまり最速の検索について話しています。環境操作などのオーバーヘッドがなくdickfixとは異なり、私は「ストラテジーテスター」の全ソースコードを提供していますので、誰でも好きなコンパイラーでコンパイルして性能を測定することができます。
このコードは、Invoke指示文に応じて、配列を通過して単純な比較を行うか(非常に高速な処理)、同じ比較を行う関数を呼び出していることがわかります。
このコードで100 000 000本のバーを検索して比較するのにかかる時間を見てみましょう。
100,000,000本のバーを直接通過するのに1.28秒かかり、広告の性能より3分の1近く悪いことがわかります。
100,000本のバーを検索し、各バーに計算関数を呼び出すと1.79秒かかり、宣言した性能より1.5倍以上悪くなっていることがわかる。
すべてのテストは、i7 870、DDR3 3200 8Gbの ハードウェアで実行されました。
ほとんどの時間は実際のデータ作成に費やされています(約9秒)。そのため、オプティマイザーの設計が少しでも最適化されないと、膨大なオーバーヘッドが発生することになります。でも、ストラテジーランだけの話なので、その時間は考慮していません。
自分で結論を出すのです。控えめに言っても、主張する結果が現実に即していないことを数字で示すことができたと思います。オプティマイザを記述したコードの理論的な性能も、謳い文句通りの結果にはならないのです。また、主張されているものに近い機能を持つ実機テスターを実装した場合、関数呼び出しや多少なりとも有用な数学的計算があれば、直ちに素の検索時間が短縮されるため、性能はさらに低下することになります。
まあそれは、まったくトレンドの穀潰しですね。どちらも一貫して2倍以下ではありません。H波が全シリーズを通じて一貫して2以下または2以上になるような機器はありません。ある地域・ある瞬間にトレンドトレードをするタイミング、リターンをトレードするタイミングを知る。バザーをろ過する))
その通り!しかし、この場合、理想的な取引システムを開発するための最終段階として、指値取引に行き着くのです。
では、「理想的な」システムがリミットをトレードしなければならないのなら、本当のシステムはなぜマーケットやストップをトレードしなければならないのか、あなたの頭で考えてみてください。 謙虚さからでしょうか?;)