以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp) -- 公式模型编写问题提交 (http://222.73.7.161/bbs/list.asp?boardid=4) ---- 为什么上面的执行了,下面这条却不执行? (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=175250) |
-- 作者:qq代人发帖 -- 发布时间:2020/3/30 9:01:47 -- 为什么上面的执行了,下面这条却不执行? 请教:金字塔里面,图标程序化,两条语句是连续的,为什么上面的执行了,下面这条却不执行? MSGOUT(ISLASTBAR,\'Place2.2\'); BUY(1,SS0,MARKET); SS0默认是1 |
-- 作者:FireScript -- 发布时间:2020/3/30 9:22:07 -- 你说的不执行是指图表上没有显示开多信号?你看下当前图表虚拟持仓是0 还是空头仓位 如果是空头仓位,是触发不了开多信号的。 |
-- 作者:CTR1013 -- 发布时间:2020/3/30 10:43:14 -- 没有显示开多信号,虚拟持仓是多仓,就是不明白为什么总是不执行开多操作。 |
-- 作者:FireScript -- 发布时间:2020/3/30 11:00:40 -- 光这2句代码不可能有问题的。这个开仓都没有限制。在图表上肯定会出信号的。 你看下是不是虚拟资金不足了。 |
-- 作者:CTR1013 -- 发布时间:2020/3/30 11:22:59 -- 如果是资金不够,那也应该是在交易记录那里提示才对啊,现在是根本就没有下达交易指令,但是如果我打开了持仓同步则会马上开仓,不打开持仓同步就没有任何反应。 |
-- 作者:FireScript -- 发布时间:2020/3/30 12:59:48 -- 我说的是模型的虚拟资金,不是实盘的那个资金,你把ASSET 也输出看下。如果是虚拟资金不足 也是可能导致不出信号的,如果不出信号那肯定会无法下单。 另外你最好提供下你代码,交易周期,品种 我们本地从代码上排查下,仅仅上面2行代码 无法进一步判断为什么没有信号。 |
-- 作者:CTR1013 -- 发布时间:2020/3/30 14:09:58 -- 实在不明白为什么金字塔要弄这么复杂,弄什么虚拟资金虚拟持仓,该怎么执行就怎么执行啊,弄这么多干嘛? |
-- 作者:CTR1013 -- 发布时间:2020/3/30 21:33:03 -- 以下是我简化后的代码: WARNING_DISABLE:4; WARNING_DISABLE:9; VARIABLE:BuySell=\'00\'; BuySell:=GETINIFILESTRING(\'C:\\SystemSet.ini\',\'Gen\',\'BuySell\'); if BuySell=\'\' then BuySell:=\'00\'; SS0:=1; HoldFlag:if(TBUYHOLDING(1)<>0,1,if(TSELLHOLDING(1)<>0,-1,0)),NODRAW,NOAXIS;//这个在没登录的时候都是0 if ISLASTBAR then begin
if (BuySell=\'B1\' or BuySell=\'B2\' or BuySell=\'B3\') then begin
MSGOUT(ISLASTBAR,\'Place1\' & \',Holding:\' & numtostr(Holding,0));
if HoldFlag=0 then begin
MSGOUT(ISLASTBAR,\'Place2\' & \',Holding:\' & numtostr(Holding,0));
if HoldFlag<0 then begin
MSGOUT(ISLASTBAR,\'Place2.1\' & \',Holding:\' & numtostr(Holding,0));
SELLSHORT(1,0,MARKET);//做多前先平空
end
HoldFlag:=if(TBUYHOLDING(1)<>0,1,if(TSELLHOLDING(1)<>0,-1,0));
if HoldFlag=0 then begin
MSGOUT(ISLASTBAR,\'Place2.2\' & \',Holding:\' & numtostr(Holding,0));
BUY(1,SS0,MARKET);
HoldFlag:=if(TBUYHOLDING(1)<>0,1,if(TSELLHOLDING(1)<>0,-1,0));//这个在没登录的时候都是0
end
end
else if HoldFlag>0 then begin
MSGOUT(ISLASTBAR,\'Place2.3\' & \',Holding:\' & numtostr(Holding,0));
end
end end
也就是说,我的想法是从C:\\SystemSet.ini文件中读取BuySell变量的值来判断交易动作,现在我文件中BuySell变量的值为B2,运行都是正常的,输出如下: 2020/03/23 09:00:24 Place1,Holding:0 2020/03/23 09:00:24 Place2,Holding:0 2020/03/23 09:00:24 Place2.2,Holding:0 我现在的疑问是为什么到BUY(1,SS0,MARKET)这一步的时候没有任何反应? |
-- 作者:wenarm -- 发布时间:2020/3/31 1:25:20 -- 你用的应是走完一根k模式,上面的代码整体逻辑是只在最新一根k上执行且判断下单条件。再条件成立时,该根k走完的一瞬间,它就再是最后一根k了,所以信号也就随之消失了(移动到下根k上),自然不会触发下单动作。 如果你想触发可以用固定时间间隔模式。
注: 1. 图表中不要使用后台函数和配置类函数。会造成图表信号闪烁。如果想操作实际账户的持仓,直接使用后台程序化。
2. 检查下你的begin end嵌套语句逻辑存在错误。HoldFlag=0怎么还能嵌套子条件HoldFlag<0 ?猜测应是并列关系。 if HoldFlag=0 then begin MSGOUT(ISLASTBAR,\'Place2\' & \',Holding:\' & numtostr(Holding,0));
if HoldFlag<0 then begin
MSGOUT(ISLASTBAR,\'Place2.1\' & \',Holding:\' & numtostr(Holding,0));
SELLSHORT(1,0,MARKET);//做多前先平空
end
[此贴子已经被作者于2020/3/31 1:30:52编辑过]
|
-- 作者:CTR1013 -- 发布时间:2020/3/31 12:14:16 -- 1.最后一根K线的问题会导致下面这两句只执行上面这一句,下面那句不执行吗? MSGOUT(ISLASTBAR,\'Place2.2\' & \',Holding:\' & numtostr(Holding,0)); BUY(1,SS0,MARKET); 2.我测试的时候看到用后台函数能够得到正确的数据,为什么会导致信号闪烁呢?在什么情况下会信号闪烁?另外我只有标准版,没有专业版,所以用不了后台交易程序 3.你说这个逻辑错误不是错误来的,只是备用,里面的操作对我的程序不会有任何影响
|