以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  为什么上面的执行了,下面这条却不执行?  (http://weistock.com/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.你说这个逻辑错误不是错误来的,只是备用,里面的操作对我的程序不会有任何影响