用图表显示交易信号的图表策略,图表的开多平多下单指令Buy/Sell函数,与后台程式化交易的开多平多下单指令TBuy/TSell函数,参数差异明显,图表后台的机制上也有明显的差异。不能简单的将Buy函数加T就直接后台交易,下面以平仓反手的代码为例:
实现功能:
5日均线上穿20日均线----平空开多
5日均线下破20日均线----平多开空
图表策略编写如下:
[PEL] 复制代码 //适用周期:1分钟周期
//K线走完
//中间变量
ma5:ma(close,5);
ma20:ma(close,20);
num:=1;//开仓手数
//买卖条件
//5日均线上穿20日均线,平空开多
buycon : =cross (ma5,ma20);
//5日均线下破20日均线,平多开空
sellcon:= cross (ma20,ma5);
//开平仓语句
//平空开多条件:5日均线上穿20日均线
if buycon then
begin
sellshort(holding<0,num,market);
buy(holding=0,num, market);
end
//平多开空条件:5日均线下破20日均线
if sellcon then
begin
sell(holding>0,num, market);
buyshort(holding=0,num, market);
end
同样的图表策略(图表上的持仓holding是虚拟的,资金是虚拟的),转为后台(持仓tholding是实际的持仓,资金也是实盘账户的)
实现以下功能:
5日均线上穿20日均线----平空开多
5日均线下破20日均线----平多开空
后台程序化交易ma均线平仓反手示例
[PEL] 复制代码 ma5:ma(close,5);
ma20:ma(close,20);
num:=1;//开仓手数
//5日均线上穿20日均线,平空开多
buycon : =cross (ma5,ma20);
//5日均线下破20日均线,平多开空
sellcon:= cross (ma20,ma5);
if buycon and tholding = 0 then tbuy(1, 1, mkt,0,0);//无持仓状态:增加开仓判断
if sellcon and tholding = 0 then tbuyshort(1, 1, mkt,0,0);//无持仓状态:增加开仓判断
//平空开多条件:5日均线上穿20日均线
if buycon and tholding < 0 then
begin
tsellshort(1, num, mkt,0,0);
tbuy(1, num, mkt,0,0);
end//平多开空条件:5日均线下破20日均线
if sellcon and tholding > 0 then
begin
tsell(1, num, mkt,0,0);
tbuyshort(1, num, mkt,0,0);
end
小结:图表上的持仓是虚拟的,平仓反手的示例中,策略不是持有多仓,就是持有空仓。
后台的持仓是读取实际账户的持仓,策略运行前,有可能是空仓。所以添加无持仓时满足条件开对应仓位。
|