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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 关于VARIABLE定义的变量的问题

   

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


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

主题:关于VARIABLE定义的变量的问题

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


加好友 发短信
等级:新手上路 帖子:81 积分:0 威望:0 精华:0 注册:2016/3/22 16:42:57
关于VARIABLE定义的变量的问题  发帖心情 Post By:2016/3/31 10:50:31    Post IP:125.33.53.41[只看该作者]

如下代码,flag这个变量出现一个无法理解的情况: 无论“开多条件”  “平多条件” “开空条件” “平空条件” 是1还是0, 这个flag 一直都是 0  (shift + Q 查看变量),请问是怎么回事,是不是VARIABLE的使用方面,我哪里没有注意到 ?


VARIABLE: flag = 0;  //1:已经开多了,-1:已经开空了    0:未持有多空交易单子

//交易系统
if   flag = 0 and 开多条件  then
BEGIN
BUY(开多条件 ,1000,marketR);//交易系统之开多操作
flag := 1;
end

if flag =1 and 平多条件  THEN
BEGIN
SELL(平多条件 ,1000,marketR); //交易系统之平多操作
flag := 0;
End


if flag =0 and 开空条件   THEN
BEGIN
BUYSHORT(开空条件 ,1000,marketR); //交易系统之开空操作
flag := -1;
End

if flag = -1 and 平空条件   THEN
BEGIN
SELLSHORT(平空条件 ,1000,marketR); //交易系统之平空操作
flag := 0;
End

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


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

这样的代码不会出现一直是0没有变化的结果。请给出调试结果



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

客户服务部

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

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

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


加好友 发短信
等级:新手上路 帖子:81 积分:0 威望:0 精华:0 注册:2016/3/22 16:42:57
  发帖心情 Post By:2016/3/31 11:05:09    Post IP:125.33.53.41[只看该作者]

好像是我看错了, 我再检查看看。谢谢

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


加好友 发短信
等级:新手上路 帖子:81 积分:0 威望:0 精华:0 注册:2016/3/22 16:42:57
  发帖心情 Post By:2016/3/31 11:21:57    Post IP:125.33.53.41[只看该作者]

图片点击可在新窗口打开查看


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20160331111746.png
图片点击可在新窗口打开查看


有图是大盘的交易信号,左图是具体交易的个股,为什么左图的股票不停的开仓平仓呢 ?  如果控制让左图的开仓平仓动作和右图的一致呢 ?请指导。谢谢

//交易条件 

开多条件:=  大盘信号 = 1 AND  TIME>094000 AND  TIME<145000;
平多条件:= 大盘平仓信号 = -1  OR TIME>=145000;


开空条件:=  大盘信号 = -1  AND  TIME>094000 AND TIME<145000;
平空条件:=  大盘平仓信号 = 1 OR TIME>=145000;



//交易系统
if   flag = 0 and 开多条件  then
BEGIN
BUY(开多条件 ,1000,marketR);//交易系统之开多操作
flag := 1;
end

if flag =1 and 平多条件  THEN
BEGIN
SELL(平多条件 ,1000,marketR); //交易系统之平多操作
flag := 0;
End


if flag =0 and 开空条件   THEN
BEGIN
BUYSHORT(开空条件 ,1000,marketR); //交易系统之开空操作
flag := -1;
End

if flag = -1 and 平空条件   THEN
BEGIN
SELLSHORT(平空条件 ,1000,marketR); //交易系统之平空操作
flag := 0;
End


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


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

首先从表面上看左右两边不是同一个公式,公式名就不一样,所以信号不一样是正常的

其次你的代码没有给完整,不能用以调试问题



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

客户服务部

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

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

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


加好友 发短信
等级:新手上路 帖子:81 积分:0 威望:0 精华:0 注册:2016/3/22 16:42:57
  发帖心情 Post By:2016/3/31 11:26:36    Post IP:125.33.53.41[只看该作者]

两个公式里出信号的代码是一样的。只是左边的公式多了交易动作

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


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

请给完整代码


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

客户服务部

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

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

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


加好友 发短信
等级:新手上路 帖子:81 积分:0 威望:0 精华:0 注册:2016/3/22 16:42:57
  发帖心情 Post By:2016/3/31 11:40:22    Post IP:125.33.53.41[只看该作者]

好的。马上

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


加好友 发短信
等级:新手上路 帖子:81 积分:0 威望:0 精华:0 注册:2016/3/22 16:42:57
  发帖心情 Post By:2016/3/31 11:41:16    Post IP:125.33.53.41[只看该作者]

左边的代码:  

//INPUT:P1(10,5,100,1),P2(30,5,100,1),P3(60,5,100,1);

INPUT:MAP1(10,5,100,1),MAP2(30,5,100,1),MAP3(60,5,100,1);


VARIABLE: flag = 0;  //1:已经开多了,-1:已经开空了    0:未持有多空交易单子

VARIABLE: 大盘信号 = 0;  //0:无信号状态  1:多头信号   -1:空头信号
VARIABLE: 大盘平仓信号 = 0;  //0:无信号状态  1:平空头信号   -1:平多头信号

EMA1: EMA(CLOSE, MAP1);
EMA2: EMA(CLOSE, MAP2);
EMA3: EMA(CLOSE, MAP3);

//大盘数据信号分析处理 start

//大盘数据获取
// 1分钟
HS300_CLOSE: CALLSTOCK('SH300',vtCLOSE,1),LINETHICK0;
HS300_OPEN: CALLSTOCK('SH300',vtOPEN,1),LINETHICK0;
HS300_EMA: EMA(HS300_CLOSE, MAP3),LINETHICK0;

//5秒数据
HS300_CLOSE_SECOND: CALLSTOCK('SH300',vtCLOSE,22,5),LINETHICK0;
HS300_OPEN_SECOND: CALLSTOCK('SH300',vtOPEN,22,5),LINETHICK0;



//本K开盘价大于于前K开盘价:= HS300_OPEN > REF(HS300_OPEN,1); 

//大盘多空趋势: IFELSE(CLOSE>HS300_EMA, 1, -1),LINETHICK0;

//大盘信号: IFELSE(HS300_CLOSE>HS300_EMA, 1, -1),LINETHICK0;
//HS300_MA: STKINDI(
 OpenRefOpen:= HS300_OPEN > REF(HS300_OPEN,1);

 CloseRefOpen_Second:= HS300_CLOSE_SECOND > REF(HS300_OPEN_SECOND, 6);
 
 BeforBarIsDown:= REF(HS300_CLOSE,1)< REF(HS300_OPEN,1);
 
 BeforBarIsUp:= REF(HS300_CLOSE,1)> REF(HS300_OPEN,1);
 
 
 //用于顺势(和均线方向相反的情况)交易信号的发出 的量化数据 start
 IsDownContiTwo := REF(ISDOWN(),1) and  REF(ISDOWN(),2);
 IsUpContinTwo:= REF(ISUP(),1) and  REF(ISUP(),2) ;
 //用于顺势(和均线方向相反的情况)交易信号的发出 的量化数据 end
 
 
 //用于逆势(和均线方向相反的情况)交易信号的发出 的量化数据 start
 //本K前面的K线是否连续收阴
 IsDownContinThree:= REF(ISDOWN(),1) and  REF(ISDOWN(),2) and REF(ISDOWN(),3);
 //阳线上穿前阴K 50%
 UPOverP50:= HS300_CLOSE>(REF(HS300_CLOSE,1)+ABS(REF(HS300_OPEN,1)-REF(HS300_CLOSE,1))/2);
 
  //本K前面的K线是否连续收阳
 IsUpContinThree:= REF(ISUP(),1) and  REF(ISUP(),2) and REF(ISUP(),3);
  //阴线下穿前阳K 50%
 DownOverP50:= HS300_CLOSE<(REF(HS300_CLOSE,1)-ABS(REF(HS300_OPEN,1)-REF(HS300_CLOSE,1))/2);
 
 //用于逆势(和均线方向相反的情况)交易信号的发出 的量化数据 end
 
 
 //平仓信号
 //如果前K是阴线则本K为阳线的时候发出平空信号
if BeforBarIsDown and ISUP() then 
begin
    大盘平仓信号:= 1;
end 

 //如果前K是阳线则本K为阴线的时候发出平多信号
if BeforBarIsUp and ISDOWN() then 
begin
    大盘平仓信号:= -1;
end 

 
 //K线在指定均线之上
 if HS300_CLOSE > HS300_EMA then 
 begin
      //由阴转阳
     if  BeforBarIsDown and  HS300_CLOSE > HS300_OPEN and IsDownContiTwo then 
     begin
    大盘信号 := 1;
    DRAWICON(TRUE,LOW-2,1);       
     end 
     else if IsUpContinThree and DownOverP50 then 
     begin 
    大盘信号 := -1;
    DRAWICON(TRUE,HIGH+2,2);        
     end 
 end 
 
 else
 //K线在指定均线之下
  if HS300_CLOSE < HS300_EMA then
  begin 
    //由阳转阴线
    if BeforBarIsUp and HS300_CLOSE < HS300_OPEN and IsUpContinTwo then 
    begin 
    大盘信号 := -1;
    DRAWICON(TRUE,HIGH+2,2);       
    end 
    else if IsDownContinThree and UPOverP50 then
    begin
    大盘信号 := 1;
    DRAWICON(TRUE,LOW-2,1);  
    end
    
  end 
  
  
  
 //大盘数据信号分析处理 end



//中间变量


个股方向:IFELSE(Close> EMA3, 1,-1),LINETHICK0; //1:多头,-1:空头

//如果大盘出现空头信号


//TIMESHOW:TIME,LINETHICK0;
//CURRENTTIMESHOW:CURRENTTIME,LINETHICK0;



//本K开盘价大于于前K开盘价:= HS300_OPEN > REF(HS300_OPEN,1); 

//大盘多空趋势: IFELSE(CLOSE>HS300_EMA, 1, -1),LINETHICK0;



//交易条件 
//开多条件:= 个股方向 = 1 AND 大盘信号 = 1 AND  TIME>094000 AND  TIME<145000;
//平多条件:= 大盘平仓信号 = -1 OR CROSS(EMA3,CLOSE) OR TIME>=145000;
开多条件:=  大盘信号 = 1 AND  TIME>094000 AND  TIME<145000;
平多条件:= 大盘平仓信号 = -1  OR TIME>=145000;

//开空条件:= 个股方向 = -1 AND 大盘信号 = -1  AND  TIME>094000 AND TIME<145000;
//平空条件:=  大盘平仓信号 = 1 OR CROSS(CLOSE, EMA3)OR TIME>=145000;
开空条件:=  大盘信号 = -1  AND  TIME>094000 AND TIME<145000;
平空条件:=  大盘平仓信号 = 1 OR TIME>=145000;



//交易系统
if   flag = 0 and 开多条件  then
BEGIN
BUY(开多条件 ,1000,marketR);//交易系统之开多操作
flag := 1;
end

if flag =1 and 平多条件  THEN
BEGIN
SELL(平多条件 ,1000,marketR); //交易系统之平多操作
flag := 0;
End


if flag =0 and 开空条件   THEN
BEGIN
BUYSHORT(开空条件 ,1000,marketR); //交易系统之开空操作
flag := -1;
End

if flag = -1 and 平空条件   THEN
BEGIN
SELLSHORT(平空条件 ,1000,marketR); //交易系统之平空操作
flag := 0;
End




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


加好友 发短信
等级:新手上路 帖子:81 积分:0 威望:0 精华:0 注册:2016/3/22 16:42:57
  发帖心情 Post By:2016/3/31 11:42:12    Post IP:125.33.53.41[只看该作者]

右边的代码:

INPUT:MAP1(10,5,100,1),MAP2(30,5,100,1),MAP3(60,5,100,1);


VARIABLE: 大盘信号 = 0;  //0:无信号状态  1:多头信号   -1:空头信号
VARIABLE: 大盘平仓信号 = 0;  //0:无信号状态  1:平空头信号   -1:平多头信号

EMA1: EMA(CLOSE, MAP1);
EMA2: EMA(CLOSE, MAP2);
EMA3: EMA(CLOSE, MAP3);

//大盘数据获取
// 1分钟
HS300_CLOSE: CALLSTOCK('SH300',vtCLOSE,1),LINETHICK0;
HS300_OPEN: CALLSTOCK('SH300',vtOPEN,1),LINETHICK0;
HS300_EMA: EMA(HS300_CLOSE, MAP3),LINETHICK0;

//5秒数据
HS300_CLOSE_SECOND: CALLSTOCK('SH300',vtCLOSE,22,5),LINETHICK0;
HS300_OPEN_SECOND: CALLSTOCK('SH300',vtOPEN,22,5),LINETHICK0;



//本K开盘价大于于前K开盘价:= HS300_OPEN > REF(HS300_OPEN,1); 

//大盘多空趋势: IFELSE(CLOSE>HS300_EMA, 1, -1),LINETHICK0;

//大盘信号: IFELSE(HS300_CLOSE>HS300_EMA, 1, -1),LINETHICK0;
//HS300_MA: STKINDI(
 OpenRefOpen:= HS300_OPEN > REF(HS300_OPEN,1);

 CloseRefOpen_Second:= HS300_CLOSE_SECOND > REF(HS300_OPEN_SECOND, 6);
 
 BeforBarIsDown:= REF(HS300_CLOSE,1)< REF(HS300_OPEN,1);
 
 BeforBarIsUp:= REF(HS300_CLOSE,1)> REF(HS300_OPEN,1);
 
 
 //用于顺势(和均线方向相反的情况)交易信号的发出 的量化数据 start
 IsDownContiTwo := REF(ISDOWN(),1) and  REF(ISDOWN(),2);
 IsUpContinTwo:= REF(ISUP(),1) and  REF(ISUP(),2) ;
 //用于顺势(和均线方向相反的情况)交易信号的发出 的量化数据 end
 
 
 //用于逆势(和均线方向相反的情况)交易信号的发出 的量化数据 start
 //本K前面的K线是否连续收阴
 IsDownContinThree:= REF(ISDOWN(),1) and  REF(ISDOWN(),2) and REF(ISDOWN(),3);
 //阳线上穿前阴K 50%
 UPOverP50:= HS300_CLOSE>(REF(HS300_CLOSE,1)+ABS(REF(HS300_OPEN,1)-REF(HS300_CLOSE,1))/2);
 
  //本K前面的K线是否连续收阳
 IsUpContinThree:= REF(ISUP(),1) and  REF(ISUP(),2) and REF(ISUP(),3);
  //阴线下穿前阳K 50%
 DownOverP50:= HS300_CLOSE<(REF(HS300_CLOSE,1)-ABS(REF(HS300_OPEN,1)-REF(HS300_CLOSE,1))/2);
 
 //用于逆势(和均线方向相反的情况)交易信号的发出 的量化数据 end
 
 
 //平仓信号
 //如果前K是阴线则本K为阳线的时候发出平空信号
if BeforBarIsDown and ISUP() then 
begin
    大盘平仓信号:= 1;
end 

 //如果前K是阳线则本K为阴线的时候发出平多信号
if BeforBarIsUp and ISDOWN() then 
begin
    大盘平仓信号:= -1;
end 

 
 //K线在指定均线之上
 if HS300_CLOSE > HS300_EMA then 
 begin
      //由阴转阳
     if  BeforBarIsDown and  HS300_CLOSE > HS300_OPEN and IsDownContiTwo then 
     begin
    大盘信号 := 1;
    DRAWICON(TRUE,LOW-2,1);       
     end 
     else if IsUpContinThree and DownOverP50 then 
     begin 
    大盘信号 := -1;
    DRAWICON(TRUE,HIGH+2,2);        
     end 
 end 
 
 else
 //K线在指定均线之下
  if HS300_CLOSE < HS300_EMA then
  begin 
    //由阳转阴线
    if BeforBarIsUp and HS300_CLOSE < HS300_OPEN and IsUpContinTwo then 
    begin 
    大盘信号 := -1;
    DRAWICON(TRUE,HIGH+2,2);       
    end 
    else if IsDownContinThree and UPOverP50 then
    begin
    大盘信号 := 1;
    DRAWICON(TRUE,LOW-2,1);  
    end
    
  end 
  
  
  
 

{
//多头信号量化判断
IF HS300_CLOSE > HS300_EMA AND REF(HS300_CLOSE,1)< REF(HS300_OPEN,1) THEN
BEGIN 
 //如果本K开盘价大于前K开盘价
   IF OpenRefOpen > 0 THEN
BEGIN
    大盘信号 := 1;
    //DRAWTEXT(TRUE,LOW,'HELLO',COLORRGB(255,255,255));
    //DRAWICON(TRUE,LOW-3,1);
END
   ELSE 
    BEGIN
       //本周期是暂时阳线,如果持续30秒(5*6)还是阳线则可以及时判断多头信号,而不用等到走完了1分钟再做决定
       if HS300_CLOSE > HS300_OPEN then 
  begin
   //通过5秒钟的K线来判断1分钟的K线是否持续为阳线
    if CloseRefOpen_Second > 0  then 
    begin 
       大盘信号 := 1;
       //DRAWTEXT(TRUE,LOW,'HELLO',COLORRGB(255,255,255));
       DRAWICON(TRUE,LOW-3,1);
    end 
  end 
   
    END       
END

//空头信号量化判断
HS300_OPEN > REF(HS300_OPEN,1)
//if K线在指定均线之下,并且上一个K线是阳线则进入逻辑分析流程
IF HS300_CLOSE < HS300_EMA AND REF(HS300_CLOSE,1)> REF(HS300_OPEN,1) THEN
BEGIN 
//如果本K线开盘价小于前K线(阳线)的开盘价
   IF OpenRefOpen < 0 THEN
BEGIN
    大盘信号 := -1;  //空头    
       DRAWTEXT(TRUE,LOW,'HELLO',COLORRGB(0,255,0));

END
   ELSE 
    BEGIN
       //本周期是暂时阳线,如果持续30秒(5*6)还是阴线则可以及时判断多头信号,而不用等到走完了1分钟再做决定
       if HS300_CLOSE > HS300_OPEN then 
  begin
     //通过5秒钟的K线来判断1分钟的K线是否持续为阴线
    if CloseRefOpen_Second < 0 then 
    begin 
       大盘信号 := -1;
        DRAWTEXT(TRUE,LOW,'HELLO',COLORRGB(0,255,0));
    end 
  end 
   
    END       
END 

}

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