
手工委托的痛点在哪里
盯着屏幕,手指悬在键盘上,等一个价格出现。眼睛酸了,手慢了,机会没了。这是绝大多数手工交易者的日常。股票还好,一天四个小时,期货带夜盘,熬到凌晨两三点,反应迟钝,点错方向也是常有的事。
人工委托的瓶颈不在判断,而在执行。你判断对了方向,但价格瞬间跳掉,挂单没成交,撤单重挂,来回几次,利润被滑点吃光。更麻烦的是情绪——亏了想扛,赚了想跑,计划好的止损,手一抖就撤了。
程序化交易解决的就是这个环节。把“看到信号→手动下单”变成“信号触发→软件自动发单”。人只负责写规则,机器负责执行。
软件下单的底层通道是什么
不管股票还是期货,软件下单的本质是绕过交易软件的人机界面,直接跟券商的交易服务器对话。这个对话通道叫API(应用程序接口)。

国内股票市场,个人投资者直接拿不到券商API。通常的路径是:券商提供量化交易终端,终端里内置了下单函数。你写一段代码调用这个函数,终端替你发单。期货市场更开放,CTP接口是主流。期货公司给你一个账号密码,你用Python、C++写程序连上CTP,就能直接报单、撤单、查持仓。
API返回的是什么?你发一个“买入开仓”指令,服务器回你一个“已报”状态,接着是“部成”“全成”或者“废单”。整个过程没有K线图,没有按钮,就是字符串和数字在网络上跑。
策略信号怎么变成订单
程序化交易的核心不是下单本身,而是“什么时候下单”。这个“什么时候”由策略决定。
一个简单的均线策略:5日均线上穿20日均线,买入。策略代码每收到一根新K线,就计算一次均线值。上穿发生的那一秒,策略产生一个信号:signal = 1。这个信号传给订单管理模块。订单管理模块做三件事:检查账户可用资金、计算下单手数、生成订单对象。
订单对象里包含:合约代码、买卖方向、开平标志、价格类型(市价还是限价)、数量。这些字段拼成一个字符串,通过API发给交易所。
股票和期货的差异在这里体现。股票是T+1,今天买的明天才能卖,所以策略里不能写“当日平仓”。期货是T+0,开仓平仓当天随便做,但要注意平今仓手续费可能翻倍。这些规则不写在策略里,写在订单管理模块里,作为过滤器。
用代码演示一个最小下单流程
以期货CTP接口为例,用Python的vnpy库简化展示。实际生产环境要处理网络断线、仓位同步、重复报单等问题。
from vnpy_ctp import CtpGateway
from vnpy.trader.object import OrderRequest
from vnpy.trader.constant import Direction, Offset, OrderType
# 假设已经连上CTP,gateway是实例
def send_order(gateway, symbol, direction, offset, volume, price):
req = OrderRequest(
symbol=symbol,
exchange=Exchange.SHFE,
direction=Direction.LONG if direction == 'buy' else Direction.SHORT,
offset=Offset.OPEN if offset == 'open' else Offset.CLOSE,
type=OrderType.LIMIT,
volume=volume,
price=price
)
vt_orderid = gateway.send_order(req)
return vt_orderid
# 策略信号触发
if fast_ma > slow_ma and position == 0:
send_order(gateway, 'rb2310', 'buy', 'open', 1, 3800)
这段代码做了什么事?策略判断5日均线大于20日均线,且当前没有持仓,就调用send_order发一个买入开仓的限价单,价格3800,数量1手。交易所收到后,撮合成交,返回成交回报。策略收到回报,更新自己的持仓状态。
股票端用easytrader或者券商的量化终端,逻辑类似。区别在于股票没有开平标志,只有买入和卖出。
股票和期货的程序化差异
股票程序化受限于T+1和融券成本。日内策略很难做,大部分是日间选股、定时调仓。期货程序化天然适合日内,杠杆高、流动性好、多空双向。
股票API的延迟通常在百毫秒级,期货CTP可以做到毫秒级。做高频套利,股票基本没戏,期货还有空间。
费用结构也不一样。股票有印花税、过户费、佣金,期货只有手续费。程序化交易频率高,手续费累积起来很吓人。策略里必须算清楚,一笔交易赚的钱能不能覆盖摩擦成本。
风控不能交给软件自己管
软件下单最大的风险不是亏钱,是失控。程序跑飞了,一分钟发几百笔单子,或者价格填错,多打一个零,直接爆仓。
必须有人在策略外面加一层硬风控。这一层不跟策略共用代码,独立运行。规则可以很简单:单笔最大下单量、每秒最大报单次数、当日最大亏损额、仓位上限。触发任何一条,直接断开API连接,禁止发单。
股票和期货交易所也有风控,但那是事后监管。你自己得在事前拦住。程序化交易的老手,策略可以写得糙,风控一定写得细。
从手工到程序化的过渡路径
不要一上来就全自动。先做半自动:策略给出信号,弹窗提示,你点确认才发单。跑一两个月,信号质量和执行滑点都稳定了,再改成全自动。
股票用户可以从券商的条件单开始。条件单本质是简单的程序化,价格触发委托。熟悉了再写Python脚本调用量化终端。期货用户直接上CTP模拟盘,用模拟资金跑策略,跑通了再换实盘。
程序化交易不是圣杯,它只是把执行环节标准化了。判断还是靠人,规则还是靠人写。软件下单代替人工委托,省的是手速和情绪,不是脑子。