查看智能交易公式的源代码
←
智能交易公式
跳转到:
导航
,
搜索
根据下列原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
智能交易脚本是量化交易思路的表达形式 ==虚盘与实盘== 在交易策略里,一般的交易函数并不直接操作真实帐号。每个策略都虚拟出一个帐号,称之为虚盘。 在这个帐号上开平仓都是瞬间完成的,没有网络延时,并且保证成功。 这样做可以确保策略自身逻辑的完整性,就是说每当策略产生信号时,虚盘总是能根据信号发生交易, 并不会像真实交易那样产生滑价,延时,部分成交,甚至不成交。 实盘是指真实的交易帐号(也可以是模拟帐号),实盘是通过与虚盘的同步跟随去完成实际交易的。 请看下面的例子: ma1:ma(close, 5); ma2:ma(close, 10); if cross(ma2, ma1) then sellshort; 该策略以5日均线和10日均线交叉作为开仓条件 [[Image:Fmltrade1.png]] 两条均线在图中所标注处发生了交叉,则虚盘在下一根K线的开盘价卖空1手。 这个操作是不需要真实交易帐号的。虚盘的交易信号使用虚心三角形表示,鼠标在上方时飘浮详细交易信息。 虚盘的仓位会标注在策略图标的右方,此时蓝色的[-1]表示虚盘持有1手空仓,多仓以红色正数表示。 虚盘不允许双向持仓,开反向仓时自动平掉原方向的仓位。 虚盘的信号通过仓位同步反应在真实交易中。接着上面的例子,如果此时登陆了交易帐号,并点击小脸打开交易 (笑脸为交易开启,哭脸为交易关闭),并且把同步设置成“总是同步”,实盘将会在最新价处跟随虚盘开仓, 使得实盘与虚盘的仓位一致: [[Image:Fmltrade2.png]] 实盘的信号使用实心三角表示,红色多仓,蓝色空仓。鼠标在上方时漂浮详细交易信息。 同步的选项有以下几种: *'''总是同步''':任何时候都保证实盘与虚盘的持仓数量和方向一致 *'''下次持仓方向改变时同步''':持仓方向有持多仓,持空仓和无持仓三种,当下次持仓方向改变时才进行同步 *'''下次持仓数量改变时同步''':当虚盘持仓在数量上改变时同步。方向改变时持仓数量一定改变,但持仓数量改变时不一定持仓方向也改变 *'''市场价优于虚盘开仓均价时同步''':当虚盘有持仓,实盘等待最新价低于多头虚盘开仓价(或者高于空头开仓价时),进行同步 ==交易指令== 基本的交易可以通过 Buy/Sell/SellShort/BuyToCover 函数或语句完成。 {| class="wikitable" |- ! 指令 !! 中文 !! 含义 |- | Buy || 买入 || 多头开仓 |- | Sell || 卖出 || 多头平仓 |- | SellShort || 卖开 || 空头开仓 |- | BuyToCover || 买平 || 空头平仓 |} '''交易函数''' 作为函数时,与一般的函数调用一样,目前只支持逐根运行的模式。 Buy('symbol', Lots, Price=0, Slippage=0, OT=OT_Market, KT=KT_NextBar, Comment='') SellShort('symbol', Lots, Price=0, Slippage=0, OT=OT_Market, KT=KT_NextBar, Comment='') Sell('Symbol', lots, price, slippage, OT, KT, 'Comment') [From 'EntryName'] BuyToCover('Symbol', lots, price, slippage, OT, KT, 'Comment') [From 'EntryName'] Symbol: 下单品种 Lots: 下单数量,填Default时下单数量由界面控制 Price: 下单价格,市价单 OT_Market 时价格可以填 0 Slippage: 下单滑价,滑价是在实盘成交时起作用的,不影响虚盘的成交价格,但会影响测评报告的绩效计算。滑价填0时由界面控制滑价。 OT: Order Type 有以下的类型: *OT_OPEN 开盘竞价,暂不支持 *OT_CLOSE 收盘竞价,暂不支持 *OT_MARKET 市价单,以当前价格成交 *OT_LIMIT 限价单,当买方向价格低于下单价格时成交(或卖方向高于此价格) *OT_STOP 追价单,当买方向价格高于下单价格时成交(或卖方向低于此价格) KT: K线类型有以下几种: *KT_ThisBar, 当前一根K线,只能配合 OT_Market *KT_NextBar, 下一根K线,可以配合 OT_Market/OT_Stop/OT_Limit Comment: 下单注释,开仓时作为仓位标记 EntryName: 平仓时可以指定只操作某个标记的仓位 返回值:这4个交易函数都是操作虚盘的,操作能保证成功,所以函数没有返回值 '''交易语句''' 作为交易语句时,功能与交易函数一样,但写法更易于理解 ('SellShort' | 'Sell' 'Short') ['(' "EntryLabel" ')'] [TradeSize] EntryType 'Buy' ['(' "EntryLabel" ')'] [TradeSize] EntryType 'Sell'['(' "ExitLabel" ')'] [From Entry("EntryLabel")] [TradeSize[Total]] ExitType ('BuyToCover' | 'Buy' 'To' 'Cover' ) [("ExitLabel")][From Entry("EntryLabel")] [TradeSize[Total]] ExitType EntryType: ( This Bar[On]Close | Next Bar[At]Open or Next Bar[At]Market | Next Bar[At]Price Limit | Next Bar[At]Price Stop ) ExitType: ( This Bar[On]Close | Next Bar[At]Open or Next Bar[At]Market | Next Bar[At]Price Limit | Next Bar[At]Price Stop ) 省略字, 交易语句中可以插入一些定词,冠词,方便理解。这些单词在编译时会被忽略 A An Is Than Was On Does At The Based By Place Share Shares 交易语句例子 buy this bar Market; // 在当前K线市价买入 sell next bar open; // 在下一根K线的开盘价卖出 // 在下一根的 2398.2 价格处限价买入2口, 把仓位标记为 myPos buy ('myPos') 2 shares next bar at 2398.2 limit; // 在下一根的 2399.8 价格处追价卖出标记为'myPos'里面的2口 sell ('comment') from entry('myPos') 2 shares next bar at 2399.8 stop; 中文版本的交易语句 ('次周期'|'本周期') [价格] [类型] ('买入'|'卖开') [数量] ['标记为' '开仓标记']; ('次周期'|'本周期') [价格] [类型] ['从标记' '开仓标记'] ('卖出'|'买平') [数量] ['标记为' '平仓标记']; 类型: ('追价'|'限价'|'市价') 中文版本的省略字 在 的 股 口 中文交易语句例子 本周期 市价 买入; 次周期 开盘价 卖出; 在 次周期 2398.2 限价 买入 1 口 标记为 'MyPos'; 在 次周期 2399.8 追价 从标记 'MyPos' 卖出 1 口 标记为 'comment'; ==限价,追价,市价单== [[Image:Fmltrade3.png]] * 市价单 在当前价格处交易 * 限价单 买入时不高于指定价格,卖出时不低于指定价格 * 追价单 买入时不低于指定价格,卖出时不高于指定价格 Buy(买入) 和 BuyToCover(买平) 都属于买入方向 Sell(卖出) 和 SellShort(卖开) 都属于卖出方向 多头止损属于 Sell Stop 类型,空头止损属于 BuyToCover Stop 类型 ==当根开仓,下一根开仓== ThisBar 当根开仓是指当前产生信时后立刻交易,不考虑信号闪烁问题。当根开仓只能用 OT_Market 市价单,最好使用 #Run_Every_Tick模式。ThisBar 不需要接受 OT_Limit/OT_Stop单,原因是当前价格已知: Limit 单可以写成 if close < price then buy; (多头) Stop 单可以写成 if close > price then buy; (多头) 但是,在某种特殊需要下强行使用thisBar + Limit单的组合,此时,测评如果不插值,将产生使用未来函数的效果。例如,可以写这样一段代码 Buy( '', Low, 1, OT_Limit, OB_Next ); Sell( '', High, 1, OT_Limit, OB_Next ); 测评时将会每根K线最低价买最高价卖。建议如果不是非常清楚其中逻辑不要使用这种组合。 NextBar 下根开仓是指当K线走完了,确认信号,在下一根交易。或者计算买入卖出的通道,在下一根K线应用追价或限价单。下根交易可以使用 #Run_Every_Bar 模式,每根K线运行一次即可。Run_Every_Bar指定公式每根K线只运行一次,然而对于追价限价,止盈止损的判断,仍然是每个tick进行的。 ==止盈,止损,跟踪止损,震荡止损,保本止损== 出场的指令,除了Sell(卖出)和BuyToCover(买平),还可以有以下: *SetStopLoss 止损 *SetProfitTarget 止盈 *SetDollarTrailing 跟踪止盈(按金额计算) *SetPercentTrailing 跟踪止盈(按百分比计算) *SetBreakEven 保本止损 *SetInactive 震荡止损 (多少个周期内没有达到一定幅度的盈利和亏损) 止盈止损的计算都分为按总盈利计算和按平均没口盈利计算,默认按整个仓位的总盈利计算。 计算方式使用以下函数指定: *SetStopContract 按平均没口赢利计算 *SetStopPosition 按整个仓位计算 注意盈利的计算是考虑了单边手续费的,而止盈止损则考虑双边的手续费。 ==日内平仓SetExitOnClose== 有时我们跑日内策略,需要在收市时无论如何即平仓。 那么有两种做法,第一种是自己写程序判断时间,到点则平。另一种是使用系统提供的函数SetExitOnClose。 如果使用SetExitOnClose,则只需单独写一句"SetExitOnClose;",系统会自动跟据 【策略设置】中的“日收盘交易在(n)秒前下单” 设置,到点自动平仓。 测评时以收市价作为交易价格 注意:一旦到达设定时间,自动平仓之后,策略所发出的开仓信号将全部截留,当天不再执行,等到第二天的开盘第一根执行 ==实盘函数== 除了使用实盘虚盘同步的交易模式,策略还能直接操作真实帐号,进行开平仓,撤单等的操作。 *A_SendOrder 以限价单的形式直接发送到交易通道 *A_CancelOrder 撤销委托单 *A_CancelAllOrders 撤销所有委托单 *A_GetOrderCount 返回当日共有多少张委托单 *A_GetOpenOrderCount 返回当日为成交(或部分成交)的委托单数量 *A_GetLastOrderIndex 返回最近一次委托单的序号 *A_GetLastOpenOrderIndex 返回最近一次为成交(或部分成交)的委托单数量 *A_OrderStatus 委托单的状态 *A_OpenOrderStatus 未成交(或部分成交)的委托单的状态 *A_OrderLot 委托单的委托开仓量 *A_OpenOrderLot 未成交(或部分成交)委托的未成交的口数 *A_OrderPrice 委托单的委托价格 *A_OpenOrderPrice 未成交(或部分成交)的委托价格 *A_OrderTime 委托单的委托时间 *A_OpenOrderTime 未成交(或部分成交)的委托单的委托时间 *A_OrderDate 委托单的委托日期 *A_OpenOrderDate 未成交(或部分成交)的委托单的委托日期 *A_OrderType 委托单的类型 *A_OpenOrderType 未成交(或部分成交)的委托单的类型 *A_OrderContractNo 委托单的合同编号 *A_OpenOrderContractNo 未成交(或部分成交)的委托单的合同编号 *A_OrderFilledLot 委托单的已成交口数 *A_OpenOrderFilledLot 未成交(或部分成交)的委托单的已成交口数 *A_OrderFilledPrice 委托单的成交价格 *A_OpenOrderFilledPrice 未成交(或部分成交)的委托单的已成交部分的成交价格 *A_OrderCancelledLot 委托单撤单已撤口数 *A_OpenOrderCancelledLot 未成交(或部分成交)的委托单的已撤口数 *A_OrderSymbol 委托单的委托品种 *A_OpenOrderSymbol 未成交(或部分成交)的委托单的委托品种
返回到
智能交易公式
。
个人工具
内存:18933KB
3.15.12.133
该IP地址的讨论
登录
名字空间
页面
讨论
变换
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
社区专页
新闻动态
最近更改
随机页面
金魔方论坛
下载金魔方
帮助
工具箱
链入页面
链出更改
特殊页面