ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

交易设置与量化交易:用Python打造可复用、可复盘的交易规则

交易设置与量化交易:用Python打造可复用、可复盘的交易规则 在真实交易场景里很多人的操作是这样发生的看到一个指标金叉买入第二天价格没有继续涨就觉得指标失灵看到一根大阳线突破前高赶紧追进去结果买在了阶段高点亏损单不舍得砍盈利单稍微回撤就拿不住了。如果你问他“你的交易设置是什么”大多数人答不上来。每一次操作背后的理由都不一样今天因为消息面明天因为均线后天因为单纯觉得“跌了那么多应该反弹”。这套做法最危险的地方不是某一次亏了多少钱而是它让你永远无法复盘永远无法迭代。这里要引入一个容易被忽视的概念交易设置。交易设置不仅仅是买卖信号它是一整套描述“什么条件下可以交易、为什么可以交易、错了在哪里退出、对了在哪里实现”的规则组合。它解决的核心问题不是把某一次预测的准确率从 60% 提到 80%而是让每一次交易动作可重复、可检验、可优化。对技术背景的读者来说交易设置其实可以被理解为一组 if-then 规则市场环境满足什么条件K线结构走到什么位置关键支撑阻力在哪个价格风险回报是否合理只有这些条件同时成立才触发一次交易动作。这篇文章会从交易设置的概念和组成讲起接着说明如何区分高概率设置与噪声信号然后把入场、止损、止盈、仓位这些关键参数量化最后用 Python 给出可以直接复用的计算工具。读完你至少能做到三件事看懂一套交易设置里每个字段的含义自己定义一套可以严格执行的交易设置并且通过交易日志和统计复盘不断优化它。1. 为什么很多交易者看了大量分析仍然做不好交易先看一个很典型的场景。一个交易者关注某个市场看到分析师说“趋势已经反转可以布局中线多单”于是开仓买入。买入之后价格横盘他开始焦虑价格小幅下跌他继续加仓理由变成“越跌越买摊平成本”价格继续下跌最终扛不住在最低点附近割肉。不久后价格反弹他又开始后悔。整个过程里交易者唯一的依据是别人的观点而不是自己的规则。这个问题在盘面上表现为“没有章法”但本质是缺少完整的决策框架。分析师给出的结论通常是一个方向性判断比如“看多”或“看空”但真正执行一笔交易需要的是更细的信息在哪个价格区间入场如果判断错了在哪里离场如果方向对了目标看哪里仓位下多重。这四个问题如果有一个没有答案交易就是拍脑袋。这也是为什么交易设置比单纯的“方向判断”重要。一个完善的交易设置至少要回答五个问题当前市场环境适合交易吗趋势方向是否明确波动率是否正常。价格处于什么结构位置是处在突破位、回调位还是已经偏离关键位太远。什么信号触发入场触发信号必须是明确、可描述的不能是“感觉差不多了”。如果判断错了什么时候离场止损位放在哪里依据是什么。如果方向对了目标在哪里亏损和潜在盈利的比例是否足够划算。把这些问题写在开仓之前交易就从“押注方向”变成“管理一笔有边界的风险”。哪怕方向判断错了止损离场的亏损是固定的不会出现一次大亏把前面的盈利全部吞掉的情况。2. 一套完整交易设置的五个核心模块市面上关于交易的内容很多但很少有人把“交易设置”当成一个完整的结构来讲。实际上任何一套可以重复执行的交易设置都应该包含五个模块市场前提、结构条件、触发信号、失效逻辑、仓位与盈亏结构。2.1 市场前提过滤不适合交易的环境市场前提决定的是“今天这个市场能不能做”。它不是预测工具而是过滤工具。例如趋势跟踪类的交易设置会要求市场处于明确的上升或下降趋势中震荡策略则会要求市场处于区间整理状态。如果环境不匹配即使出现看似不错的入场信号也很容易失效。判断市场前提通常可以看大周期的价格结构。比如日线级别的高点抬高、低点抬高说明偏向多头结构高点和低点都在降低说明偏向空头结构价格在一个固定区间内来回摆动则属于震荡结构。很多初学者跳过了这一步直接在任意行情里使用同一套规则结果有时赚有时亏却始终找不到原因。实际上问题往往不出在信号上而出在环境过滤上。2.2 结构条件找到值得承担风险的位置结构条件描述的是“价格处于图上的什么位置”。同样的看涨K线组合出现在支撑位附近和出现在大涨之后的末端含义完全不同。前者可能是回调结束的信号后者可能是诱多。在交易设置中结构条件应当尽量具体。比如“价格回调到前期成交密集区上沿”“日线级别回踩上升趋势线”“价格突破最近 N 日高点”。这些条件可以用价格、K线根数、区间边界来定义而不是用“位置不高不低”这类模糊表达。结构条件的价值在于它给了交易一个非对称的入场区域如果判断正确价格有足够空间走向目标如果判断错误止损位离入场点很近风险可控。2.3 触发信号等待最后一下确认触发信号是交易设置的“扳机”。它的作用是确认结构条件已经生效而不是预测方向。常见触发信号包括突破K线、反包形态、放量阳线等。关键不在于信号本身有多神奇而在于它是否与市场前提、结构条件相互印证。比如一个多头交易设置可以是日线级别处于上升趋势价格回调到前期支撑区出现一根阳线收盘价突破前一根阴线的最高点此时触发做多。这三个条件层层递进缺一不可。如果缺少触发信号就提前入场容易买在回调半山腰如果只看触发信号而不管前两个条件又会陷入频繁交易和高失败率的陷阱。2.4 失效逻辑让止损不再是“割肉”很多交易者把止损看作一种痛苦的选择但实际上止损是交易设置的一部分。入场之前你就应该知道自己什么情况下是错的。如果价格跌破某个关键结构位说明你判断的支撑不成立这笔交易无论后续怎么走都超出了你的计划范围。好的止损位应该放在结构被破坏的位置而不是随意设一个固定点数。固定点数止损的问题在于它没有考虑不同品种的波动特性。一个波动较大的品种止损设得太近很容易被正常波动扫掉设得太远单笔亏损又会超出风险预算。比较合理的做法是先找到结构失效的价格点再在这个价格基础上留出一定的缓冲空间最后检查这个止损距离对应的亏损金额是否能接受。2.5 仓位与盈亏结构先把风险算清楚再入场仓位管理决定了这笔交易对账户的影响。同样是 10% 的止损用 10% 仓位和 50% 仓位对账户的冲击完全不同。更科学的思路是反推先确定单笔最多亏损账户的多少比例比如 1% 或 2%再用这个风险金额除以止损距离得到可以交易的数量。盈亏结构则决定了这笔交易的潜在收益是否值得承担风险。一个入场就设 10% 止损、只预期 5% 盈利的交易长期来看很难赚钱因为即使成功率是 70%平均下来也没有优势。通常要求潜在盈利至少是潜在亏损的 1.5 到 2 倍也就是常说的盈亏比。只有盈亏比合理交易统计中的胜率才有意义。3. 高概率设置与无效信号的区分方法学习交易设置时一个最常见的误区是“把形态当圣杯”。比如有人总结了某种 K线组合认为只要出现就会涨。但实际行情中同样的形态有时成功有时失败。区别不在于形态本身而在于它所处的环境和位置。一个高概率的交易设置通常同时具备三个特征第一大周期的市场环境与交易方向一致第二入场点处于关键结构位附近具备清晰的止损边界第三触发信号出现时距离止损位的空间较小距离目标位的空间较大。三者共振才是值得出手的时机。反过来无效信号往往也有共同点。比如在震荡行情中追突破很容易买在区间上沿在价格已经大幅偏离均线之后追单回调风险很高在多个信号方向不一致时强行交易说明市场本身没有给出明确答案。更隐蔽的一种无效信号是“事后看图完美盘中无法执行”。很多人在复盘时能画出漂亮的入场点但在实盘中这些点出现得并不突然当时会有大量噪声干扰判断。所以交易设置里必须写清楚“用什么价格触发”而不是“在哪里画一条线很好看”。为了避免把噪声当信号可以考虑使用检查清单。开盘前先看市场前提今日市场是趋势还是震荡再看结构位置当前价格距离最近的支撑阻力有多远最后等触发信号是否出现符合定义的K线形态。三项都满足再执行缺任何一项就放弃。放弃不是错失机会而是保护账户。4. 量化交易设置的关键参数交易设置不能只停留在“看懂了”的层面它必须能落到具体数字上。下面用一组常见的参数定义来说明。止损距离英文里常用 Stop Distance指入场价与止损价之间的价格差。风险回报比也叫盈亏比指潜在盈利距离与潜在亏损距离的比值。如果入场价是 100止损价是 98目标价是 105那么止损距离是 2盈利距离是 5盈亏比是 2.5。单笔风险金额则等于账户总资金乘以风险比例通常建议控制在 1% 到 2% 之间。计算仓位时不能简单地“买多少钱”就算多少。更合理的做法是import math def calc_position_size(account_balance, entry_price, stop_price, risk_percent): 计算单笔交易的最大数量。 :param account_balance: 账户总资金 :param entry_price: 计划入场价 :param stop_price: 止损价 :param risk_percent: 单笔风险比例例如 0.02 表示 2% :return: 可交易数量、单笔风险金额、每股风险 risk_amount account_balance * risk_percent risk_per_share abs(entry_price - stop_price) if risk_per_share 0: raise ValueError(止损价不能等于入场价) position_size risk_amount / risk_per_share position_size math.floor(position_size) return position_size, round(risk_amount, 2), round(risk_per_share, 4)假设账户资金 10 万元入场价 50止损价 48.5单笔风险比例 2%计算结果是position_size, risk_amount, risk_per_share calc_position_size( account_balance100000, entry_price50, stop_price48.5, risk_percent0.02 ) print(最大可交易数量:, position_size) print(单笔风险金额:, risk_amount) print(每股风险:, risk_per_share)输出结果中风险金额是 2000 元每股风险是 1.5 元用 2000 除以 1.5 得到 1333 股向下取整后为 1333 股。如果交易品种要求整手买入还需要再按一手数量向下取整。接下来计算止盈目标。假设我们希望盈亏比达到 2则目标价的计算方式如下def calc_target_price(entry_price, stop_price, reward_risk_ratio): 根据入场价、止损价和期望盈亏比计算目标价。 risk_per_share abs(entry_price - stop_price) target_price entry_price risk_per_share * reward_risk_ratio return round(target_price, 4)用同样的参数入场价 50止损价 48.5期望盈亏比 2那么目标价为50 1.5 * 2 53。这里的逻辑是一笔交易事先定义了最大亏损 1.5 元因此盈利目标至少要有 3 元才能保证盈亏比不低于 2。实际交易中目标价也可以参考前方阻力位但前提是最终结果至少满足最低盈亏比要求。计算出来的参数不建议只放在脑子里最好把每一次交易设置写成配置文件。下面是一个简化的配置模板用字典表示方便在量化代码或手动交易记录中复用trade_setup { setup_id: example_breakout_001, market: bullish_trend, structure: pullback_to_support, trigger: close_above_previous_high, entry_price: 50.00, stop_price: 48.50, target_price: 53.00, risk_percent: 0.02, position_size: 1333 }这段配置里的setup_id对应一次独立的交易计划便于复盘时追溯。market、structure、trigger分别对应前面提到的市场前提、结构条件和触发信号。entry_price、stop_price、target_price给出了价格边界risk_percent和position_size明确仓位的风险上限。把这些字段落实到纸上或代码里比盘中临时决策可靠得多。5. 用代码验证一套简单的入场逻辑理解了参数计算之后可以更进一步把交易设置中的触发信号写成可验证的规则。这里给出一个简化的示例用来展示如何理解“反包形态”这种信号。假设我们在日线级别跟踪同一只指数基金的价格。一根 K 线有开盘价、最高价、最低价、收盘价。所谓看涨反包在简化定义里可以这样理解前一根 K 线是阴线后一根 K 线是阳线且后一根阳线的收盘价明显突破前一根 K 线的最高价。这种形态说明空头力量曾经占据上风但随后被多头完全收复价格行为出现了方向变化。def is_bullish_engulfing(prev, curr): 简化版看涨反包判断。 :param prev: 前一根K线包含 open, high, low, close :param curr: 当前K线包含 open, high, low, close prev_is_bearish prev[close] prev[open] curr_is_bullish curr[close] curr[open] curr_breaks_prev_high curr[close] prev[high] return prev_is_bearish and curr_is_bullish and curr_breaks_prev_high上面只是对单个形态的判断。真实交易设置里还需要把市场环境和结构条件组合起来。用伪代码可以表达这样一组规则def check_multi_condition_setup(df, index): 示例多头趋势 回踩支撑 看涨反包 trend_up df[close].iloc[index] df[ma20].iloc[index] above_support df[low].iloc[index] support_price signal is_bullish_engulfing(df.iloc[index - 1], df.iloc[index]) if trend_up and above_support and signal: return True return False这个示例中的ma20和support_price都需要预先定义好。这里的重点不是构造一个能稳定盈利的策略而是展示一种思维方式任何一条听起来很玄的交易经验都可以拆成可计算的条件。当你能把“回调到位了”写成“最低价没有跌破某个支撑区间”把“放量突破”写成“成交量大于过去 20 日均量且收盘价突破前 N 日最高价”你才真正具备验证一套交易设置的能力。6. 运行验证与交易复盘方法写代码只是开始更重要的是验证结果。如果你正在用量化方式测试一套交易设置至少要跑三个环节。第一是回测验证。取一段历史行情数据按你定义的规则生成每一笔交易信号统计胜率、平均盈利、平均亏损、最大回撤。回测结果不能只看总收益还要看交易次数是否足够、最大回撤是否在承受范围内。如果一段行情里总共只触发了两三次交易统计结果几乎没有参考意义。第二是模拟盘验证。历史回测容易出现过拟合模拟盘可以检验规则在当前市场的真实表现。模拟盘阶段不需要投入真实资金但交易记录、止损执行、滑点影响都要按真实环境记录。第三是人工复盘记录。即使是手动交易也应该像回测一样记录每次交易的设置参数。建议记录以下几个字段交易日期、方向、市场环境、入场理由、入场价、止损价、目标价、最大浮盈、实际离场价、离场原因。每周固定复盘一次对照表格检查我有没有在不符合设置的情况下交易我有没有因为害怕回撤而过早止盈我有没有因为扛单而扩大实际亏损下面给出一个简单的表格结构字段说明setup_id交易设置编号可关联到当时的截图或代码市场环境当时大周期是趋势还是震荡方向是什么入场原因是突破、回调还是其他结构信号止损规则入场前设定盘中不可修改离场原因止损触发、目标到达、结构破坏或时间止损盈亏结果用 R 倍数表示例如亏损 1R、盈利 2RR 倍数是一个很有用的统计单位。它把盈亏换算成初始风险的倍数。如果单笔初始风险为 1000 元一笔交易最终亏损 1000 元记作 -1R盈利 2000 元记作 2R。使用 R 倍数可以抵消不同仓位大小带来的干扰方便统计一套交易设置的期望值。期望值的计算公式是平均盈利 R 乘以盈利交易占比加上平均亏损 R 乘以亏损交易占比。只要期望值为正哪怕胜率不到 50%这套设置也可能长期有效。7. 常见问题与排查方法在实践交易设置的过程中几乎每个人都会遇到下面这些问题。下面按“现象、原因、排查方式、解决方案”的格式整理成表方便对照。问题现象可能原因排查方式解决方案同样的形态有时赚有时亏只看了触发信号忽略了市场环境和结构位置复盘时标记每笔交易的入场位置把市场过滤条件写进交易设置止损经常刚被打掉价格就反转止损位离噪声太近或止损依据不是结构位统计止损后几根K线的价格走势用结构位加减缓冲而不是固定小额止损交易胜率很高账户却持续缩水亏损单平均亏损远大于盈利单平均盈利统计平均盈利 R 与平均亏损 R把最低盈亏比调高到 1.5 以上复盘时能看懂盘中总走样交易设置没有文字化执行时靠感觉开仓前是否填写了计划是否有截图使用检查清单和交易计划单模拟盘能盈利实盘就亏损没计入手续费、点差、滑点等交易成本对比理论成交价与实际成交价回测和盈亏比预估时提前扣除成本频繁修改止损位入场时没有设定失效条件检查原计划中是否写了 stop_price触发止损后按纪律离场不做临时决策这些问题的共同根源是规则没有被严格定义。交易里的“大概”“差不多”“感觉”都会成为执行不一致的温床。亏损不可怕不知道自己为什么亏才可怕。用交易设置把每一次交易变成有记录的数据点之后你会更容易看到问题的真正所在。8. 交易设置的最佳实践与工程化建议从工程角度看交易设置本质上是一套决策系统的配置。既然它是配置就应该可以被版本化、被测试、被复盘。下面几条经验来自大量交易系统的搭建过程也适用于个人交易者。第一条把交易设置写成一个字段完整的模板。不要只在文章或脑图里描述“顺势而为”这类原则要具体到市场前提用什么指标或结构判断结构位置用哪个价格区间信号触发用什么条件。字段越具体执行越不容易跑偏。第二条对交易设置做版本管理。当你想修改某个参数时不要默默换一个新规则而是保留旧版本。很多交易者的失败不是因为方法不对而是因为不断更换方法导致统计样本永远不够。比较好的做法是一版规则至少先观察 20 到 30 笔交易再根据统计结果决定是保留、微调还是废除。第三条单笔风险比例要遵守“先算亏损再算盈利”的顺序。新手喜欢先看“这笔单子能赚多少钱”很少计算“如果错了会亏多少钱”。成熟的交易流程应该是先找到止损位算出止损距离再根据账户风险预算倒推仓位最后判断潜在盈利是否覆盖风险。如果盈利空间不够就不做这一笔。第四条时刻注意交易成本对盈亏比的影响。不同品种的手续费、点差、隔夜费用差别很大。一笔只看毛利有 1.5 盈亏比的交易把成本扣除后可能连 1.2 都不到。对于日内频繁交易者交易成本的影响比很多人想象的严重得多。第五条远离任何承诺“高收益、包赚钱、带你操作”的渠道。正规交易者使用的是自己的判断和规则而不是把账户交给别人。如果你接触的交易方式要求你快速转入资金到不明平台请立即停下不要在非正规渠道上投入任何资金。交易学习的第一前提是保护本金而不是追求一夜暴富。第六条复盘时把“遵守纪律”和“交易结果”分开评估。一笔严格执行设置的亏损单是好的交易一笔没有按规则执行、只是碰巧盈利的单子是坏的交易。长期来看只有好的流程才能带来好的结果。单次盈亏只是噪声流程一致才是信号。9. 总结与后续学习方向交易设置是连接“市场观点”和“真实下单”之间最短的那条路径。很多人花大量时间研究行情却很少花时间设计自己的决策流程。最终真正拉开差距的不是某一笔交易看得多准而是能否反复执行一套正期望值的交易设置并把风险控制在可承受的范围内。如果你刚开始接触这个概念可以不用急着写复杂指标。先拿出纸笔回答下面几个问题我偏好做趋势还是做震荡我习惯在突破时入场还是在回调时入场如果方向错了我愿意承受的最大亏损是多少这些问题没有标准答案但它们决定了你的交易设置最终长什么样。技术背景的读者可以再往前走一步把交易设置转换成代码或配置用历史数据检验。哪怕只是一个最简单的突破策略只要你坚持记录、统计、迭代也比每天凭感觉下单有效得多。下一步建议用至少两周的时间记录交易日志。如果期间发现自己在很多交易里根本写不进入场理由说明你还没有形成真正的交易设置这比亏钱更值得警惕。
返回列表