以文本方式查看主题

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

--  作者:linuxbai
--  发布时间:2014/2/28 15:04:13
--  [求助]公式编写问题
假设在1分钟周期下,从当天开盘开始,每到3分钟或3分钟整数倍,就把变量a增加1,见如下代码(以下代码无实际意义,仅供调试)
问题:当开盘第3分钟时,va确实变为1,但是当第4分钟时,vb的值还是0。如何才能在第4分钟正确的ref到第3分钟a的值?


RUNMODE:0; //使用逐周期运行模式

VARIABLE:a=0;
vb:ref(a,1),nodraw;

sCurOpenMin:OPENMINUTES(TIME),nodraw;  //开盘分钟数

if (sCurOpenMin = 1) //在开盘第一分钟时,把a初始化为0
then a:=0;
if ((sCurOpenMin ) % 3 = 0) //每到3的整数倍时,a加1
then a := a+1;


va:a,NODRAW;


--  作者:fly
--  发布时间:2014/2/28 16:28:40
--  

图片点击可在新窗口打开查看此主题相关图片如下:1.jpg
图片点击可在新窗口打开查看
打上上面的勾即可
--  作者:linuxbai
--  发布时间:2014/2/28 18:51:46
--  
已按照您说的操作,依然不起作用,请看截图,
当日开盘第4分钟各个变量的值
另外,我的程序中没有“费率设置”的按钮,不知有没有关系

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


--  作者:linuxbai
--  发布时间:2014/3/3 9:18:18
--  
up
--  作者:linuxbai
--  发布时间:2014/3/3 10:30:41
--  
急求答案……
--  作者:jinzhe
--  发布时间:2014/3/3 10:40:58
--  

RUNMODE:0; //使用逐周期运行模式


VARIABLE:a=0;

 

sCurOpenMin:OPENMINUTES(TIME),nodraw;    //开盘分钟数


if (sCurOpenMin = 1)   //在开盘第一分钟时,把a初始化为0
then a:=0;
if ((sCurOpenMin ) % 3 = 0)   //每到3的整数倍时,a加1
then a := a+1;

 

vb:ref(a,1),nodraw;
va:a,NODRAW;

 

 

改下顺序

公式计算顺序是从上到下的,你的那种写法ref a取的是没有计算过的a值,修改过后就是正常计算了


--  作者:linuxbai
--  发布时间:2014/3/3 11:22:09
--  
疑问:在当前周期,ref(a,1)取上周期a的值,不管ref(a,1)放在代码的什么地方,上周期a的值都应该已经计算出来了?

另外,想实现下述效果应该怎么写?
//根据上一个周期a的值来计算本周期a的值

RUNMODE:0; //使用逐周期运行模式


VARIABLE:a=0;

 

va:ref(a,1),nodraw;


if (va % 3 = 0)   
then a: = a+2;
else 
then a := a+1;

 


 


--  作者:linuxbai
--  发布时间:2014/3/3 13:14:44
--  
上面的需求看起来比较奇怪,改一下说法:

想实现下述效果应该怎么写?
//根据上N个周期a的值来计算本周期a的值(N是变量,当N不等于1的时候没有问题,当N等于1的时候,就出问题了)

RUNMODE:0; //使用逐周期运行模式


VARIABLE:a=0;

 

va:ref(a,n),nodraw;


if (va % 3 = 0)   
then a: = a+2;
else 
then a := a+1;


--  作者:jinzhe
--  发布时间:2014/3/3 13:34:25
--  

把else后面的then删了

 


RUNMODE:0; //使用逐周期运行模式


VARIABLE:a=0;

n:=1;


va:ref(a,n),nodraw;

 

if barpos>n then begin
if (va % 3 = 0)  
then a: = a+2;
else
 a := a+1;
end

aa:a;


--  作者:linuxbai
--  发布时间:2014/3/3 13:59:00
--  
多谢