ランダムな価格帯から利益を得る - ページ 8

 
avatara:

このテーマは、私としてはもっと議論されてもいいと思っています。時間が経ちました。考えること、学ぶことがたくさんありました。

特にフィッシャー・トランスフォームは、なんとなく描写されて いるような・・・。

;)

テストシリーズを生成するためのスクリプトを2つ作成しました。(均一増分と通常増分の場合)。

ネクロマンシーや急ごしらえのコードの杜撰さを理由にキックしないでください...。

フィッシャー変換は、他の拡張器と同様に、区間の上下限付近の分数ノイズを乱暴に増幅し、極限では(境界自体で)無限大のファクターで増幅するのです。すべての価格はポイントによって量子化されており、したがって、すべての指標もある程度はポイントによって量子化されています。
 
NorthernWind:

しかし、上のリンクで提案したようにプレイすれば、mo=0のランダムウォークでも確実に勝つことができます。しかし、これもまた、定理で語られているようなゲームとはちょっと違う。しかも、当て損ねた回数が多いほど稼げるという逆説的な状況もある。もう一度言いますが、このゲームは現実とは関係なく、正確なテストの重要性を示すためのものです。要は、そこでの勝ち分は、ベットの勝ち負けを過少にカウントして積み上げているのです。そうなんです。

私が提案したようなゲームを何とかすれば、間違いなく一攫千金を狙えます。:)そして、このゲームでは分配も大きな違いであることを付け加えておきます。このゲームは、ある種のランダム・ワンダリングでは実現不可能なのです。

ZS.今までの議論を抜きにして、既存のディストリビューションを別のものに変換すれば、確かに優位に立てることもありますが、非常に不安定なものです。

もし、あなたが正しいアイデアを得れば、インクリメントの正規分布のある「価格」でそれを簡単にテストするためのコードをスケッチしました。

#property strict

extern int AmountPrices = 10000;
extern int TakeProfit = 100;
extern int StopLoss = 100;
extern double point = 0.0001;
extern int Temp = 0;

#define  MAX_RAND 32767.0

double GetRand()
{
  return(2 * MathRand() / MAX_RAND - 1);
}

void GetRandGauss( double& Rand1, double& Rand2 )
{
  double X1, X2, W = 2;
  
  while (W >= 1)
  {
    X1 = GetRand();
    X2 = GetRand();
    
    W = X1 * X1 + X2 * X2;
  }
  
  W = MathSqrt(-2 * MathLog(W) / W);
  
  Rand1 = X1 * W;
  Rand2 = X2 * W;
    
  return;
}

void GetPrices( double &Prices[], int Amount )
{
  static uint Tmp = 0;
  double Rand1, Rand2;
  
  MathSrand((int)TimeLocal() + Tmp);
  
  Amount <<= 1;
  
  ArrayResize(Prices, Amount);
  
  Prices[0] = 0;
  
  for (int i = 2; i < Amount; i += 2)
  {
    GetRandGauss(Rand1, Rand2);
    Prices[i - 1] = Prices[i - 2] + Rand1;
    Prices[i] = Prices[i - 1] + Rand2;    
  }
  
  Tmp += GetTickCount();
  
  return;
}

void NormalizeArray( double &Array[] )
{
  const int Size = ArraySize(Array);
  const double Interval = ArrayMaximum(Array) - ArrayMinimum(Array);  
  
  for (int i = 0; i < Size; i++)
    Array[i] /= Interval;
    
  return;
}

double System( const double &Prices[], const double TP, const double SL )
{
  const int Amount = ArraySize(Prices);
  bool Flag = TRUE;
  double OpenPrice = Prices[0];
  double Balance = 0;
  
  for (int i = 0; i < Amount; i++)
  {
    if (Flag)
    {
      if ((Prices[i] >= OpenPrice + TP) || (Prices[i] <= OpenPrice - SL))
      {
        Balance += Prices[i] - OpenPrice;
        
        Flag = (MathRand() > (SHORT_MAX + 1) / 2 - 1);  
        OpenPrice = Prices[i];
      }
    }
    else if ((Prices[i] <= OpenPrice - TP) || (Prices[i] >= OpenPrice + SL))
    {
      Balance -= Prices[i] - OpenPrice;

      Flag = (MathRand() > (SHORT_MAX + 1) / 2 - 1);  
      OpenPrice = Prices[i];
    }
  }
  
  return(Balance);
}

double GetRandProfit( int Amount, const double TP, const double SL )
{
   double Prices[];
   
   GetPrices(Prices, Amount >> 1);
   NormalizeArray(Prices);
   
   return(System(Prices, TP, SL));  
}


double OnTester( void )
{
  return(GetRandProfit(AmountPrices, TakeProfit * point, StopLoss * point));
}

カスタム基準による最適化(テイクアンドロス)は、すでに古代神話(あるいは私の)の予想される失敗を明確に示しています。

 
hrenfx:

もし、私の考えが正しければ、増分値の正規分布がある「価格」を簡単にチェックするコードをスケッチしました。

カスタム基準による最適化(テイクアンドロス)は、すでに古代神話(あるいは私の)の予想される失敗を明確に示しています。

サー、あなたの女性は比較的最近出発しました。
 
hrenfx:

もし、私の考えが正しければ、増分値の正規分布がある「価格」を簡単にチェックするコードをスケッチしました。

カスタム基準による最適化(テイクアンドロス)は、すでに 古代神話(あるいは私の)の予想される失敗を明確に示しています。

なんじゃそりゃ
 
ZaPutina:
なんじゃそりゃ

生成されたSB価格(より具体的には正規分布を持つ増分)で儲かるTSを作る可能性について議論しているおじさんもいる。TSを形式化し、多くの研究を行い...。

この話題に間接的に関連する個人的な議論のおかげで、これを知ることができました。というのも、いつか懐疑的な人が、誰も必要としないコードチェックをパブリックドメインでスケッチすることに決めたからです。

 

例えば、市場価格(人為的な価格)。



 
YOUNGA:

ディスコンについては、他のディストリビューションを試してもらえないか。例えば、市場価格(人工的に作られたもの)。そして、手始めに、どのディストリビューションを使えば利益が出るのか。

保証された利益は、「ふわっと」した価格で搾り取ることができるのです。ふんわり感の定義や、そのためのTSの形式化などは行わない。もしかしたら、他の場所かもしれません。これらはすべて、実際の取引とはほとんど関係がない。

どのようなディストリビューションにも対応できるように、コードの改変が可能です。これを行うには、関数GetRandGauss目的の分布の分位関数に 置き換えるだけで、一様分布(MathRand)乱数から対応する分布に変換されます。

 
hrenfx:

保証された利益は、「ふわっと」した価格で搾り取ることができるのです。ふんわり感の定義や、そのためのTSの形式化などは行わない。もしかしたら、他の場所かもしれません。これらはすべて、実際の取引とはほとんど関係がない。

どのようなディストリビューションにも対応できるように、コードの改変が可能です。これを行うには、関数GetRandGauss希望する分布の分位数の関数に 置き換えるだけで、一様分布(MathRand)の乱数変数を対応する分布に変換します。

100行以内で可能な限りすべての選択肢を網羅したコードということでしょうか?そうでない以上、疑似SBでは儲からない(自然界に純粋なSBは存在しない)ことを証明することと何の関係があるのでしょう。
 
ZaPutina:
100行以内で可能な限りのバリエーションを網羅したコードということですか?そうでない以上、疑似SBでは儲からない(自然界に純粋なSBは存在しない)ことを証明することと何の関係があるのでしょう。

ホワイトノイズを目的の分布関数に変更し、必要であれば確認する。ただ、これはナンセンスなことで、お金を稼ぐことができないことを証明するためです。そうでないことを証明する。

ZZY 市場のランダム性といえば、現在の状態 今日の終値)は、モスクワ時間の23日19:00+3:00にあらかじめ決まっていたものです。

 
tara:

ホワイトノイズを気になる分布関数に変えて、確認してみてください。ただ、これはナンセンスなことで、お金を稼ぐことができないことを証明するためです。そうでないことを証明する。

市場のランダム性といえば、現在の状態(今日の終値)は、モスクワ時間23日19:00+3:00にあらかじめ決まっていた。

婿を通してのみあなたと...失礼なことは言いません。