如何从不稳定的市场中赚钱?(文章)

 

众所周知,市场是非平稳的。要证明这一点非常容易:我们采取某种金融工具的市场模型,并将其与某段历史数据进行拟合,尽可能地接近它(近似)。我们得到了历史数据和我们的模型之间差异的一个极值--残差。让我们在另一个历史数据段上运行如上所述的模型--在样本之外,同一市场工具。就残差而言,我们得到了一个更糟糕的结果。


市场是不断变化的--它们是非稳定的。


因此,任何试图通过模型最大限度地接近市场价格数据时间序列的某个特定部分的原则来建立市场模型的人都会陷入困境。因为所有这些近似模型都是在市场不会改变的情况下计算出来的,它们的统计和概率特征将保持不变。但我们知道,这不是真的。由此可见,所有根据一些历史数据建立最准确的市场模型(公式)的尝试都注定要失败,因为建立模型所依据的市场的任何变化都会使其至少不准确。


在这种情况下该怎么做?也许我们应该拒绝任何优化--对历史数据的调整?


答案是显而易见的:为了建立一个最佳的市场模型,优化的方式应该是使市场模型是动态的而不是静态的。也就是给模型一些自由度。


看来,最后一句话看起来很微不足道。是的,但看看在建立市场模型时都做了些什么,你会发现这样一个微不足道的事实几乎从未被使用。


同样明显的是,优化应该使用寻找两人博弈(即交易员和市场的交易系统)的最优解的算法,使用支付矩阵的零和和混合策略(双方的策略选择自由)进行。因为在这种情况下,我们有。


1. 对第二个参与者,即市场,假设他有选择战略的自由度--混合战略,是一个明知的动态模型。
2. 已经准备好的数学和算法仪器可以立即进行。两个人的混合策略和零和博弈的数学装置是完整的,也就是说,它不包含任何 "白点",因此我们要么获得解决方案,要么得到不存在解决方案的臭名昭著的答案。

但是,最重要的是,两个人的零和博弈的支付矩阵的解决方案给我们提供的不是一个而是两个最佳解决方案,使每个参与者的成本最小化:一个是潜在的市场策略,另一个是交易者的交易系统。

而由于解决支付矩阵的最优策略是成本的最小化,即一个玩家严格遵循其策略所能获得的利润的数学期望值的最差选项,那么由于市场的非平稳性,市场不会遵循其自身的最优策略,从而必然减少交易者的交易系统的成本部分,而增加利润部分,如果这非常交易系统将严格遵循最优策略与

我将不再进一步描述混合策略的两人零和博弈的一些数学细节及其特殊性,因为所有的信息都是公开的,可以在互联网上找到,比如这个链接。双人零和游戏的混合策略

支付矩阵

两人零和游戏的支付矩阵是一个二维数字空间。 问题是,在计算这个矩阵的某一行或某一列的期望值时,要考虑到双方的最佳策略。整个游戏的总(最终)期望值,即所有行或所有列的期望值,考虑到双方玩家的最佳策略,称为游戏价格。

因此,支付矩阵最常被填入支付值。 从本质上讲,支付矩阵就是游戏规则。如果这个数字是正数,第一个玩家支付给第二个玩家的金额等于该单元格中指定的数值。如果是负数,那么第二位玩家就会以指定数值的绝对值支付给第一位玩家。

因此,支付矩阵允许对一组游戏进行建模,其结果取决于玩家对游戏的一个或另一个结果的选择,前提是他们中没有人事先知道第二个玩家的选择。关于交易,我们得到一个类比,因为交易员事先不知道价格会向哪个方向发展,而市场也不知道某个交易员会向哪个方向开仓,除非该交易员是内部人士(持有市场上相当一部分资产,他或她可以大大影响报价)。

实例

让我们假设我们在芝加哥证券交易所交易股票。 我们的策略是购买并持有一定时间的证券。问题表述如下:在什么时间段、什么手数的情况下,我们做多头最有利可图?

交易时段持续了7小时30分钟。因此,事实证明,整个会议可以分为15个相等的部分,每个部分30分钟。因此,分析将在M30的时间框架上进行。

我们将采取过去15天的报价--三个完整的交易周。我们假设每期的结果是某一栏的开盘价与前一栏的开盘价之差,即对于历史数据中的栏号n,它将是Open[n]-Open[n+1]。时间是基于小节数n+1的。

让我们用这些非常不同的开盘价填充一个数字数组,其中横条是会议时间--从会议开始的各个条,竖条是会议本身,也就是日历日期。因此,我们得到了一个支付矩阵。如果我们按列解决玩家的问题,我们将得到一个问题的解决方案,即在什么时间,用什么量,我们应该进入一个多头头寸。如上所述,这将是按数学期望值对情况的最坏估计--游戏的价格。

既然我们知道这个决定对交易者的交易系统意味着什么,那么这个决定对市场来说到底意味着什么,也就是说,玩家也会沿着这个方向收到一些价值?这些数值对市场来说是最有利的,对坚持看涨策略的交易者来说是不利的,个别交易时段的范围。也就是说,在选择与市场有关的支付矩阵方案时,对有熊市趋势的日子选择最大的范围,而对有牛市趋势的条形图选择最大的范围。因此,市场和交易者有一个妥协,根据这个妥协,如果交易者坚持使用最佳策略,会议范围的任何变化都不会恶化预期回报。

注意:底线是,在为市场选择策略时,如果交易者的策略是看涨的,那么看跌的日子的范围会增加,而看涨的日子,或者完全从考虑中删除(零范围)。也就是说,最终,如果所研究的历史数据清楚地显示出看涨的价格运动,那么在考虑到市场策略的独立时段的递减-递增范围而重新计算时,将预测为看跌的趋势。也就是说,在这种情况下,交易员的策略将被简化为在看跌时段寻找最频繁出现的看涨蜡烛。但不要担心,如果这样的烛台有足够的可能性,我们一定会找到一个不错的解决方案。

为了做到最自信,我们必须计算数学期望值,也就是考虑到两种策略的游戏价格。如果是正数,就是你所需要的,所以最坏的估计是保证利润。

但如果考虑到交易者和市场策略的数学期望值变成了负数,该怎么办?有些人读过坏书后可能会认为,交易员的策略在数量上应该保持不变,但他们不应该买入并持有证券,而是应该卖出--策略的逆转。 但这是不应该的。为什么?因为在我们计算出牛市策略的最优解,并将其改为熊市策略后,得出的最低估值,将是最高值。它可能是正数,但它将是最大值,就像我们在终端优化器中通过终端拟合获得它一样。而由于市场是非稳定的,这样的反转策略不太可能在计算的最大限度内保持。最有可能的是,它将再次转为负值。毕竟,根据翻转前的策略,最大的买入量是在有普遍看涨趋势的蜡烛上。而现在,如果我们开始在看涨的烛台上以看跌的情绪进行交易,那么支出就会增加,因此,进入负数理预期的概率也会增加。

是的,在预期报酬为负的情况下,考虑到所获得的策略,我们确实要从看涨的策略转为看跌的策略。但这样做,我们将不得不重新计算整个支付矩阵,不是按列计算玩家,而是按行计算玩家。或者改变矩阵本身的所有单元格的符号,然后你可以为玩家重新计算列,即不改变算法。现在,战略将改变,期望也将改变,不仅是符号上的,还有价值上的。

如何获得已经准备好的支付矩阵的解决方案?


有几种方法,其中最常见的是。


1. 通过线性编程,即Simplex方法。该方法不是很好,因为如果支付矩阵没有解决方案,它可能会卡住(取决于实施),在某些情况下,如果支付矩阵中存在一个鞍点或根本没有解决方案(取决于实施)。
2. 迭代法。在迭代方法的每一步,都会实现向支付矩阵的潜在解决方案之一收敛。关键是,如果下一步是模糊的,就会在随机数字发生器的帮助下做出选择。因此,在重新计算同一支付矩阵时,该方法可能产生不同的解决方案。如果没有解决方案,或者游戏的价格为零,那么收敛期望值将趋于零。

我个人使用迭代法,其算法如下所示。该清单是用Java编写的,这使得它很容易用特殊的工具转换为C语言,或用GCJ重新编译为机器代码。理论上,所有的东西都可以一次性写在MQL4或MQL5中,但MQL4的低速度和MQL5的错误不允许在上述编程语言中使用这种算法。


一个数组形式的支付矩阵被作为函数的输入 - 矩阵


输出是一个数字数组,作为玩家的策略按列输出。如果有必要按行重新计算某位棋手的策略,必须改变支付矩阵中所有单元格中所有数值的符号。


该函数向控制台输出所传递的算法的当前值(进度)的百分比和数学期望值,同时考虑到按行和列计算的玩家的最佳策略。

 

这是一个为两个人之间的零和博弈寻找最佳混合策略的函数的来源,考虑到最小化行玩家的成本(报酬矩阵中的正值是行玩家的胜利和列玩家的损失)。源代码是有效的。检查了,没有地雷。


  public double[] getData(double[][] a) {
    int m = a. length;
    int n = a[0]. length;
    double[] p = new double[ m];
    double[] q = new double[ n];
    double[] x = new double[ m];
    double[] y = new double[ n];
    int r = rand. nextInt( m);
    int c = 0;
    for (int t = 0; t < 100; t++) {
      System. out. print("Progress: " + t + "%  \r");
      for (int u = 0; u < 10000; u++) {
        for (int j = 0; j < n; j++) {
          y[ j] = y[ j] + a[ r][ j];
        }
        c = 0;
        for (int j = 1; j < n; j++) {
          if (( y[ j] == y[ c]) && rand. nextBoolean()) {
            c = j;
          }
          if ( y[ j] > y[ c]) {
            c = j;
          }
        }
        q[ c] = q[ c] + 1 d;
        for (int i = 0; i < m; i++) {
          x[ i] = x[ i] + a[ i][ c];
        }
        r = 0;
        for (int i = 1; i < m; i++) {
          if (( x[ i] == x[ r]) && rand. nextBoolean()) {
            r = i;
          }
          if ( x[ i] < x[ r]) {
            r = i;
          }
        }
        p[ r] = p[ r] + 1 d;
      }
    }
    System. out. println("Progress: 100%");
    for (int i = 0; i < n; i++) {
      q[ i] = q[ i] / 1000000 d;
    }

    double ep = 0 d;
    for (int i = 0; i < m; i++) {
      double result = 0;
      for (int j = 0; j < n; j++) {
        result = result + a[ i][ j] * q[ j] * p[ i] / 1000000 d;
      }
      ep = ep + result;
    }
    System. out. println("Expected Payoff = " + ep);

    return q;
  }
 
Reshetov >> :

任何试图通过模型与同一市场的某一部分时间序列的最大近似原则来建立市场模型的人都会陷入困境。

很难提出异议。

由于市场的非平稳性,如果这个交易系统严格遵守最优策略,那么市场不遵守自己的最优策略的概率就会减少交易者交易系统的支出部分,而增加利润部分。
我想是的。如果人们认为市场有这种最佳策略。我个人觉得更接近于与自然玩耍的比喻,自然不会建立有意义的策略。
让我们来看看过去15天的报价--三个完整的交易周。让我们假设每个时间间隔的结果是某个条形图的开盘价与前一个条形图的开盘价之差,即对于历史数据中数字为n的条形图,它将是Open[n]-Open[n+1]。时间是基于小节数n+1的。

让我们用开盘价的相同差异来填充一个数字数组,其中横条将是时段的时间--从时段开始的各个条,纵条--时段本身,即日历日期。因此,我们得到了一个支付矩阵。如果我们按列解决玩家的问题,我们将得到一个问题的解决方案,即在什么时间,用什么量,我们应该进入一个多头头寸。如上所述,这将是按数学期望值对情况的最坏估计--游戏的价格。

很好!接下来让我们来了解一下更多的计算和调整。

只是谁说矩阵中总结的 "15天报价 "是最佳的市场策略,而不是时间序列中的另一段,但又是变态的?

更重要的是,因为自然界,对不起,市场,不需要遵守这个矩阵......


让我想起那首关于牧师和他的爱犬的诗......

屠夫非常想吃肉。;)


一句话--园丁不理解新的 "飞行优化 "芯片。

请解释一下与传统装修方法的区别。

 
Sorento >> :


显然是这样。假设市场有这种最优策略。我个人更喜欢与自然界博弈的比喻,自然界不会建立有意义的策略。

试过了。它并不适合。由于 "自然 "不可避免地被认为是完全没有任何策略。只剩下这种非常性质的选择,在许多标准中的任何一个,可能变成甚至不接近市场。


因此,最好坚持这样的观点:市场并不是随心所欲的愚蠢 "自然",它比你想象的更有效率。因此,考虑到它会试图欺骗交易者,而且会做得最有效,所以最好进行计算。


正如我的一位朋友(也是一位交易员)所说:在我们的业务中,安全比遗憾要好。


索兰托>>:

但谁说在矩阵中总结的 "15天报价 "是一种最佳的市场策略,而不是时间序列中下一个,但变态的部分?

更重要的是,自然界,我很抱歉,没有义务遵守这个矩阵......。

...

解释与传统装修方法的区别,火。

有一些方法可以对此进行额外的适应性测试。例如,在正向测试中。


我的任务是只展示其中一种应用方法,而你如何使用这种材料和建模是你的个人问题。我的工作是提供,你的工作是拒绝。因此,如果你对如何避免装修有个人意见,没有人禁止使用它。如果没有,就不应该有判断。


如果你不喜欢15天的故事,你不必多吃或少吃。

 
Reshetov >> :

这就是为什么我们最好坚持这样的观点:市场并不是按照它认为最好的方式行事的愚蠢的 "自然",但它比人们想象的更有效率。因此,最好根据它将试图超越交易者并最有效地进行计算。


那么,也许我们应该解决在当前数据上确定一组交易者的所谓最优策略的问题。然后找到那个传说中的对立的市场策略,对交易者。

然后我们的 "关于她的最佳 "就会到来。;)


作为一个园丁,我不太了解游戏,特别是如果它们是 "我知道他知道我知道...... "类型。

 
Sorento >> :

那么也许应该解决根据当前数据确定一组交易者的所谓最优策略的问题。 然后找到这个与交易者有关的臭名昭著的对立市场策略。

然后我们的 "与之相关的最佳 "就会出现。;)


作为一个园丁,我不太了解游戏,特别是如果它们是 "我知道他知道我知道...... "类型。

有人告诉你,你可以为自己的目的使用任何模型,即所有交易者无一例外地+紧急干预模型+中央银行行长的行动+政府的行动+....。+地震+外星人入侵的可能影响,等等,对世界的脉搏。也就是说,如果你真的有无限的计算资源来核算任何东西,有什么能阻止你对所有的交易者进行建模?


但是,这个主题应该是讨论话题制造者提出的模型,而不是各种胡言乱语产生者的不同想法。


索兰托>>:

作为一个园丁,对游戏不太了解,尤其是如果他们像 "我知道他知道我知道......"。

你总是有一些好的顾问,他们对一切都了如指掌,就像橘子里的猪。

 
Reshetov >> :

你可以为自己的个人目的使用任何你喜欢的模型,...+外星人入侵的可能影响等,以至于失去脉搏。


但这个话题应该是讨论topikstater提出的模式,而不是各种漫无目的的人的各种想法。

谢谢你在科学和数字游戏中的建设性态度。

问题已删除。

我很荣幸。


只是提醒一下。


两个玩家T-rader:)和B-time:)进行了一个基于掷硬币的游戏。 玩家同时独立地选择正面(G-卖出-价格下跌)或反面(P-买入-价格上涨)。

如果两次掷硬币的结果相同(即GH或RR),则玩家T从玩家B那里得到一美元。

否则,玩家T向玩家B支付一美元。

以下是支付给玩家T的矩阵,显示了与策略相对应的行的最小元素和列的最大元素的值
两名球员的。


录像带

英国


线路最小值

TG1-1-1
ǞǞǞ-11-1
柱状最大值11


这个游戏的最大值和最小值(价格)分别为1美元和1美元。由于这些值并不互相相等,所以游戏

在纯策略中没有解。

特别是,如果玩家T使用策略TG,玩家B会选择策略BP来从玩家T那里获得1美元。

如果发生这种情况,玩家T可以改用策略TP来改变游戏的结果,并从玩家B那里得到一美元。

每个玩家不断地被诱惑去转换不同的策略,这表明纯策略的解决方案是不可接受的。

相反,双方必须使用适当的随机策略组合。

Moulin E.Game theory with examples from mathematical economics.M.:世界。


应该指出的是,混合策略决策的前提是,市场有可能采用一种或另一种策略。

 
Sorento >> :

感谢你对科学的建设性态度。

问题已删除。

我很荣幸。

不客气。我们总是乐于为一些比目鱼吹哨子。

 
Reshetov >> :

不客气。我们总是乐于为一些比目鱼吹哨子。

谢谢你的分数。

只要它是有趣的就行。:)

 
Reshetov писал(а)>>

有几种方法,最常见的是。


1.通过线性编程,即通过Simplex方法。该方法不是很好,因为如果支付矩阵没有解决方案,它可能会卡住(取决于实施),在某些情况下,如果支付矩阵中存在一个鞍点或根本没有解决方案(取决于实施)。
2. 迭代法。在迭代方法的每一步,都会实现向支付矩阵的潜在解决方案之一收敛。关键是,如果下一步是模糊的,就会在随机数字发生器的帮助下做出选择。因此,在重新计算同一支付矩阵时,该方法可能产生不同的解决方案。如果没有解决方案,或者游戏的价格为零,那么收敛期望值将趋于零。

难道不能通过只看符合某些条件的部分交易,或放弃部分交易来简化吗?

假设我们有一个有许多交易的日内系统。我们把发生在看跌日线蜡烛图上的多头交易和相应的空头交易留下。它可能不仅是看跌,而且是交易历史上最看跌的50笔交易,等等。可以想到很多的过滤标准。事实上,它只是选择了对交易者来说最糟糕的情况--市场的条件性不对称反应(:))。

也可以反过来:你可以不在整个历史上寻找最佳策略,而只在历史上最不利的部分寻找,按照某些标准,多头和空头。

 
Avals >> :

难道不能通过只考虑满足某些条件的部分交易,或放弃部分交易来简化吗?

假设我们有一个有许多交易的日内系统。我们留下了在看跌的日线蜡烛图上发生的多头交易和相应的空头交易。它可能不仅是看跌,而且是交易历史上最看跌的50笔交易,等等。可以想到很多的过滤标准。事实上,它只是选择了对交易者来说最糟糕的情况--市场的条件性不对称反应(:))。

你可以反其道而行之:不是在整个历史上寻找最佳策略,而是只在最不利的历史时期,按照某些标准,寻找多头和空头的最佳策略。

从本质上讲,游戏的解决方案是最不利的,根据给定的标准,历史的一部分,因为在选择市场的策略时,正如我之前所说的,交易者可以获得利润的会议将被排除在外,甚至从选择中消除。


至于把短线和长线的策略结合起来,以寻找多头和空头的最合适时机,是可行的。例如,如果我们对只做多头的策略进行搜索,那么这个非常的策略会建议交易者在某些时段以零成交量开仓。也就是说,最好不要在这种时候购买。将有可能改变薪资矩阵中与这些时间相对应的各列数字的符号,这基本上意味着考虑空头。如果解决方案变成了非零值,就有可能做空。最重要的是,正如我所说的,为交易者实现积极的价格游戏。


谢谢你建议的短线和长线混合策略的想法!

原因: