从随机的价格范围中获利 - 页 8

 
avatara:

就我而言,这个话题值得进一步讨论。时间过去了--有很多东西需要思考和学习。

特别是费舍尔变换的描述......。

;)

我编写了两个脚本用于生成测试系列。(用于均匀和正常的增量)。

请不要为仓促的代码中的死记硬背和马虎踢......

费舍尔变换,像其他扩展器一样,在区间的上界和下界附近疯狂地放大分数噪声,并在极限(边界本身)以无限的系数放大。对于市场来说,这只是相关的--所有的价格都是由点量化的,因此在某种程度上,所有的指标也是由点量化的。
 
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正式化,做了很多研究......。

来到这里,要感谢一个与这个话题间接相关的私下讨论。对于也许未来某个时候的怀疑论者来说,我决定勾勒出一些公共领域中没有人需要的代码检查。

 

对于Dickfks,你不能尝试不同的分配吗?例如,一个市场价格(人为产生的)。作为初学者,你可以在哪个分配上获得利润?



 
YOUNGA:

对于Dickfks,你可以尝试另一种分配方式吗?例如,市场价格(人为产生的)。对于初学者,什么分配方式可以用来赚取利润?

保证的利润可以在 "蓬松 "的价格下被挤出来。蓬松度的定义和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预先确定的。

只通过你的女婿和你在一起......没有任何不敬。