トレーディングにおける機械学習:理論、モデル、実践、アルゴトレーディング - ページ 3301

 
Andrey Dik #:

そう、サンシュはそこに極限はないと書いたが、それは間違いだった。

極値とは、関数が与えられた区間または領域で最大値(最大値)または最小値(最小値)に達する点のことである。極値には、関数がある点の近傍でのみ極値に達する局所的なものと、関数が与えられた区間全体または与えられた領域で極値に達する大域的なものがある。

極限値は、たとえあなたが意図的に探さなくても、常にそこに存在する(あなたが使用するアルゴリズムが、この探索作業を代行してくれる)。最適化なしの学習は不可能であり、最適化は正しいFFの割り当てなしには不可能である。極限の探索があなたのために行われ、隠されている(アルゴリズムに縫い込まれている)としても、極限が存在しないということにはならない(極限も最適化も)。

そこに機能はない。

もういい、興行情報はもういい。私は最適化が何であるか知っている。
 
mytarmailS #:

そんな感じか?

そして、本当に100万のコンディションに対応できるのか?

私はこのスイッチとC++のことで少し迷っている。

最初の2つの関数はRの実装で、最後の関数はC++のswitch です。

Unit: microseconds
                              expr    min     lq      mean median     uq       max neval
     rule(n = sample(1:200, 1), x) 40.482 44.473  57.18044 46.754 51.886  2688.931  1000
    rule2(n = sample(1:200, 1), x) 29.079 35.351 567.03671 38.202 43.904 86712.314  1000
 rule_cpp(n = sample(1:200, 1), x) 31.360 34.781  53.26793 36.491 40.482  4924.005  1000

実際、利得は全くないのだが、これはどういうことなのだろうか?
 
mytarmailS #:

私はこのスイッチとC++のことで少し迷っている。

最初の2つの関数はRの実装で、最後の関数はC++のswitch です。

実際、全く得がないのですが、どうしてなのでしょうか?

フレンドリーなフレンドリーフレンドリーフレンドリーフレンドリーフレンドリーフレンドリーフレンドリーフレンドリーフレンドリーフレンドリーフレンドリーフレンドリーフレンドリーフレンドリー

おそらく、答えはすでに出ているのに関数を無駄にしているのでしょう。

 
Aleksey Vyazmikin #:

コードを見せてもらえますか?

おそらく、すでに答えを受け取っているのに、無駄に関数を実行しているのでしょう...。

コードは私が投稿したものと同じですが、ルールを5ではなく300にしています。

コードを投稿する意味は?
私はすでにアーキテクチャを決めている
 
mytarmailS #:
コードはあなたが投稿したものと同じですが、ルールは5ではなく300にしました。

Rのコードを掲載する意味は?
私はすでにアーキテクチャを決めている

問題は関数呼び出しのコードにある。

 
Aleksey Vyazmikin #:

問題は関数呼び出しコードにある。

理解できない
 
mytarmailS #:

基本的にまったく得るものがない、どうしてそうなるのか......。

考えられることはたくさんある。スクリプトを添付します。以下はファンクション部分です。

bool Rule0( const vector<double> &x ) { return(x[3] > x[4]); }
bool Rule1( const vector<double> &x ) { return(x[0] < x[4]); }
bool Rule2( const vector<double> &x ) { return(x[1] >= x[0]); }
bool Rule3( const vector<double> &x ) { return(x[3] == x[4]); }
bool Rule4( const vector<double> &x ) { return(x[0] != x[4]); }
bool Rule5( const vector<double> &x ) { return(x[1] >= x[0]); }
bool Rule6( const vector<double> &x ) { return(x[3] <= x[4]); }
bool Rule7( const vector<double> &x ) { return(x[0] < x[4]); }
bool Rule8( const vector<double> &x ) { return(x[1] >= x[0]); }
bool Rule9( const vector<double> &x ) { return(x[3] <= x[4]); }

bool rule3( const int n, const vector<double> &x )
{
  typedef bool (*RULE)( const vector<double>& );
  static const RULE Rules[] = {Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9};

  return(Rules[n](x));
}

#define  BENCH(A)                                                              \
  StartTime = GetMicrosecondCount();                                          \
  A;                                                                          \
  Print(#A + " - " + (string)(GetMicrosecondCount() - StartTime) + " mcs");

void OnStart()
{
  const vector<double> x = {1, 2, 3, 4, 5};
  int Tmp = 0;

  ulong StartTime;

  BENCH(for (uint i = 1 e8; (bool)i--;) Tmp += rule(i % 100, x));
  BENCH(for (uint i = 1 e8; (bool)i--;) Tmp += rule2(i % 100, x));
  BENCH(for (uint i = 1 e8; (bool)i--;) Tmp += rule3(i % 100, x));
//  BENCH(for (uint i = 1e8; (bool)i--;) Tmp += rule(i % 100, x));  // Если добавить эту строку, то выше rule замедлится.
//  BENCH(for (uint i = 1e8; (bool)i--;) Tmp += rule2(i % 100, x)); // Если добавить эту строку, то выше rule2 замедлится.
//  BENCH(for (uint i = 1e8; (bool)i--;) Tmp += rule3(i % 100, x)); // Если добавить эту строку, то выше rule3 замедлится.

  Print(Tmp);
}


結果。

for (uint i = 1 e8; (bool)i--;) Tmp += rule(i % 100, x) - 505436 mcs
for (uint i = 1 e8; (bool)i--;) Tmp += rule2(i % 100, x) - 261261 mcs
for (uint i = 1 e8; (bool)i--;) Tmp += rule3(i % 100, x) - 709846 mcs


ここで何を測定しているのかは不明だが、ハイライトされたコメントを参照。rule2よりはるかに速いと言われている。

ファイル:
 
fxsaber #:

興味深いことに、データ量(引用)という点では、人間の脳は(ニューラルネットワークとして)MOと比較して、人間と比較してインフゾリアのようなものだ。

しかし、原始的な人間は、かなり優れたTCを作ることができることを証明している。動くTCを作るのに、それほど大量のデータは必要ないことがわかった。

例えば、人間がどのようにしてスキャルパー・モデルを使えるようになったのか、私には謎である。それはほとんど数字計算機なしで行われた。


そのシナリオは次のようなものだったらしい:

  1. よく何かしらのパンクを見かける(数日前からバカみたいに画面を削っている)。
  2. 原始的なTSで稼いでみる。
  3. あまり消耗しない。もう少しTSを洗練させなければ。取引履歴を見たが、何か改善できそうだ。
  4. 少しプラスになり始めた。ポイント3を繰り返す。
数字計算をしない。ポイント1を見てやり始めた。この方法の確率はゼロに等しいようだが、なぜかうまくいく。ある種の作業的マッドポーク法だ。


どうやら、人間の脳は潜在意識のどこかで、極端に少ないデータから「パターン」を見つけ出すことができるようだ。運とは呼べない。不思議だ。

私は、すべての秘密は経験の移転にあると思う。例えば、最新のプロセッサー。19世紀の人々にとっては魔法だろう。20世紀の人々にとっては、リバースエンジニアリングするための適切なツールを持たない非常に複雑な技術になるだろう。知識の移転と段階的な開発によってのみ、現代の技術レベルに到達することができるのだ。だからこそ、もし第3次世界大戦が起これば、第4次世界大戦では石を使って戦うと言われているのだ。取引には伝説がある。以前の市場はもっと簡単で、天頂のトレーダーは移動平均線の助けを借りて富を築いたが、今はそんなことはできないだろう。

 
fxsaber #:

、、、、ののーこのーここでーーこのーーーーーーーのーーーーーーーーーAllegedly much faster than rule2.

ここでは この関数と、C++を含むさまざまな実装(等価物)が測定された。

まあ、私は今のところすでにアーキテクチャを決定しており、私は今のところ純粋なR-keに座るつもりです。

 

私のAMOで挑戦できる。

"TSを解け"。


あなたが使っている小さなデータを私に渡してください。

そのコードでどのような演算子、関数、変数を使うかを説明しなさい。

そして、そのアルゴリズムの方程式やシグナルを私に教えてください。


私は検索文法を作り、暗号としてそのコードを拾い上げ、あなたのTSを解く。

理由: