以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://weistock.com/bbs/list.asp?boardid=4) ---- 关于VARIABLE定义的变量的问题 (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=95577) |
-- 作者:lisunnyday -- 发布时间:2016/3/31 10:50:31 -- 关于VARIABLE定义的变量的问题 如下代码,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 -- 发布时间:2016/3/31 10:55:40 -- 这样的代码不会出现一直是0没有变化的结果。请给出调试结果 |
-- 作者:lisunnyday -- 发布时间:2016/3/31 11:05:09 -- 好像是我看错了, 我再检查看看。谢谢 |
-- 作者:lisunnyday -- 发布时间:2016/3/31 11:21:57 -- 有图是大盘的交易信号,左图是具体交易的个股,为什么左图的股票不停的开仓平仓呢 ? 如果控制让左图的开仓平仓动作和右图的一致呢 ?请指导。谢谢 //交易条件 开多条件:= 大盘信号 = 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 -- 发布时间:2016/3/31 11:25:13 -- 首先从表面上看左右两边不是同一个公式,公式名就不一样,所以信号不一样是正常的 其次你的代码没有给完整,不能用以调试问题 |
-- 作者:lisunnyday -- 发布时间:2016/3/31 11:26:36 -- 两个公式里出信号的代码是一样的。只是左边的公式多了交易动作 |
-- 作者:jinzhe -- 发布时间:2016/3/31 11:34:52 -- 请给完整代码 |
-- 作者:lisunnyday -- 发布时间:2016/3/31 11:40:22 -- 好的。马上 |
-- 作者:lisunnyday -- 发布时间:2016/3/31 11:41:16 -- 左边的代码: //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 -- 发布时间:2016/3/31 11:42:12 -- 右边的代码: 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 } |