以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://weistock.com/bbs/list.asp?boardid=4) ---- 请教DEBUGFILE和DEBUGFILE2 (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=74408) |
-- 作者:szy56801 -- 发布时间:2015/1/14 10:43:11 -- 请教DEBUGFILE和DEBUGFILE2 if thodling = 0 and 开多 then begin DEBUGFILE(...); DEBUGFILE2(...); end;
d2是输出历史值和当前值,也就是每个tick都会输出来,而d是输出当前的值。
那么问题是我为何在用d的时候也是每个tick都输出?首先不可能每个tick都满足开多条件。相关的背景如下: ①纯后台,没有一边用图表一边用后台; ②固定1秒扫描 + 分笔扫描 |
-- 作者:jinzhe -- 发布时间:2015/1/14 10:52:59 -- 贴全部代码我们做本地测试 |
-- 作者:szy56801 -- 发布时间:2015/1/14 14:45:26 -- //代码如下: INPUT: lots(1,1,10,1); VARIABLE: signal := 0; h_1 := ref(h,1); zjj := (h_1 + l_1) / 2,NODRAW; if ss = 0 and h >= (h_1 + l_1) / 2 then BEGIN
if ss > 0 and l <= l_1 then BEGIN //后台部分 tbuy(workmode = 1 and ss < signal, (signal - ss) * lots, MKT);
我贴出日志: 2015-01-14 14:35:49.687 ss=0 ---------687入场
|
-- 作者:jinzhe -- 发布时间:2015/1/14 15:06:55 -- VARIABLE 改成 GLOBALVARIABLE
公式改成序列计算 |
-- 作者:szy56801 -- 发布时间:2015/1/14 15:13:17 -- 谢谢版主!
也就是后台固定轮询模式时需要把公式改为序列? 只有等k走完模式公式才为逐K计算? |
-- 作者:jinzhe -- 发布时间:2015/1/14 15:22:36 -- 不是,后台基本都是序列计算,你在后台上使用了图表函数所以到了公式被切换到逐k线计算 |
-- 作者:szy56801 -- 发布时间:2015/1/15 10:56:08 -- ①改了GLOBALVARIABLE,同时注释掉了图表的函数。 ②逐K改为序列 但是依然每个tick都打印出来,并且开仓平仓点位都不对了,你们本地测试下看看,代码在下面 2015-01-15 10:21:59.321 ss=0 2015-01-15 10:21:59.337 h=3510 2015-01-15 10:21:59.337 zjj=3507 2015-01-15 10:22:06.618 ss=1 2015-01-15 10:22:06.633 l=3506 2015-01-15 10:22:06.633 l_1=3506 2015-01-15 10:22:08.024 ss=0 2015-01-15 10:22:08.040 h=3510 2015-01-15 10:22:08.040 zjj=3507 2015-01-15 10:22:09.602 ss=1 2015-01-15 10:22:09.602 l=3506 2015-01-15 10:22:09.618 l_1=3506 2015-01-15 10:22:11.087 ss=0 2015-01-15 10:22:11.102 h=3510 2015-01-15 10:22:11.102 zjj=3507 2015-01-15 10:22:11.977 ss=0 2015-01-15 10:22:11.977 h=2508 2015-01-15 10:22:11.977 zjj=2505 2015-01-15 10:22:19.040 ss=0 2015-01-15 10:22:19.055 h=2508 2015-01-15 10:22:19.055 zjj=2505 INPUT: lots(1,1,10,1); GLOBALVARIABLE: signal := 0; ss := signal; h_1 := ref(h,1); l_1 := ref(l,1); zjj := (h_1 + l_1) / 2,NODRAW; if ss = 0 and h >= (h_1 + l_1) / 2 then BEGIN DEBUGFILE(\'C:\\TEST1.TXT\',\'ss=%.0f\',ss); DEBUGFILE(\'C:\\TEST1.TXT\',\'h=%.0f\',h); DEBUGFILE(\'C:\\TEST1.TXT\',\'zjj=%.0f\',zjj); signal := 1; myprice := (h_1 + l_1) / 2; end; if ss > 0 and l <= l_1 then BEGIN DEBUGFILE(\'C:\\TEST1.TXT\',\'ss=%.0f\',ss); DEBUGFILE(\'C:\\TEST1.TXT\',\'l=%.0f\',l); DEBUGFILE(\'C:\\TEST1.TXT\',\'l_1=%.0f\',l_1); signal := 0; myprice := min(l_1,o); end; //后台部分 if ss < 0 and signal >= 0 then begin tsellshort(workmode = 1, -ss * lots, MKT); //sellshort(workmode = 0, -ss * lots, LIMITR, myprice); ss := 0; end; if ss > 0 and signal <= 0 then begin tsell(workmode = 1, ss * lots, MKT); //sell(workmode = 0, ss * lots, LIMITR, myprice); ss := 0; end; tbuy(workmode = 1 and ss < signal, (signal - ss) * lots, MKT); //buy(workmode = 0 and ss < signal, (signal - ss) * lots, LIMITR, myprice); tbuyshort(workmode = 1 and ss > signal, (ss - signal) * lots, MKT); //buyshort(workmode = 0 and ss > signal, (ss - signal) * lots, LIMITR, myprice); |
-- 作者:fly -- 发布时间:2015/1/15 11:31:04 -- DEBUGFILE,这里就说明你给了会在最后一周期输出,只要满足条件就输出 ②固定1秒扫描 + 分笔扫描 那么基本上就是1秒左右,只要满足条件h >= (h_1 + l_1) / 2或l <= l_1,就会有输出 在最后一个周期输出指定的调试字符串到一个指定的文件中
你不就是输出下面这6个值吗? 2015-01-15 10:21:59.321 ss=0 怎么还跟开仓平仓点位联系上了,
你的ss和signal联系的非常紧密,每次运算都会根据运算结果进行赋值的 [此贴子已经被作者于2015/1/15 11:31:23编辑过]
|