# Python牛市熊市横盘机制 | 缺口分析 | 头寸调整算法

{% hint style="success" %}
Python | 数学 | 几何 | 牛市 | 熊市 | 横盘 | 机制 | 策略 | 算法 | 缺口 | 头寸 | 长短期 | 市场机制 | 绘图 | 走势 | 看涨 | 看跌 | 收盘 | 价格 | 突破 | 利润 | 亏损 | 公式 | 稳健 | 资产 | 交易 | 对冲 | 微积分
{% endhint %}

{% embed url="https://viadean.notion.site/Python-131477ad468542f3bbdb01375c1251bf" %}

{% content-ref url="../zhi-dian-mi-jin-brief" %}
[zhi-dian-mi-jin-brief](../zhi-dian-mi-jin-brief)
{% endcontent-ref %}

### 🎯要点

🎯长短期方式：🖊标准普尔指数一年期看涨/看跌走势 | 🖊软银美元基准纳斯达克走势。

🎯市场机制：🖊代码定义市场，彩色图表绘制多种机制 | 🖊牛市熊市区间突破机制：代码定义，获取开盘最高最低收盘价格，绘制软银一年高/低机制突破 | 🖊海龟不对称区间突破策略获取小额利润：绘制软银不对称机制突破持续时间 | 🖊移动平均线看涨看跌：绘制软银使用海龟突破、简单和指数移动平均线涨跌走势 | 🖊绘图示意软银亏损区域 | 🖊绘图示意软银对海龟实施跨界策略 | 🖊下限/上限方法：计算标普指数分形高点，检测价格走势、定义机制：经典牛市、经典熊市、横盘。

🎯获利优势数学公式：算术收益预期、几何收益预期、头寸调整算法 | 🎯统计稳健性下注规模策略：利润和亏损。

🎯[Python和MATLAB及C++资产价格看涨看跌对冲模型和微积分](../shu-xue-math/python-he-matlab-ji-c++-zi-chan-jia-ge-kan-zhang-kan-die-dui-chong-mo-xing-he-wei-ji-fen)。

### 🍇Python缺口分析简单交易策略

您仍然会记得交易策略是在市场中做多或做空的固定计划，但您还没有真正获得更多信息；一般来说，有两种常见的交易策略：动量策略和回归策略。

首先，动量策略也被称为背离或趋势交易。当你遵循这一策略时，是因为你相信数量会继续沿着当前方向移动。换句话说，你相信股票有动量或上升或下降趋势，你可以发现并利用这些趋势。该策略的一些示例包括移动平均线交叉、双移动平均线交叉和海龟交易：

其次，回归策略，也称为收敛或周期交易。这种策略背离了数量变动最终会逆转的信念。看看均值回归策略，你实际上相信股票会回归其均值，并且当股票偏离均值时你可以利用这一策略。

除了均值回归策略之外，这种策略的另一个例子是配对交易均值回归，它与均值回归策略类似。均值回归策略基本上表明股票会回归均值，而配对交易策略则对此进行了扩展，并指出如果可以确定两只股票具有相对较高的相关性，则可以使用这两只股票之间价格差异的变化来发出信号，以表明其中一只股票与另一只股票不再具有相关性。这意味着，如果两只股票之间的相关性下降，则可以认为价格较高的股票处于空头仓位。应该卖出这只股票，因为价格较高的股票将回归均值。另一方面，价格较低的股票将处于多头仓位，因为随着相关性恢复正常，价格将上涨。

除了这两种最常见的策略之外，还有其他策略你可能偶尔会遇到，比如预测策略，它试图根据某些历史因素预测股票在未来一段时间的走向或价值。还有高频交易策略，它利用亚毫秒级的市场微观结构。

💦Python构建简单交易策略

日内交易是一种投机行为，交易者在同一交易日内买入和卖出某些金融工具（例如股票）。通过这种方式，交易者可以避免潜在的不可控风险以及当日收盘价与次日开盘价之间的负价格变化。此类交易者通常在一天内进行多笔交易，而且经常使用杠杆。

在交易中，存在许多不同类型的缺口，每种缺口都有不同的解释并表明不同的交易决策。在本文中，我们将重点关注最基本的概念，为简单起见，称为向上缺口和向下缺口。

当某种工具的开盘价高于前一天的收盘价时，就会出现跳空。类似地，当开盘价低于前一天收盘价时，就会出现缺口。准确地说，这两种模式被称为部分缺口。它们的完整对应物非常相似，但涉及最高价和最低价。例如，当开盘价高于前一天的最高价时，就会出现完全上涨缺口。您还可以根据部分缺口和完全缺口的组合来创建策略。在这种情况下，部分缺口只是开盘价介于收盘价和最高价之间（上涨缺口）或收盘价和最低价之间（下跌缺口）。

```python
 import numpy as np
 import pandas as pd
 import warnings
 import plotly.graph_objects as go
 import matplotlib.pyplot as plt
 plt.style.use('seaborn')
 warnings.simplefilter(action='ignore', category=FutureWarning)
```

下一步，让我们下载某公司在 2019-2021 年期间的股价。我没有太关注资产或时间范围，因此没有挑选出最好的来展示日内交易有多么神奇。您可以随意更改资产和时间范围以进行自己的实验！

```python
 TICKER = "NX"
 ​
 df = ydf.download(TICKER, 
                  start="2019-01-01", 
                  end="2021-04-30", 
                  auto_adjust=True)
 ​
 df["Close"].plot(title=f"{TICKER}'s stock price");
```

由于我们将使用比收盘价更多的价格，因此如果出现任何公司行为，自动调整所有价格会更安全。为了调查缺口是否存在，让我们更进一步并创建一个烛台图。我们可以通过plotly轻松做到这一点。

```python
 fig = go.Figure(data=
     [go.Candlestick(x=df.index,
                     open=df["Open"],
                     high=df["High"],
                     low=df["Low"],
                     close=df["Close"])]
 )
 ​
 fig.update_layout(
     title=f"{TICKER}'s adjusted stock price",
     yaxis_title="Price ($)"
 )
 ​
 fig.show()
```

需要考虑的内容相当多（尽管您已经可以看到一些缺口），所以让我们放大到 2020 年 3 月。在下图中，我们可以清楚地看到缺口上升和缺口下降。

下一步是实际编码我们将按照我们的策略开仓的头寸。因为我们只看过去，所以我们可以在 pandas 中通过简单的数据整理轻松完成。我们使用 1 编码多头头寸，使用 -1 编码空头头寸。这将简化计算策略的收益。

```python
 df["position"] = np.nan
 df.loc[df["Open"] > df["Close"].shift(1), "position"] = 1
 df.loc[df["Open"] < df["Close"].shift(1), "position"] = -1
 ​
 df = df.dropna()
```

我们有仓位，现在我们需要看看通过遵循这样的策略我们能赚多少钱（如果有的话）。为此，我们通过查看开盘价和收盘价之间的差额来计算日内回报。然后，我们将回报乘以仓位。最后，我们计算累计回报。

```python
 df["rtn"] = (df['Close'] - df['Open']) / df['Open']
 df['strategy_rtn'] = df["rtn"] * df["position"]
 df['strategy_cum_rtn'] = (df['strategy_rtn'] + 1).cumprod()
 df["strategy_cum_rtn"].plot(title="Gap strategy's cumulative returns");
```

最终，缺口策略产生了约 220% 的回报。这是一项相当大的成就，但是，我们需要意识到这样一个事实：该策略过去的表现并不能预示未来的表现！
