以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://weistock.com/bbs/list.asp?boardid=4) ---- 模型求助 (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=59781) |
-- 作者:torowills -- 发布时间:2013/12/10 17:54:41 -- 模型求助 设计初衷: 5均线上穿10均线,开多,2个点止盈,若下穿则止损,之后坐等开空 5均线下穿10均线,开空,2个点止盈,若下穿则止损,之后坐等开多 遇到的问题为: 1.持仓显示为1,但POSITION显示为0,这是为什么 举例: 2.回溯的情况下,IF1312,5分钟,12月10日9.20已经下穿,为什么在9.25分没有开空 12月10日10.10已经下穿,为什么10.15没开空 3.持仓量一直显示在增长,但过程中频繁满足止盈或者止损条件,不是很明白为什么没平仓 代码如下,请各位好心人和版主帮忙修改,谢谢 //声明参数(常量) INPUT : N1(5,1,55,1) ; INPUT : N2(10,1,144,1); INPUT:UNITS(1,1,300,1); input:mymoney(2,1,10,1); //声明变量 NT := 1 ;
//调试信息带时间戳 VARIABLE : _DEBUG = 1 ;
//是否输出前台交易指令 VARIABLE : _TDEBUG = 1 ;
//是否输出后台交易指令 VARIABLE : _DEBUGOUT = 0 ;
//是否输出后台交易的调试信息 VARIABLE : MYENTRYPRICE =0 ;
//开仓价格 VARIABLE : MYEXITPRICE =0 ;
//平仓价格 VARIABLE : POSITION=0 ;
//仓位状态 //0表示没有仓位,1表示持有多头, -1表示持有空头 //准备需要计算的变量 MA1:MA(CLOSE,N1); MA2:MA(CLOSE,N2); buycond:=CROSS(ref(ma1,1),ref(ma2,1)); sellcond:=CROSS(ref(ma1,1),ref(ma2,1)); buygetmoney:=(Close-AVGENTERPRICE)>mymoney; sellgetmoney:=(AVGENTERPRICE-close)>mymoney; //开始执行时 初始化数据 IF BARPOS=1 THEN BEGIN
//POSITION := 0 ; END //IF if buycond then BEGIN buyid:=1; end //If if sellcond then BEGIN sellid:=1; end //if //如果当前是没有持仓的状态
//多头进场 IF POSITION=0 AND buycond and buyid=1 THEN BEGIN myentryprice:=open;
BUY( _DEBUG,units,LIMITR,MYENTRYPRICE);
POSITION := 1 ;
buyid:=0;
sellid:=1; END //IF
//空头进场 IF POSITION=0 AND sellcond and sellid=1 THEN BEGIN
myentryprice:=open;
BUYSHORT( _DEBUG,units,LIMITR,MYENTRYPRICE);
POSITION := -1 ;
sellid:=0;
buyid:=1; END //IF //多单止盈 IF POSITION=1 AND buygetmoney THEN BEGIN myexitprice:=myentryprice+mymoney;
SELL( _DEBUG ,units,LIMITR,myexitprice);
POSITION := 0 ;
buyid:=0;
sellid:=1; END //IF //多单止损 IF POSITION=1 AND sellcond THEN BEGIN myexitprice:=open;
SELL( _DEBUG ,units,LIMITR,MYEXITPRICE);
myentryprice:=open;
BUYSHORT( _DEBUG ,units,LIMITR,MYENTRYPRICE);
POSITION := -1 ;
buyid:=1;
sellid:=0; END //IF //空单止盈 IF POSITION=-1 AND sellgetmoney THEN BEGIN myexitprice:=myentryprice-mymoney;
SELLSHORT( _DEBUG,units,LIMITR,MYEXITPRICE);
POSITION := 0 ;
sellid:=0;
buyid:=1; END //IF //空单止损 IF POSITION=-1 AND buycond THEN BEGIN myexitprice:=open;
SELLSHORT( _DEBUG,units,LIMITR,MYEXITPRICE);
myentryprice:=open;
buy( _DEBUG ,units,LIMITR,MYENTRYPRICE);
POSITION := 0 ;
sellid:=0;
buyid:=1; END //IF //显示账户状态 CONTINUELINE@ 资产:ASSET,LINETHICK0; 持仓:HOLDING,LINETHICK0;
|
-- 作者:jinzhe -- 发布时间:2013/12/11 9:08:22 -- 1.持仓显示为1,但POSITION显示为0,这是为什么
举例:
2.回溯的情况下,IF1312,5分钟,12月10日9.20已经下穿,为什么在9.25分没有开空
12月10日10.10已经下穿,为什么10.15没开空
3.持仓量一直显示在增长,但过程中频繁满足止盈或者止损条件,不是很明白为什么没平仓
回答如下: 1. 在这种开仓之后赋值全局变量的,你要最开头的IF判断那里,加上holding判断,比如 IF POSITION=0 AND buycond and buyid=1 and holding=0 THEN BEGIN
myentryprice:=open;
BUY( _DEBUG,units,LIMITR,MYENTRYPRICE);
POSITION := 1 ;
buyid:=0;
sellid:=1;
END //IF
2.调试代码啊,你看看开仓条件有几个,一个一个的输出对应的值,哪个条件不满足就是造成不开仓的原因
3.回答还是和上面一样,你把平仓条件逐个输出,看看是哪个条件不满足导致的没有平仓,图表调试方法参考下面链接
|