以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://weistock.com/bbs/list.asp?boardid=4) ---- 变量使用的问题。 (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=96463) |
-- 作者:lisunnyday -- 发布时间:2016/4/19 15:58:37 -- 变量使用的问题。 我用代码调试的方法发现 :“开仓次数 ” “开仓方向 ” 两个变量 只在“ if 开仓方向 = 0 and COND1 then ”这个条件的控制语句执行,而且赋值为1,可为什么后来这个两个又自动变为了 0 ?? INPUT:N(30,10,50,2); INPUT:MAP3(60,12,90,2); INPUT:NPOINT(1,1,10,1); INPUT:NLOST(1,1,10,1); VARIABLE: 开仓次数:= 0; VARIABLE: 开仓方向:= 0; //1:买入股票 -1 :卖出股票 VARIABLE: 开基V:= 100; VARIABLE:开仓量1:=0; VARIABLE:开仓量2:=0; VARIABLE:开仓量3:=0; VARIABLE:开仓价1:=0; VARIABLE:开仓价2:=0; VARIABLE:开仓价3:=0; HS300_CLOSE: CALLSTOCK(\'SH300\',vtCLOSE,1),LINETHICK0; HS300_OPEN: CALLSTOCK(\'SH300\',vtOPEN,1),LINETHICK0; HS300_EMA: EMA(HS300_CLOSE, MAP3),LINETHICK0; EMA3:= EMA(HS300_CLOSE, MAP3);//,LINETHICK0; EMA22:= EMA(HS300_CLOSE, 34);//,LINETHICK0; //EMA1: EMA(HS300_CLOSE, 13);//,LINETHICK0; //EMA11: EMA(HS300_CLOSE, 8);//,LINETHICK0; XL:= (EMA3 - REF(EMA3,5))/5; XL2:= (EMA22 - REF(EMA22,5))/5; MA1:=MA(CLOSE, N); TTR := MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW)); ATR :=REF(MA(TTR,N),1); BEFORBARISDOWN:= REF(HS300_CLOSE,1)< REF(HS300_OPEN,1); BEFORBARISUP:= REF(HS300_CLOSE,1)> REF(HS300_OPEN,1); //用于顺势(和均线方向相反的情况)交易信号的发出 的量化数据 START ISDOWNCONTINTWO := REF(HS300_CLOSE,1)< REF(HS300_OPEN,1) AND REF(HS300_CLOSE,2)< REF(HS300_OPEN,2); ISUPCONTINTWO:= REF(HS300_CLOSE,1)> REF(HS300_OPEN,1) AND REF(HS300_CLOSE,2)> REF(HS300_OPEN,2) ; //用于顺势(和均线方向相反的情况)交易信号的发出 的量化数据 END //本K前面的K线是否连续收三个阴线 ISDOWNCONTINTHREE:= REF(HS300_CLOSE,1)< REF(HS300_OPEN,1) AND REF(HS300_CLOSE,2)< REF(HS300_OPEN,2)AND REF(HS300_CLOSE,3)< REF(HS300_OPEN,3); //本K前面的K线是否连续收三个阳线 ISUPCONTINTHREE:= REF(HS300_CLOSE,1)> REF(HS300_OPEN,1) AND REF(HS300_CLOSE,2)> REF(HS300_OPEN,2) AND REF(HS300_CLOSE,3)> REF(HS300_OPEN,3) ; //DRAWICON(); COND1:= ISDOWNCONTINTHREE AND HS300_CLOSE > HS300_OPEN; COND2:= ISUPCONTINTHREE AND HS300_CLOSE < HS300_OPEN; //DRAWICON(COND1,LOW-3,\'ICON1\'); // DRAWICON(COND2,h+3,\'ICON2\'); //加仓 //多单加仓 if COND1 and 开仓方向 = 1 AND 开仓次数 <3 then begin if 开仓次数 = 1 then begin
开仓量2 = 开基V * 3;
BUY(1,开仓量2,LIMITR,CLOSE);
开仓价2:= CLOSE;
开仓次数 := 开仓次数 + 1; end if 开仓次数 = 2 then begin
开仓量3 := 开基V * 5;
BUY(1,开仓量3,LIMITR,CLOSE);
开仓价3:= CLOSE;
开仓次数 := 开仓次数 + 1; end end //空单加仓 IF COND2 AND 开仓方向 = -1 AND 开仓次数 <3 THEN begin if 开仓次数 = 1 then begin
开仓量2 := 开基V * 3;
BUYSHORT(1,开仓量2,LIMITR,CLOSE);
开仓次数 := 开仓次数 + 1; end if 开仓次数 = 2 then begin
开仓量3 := 开基V * 5;
BUYSHORT(1,开仓量3,LIMITR,CLOSE);
开仓次数 := 开仓次数 + 1; end end 持仓均价:= (开仓价1*开仓量1+开仓价2*开仓量2+开仓价3*开仓量3)/(开仓量1+开仓量2+开仓量3); //出场 //固定止盈止损 if 开仓方向 = 1 then begin 止盈:=持仓均价 < close AND ( close - 持仓均价)/持仓均价> 0.01* NPOINT; 止损:= 持仓均价 > close AND ( 持仓均价-close)/持仓均价> 0.01* NLOST; IF COND2 OR 止盈 OR 止损 THEN BEGIN SELL(1,(开仓量1+开仓量2+开仓量3),LIMITR,close);
//出场后还原初始值
开基V:=100;
开仓次数 := 0;
开仓方向 := 0;
开仓量:= 0;
开仓均价:=0;
开仓量1:=0;
开仓量2:=0;
开仓量3:=0;
开仓价1:=0;
开仓价2:=0;
开仓价3:=0;
持仓均价:=0; END //DRAWICON(1,h+1,\'ICON5\'); end if 开仓方向 = -1 then begin 止盈:=持仓均价 > close and ( 持仓均价-close)/持仓均价> 0.01* NPOINT; 止损:= 持仓均价 < close and ( close - 持仓均价)/持仓均价> 0.01* NLOST; IF COND1 OR 止盈 OR 止损 THEN BEGIN SELLSHORT(1,(开仓量1+开仓量2+开仓量3),LIMITR,close);
//出场后还原初始值
开基V:=100;
开仓次数 := 0;
开仓方向 := 0;
开仓量:= 0;
开仓均价:=0;
开仓量1:=0;
开仓量2:=0;
开仓量3:=0;
开仓价1:=0;
开仓价2:=0;
开仓价3:=0;
持仓均价:=0; END end //第一次开仓 多 if 开仓方向 = 0 and COND1 then begin
if XL>0 then //第一次开仓,同时满足XL>0则重仓入场 //开仓次数 = 0 and
begin
开基V := 开仓基数 *2;
end
开仓量1 := 开基V; BUY(1,开仓量1,LIMITR,CLOSE); 开仓次数 := 开仓次数 + 1; 开仓方向 := 1; 开仓价1:= CLOSE; DRAWICON(1,h+1,\'ICON1\'); end //第一次开仓 空 if 开仓方向 = 0 and COND2 then begin
if XL< 0 then //第一次开仓,同时满足XL>0则重仓入场 //开仓次数 = 0 and
begin
开基V := 开仓基数 *2;
end
开仓量1 := 开基V; BUYSHORT(1,开仓量1,LIMITR,CLOSE); 开仓次数 := 开仓次数 + 1; 开仓方向 := -1; 开仓价1:= CLOSE; DRAWICON(1,L-1,\'ICON2\'); end |
-- 作者:lisunnyday -- 发布时间:2016/4/19 15:59:54 -- “开仓次数 ” “开仓方向 ” 两个变量 —— 这个两个变量,没有在其他的代码执行过修改的动作。虽然其他代码有相关修改的代码,但是没有走进去 |
-- 作者:jinzhe -- 发布时间:2016/4/19 16:08:46 -- 你举个具体的例子说明一下“没有在其他的代码执行过修改的动作。虽然其他代码有相关修改的代码,但是没有走进去” |
-- 作者:lisunnyday -- 发布时间:2016/4/19 16:10:59 -- 用设置断点调试的方法,就可以发现。 |
-- 作者:lisunnyday -- 发布时间:2016/4/19 16:11:47 -- 你在每个变量改变的位置设置断点,然后进入调试, 你就发现我所说的情况了 |
-- 作者:jinzhe -- 发布时间:2016/4/20 8:51:55 -- 那么就是上面的重置为0的条件也满足了 |