以文本方式查看主题

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

--  作者:saintlucifer
--  发布时间:2019/4/22 11:02:42
--  [求助]如何编写以下策略

有如下变量:

v2 为最近一段t时间内,当前k收盘价-t时间段内的k开盘价;例如当t=1,就是当前k,为close-open;当t=2,则为close-ref(open,1);当t=3,则为close-ref(open,2);

v1 为最近一段t市价内,昨k收盘价-t时间段内的昨k开盘价;例如当t=1,则为ref(close,1) - ref(open,1);当t=2,则为ref(close,2) - ref(open,3);当t=3,则为ref(close,3)-ref(open,5);

每条k都计算t=1到50时,a[t]=(v2-v1)/t 的数值,并记录其中的最大值a[max]及此时的t数值;

最后,再记录最近500条k中,每条k的a[max]里面最大那个,最好能分别记录a的正负极值,就是正的最大a[max],以及负的最小a[-max].

 

请教如何写出以上策略。

 

 

 

 

[此贴子已经被作者于2019/4/22 11:03:21编辑过]

--  作者:FireScript
--  发布时间:2019/4/22 13:15:32
--  
 “v1 为最近一段t市价内,昨k收盘价-t时间段内的昨k开盘价;例如当t=1,则为ref(close,1) - ref(open,1);当t=2,则为ref(close,2) - ref(open,3);当t=3,则为ref(close,3)-ref(open,5);”

后面这里的规律是ref(c,t)-ref(o,2*t-1)?

--  作者:FireScript
--  发布时间:2019/4/22 13:52:28
--  
t:=10;//自行定义td的值。
temp:=-100000;//初始定义一个比较小的值
j:=0;
for i=1 to t  do
begin
v1:ref(c,i)-ref(o,2*i-1);
v2:c-ref(o,i-1);
a:=(c-ref(o,i-1)-ref(c,i)+ref(o,2*i-1))/i;
if a>temp then //保存最大值以及对应的t值
begin
temp:=a;
j:=i;
end
end

max_v:temp;//最大值
max_t:j;//最大值对应的t

算法上大致这样处理就行了。需要注意:
1.t值较大以及K线比较多的情况下,计算量非常大。本地测试还是比较卡的。
2.这个计算涉及到的历史数据比较多。K线排序靠前的若干K的值是不完整的。比如第40个K的位置,t=50情况下 压根就ref不到指定的数据。你这个至少要2倍t的数据量才行。

“再记录最近500条k中,每条k的a[max]里面最大那个,最好能分别记录a的正负极值,就是正的最大a[max],以及负的最小a[-max].”
这个直接用hhv 对max_v进行一下处理就行了。

最小值的记录,模仿最大值的方式处理下就行了。

--  作者:saintlucifer
--  发布时间:2019/4/23 9:17:12
--  

编译的时候出现这个提示,看了下解决方案,似乎这种情况下不理也可以?

 

第 7 行,REF 函数在循环语句中可能会带来风险。
第 8 行,REF 函数在循环语句中可能会带来风险。
第 8 行,REF 函数在循环语句中可能会带来风险。

请参阅帮助公式部分的解决方案。
http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=130


--  作者:yukizzc
--  发布时间:2019/4/23 9:58:45
--  
不用理会,直接运行于图上就行了
--  作者:out-u
--  发布时间:2019/4/24 15:58:05
--  
直接用ZIG了事。你那计算费工费时