斐波那契(Fibonacci)数列在外汇交易中的应用(第一部分):探究价格与时间的关系·综合运用
(3/3)·从10万次波动的统计验证到落地下单,前两步铺垫的数列关系终于能直接用在盘面
◍ 把比率识别变成可下单的预测
光在图表上认出斐波那契比率还不够,真正值钱的是把它转成带置信度的下一步预判。我们做了一套算法,不只数某个比率出现的频次,还把精确度、耗时和当时市场状态一起喂进去,每次出信号都附带一个历史回测得到的置信水平。 回测里有个硬数据:系统标出「比率成形概率偏高」的情境,约 72% 后续价格波动真的摸到了预测位。更有意思的是,当价格维度和时间维度同时撞上 0.618 这种关键比率,准头会跳到 85%——比如观测到价格在 2 小时内走了 0.00273 点后,双维共振下的命中率就到了这个数。外汇和贵金属是高杠杆品种,这种统计优势不等于稳赢,实盘仍可能因流动性断裂而失效。 跨品种校验也做了:欧美小时图之外,其他热门货币对同样跑出类似关系,只是准确度随波动率和主趋势强弱浮动。底下这段是预测函数的核心骨架,注意它用 confidence_threshold 卡掉低精度模式,再按比率分组算目标位。
<span class="keyword">def</span> predict_next_movement(movements, patterns, time_patterns, confidence_threshold=<span class="number">class="num">0.95</span>): predictions = [] last_movement = movements[-<span class="number">class="num">1</span>] last_price = last_movement[<span class="class="type">class="kw">string">&class="macro">#x27;end_price&class="macro">#x27;</span>] last_movement_size = last_movement[<span class="class="type">class="kw">string">&class="macro">#x27;movement&class="macro">#x27;</span>] <span class="comment"># High-precision pattern analysis</span> high_accuracy_patterns = [p <span class="keyword">for</span> p <span class="keyword">in</span> patterns <span class="keyword">if</span> p[<span class="class="type">class="kw">string">&class="macro">#x27;type&class="macro">#x27;</span>] == <span class="class="type">class="kw">string">&class="macro">#x27;price_ratio&class="macro">#x27;</span> <span class="keyword">and</span> (<span class="number">class="num">1</span> - p[<span class="class="type">class="kw">string">&class="macro">#x27;accuracy&class="macro">#x27;</span>]) >= confidence_threshold] <span class="comment"># Group patterns by ratios</span> ratio_groups = {} <span class="keyword">for</span> pattern <span class="keyword">in</span> high_accuracy_patterns: ratio = pattern[<span class="class="type">class="kw">string">&class="macro">#x27;ratio_name&class="macro">#x27;</span>] <span class="keyword">if</span> ratio <span class="keyword">not</span> <span class="keyword">in</span> ratio_groups: ratio_groups[ratio] = [] ratio_groups[ratio].append(pattern) <span class="keyword">for</span> ratio_name, ratio_value <span class="keyword">in</span> fib_ratios.items(): patterns_with_ratio = ratio_groups.get(ratio_name, []) <span class="keyword">if</span> <span class="keyword">not</span> patterns_with_ratio: <span class="keyword">class="kw">continue</span> <span class="comment"># Analyze movement direction</span> up_count = <span class="built_in">sum</span>(<span class="number">class="num">1</span> <span class="keyword">for</span> p <span class="keyword">in</span> patterns_with_ratio <span class="keyword">if</span> p[<span class="class="type">class="kw">string">&class="macro">#x27;movement2&class="macro">#x27;</span>] > p[<span class="class="type">class="kw">string">&class="macro">#x27;movement1&class="macro">#x27;</span>]) down_count = <span class="built_in">len</span>(patterns_with_ratio) - up_count <span class="comment"># Calculate probable target levels</span> target_levels = [] <span class="keyword">for</span> pattern <span class="keyword">in</span> patterns_with_ratio: <span class="keyword">if</span> pattern[<span class="class="type">class="kw">string">&class="macro">#x27;movement1&class="macro">#x27;</span>] > <span class="number">class="num">0</span>: level = last_movement_size * pattern[<span class="class="type">class="kw">string">&class="macro">#x27;movement2&class="macro">#x27;</span>] / pattern[<span class="class="type">class="kw">string">&class="macro">#x27;movement1&class="macro">#x27;</span>] target_levels.append(level) <span class="comment"># Adjust forecasts based on time patterns</span> time_patterns_high_accuracy = [p <span class="keyword">for</span> p <span class="keyword">in</span> time_patterns <span class="keyword">if</span> (<span class="number">class="num">1</span> - p[<span class="class="type">class="kw">string">&class="macro">#x27;accuracy&class="macro">#x27;</span>]) >= confidence_threshold] <span class="keyword">for</span> pred <span class="keyword">in</span> predictions: matching_time_patterns = [p <span class="keyword">for</span> p <span class="keyword">in</span> time_patterns_high_accuracy <span class="keyword">if</span> p[<span class="class="type">class="kw">string">&class="macro">#x27;ratio_name&class="macro">#x27;</span>] == pred[<span class="class="type">class="kw">string">&class="macro">#x27;ratio&class="macro">#x27;</span>]] <span class="keyword">if</span> matching_time_patterns:
用历史时段吻合度给预测加权
在价格行为模型里,同一形态在不同交易时段的表现差异很大。把当前候选形态与历史同时段出现的相似模式做匹配后,可以取这些历史模式准确率的均值,用来动态修正当下预测的置信度。 上面这段逻辑先算 matching_time_patterns 里每条历史模式准确率偏差(1 - accuracy)的均值 avg_time_accuracy,再用 (1 + avg_time_accuracy)/2 作为乘数放大或削弱 pred['confidence']。若历史吻合度普遍高,置信度会向 1 靠拢;偏差大则被压低。 同时用 np.mean 取这些历史模式的 duration2 均值,写回 pred['expected_duration'],给持仓时间一个基于同时段统计的参考值。外汇与贵金属波动受时段流动性影响明显,这类加权在高风险品种上仅作概率参考,开 MT5 把这段接进你的模式匹配函数即可验证。
avg_time_accuracy = np.mean([class="num">1 - p[&class="macro">#x27;accuracy&class="macro">#x27;] for p in matching_time_patterns]) pred[&class="macro">#x27;confidence&class="macro">#x27;] *= (class="num">1 + avg_time_accuracy) / class="num">2 pred[&class="macro">#x27;expected_duration&class="macro">#x27;] = np.mean([p[&class="macro">#x27;duration2&class="macro">#x27;] for p in matching_time_patterns])
「把这条线请下神坛」
斐波那契叠加机器学习跑出的“时间共振”,本质是在价格空间与时间的双重轴上同时撞上黄金比率的同步摆动。作者在回测框架里给出的信号识别函数,在特定品种与时段组合下预测精度明显抬升,但这仍只是概率优势,不是市场律令。 外汇与贵金属杠杆高、跳空频繁,把这类算法直接当进场圣旨极易被噪声反噬。更务实的做法是:用 MT5 接 Python 把附带的 FiboPattern_4 逻辑复刻成指标,只观察共振窗口是否重复出现,再决定仓位。 数学和谐听起来像宇宙之舞,落到盘面上不过是一串可验证的 0.618 与 1.618 重合点。把它当显微镜,而非水晶球,才不会在下次背离时怀疑人生。