欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 模型求助

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有2334人关注过本帖树形打印复制链接

主题:模型求助

帅哥哟,离线,有人找我吗?
torowills
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:38 积分:0 威望:0 精华:0 注册:2013/11/21 17:53:50
模型求助  发帖心情 Post By:2013/12/10 17:54:41    Post IP:218.242.32.7[只看该作者]

设计初衷:
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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:46311 积分:50819 威望:0 精华:2 注册:2011/3/23 8:50:25
  发帖心情 Post By:2013/12/11 9:08:22    Post IP:58.246.57.26[只看该作者]

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.回答还是和上面一样,你把平仓条件逐个输出,看看是哪个条件不满足导致的没有平仓,图表调试方法参考下面链接
 


金字塔—专业程序化交易量化投资平台

客户服务部

----------------------------------------------------------- 欢迎您参加我公司的技术培训,具体培训需求请发邮件到service@weistock.com

您的宝贵建议或者投诉,请发往邮箱:weiwei@weistock.com

 回到顶部