EXIT; MA1:C;
FOR J=1 TO N-1 DO
MA1:=MA1+CLOSE[BARPOS-J]; MA1:=MA1/N;
这样的公式即保证了效率,也可以使编写公式的复杂程度大大降低,提高了公式的可读性
另外逐K线模式下运行的代码,还可以配合使用GOGO语句以及EXIT指令,控制语句的执行流程,达到各种复杂的逻辑运算要求。
3.2 关于模型运行时这两种模式的选择
我们在模型运行时尤其是新手用户往往面对如何选择这两种运行模式纠结,在通常情况下,我们推荐用户在序列模式
下运行你的公式系统,因为这样会有很高的执行效率,只有在序列模式下无法表达编写出你的策略时,再考虑使用逐K线模式,因为逐K线可以精细的控制每跟K线周期的动作,所以灵活性较高,可以完成多数序列模式下无法完成的事情。
建义如下:在普通技术指标,选股指标,简单的图表程式化交易,以及公式中涉及到BACKSET、REFX等未来函数调用等,推荐使用序列模式;用户需要精细控制K线周期的操作时例如资金头寸管理、止损操作等,推荐使用逐K线模式。简单一句话,如果是指标交易,那么使用序列模式,算法交易,使用逐K线模式。
第四章 金字塔的新交易系统
使用传统的ENTERLONG程式化交易信号做出的自动交易策略,存在着例如无法进行头寸管理,灵活性不够的缺点,为了对介入价位和仓位进行精确的控制,譬如海龟交易法的头寸管理.,需要金字塔提供扩展性更为强大的程式化交易模式,为此提供了一系列的功能和众多交易函数。这些函数用户可以在公式函数列表的“交易系统”组里找到.但是需要注意的是金字塔的新交易系统,是不能与旧的交易系统比如ENTERLONG混用的.金字塔的新交易系统采取的虚拟仓位和资金再图表做显示和模拟交易的,也就是说新图表交易系统的交易操作是按照预先我们在公式属性里设定的资金来进行的,与用户的实际资金和持仓没有任何关系。因此使用之前用户需要在公式属性里将资金和费率设置正确,以确保能更加贴近实战.真实自动交易时,在图表出现信号后系统将根据交易指令发出的交易类型和价格以及数量,按照同比例手数进行真实下单交易。但是这里用户也要注意,一旦出现开平仓信号后,也就是说无论实盘此笔交易是否已经成交,图表上的虚拟持仓都是按成交后显示的,因为为了确保图表上显示的持仓与实际的持仓保持一致,委托时应该尽量的贴近实际价格,以确保能够按要求成交。此外金字塔的新交易系统只能在逐K线模式下运行,另外该模式仅限标准版及其以上用户才可以进行下单交易。 4.1下单模型语句
BUY(COND,V,Type,P); SELL(COND,V,Type,P);
//开多 //开空 //平空
//平多
BUYSHORT(COND,V,Type,P); SELLSHORT(COND,V,Type,P);
初学者一般会对TYPE有一些疑惑,TYPE可以是本周期收盘(THISCLOSE)、市价(MARKET)、限价单(LIMIT)、停损单(STOP)等交易方式控制符;对于限价单、停损单需要指定的价格P。
16
4.2简单交易系统示例
例一:KD交易系统
我们仍然使用前面的KD交易系统为例,将其修改为新版的程式化交易模型。 RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100; K:=SMA(RSV,M1,1); D:=SMA(K,M2,1); //注意看下面两行语句
BUY(CROSS(K,D) AND K<20,V,TYPE,P); SELL(CROSS(D,K) AND K>80,V,TYPE,P);
例二:一个最简单的3天均线穿越5天均线的多头交易系统
资产:ASSET,LINETHICK0; 可用现金:CASH(0),LINETHICK0; 持仓:HOLDING,LINETHICK0;
MA3:MA(C,3); MA5:MA(C,5);
BUY(CROSS(MA3,MA5),1,THISCLOSE); //开多1手
SELL(CROSS(MA5,MA3),0,THISCLOSE);//平多0表示平掉全部持仓
上述的交易模型都能在图表做显示使用,并可以做图表交易。
在交易系统评测中,介入时机与价位,是针对旧交易系统的4种信号指定买卖的介入时机与价位的,这里是以BUY函数的实际指定价格为准。 4.3复杂交易系统示例
例三:30分钟翻转系统 //《日内30分钟翻转系统》 //适用于1分钟周期 //编写日期:20100812-JYL
//准备需要的中间变量 h30 := ref(hhv(h,30),1); l30 := ref(llv(l,30),1);
//建立多头的进场条件
long := h>h30 and time>093000 and time<145000;
if long then begin
sellshort(holding < 0, 0, limitr, h30);
17
buy(holding = 0, 1, limitr, h30); end
//画出多头的止损线
partline(holding>0, l30,colorred);
//开空条件
short := l < l30 and time > 093000 and time < 145000;
if short then begin
sell(holding > 0, 0, limitr, l30); buyshort(holding = 0, 1, limitr, l30); end
//画出空头的止损线
partline(holding<0, h30, colorgreen);
//收盘前5分钟平仓 if time > 145500 then begin
sell(holding > 0, 0, thisclose); sellshort(holding < 0, 0, thisclose); end
例四:30突破模型
//开盘后前三十分钟最高最低价突破模型--涨停价多单止盈/跌停价空单止盈 //适用于1分钟周期
M:=BARSLAST(DATE<>REF(DATE,1) )+1; h30:=VALUEWHEN(TIME<=093000,HHV(HIGH,M)); l30:=VALUEWHEN(TIME<=093000,LLV(LOW,M));
//假设涨停价为 昨收的百分之4 upstop :=ref(c,1)*(1+0.04); downstop:=ref(c,1)*(1-0.04);
//建立多头进场条件
long:=CLOSE>h30 AND TIME<145500 AND TIME>093000; if long then begin
sellshort(holding < 0, 0, limitr, h30); buy(holding = 0, 1, limitr, h30); end
18
//建立多头止盈条件(涨停价多单止盈,不开空仓)
if holding>0 and TIME<145500 AND TIME>093000 then sell(c>upstop-3*mindiff,0,thisclose);
//建立空头进场条件
short:=CLOSE
if short then begin
sell(holding > 0, 0, limitr, l30); buyshort(holding = 0, 1, limitr, l30); end
//建立空头止盈条件(跌停价空单止盈,不开多仓) if holding<0 and TIME<145500 AND TIME>093000 then sellshort(c //收盘前5分钟平仓 if time > 145500 then begin sell(holding > 0, 0, thisclose); sellshort(holding < 0, 0, thisclose); end 资产:ASSET,LINETHICK0; 可用现金:CASH(0),LINETHICK0; 持仓:HOLDING,LINETHICK0; 第五章 新交易系统的函数 交易系统之开多操作, 用法:BUY(COND,V,Type,P); 表示当COND条件成立时, 买入V股(手)当前品种,TYPE表示买入类型, P表示买入价格,所有参数均可以省略。 V:买入股(手)数或买入资金百分比(N%),省略表示100%; TYPE:可以是本周期收盘(THISCLOSE),次周期开盘(MARKET), 次周期限价单(LIMIT),次周期停损单(STOP)等交易方式控制符; P:对于限价单、停损单需要指定的买入价格 例如:BUY(C>O ,1000,THISCLOSE);表示收阳线则在本周期收盘价上买入1000股(手)。 BUY(C>0,50%,LIMIT,CLOSE-0.2);表示在次周期CLOSE-0.2元位置下买入限价单, 若价格达到或低于该价格则用50%资金买入。 19 交易系统之平多操作, SELL(COND,V,Type,P); 用法同上 交易系统之开空操作, BUYSHORT(COND,V,Type,P); 用法同上 交易系统之平空操作, SELLSHORT(COND,V,Type,P); 用法同上 ASSET当前资产 户账户客的净自有资产=可用现金+占用保证金-融资(现金+品种市值-融资) AVGENTERPRICE 持仓均价 当前持有品种的平均持仓成本——最近空仓以来计 BESTPERCENT 最大利润率 当前位置之前所有交易中利润率最大一次的利润率,其数值在0—1之间 BESTTRADE 最大盈利额 当前位置之前所有交易中盈利最大一次的利润额 CASH(N) 现金存量 得到当前帐户的可用资金余额 用法:CASH(N),N表示投资方向 0多头 1空头 例如:CASH(0)表示取当前多头帐户的可用现金余额 ENTERBARS 开仓历时 返回上次开仓到当前的周期数,若之前没有开仓记录返回-1 ENTERPRICE 上次开仓价 得到当前位置的上次开仓价 ENTERVOL 上次开仓量 得到当前位置的上次开仓量 EXITBARS 平仓历时 返回上次平仓到当前的周期数,若之前没有开仓记录返回-1 EXITPRICE 上次平仓价 得到当前位置的上次平仓价 EXITVOL 上次平仓量 得到当前位置的上次平仓量 20