以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (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=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 ???? [此贴子已经被作者于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的值) 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 |