以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  全局变量问题  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=170669)

--  作者:qucheng686
--  发布时间:2019/6/26 17:49:29
--  全局变量问题

variable:全局开仓价:=TENTERPRICE;
测试2:ref(全局开仓价,1);
DEBUGFILE(\'D:\\TESTg.TXT\',\'全局开仓价:%.2f\',全局开仓价);
DEBUGFILE(\'D:\\TESTg.TXT\',\'测试2:%.2f\',测试2);

输出的日志
2019-06-26 17:41:55.838    全局开仓价:28372.00
2019-06-26 17:41:55.838    测试2:0.00


1.为什么测试2为0?  
2.怎么可以让测试2的值和全局开仓价 一致?

--  作者:qucheng686
--  发布时间:2019/6/27 0:09:51
--  
WARNING_DISABLE:4;
WARNING_DISABLE:9;

上次开多:=TTYPEBAR(1,1);
上次开多价:=ref(close,上次开多);

variable:全局开多价:=上次开多价;

if TENTERBARS(1)>=0  then begin
DEBUGFILE(\'D:\\TEST00.TXT\',\'----------------------------\',0);
DEBUGFILE(\'D:\\TEST00.TXT\',\'品种代码:\'+STKLABEL,0);
DEBUGFILE(\'D:\\TEST00.TXT\',\'时间:%.2f\',DATE+19000000);
DEBUGFILE(\'D:\\TEST00.TXT\',\'time:%.0f\',TIME());
DEBUGFILE(\'D:\\TEST00.TXT\',\'上次开仓到当前的周期数TENTERBARS(1):%.0f\',TENTERBARS(1));
DEBUGFILE(\'D:\\TEST00.TXT\',\'上次开仓价格:%.2f\',TENTERPRICE);

DEBUGFILE(\'D:\\TEST00.TXT\',\'全局开多价:%.2f\',全局开多价);
DEBUGFILE(\'D:\\TEST00.TXT\',\'上次开多价:%.2f\',上次开多价);
DEBUGFILE(\'D:\\TEST00.TXT\',\'上次开多:%.2f\',上次开多);
DEBUGFILE(\'D:\\TEST00.TXT\',\'----------------------------\',0);
end




日志
----------------------
2019-06-27 00:07:39.873    ----------------------------
2019-06-27 00:07:39.873    品种代码:NI00
2019-06-27 00:07:39.874    时间:20190627.00
2019-06-27 00:07:39.874    time:40700
2019-06-27 00:07:39.874    上次开仓到当前的周期数TENTERBARS(1):5
2019-06-27 00:07:39.875    上次开仓价格:101090.00
2019-06-27 00:07:39.875    全局开多价:98520.00
2019-06-27 00:07:39.875    上次开多价:101080.00
2019-06-27 00:07:39.876    上次开多:5.00
2019-06-27 00:07:39.876    ----------------------------


为什么全局开多价是 :98520.00 ????


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


[此贴子已经被作者于2019/6/27 0:10:24编辑过]

--  作者:yukizzc
--  发布时间:2019/6/27 9:28:18
--  
不要这么记录,你是想要做什么动作呢?
这两个记录各自是干什么的

--  作者:FireScript
--  发布时间:2019/6/27 9:33:33
--  
他取的是初次初始化时候的一个值,也就是下面这里的全局变量初次初始化时候的值。而且取的是开仓K位置的收盘价。 这个和监控里面值没有关系了已经,监控那里的价格要么是挂单价要么是成交价,要么是下单当时的最新价。

上次开多:=TTYPEBAR(1,1);
上次开多价:=ref(close,上次开多);

variable:全局开多价:=上次开多价;

--  作者:FireScript
--  发布时间:2019/6/27 9:50:03
--  
variable:全局开仓价:=TENTERPRICE;
测试2:ref(全局开仓价,1);

这种测试了,是无法获取值的。

--  作者:qucheng686
--  发布时间:2019/6/27 10:53:17
--  
谢谢版主测试. 

我把需求说下吧. 我实在搞不定了, 麻烦版主给下可以通过运行的代码.

需求: 后台程序化里需要实现一种止盈条件  :开多仓后, 收盘价格上穿A1, 然后 收盘价格再下穿A1, 触发止盈.

A1:(开仓价+日线atr)

--  作者:FireScript
--  发布时间:2019/6/27 11:09:11
--  
1.a1这里取的是实际成交价对吧。
2.开仓之后的趋势也有可能是先下穿a1了。这种如何处理,等待下穿上穿后再下穿?

--  作者:qucheng686
--  发布时间:2019/6/27 11:13:47
--  
a1是 (开仓价+日线atr的值)

1.a1的开仓价实际成交价(如果实现起来麻烦, 取当时开仓的close也可以) .
2.开仓之后, 应该不会先下穿a1的, 因为a1的值永远比开仓价要大. (如果实在有这种情况,那就  等待下穿上穿后再下穿)

--  作者:qucheng686
--  发布时间:2019/6/27 14:06:00
--  
版主 ,上面这个需求可以实现吗?
--  作者:FireScript
--  发布时间:2019/6/27 14:30:11
--  
 //需要说明下:当时成交价不是很好处理,因为无法确定到底什么时候会成交,如果还有其他开仓混杂的话就更不好处理了。所以可以按照当时最新价处理。
//

GLOBALVARIABLE:etprice:=0,mark:=0,a1:=0;

if  开仓条件 and  mark=0 then //必须保证这个开仓条件是开仓的充分必要条件
begin
tbuy(1,1,mkt);
etprice:=DYNAINFO( 7);//获取最新价
a1:=etprice+日线atr;//计算a1
mark:=1;//标记开仓位置
end



len:BARSLAST(mark=1);//开仓距离现在的位置
jc:cross(c,a1);//上穿
sc:cross(a1,c);
cd:count(jc,len)=1 and sc;//必须上穿了一次,然后当前是下穿说明满足止盈条件

if cd and TBUYHOLDINGEX(\'\',\'\',1)>0 and mark=1 then
begin
mark:=0;
tsell(1,1,mkt);    
end