在 IBM 量子计算机上分析所有价格变动选项
引言
想象一下,能够同时分析所有可能的市场状态。不是像经典技术分析那样分析两三种情景,而是同时分析所有可能的发展。听起来像科幻小说?欢迎来到用于交易的量子计算世界!
虽然大多数交易者仍然依赖经典的指标和形态,但量子计算机为我们开辟了全新的视野。借助 Qiskit 库和 IBM 的量子计算机,我们可以超越传统的技术分析,在量子层面探索市场,在那里,每一个可能的价格变动都存在于叠加态中。
但是,让我们把那些高调的声明放在一边,来看一看事实。量子计算并非能解决所有交易问题的魔杖。它是一个强大的工具,需要同时对金融市场和量子力学有深入的理解。而有趣的地方就在这里。
在本文中,我们将探讨通过结合 MetaTrader 5 和 Qiskit 来实现量子市场分析的实践方法。我们将创建一个能够通过量子状态的棱镜来分析历史数据的系统,并尝试超越市场的事件视界。我们的方法结合了经典概率论、量子相位估计(QPE)和现代机器学习方法。
为什么现在这成为了可能?首先,量子计算机已发展到可以用于解决实际问题的水平。其次,像 Qiskit 这样的库已经出现,使得普通开发者也能接触量子计算。第三,我们已经学会了如何有效地将金融数据转化为量子状态。
我们的实验始于一个简单的问题:我们能否利用量子叠加态来同时分析所有可能的价格路径?答案的结果非常引人入胜,最终演变成了一项全面的研究,我希望与 MQL5 社区分享。
在接下来的章节中,我们将深入实现细节,审查代码,分析结果,并或许能一窥算法交易的未来。系好安全带——我们即将踏上一段迷人的旅程,进入量子力学与金融市场交汇的世界。
用于时间序列分析的量子计算基础
当我们谈论将量子计算应用于时间序列分析时,我们实际上是在将价格从经典的一维量表示,转向多维的量子状态空间。在传统分析中,在任何给定时间我们只能考虑系统的一个状态。在量子世界中,我们同时处理所有可能状态的叠加态。
想象一下,每一个价格变动不仅仅是一个数字,而是一个量子比特,它可以处于“上涨”和“下跌”状态的叠加态中。这使我们不仅能分析发生了什么,还能分析所有可能发生的情况及其相应的概率。
# Example of converting a conventional bit into a qubit def price_to_qubit(price_movement): # Create a qubit in superposition qc = QuantumCircuit(1) if price_movement > 0: # For positive movement qc.h(0) # Hadamard transform else: # For negative movement qc.x(0) # Invert the state qc.h(0) # Create a superposition return qc金融数据背景下的量子相位估计 (QPE)
量子相位估计(QPE)是量子计算中的一个基本算法,它是许多量子算法(包括著名的Shor算法)的基础。在金融市场分析的背景下,QPE 尤为重要,因为它允许我们在量子层面上处理市场数据,其中价格变动信息被表示为一个量子系统的相位状态。该方法的本质是,我们可以将一个价格时间序列编码为一个酉算子,然后使用量子电路来估计其特征值,这些特征值携带着数据中隐藏的模式和周期性的信息。
在更深的数学层面上,QPE 处理的是酉算子 U 及其特征向量 |ψ⟩,对于它们,关系式 U|ψ⟩ = e^(2πiφ)|ψ⟩ 成立,其中 φ 是我们想要估计的未知相位。在金融市场的背景下,U 算子是基于历史价格变动数据构建的,其中 φ 相位包含了关于未来市场状态的信息。这样一个算子的每个特征值都可以被解释为市场形势发展的一个独立的“情景”,而相应特征向量的幅度则表明了该情景实现的概率。
QPE 过程涉及三个关键步骤。首先,我们初始化两个寄存器:一个包含 n 个处于叠加态的量子比特的相位寄存器(通过哈达玛门),以及一个包含 U 算子特征向量的目标寄存器。然后,我们应用一系列受控操作 U^(2^j),其中 j 的取值范围是从 0 到 n-1。最后,我们对相位寄存器应用逆量子傅里叶变换,这使我们能够提取出 φ 的估计值。作为这些操作的结果,我们获得一个量子态,对其进行测量可以为我们提供 φ 相位值的近似值,其精度取决于所使用的量子比特数量。
QPE 的数学魔力
量子相位估计不仅仅是一个算法,它是一台用于研究市场变动精细结构的量子显微镜。它基于量子系统能够同时处于多种状态的惊人能力。想象一下,您可以同时追踪所有可能的价格发展路径,并选择其中最可能的路径。
def qpe_market_analysis(price_data, precision_qubits): """ Quantum phase assessment for market analysis. price_data - historical price data precision_qubits - number of qubits for precision estimation """ # Create a quantum orchestra qr = QuantumRegister(precision_qubits + 1, 'price_register') cr = ClassicalRegister(precision_qubits, 'measurement') qc = QuantumCircuit(qr, cr, name='Market_QPE') # Prepare the quantum register - set up the instruments for q in range(precision_qubits): qc.h(q) # Create a quantum superposition qc.x(precision_qubits) # Set the target qubit # Quantum magic starts here # Each controlled phase change is like a new note in our market symphony for i, price in enumerate(price_data): # Normalize the price and transform it into a quantum phase normalized_price = price / max(price_data) phase_angle = 2 * np.pi * normalized_price # Apply controlled phase shift qc.cp(phase_angle, i, precision_qubits) return qc
量子编码:将价格转换为量子状态
我们方法中最令人兴奋的部分之一,就是将经典的价格数据转换为量子状态。这就像将一首乐谱翻译成量子力学:
def price_series_to_quantum_state(price_series): """ 21st-century alchemy: Transforming price data into quantum states """ # Stage one: Quantum hashing binary_sequence = sha256_to_binary(str(price_series).encode()) # Create a quantum circuit - our quantum canvas n_qubits = len(binary_sequence) qc = QuantumCircuit(n_qubits, name='Price_State') # Each bit of price becomes a quantum state for i, bit in enumerate(binary_sequence): if bit == '1': qc.x(i) # Quantum X-gate - like a musical note # Add quantum entanglement if i > 0: qc.cx(i-1, i) # Create quantum correlations return qc
离散对数:守护市场的量子侦探
在我们的武器库中还有另一个强大的工具:离散对数的量子算法。它就像一个量子侦探,能够在市场运动的混沌中找到隐藏的模式:
def quantum_dlog_market_analysis(a, N, num_qubits): """ Quantum detective for finding hidden market patterns a - logarithm base (usually related to market characteristics) N - module (defines the search space) num_qubits - number of qubits for calculations """ # Create a quantum circuit to search for periods qc = qpe_dlog(a, N, num_qubits) # Launch the quantum detective simulator = AerSimulator() job = simulator.run(qc, shots=3000) # 3000 quantum experiments result = job.result() # Analyze the patterns found counts = result.get_counts() patterns = analyze_dlog_results(counts) return patterns
数据预处理:为量子分析做准备
量子分析的质量直接取决于输入数据的质量。我们获取数据的方法类似于校准一台精密的科学仪器:
def get_market_data(symbol="EURUSD", timeframe=mt5.TIMEFRAME_D1, n_candles=256): """ Quantum-compatible market data acquisition 256 candles is not just a number. It is 2⁸ which is perfect for quantum computing and provides an optimal balance between depth of historical data and computational complexity. """ # Initialize the trading terminal if not mt5.initialize(): raise RuntimeError("Quantum paradox: MT5 not initialized") # Obtain data with quantum precision rates = mt5.copy_rates_from_pos(symbol, timeframe, 0, n_candles) if rates is None: raise ValueError("Wave function collapse: No data received") # Convert to pandas DataFrame for easier handling df = pd.DataFrame(rates) # Additional preprocessing for quantum analysis df['quantum_ready'] = normalize_for_quantum(df['close']) return df
为什么是 256 根 K 线?
选择 256 根 K 线进行分析并非随机,而是对量子计算深入理解的结果。数字 256 (2⁸) 在量子世界中具有特殊的意义:
- 最优维度:256 个状态可以用 8 个量子比特表示,这在信息量和量子电路的复杂性之间提供了良好的平衡。
- 计算效率:当处理 2 的幂时,量子算法的工作效率最高。
- 足够的分析深度:256 根 K 线提供了足够的数据来识别短期和中期模式。
- 量子相干性:更多的数据可能导致量子相干性丢失,并在不显著改善结果的情况下增加计算的复杂性。
量子分析为理解市场动态开辟了新的视野。这不是对经典技术分析的替代,而是其进化发展,让我们能够以全新的视角看待市场。在接下来的章节中,我们将探讨这些理论概念的实际应用,并了解量子算法如何帮助做出更准确的交易决策。
量子市场状态分析
既然我们已经涵盖了理论框架和数据准备,现在是时候深入研究我们研究中最引人入胜的部分——量子市场分析的实际实现了。在这里,理论与实践相遇,抽象的量子状态被转化为真实的交易信号。
概率状态矩阵
我们分析的第一步是创建和解释市场概率状态矩阵:
def analyze_market_quantum_state(price_binary, num_qubits=22): """ A deep analysis of the quantum state of the market price_binary - binary representation of price movements num_qubits - number of qubits to analyze """ # Constants for market analysis a = 700000000 # Basic parameter for quantum transformation N = 170000000 # Module for discrete logarithm try: # Create a quantum circuit for analysis qc = qpe_dlog(a, N, num_qubits) # Run on a quantum simulator with increased accuracy simulator = AerSimulator(method='statevector') compiled_circuit = transpile(qc, simulator, optimization_level=3) job = simulator.run(compiled_circuit, shots=3000) result = job.result() # Get the probability distribution of states counts = result.get_counts() # Find the most probable state best_match = max(counts, key=counts.get) dlog_value = int(best_match, 2) return dlog_value, counts except Exception as e: print(f"Quantum anomaly in analysis: {str(e)}") return None, None
量子测量的解释
量子分析中最具挑战性的方面之一是对测量结果的解释。我们开发了一个特殊的系统,用于将量子状态解码为市场信号:
def decode_quantum_measurements(quantum_results, confidence_threshold=0.6): """ Transforming quantum measurements into trading signals quantum_results - results of quantum measurements confidence_threshold - confidence threshold for signal generation """ try: total_measurements = sum(quantum_results.values()) market_phases = {} # Analyze each quantum state for state, count in quantum_results.items(): probability = count / total_measurements if probability >= confidence_threshold: # Decode the quantum state phase_value = decode_quantum_phase(state) market_phases[state] = { 'probability': probability, 'phase': phase_value, 'market_direction': interpret_phase(phase_value) } return market_phases except Exception as e: print(f"Decoding error: {str(e)}") return None
预测准确率评估
为了评估我们量子分析的效率,我们开发了一个预测验证系统:
def verify_quantum_predictions(predictions, actual_data): """ Quantum prediction verification system predictions - predicted quantum states actual_data - actual market movements """ verification_results = { 'total_predictions': 0, 'correct_predictions': 0, 'accuracy': 0.0, 'confidence_correlation': [] } for pred, actual in zip(predictions, actual_data): verification_results['total_predictions'] += 1 if pred['direction'] == actual['direction']: verification_results['correct_predictions'] += 1 # Analyze the correlation between prediction confidence and accuracy verification_results['confidence_correlation'].append({ 'confidence': pred['confidence'], 'correct': pred['direction'] == actual['direction'] }) verification_results['accuracy'] = ( verification_results['correct_predictions'] / verification_results['total_predictions'] ) return verification_results
量子电路参数优化
在研究过程中,我们发现预测的准确率在很大程度上取决于量子电路的参数。以下是我们的优化方法:
def optimize_quantum_parameters(historical_data, test_period=30): """ Optimization of quantum circuit parameters historical_data - historical data for training test_period - period for testing parameters """ optimization_results = {} # Test different parameter configurations for num_qubits in range(18, 24, 2): for shots in [1000, 2000, 3000, 4000]: results = test_quantum_configuration( historical_data, num_qubits=num_qubits, shots=shots, test_period=test_period ) optimization_results[f"qubits_{num_qubits}_shots_{shots}"] = results return find_optimal_configuration(optimization_results)
实际应用与结果
在开发理论基础并实现代码后,我们开始在真实市场数据上测试该系统。analyze_from_point 函数尤其引人关注,它允许我们使用量子计算来分析市场数据。
EURUSD 走势分析
作为第一个例子,让我们看一下在日线时间框架上对 EURUSD 货币对走势的分析。我们选取了 256 根 K 线的样本,并进行了量子分析来预测未来 10 天的价格走势。
结果相当有趣。系统检测到了一个经典指标未能发现的反转形态的形成。近期价格变动的二进制序列显示出一种不寻常的分布,表明趋势反转概率高的状态占据了主导地位。
转折点的量子分析
对历史趋势反转点的分析被证明特别具有启发性。我们的系统已展示了提前识别潜在反转区域的能力,准确率约为 65%。这是通过一种分析量子市场状态的独特方法实现的。
qpe_dlog 函数在此过程中扮演着关键角色。它创建了一个能够发现价格变动中隐藏模式的量子电路。使用 22 个量子比特使系统能够处理相当复杂的市场模式。
事件视界及其意义
在 calculate_future_horizon 函数中实现的事件视界概念,使我们能够评估潜在的市场发展情景。在实践中,我们发现系统在预测 5-15 天范围内的走势时最为有效。
一个例子是,系统在长时间的盘整后预测了一次重大的价格变动。量子状态分析显示,突破阻力位的概率很高,而这在几天后确实发生了。
测试结果
在历史数据上测试系统显示了有趣的结果。analyze_market_state 函数使用了常数 a = 70000000 和 N = 17000000,这些常数是根据经验选择的,以便与金融时间序列协同工作。
在分析各种货币对时,系统显示了以下结果:
- 在日线时间框架上预测最准确
- 在形成新趋势时效率提高
- 能够识别潜在的转折点
- 在处理高流动性工具时准确率高
与 MetaTrader 5 的集成使我们能够自动化获取和分析数据的过程。get_price_data 函数提供可靠的历史数据检索,随后通过 prices_to_binary 将其转换为二进制序列,为量子分析奠定了基础。
进一步发展
在开发系统的过程中,我们确定了几个可以改进的领域:
- 针对不同市场条件优化量子电路参数
- 开发用于确定事件视界长度的自适应算法
- 与其他技术分析方法集成
系统下一版本计划添加根据当前市场状态自动校准参数的功能,并实现更灵活的预测机制。
量子系统测试结果分析
初始数据与结果

在测试期间,我们分析了 EURUSD 图表上的一个点,预测视界为 12 根 K 线。特别有趣的是到事件视界点为止的价格二进制序列:
1000000010000000100010111101101000001100001010101010000011001100
这个序列代表了价格变动的编码历史,其中每一位对应价格变动的方向(1 - 上涨,0 - 下跌)。
概率矩阵分析
量子分析揭示了状态概率分布中的一个有趣特征。最可能的状态(00000000000000000000000)获得了 5.13% 的概率,这显著高于其他状态。这表明近期存在强烈的下跌趋势。
其他可能状态的分布值得注意:
- 第二位:0000100000000000000000 (0.93%)
- 第三位:0000000000000001000000 (0.90%)
这种分布表明盘整后跟随下跌走势的概率很高。
将预测与现实进行比较
实际价格变动:110001100000,系统预测:000000000000,匹配准确率:66.67%
尽管二进制序列没有完全匹配,但系统正确地确定了主导的运动方向。实际上,在 12 次变动中我们看到了 4 次正向变动,这证实了系统预测的总体下跌趋势。
概率分布分析
对事件视界各个位上的概率分布的分析特别有趣。我们看到,对于大多数位置,零值的概率(约 12.43%)明显优于单一值的概率(小于 1%)。
例外情况是:
- 第 3 位:0.70% 的上涨概率
- 第 5 位:0.93% 的上涨概率
- 第 10 位:0.80% 的上涨概率
- 第 12 位:0.83% 的上涨概率
这种分布精确地反映了总体下跌趋势中的短期修正时期。
这就是使用该系统进行交易的样子,结合一个半自动化系统,该系统会自动拾取手动开立的仓位,并通过移动止损和盈亏平衡进行金字塔加仓:

实践结论
测试揭示了该系统的几个重要特点:
- 该系统在确定趋势总体方向方面特别有效。尽管在特定点上存在不准确性,但运动的总体方向被正确预测。
- 量子状态的概率分布提供了关于趋势强度的额外信息。概率在一个状态中的高度集中(在本例中为 5.13%)表明趋势强劲。
- 对事件视界各个位的分析使我们不仅能预测方向,还能预测潜在的修正点。
预测准确率
在这个特定案例中,系统展示了:
- 趋势方向准确率:100%
- 单个变动准确率:66.67%
- 正确地定义了上涨/下跌比率
这些结果证实了量子方法在市场数据分析中的效率,特别是在识别中期价格变动趋势方面。
实际用途
第二个代码是一个量子分析器。输入货币代码、事件视界和预测视界。

然后程序会“思考”一会儿,计算组合和概率(但在这个框架上,它仍然比使用循环的常规计算快数千倍)。之后我们得到的不仅是一个预测,还有一个概率分布:

这是我们预测视界的可视化:

然而,有时准确率会下降到我们甚至无法超过 50% 胜率阈值的程度。但更多时候,不仅位的数量比率被正确预测,有时甚至它们的位置也被正确预测(这对应于对未来价格上涨的预测)。

结论
“不可能预测市场,”技术分析的先驱们曾这样说。嗯,看起来量子力学准备好挑战这一说法了。在金融分析领域进行了数月的量子计算实验后,我们可以自信地说,未来已经到来,并且它是量子的。我们自豪地站在这场革命的起源。
我们结合了 Qiskit 和 MetaTrader 5,实现了 100% 的趋势检测准确率和 66.67% 的总体预测准确率。使用 22 个量子比特和 256 根 K 线的数据,我们的系统同时分析所有可能的市场状态,选择最可能的那一个。
关键的发现是量子状态与趋势强度之间的联系。在一个状态中的概率集中度达到 5.13%,这可以与引力波的探测相媲美——由理论预测,但却是首次被测量到。
我们的系统不是一个现成的策略,而是一个量子交易平台。MQL5 中提供的代码允许开发者创建自己的算法。
下一步:
- 与 IBM 的量子云服务集成
- 开发自适应量子电路
- 一个用于快速策略原型设计的框架
量子计算正沿着与交易中的机器学习相同的道路发展:从实验到行业标准。代码对社区开放——加入我们,共同塑造算法交易的未来。
本文由MetaQuotes Ltd译自俄文
原文地址: https://www.mql5.com/ru/articles/17171
注意: MetaQuotes Ltd.将保留所有关于这些材料的权利。全部或部分复制或者转载这些材料将被禁止。
本文由网站的一位用户撰写,反映了他们的个人观点。MetaQuotes Ltd 不对所提供信息的准确性负责,也不对因使用所述解决方案、策略或建议而产生的任何后果负责。
百年数学函数如何革新您的交易策略?
用于预测金融时间序列的生物神经元
您应当知道的 MQL5 向导技术(第 54 部分):搭配混合 SAC 和张量的强化学习
这是一篇有趣的文章,但我想对它提出批评。
您的算法编码方式存在缺陷,在多个层面上都是错误的
1)无论使用什么符号或时间框架,预测总是 "0 "看跌
2)关于 SHA256,你应该看看我的同事是怎么说的。
3)您的代码中有一个错误
而不是
rates = mt5.copy_rates_from_pos(symbol, timeframe,n_candles, offset )
put => rates = mt5.copy_rates_from_pos(symbol, timeframe, offset, n_candles)
如果你认为我只是个初学者、
看看这个网页 =>https://www.mql5.com/zh/docs/python_metatrader5/mt5copyratesfrompos_py
因此,请更正所提供的代码
Rgds