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


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

   

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


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

主题:日内不平仓

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


加好友 发短信
等级:标准版用户 帖子:109 积分:0 威望:0 精华:0 注册:2015/12/28 9:15:40
日内不平仓  发帖心情 Post By:2016/5/31 8:58:21    Post IP:180.175.16.170[显示全部帖子]

//声明参数
INPUT:N(1,1,100,1);
INPUT:K1(0.7,0.1,1,0.1);
INPUT:K2(0.7,0.1,1,0.1);
INPUT:ATRLEN(20,10,30,1);
INPUT:NMIN(10,1,100,1);
INPUT:TTM(50,50,500,10);
//声明变量
VARIABLE:POSITION=0;
VARIABLE:实际开仓手数=0;
VARIABLE:止损价格1=0;
VARIABLE:止损价格2=0;
CYC:=BARSLAST(DATE<>REF(DATE,1))+1;
//准备需要计算的变量
HH:=CALLSTOCKEX(STKLABEL,VTHIGH,6,-1,N);//N日HIGH的最高价
LL:=CALLSTOCKEX(STKLABEL,VTLOW,6,-1,N);//N日LOW的最低价
昨日收盘:=CALLSTOCK(STKLABEL,VTCLOSE,6,-1);
开盘价:=VALUEWHEN(CYC=1,OPEN);
HC:=HHV(昨日收盘,N);//N日CLOSE的最高价
LC:=LLV(昨日收盘,N);//N日CLOSE的最低价
浮动区间:=MAX(HH-LC,HC-LL);
上轨:开盘价+K1*浮动区间;
下轨:开盘价-K2*浮动区间;
AVGTR:=REF(MA(TR,ATRLEN),1);
手数:=FLOOR(TTM*100/(2*AVGTR*MULTIPLIER));
T1:=TIME>OPENTIME(1) AND TIME<CLOSETIME(0)-NMIN*100;
T2:=TIME>=CLOSETIME(0)-NMIN*100;
//开始执行时,初始化数据
IF BARPOS=1 THEN BEGIN
    POSITION:=0;  
END  //IF
//交易条件
开多条件:=C>上轨 AND POSITION=0;
开空条件:=C<下轨 AND POSITION=0;
//交易系统
IF 开多条件 AND T1 AND CYC>1 THEN BEGIN
BUY(1,手数,MARKET);
POSITION:=1;
实际开仓手数:=手数;
止损价格1:=c-2*AVGTR;
END//IF
IF 开空条件 AND T1 AND CYC>1 THEN BEGIN
BUYSHORT(1,手数,MARKET);
POSITION:=-1;
实际开仓手数:=手数;
止损价格2:=c+2*AVGTR;
END//IF
IF  LOW<=止损价格1 AND POSITION=1 THEN BEGIN
SELL(1,实际开仓手数,MARKET);
POSITION:=0;
END
IF  T2 AND POSITION=1 THEN BEGIN
SELL(1,实际开仓手数,MARKET);
POSITION:=0;
END//IF
IF  HIGH>=止损价格2 AND POSITION=-1 THEN BEGIN
SELL(1,实际开仓手数,MARKET);
POSITION:=0;
END
IF  T2 AND POSITION=-1 THEN BEGIN
SELLSHORT(1,实际开仓手数,MARKET);
POSITION:=0;
END//IF



 回到顶部
帅哥哟,离线,有人找我吗?
c100010592
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:标准版用户 帖子:109 积分:0 威望:0 精华:0 注册:2015/12/28 9:15:40
  发帖心情 Post By:2016/5/31 8:59:27    Post IP:180.175.16.170[显示全部帖子]

写的一个日内程序,但在测试看明细,发现会有日内收盘前不平仓的情况,是哪里出问题了?

 回到顶部
帅哥哟,离线,有人找我吗?
c100010592
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:标准版用户 帖子:109 积分:0 威望:0 精华:0 注册:2015/12/28 9:15:40
  发帖心情 Post By:2016/5/31 9:33:55    Post IP:180.175.16.170[显示全部帖子]

是 哪一段要替换掉?


 回到顶部
帅哥哟,离线,有人找我吗?
c100010592
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:标准版用户 帖子:109 积分:0 威望:0 精华:0 注册:2015/12/28 9:15:40
  发帖心情 Post By:2016/5/31 10:53:30    Post IP:180.175.16.170[显示全部帖子]

if time0>=(timetot0(closetime(0))-60*n)  AND POSITION=1 THEN BEGIN
SELL(1,实际开仓手数,MARKET);
POSITION:=0;
END//IF

替换成这样了,还是有不平仓的情况,交易明细的图贴不上来

 回到顶部
帅哥哟,离线,有人找我吗?
c100010592
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:标准版用户 帖子:109 积分:0 威望:0 精华:0 注册:2015/12/28 9:15:40
  发帖心情 Post By:2016/5/31 11:08:58    Post IP:180.175.16.170[显示全部帖子]

T1:=TIME>OPENTIME(1) AND TIME<CLOSETIME(0)-NMIN*100;
T2:=time0>=(timetot0(closetime(0))-60*nmin);

替换成这样,还是有不平仓的情况,交易明细的图贴不上来

 回到顶部
帅哥哟,离线,有人找我吗?
c100010592
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:标准版用户 帖子:109 积分:0 威望:0 精华:0 注册:2015/12/28 9:15:40
  发帖心情 Post By:2016/5/31 13:43:27    Post IP:180.175.16.170[显示全部帖子]

第一张图上的第一笔交易后没有平仓,第二张图上的最后一笔是强制平仓,1707手是前面所有累计没有平仓的手数。

 回到顶部
帅哥哟,离线,有人找我吗?
c100010592
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:标准版用户 帖子:109 积分:0 威望:0 精华:0 注册:2015/12/28 9:15:40
  发帖心情 Post By:2016/5/31 13:48:03    Post IP:180.175.16.170[显示全部帖子]

//声明参数
INPUT:N(1,1,100,1);
INPUT:K1(0.7,0.1,1,0.1);
INPUT:K2(0.7,0.1,1,0.1);
INPUT:ATRLEN(20,10,30,1);
INPUT:NMIN(10,1,100,1);
INPUT:TTM(50,50,500,10);
//声明变量
VARIABLE:POSITION=0;
VARIABLE:实际开仓手数=0;
VARIABLE:止损价格1=0;
VARIABLE:止损价格2=0;
CYC:=BARSLAST(DATE<>REF(DATE,1))+1;
//准备需要计算的变量
HH:=CALLSTOCKEX(STKLABEL,VTHIGH,6,-1,N);//N日HIGH的最高价
LL:=CALLSTOCKEX(STKLABEL,VTLOW,6,-1,N);//N日LOW的最低价
昨日收盘:=CALLSTOCK(STKLABEL,VTCLOSE,6,-1);
开盘价:=VALUEWHEN(CYC=1,OPEN);
HC:=HHV(昨日收盘,N);//N日CLOSE的最高价
LC:=LLV(昨日收盘,N);//N日CLOSE的最低价
浮动区间:=MAX(HH-LC,HC-LL);
上轨:开盘价+K1*浮动区间;
下轨:开盘价-K2*浮动区间;
AVGTR:=REF(MA(TR,ATRLEN),1);
手数:=FLOOR(TTM*100/(2*AVGTR*MULTIPLIER));
T1:=TIME>OPENTIME(1) AND TIME<CLOSETIME(0)-NMIN*100;
T2:=TIME>=CLOSETIME(0)-NMIN*100;
//开始执行时,初始化数据
IF BARPOS=1 THEN BEGIN
    POSITION:=0;  
END  //IF
//交易条件
开多条件:=C>上轨 AND POSITION=0;
开空条件:=C<下轨 AND POSITION=0;
//交易系统
IF 开多条件 AND T1 AND CYC>1 THEN BEGIN
BUY(1,手数,MARKET);
POSITION:=1;
实际开仓手数:=手数;
止损价格1:=c-2*AVGTR;
END//IF
IF 开空条件 AND T1 AND CYC>1 THEN BEGIN
BUYSHORT(1,手数,MARKET);
POSITION:=-1;
实际开仓手数:=手数;
止损价格2:=c+2*AVGTR;
END//IF
IF  LOW<=止损价格1 AND POSITION=1 THEN BEGIN
SELL(1,实际开仓手数,MARKET);
POSITION:=0;
END
IF  T2 AND POSITION=1 THEN BEGIN
SELL(1,实际开仓手数,MARKET);
POSITION:=0;
END//IF
IF  HIGH>=止损价格2 AND POSITION=-1 THEN BEGIN
SELL(1,实际开仓手数,MARKET);
POSITION:=0;
END
IF  T2 AND POSITION=-1 THEN BEGIN
SELLSHORT(1,实际开仓手数,MARKET);
POSITION:=0;
END//IF
这个是程序

 回到顶部
帅哥哟,离线,有人找我吗?
c100010592
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:标准版用户 帖子:109 积分:0 威望:0 精华:0 注册:2015/12/28 9:15:40
  发帖心情 Post By:2016/5/31 13:52:41    Post IP:180.175.16.170[显示全部帖子]

以上程序不对,是上一版的,重粘
//声明参数
INPUT:N(1,1,100,1);
INPUT:K1(0.7,0.1,1,0.1);
INPUT:K2(0.7,0.1,1,0.1);
INPUT:ATRLEN(20,10,30,1);
INPUT:NMIN(10,1,100,1);
INPUT:TTM(50,50,500,10);
//声明变量
VARIABLE:POSITION=0;
VARIABLE:实际开仓手数=0;
VARIABLE:止损价格1=0;
VARIABLE:止损价格2=0;
CYC:=BARSLAST(DATE<>REF(DATE,1))+1;
//准备需要计算的变量
HH:=CALLSTOCKEX(STKLABEL,VTHIGH,6,-1,N);//N日HIGH的最高价
LL:=CALLSTOCKEX(STKLABEL,VTLOW,6,-1,N);//N日LOW的最低价
昨日收盘:=CALLSTOCK(STKLABEL,VTCLOSE,6,-1);
开盘价:=VALUEWHEN(CYC=1,OPEN);
HC:=HHV(昨日收盘,N);//N日CLOSE的最高价
LC:=LLV(昨日收盘,N);//N日CLOSE的最低价
浮动区间:=MAX(HH-LC,HC-LL);
上轨:开盘价+K1*浮动区间;
下轨:开盘价-K2*浮动区间;
AVGTR:=REF(MA(TR,ATRLEN),1);
手数:=FLOOR(TTM*100/(2*AVGTR*MULTIPLIER));
T1:=TIME>OPENTIME(1) AND TIME<CLOSETIME(0)-NMIN*100;
T2:=time0>=(timetot0(closetime(0))-60*nmin);
//开始执行时,初始化数据
IF BARPOS=1 THEN BEGIN
    POSITION:=0;  
END  //IF
//交易条件
开多条件:=C>上轨 AND POSITION=0;
开空条件:=C<下轨 AND POSITION=0;
//交易系统
IF 开多条件 AND T1 AND CYC>1 THEN BEGIN
BUY(1,手数,MARKET);
POSITION:=1;
实际开仓手数:=手数;
止损价格1:=c-2*AVGTR;
END//IF
IF 开空条件 AND T1 AND CYC>1 THEN BEGIN
BUYSHORT(1,手数,MARKET);
POSITION:=-1;
实际开仓手数:=手数;
止损价格2:=c+2*AVGTR;
END//IF
IF  LOW<=止损价格1 AND POSITION=1 THEN BEGIN
SELL(1,实际开仓手数,MARKET);
POSITION:=0;
END
IF  T2 AND POSITION=1 THEN BEGIN
SELL(1,实际开仓手数,MARKET);
POSITION:=0;
END//IF
IF  HIGH>=止损价格2 AND POSITION=-1 THEN BEGIN
SELL(1,实际开仓手数,MARKET);
POSITION:=0;
END
IF  T2 AND POSITION=-1 THEN BEGIN
SELLSHORT(1,实际开仓手数,MARKET);
POSITION:=0;
END//IF

是这个

 回到顶部
帅哥哟,离线,有人找我吗?
c100010592
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:标准版用户 帖子:109 积分:0 威望:0 精华:0 注册:2015/12/28 9:15:40
  发帖心情 Post By:2016/5/31 13:56:54    Post IP:180.175.16.170[显示全部帖子]

1,不是要全平,全平的话会把其他策略的持仓给平掉;
2,是要平掉实际开仓手数。

 回到顶部
帅哥哟,离线,有人找我吗?
c100010592
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:标准版用户 帖子:109 积分:0 威望:0 精华:0 注册:2015/12/28 9:15:40
  发帖心情 Post By:2016/5/31 14:06:07    Post IP:180.175.16.170[显示全部帖子]

我有多个策略在一个账户里运行,不能平HOLDING 。
我是这样的思路:
1,开仓后把开仓手数写到全局变量“实际开仓手数”,把拟定的止损价格写到全局变量“止损价格1”
    IF 开多条件 AND T1 AND CYC>1 THEN BEGIN
    BUY(1,手数,MARKET);
    POSITION:=1;
    实际开仓手数:=手数;
    止损价格1:=c-2*AVGTR;
2,如果价格到了止损价位,按“实际开仓手数”平仓
    IF  LOW<=止损价格1 AND POSITION=1 THEN BEGIN
    SELL(1,实际开仓手数,MARKET);
    POSITION:=0;
    END
3,如果盘中没有触发止损,收盘前按“实际开仓手数”平仓
    IF  T2 AND POSITION=1 THEN BEGIN
    SELL(1,实际开仓手数,MARKET);
    POSITION:=0;
   END//IF


在测试的时候,查看交易明细,发现有开仓后不当日平仓的情况,然后会集中到测试时间段的最后一天强制平仓,不知道程序的问题在哪里,请教!

 回到顶部
总数 12 1 2 下一页