技术分析毫无用处吗?- 2024.1.8

稍微花了点时间写了段代码,逻辑是这样的:

创建一个150天长度的股票candlestick,其中open_price是首项为15的纯随机运动(首项多少不重要,重要的是看整个趋势),而当日的close_price是open_price + 标准正态分布随机数,次日的open_price为前一日的open_price + 标准正态分布随机数,当日最高价为max(close_price, open_price) + 标准正态分布随机数绝对值 / 2,最低价为min(close_price, open_price) - 标准正态分布绝对值 / 2(除以2仅仅是为了好看,不影响当日收盘价)

代码放在了最后,可以自行运行生成

以下是随便生成的12幅图,看着是不是很像实际的股价?当然我也不怎么会技术分析,还有各种理论什么波浪理论量价分析等,但就论最基础的技术分析,可以看看下面随机生成的图:

其他的就不再画了,应该很容易看出来:

当然这不是证明技术分析没有用,在我看来这种生成的图像有至少两个缺点:

  1. 绝大部分随机生成的图像在真实A股中都不会出现(或还没出现),A股市场中只有少量走势与上面的图一致或类似,这说明了只能通过实际的走势去研究技术分析而不能用无穷多的理论走势来证明技术分析没用
  2. 技术分析做得好的人绝不可能仅看走势,他们必定还会关注交易量、宏观环境、政策趋势、板块内外部的相对分析等再做决策,所以这是一个纬度极高的拟合,不是我这种一维数据能比拟的,所以我上面的这种划线根本构不成实际交易的决策

至于discretionary trading和quantitative trading两者哪个更好这其实没有办法比,因为quant是将一切能量化的都给量化了,可能不能量化的可能给个低权重也加进去了,而discretionary trading也是量化的只不过纬度比quant高太多了,在我有限的生命中我不相信有人能创造出比人脑拟合更优秀的模型,就算算力能达到但如何将几万个纬度给量化出来那也是个问题(对人脑来说,俗称“感觉”)。人脑的缺陷在于会忘记事物以及会过度受外界消息影响。而我是绝对相信市场上有这么一批手动交易的人,他们能几乎达到稳赚不赔的,哈哈哈因为我就经历过,那种人真的是不能做大,毕竟钱多了,那就不是自己的了

import mplfinance as mpf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

def generate_stock_prices(num_of_days, mean, std_dev):
    open_price = [15]
    close_price = []
    high_price = []
    low_price = []

    for i in range(num_of_days):
        # Brownian motion for open price
        open_price.append(open_price[-1] + np.random.normal(mean, std_dev))
        close_price.append(open_price[-1] + np.random.normal(mean, std_dev))
        high_price.append(max(open_price[-1], close_price[-1]) + abs(np.random.normal(mean, std_dev)) / 2)
        low_price.append(min(open_price[-1], close_price[-1]) - abs(np.random.normal(mean, std_dev)) / 2)

    open_price.pop(0)

    dates = pd.date_range('2023-01-01', periods=num_of_days)
    data = {
        'Open': open_price,
        'Close': close_price,
        'High': high_price,
        'Low': low_price
    }
    df = pd.DataFrame(data, index=dates)

    return df

if __name__ == '__main__':
    num_of_days = 150
    mean = 0
    std_dev = 1

    stock_prices = [generate_stock_prices(num_of_days, mean, std_dev) for _ in range(6)]

    fig, axs = plt.subplots(2, 3, figsize=(15, 10))

    for i, ax in enumerate(axs.flatten()):
        mpf.plot(stock_prices[i], type='candle', style='yahoo', ax=ax)
        ax.set_title(f'Stock Price {i+1}')

    plt.tight_layout()
    plt.show()