以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  请教成交量累计达到一定数值画线问题  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=172003)

--  作者:plmokn
--  发布时间:2019/9/10 19:56:02
--  请教成交量累计达到一定数值画线问题
在一分钟K线图中,每天从开盘开始计算成交手数,在当成交手数达到大于20000手时,取当根K线之前20000手的加权平均价 画横线,
并从下一根K线开始从0开始重新计算成交手数,当成交手数再一次达到大于20000手时,取当根K线之前20000手的加权平均价 画横线,
以后以此类推,直到收盘,下一交易日重新开始计算。   

--  作者:FireScript
--  发布时间:2019/9/11 9:32:29
--  
 “在当成交手数达到大于20000手时,取当根K线之前20000手的加权平均价 画横线” 这个是指在成交量达到20000 K 位置统计上次成交量20000位置到现在 这段时间收盘价的加权平均价?

--  作者:plmokn
--  发布时间:2019/9/11 14:03:29
--  

是的


--  作者:plmokn
--  发布时间:2019/9/11 14:03:54
--  
是的
--  作者:FireScript
--  发布时间:2019/9/11 14:28:13
--  
 按照成交量作为权重?
--  作者:plmokn
--  发布时间:2019/9/11 15:01:55
--  
是的
--  作者:FireScript
--  发布时间:2019/9/11 17:12:46
--  
 VARIABLE:ct:=0,mark:=0,res:=0;//ct累加成交量,mark标识成交量达到20000时候的位置

if TODAYBAR=1 or BARPOS=1 then  ct:=0;//初始K或者当日第一个K 重置ct的值
ct:=ct+vol;

if ct<20000 then //不在满足条件的位置,mark都重置成0 方便进行区分
begin
mark:=0;
end

if ct>20000 or time=CLOSETIME(0) then //满足20000量的情况下 或者是收盘K了 重置ct ,并设置mark为1
begin
ct:=0;
mark:=1;
end

len:BARSLAST(mark=1 or (not(mark)  and BARPOS=1));//获取跨度位置,上次满足20000量位置或者第一个K的位置
p1:=vol*c;
len0:=ref(len,1)+2;//获取需要统计的K线周期跨度
result:if(len=0,sum(p1,len0)/(sum(vol,len0)),0),NODRAW;//计算出来的加权价格,

if result<>0 then res:=result;
k:res;//输出的线条

1.由于没有符合需求直接算加权的函数,上面代码逻辑上有点绕,我尽量注释了。另外这里的逻辑无法直接使用绘制图形,绘图函数有一定限制。

2.只在满足20000量或者收盘K上的位置计算一次。画线以变量指标的输出线作为替代(变量K)。

仅供参考。
[此贴子已经被作者于2019/9/11 17:13:34编辑过]

--  作者:plmokn
--  发布时间:2019/9/14 13:00:57
--  

谢谢FireScript老师