以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (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=171965)

--  作者:期货大圣
--  发布时间:2019/9/7 14:00:01
--  请教老师,金字塔里如何实现循环??
zj:=1; //资金
zj:=ref(zj,1)*ylbl; //前一天的资金*当天的盈利比例

这个如何实现,不会用for

--  作者:FireScript
--  发布时间:2019/9/9 8:52:58
--  
 没能明白你这个需求是怎样的,请详细描述下你的需求。你上面这个代码没看出来哪里需要循环的。
--  作者:期货大圣
--  发布时间:2019/9/9 15:12:47
--  
具体需求就是,我每天我根据K线计算出来一个盈利率,来计算每天的资金净值
--  作者:FireScript
--  发布时间:2019/9/9 15:16:26
--  
很简单这样就行了
for i=0 to 10 DO
begin
//循环内部代码
end

不过循环很容易卡死。K线数比较多循环次数多的情况下很容易卡死

--  作者:期货大圣
--  发布时间:2019/9/9 15:48:50
--  
zj:=1;
for i=0 to 10 DO
begin
zj=ref(zj,1)*ylbl;
end

盈利曲线2:zj;

我写的不会吧,幅图上zj一直等于1

--  作者:FireScript
--  发布时间:2019/9/9 16:10:01
--  
幅图 那指标是序列模式的吧。改成逐K吧。不会应该会比较卡。 建议你还是提供下你的思路,我们看下啥情况。

--  作者:期货大圣
--  发布时间:2019/9/9 16:34:46
--  
改成逐K,并且把只计算最后一根K线去掉了,还是如初。

好像跟我的思路关系不大吧,主要是语句表达吧
我这个幅图主要是想显示某项策略的资金曲线,根据信号开仓后,计算每天的盈亏比例,计算每天的资金净值。
大致相当于回测。因为回测都是按收盘价平仓的,我这个是指定价格平仓的。

ggg:=ref(hhv(h,3),1); //三周期高点
ddd:=ref(llv(l,3),1); //三周期低点

b:=cross(c,ggg) and ref(barslast(cross(c,ggg)),1)>ref(barslast(cross(ddd,c)),1); //开多条件
s:=cross(ddd,c) and ref(barslast(cross(c,ggg)),1)<ref(barslast(cross(ddd,c)),1); //开空条件
//DRAWICON(b ,0 ,6 ,0 );
//DRAWICON(s ,0 ,7 ,0 );
btime:=barslast(b); //上次开多信号到现在周期数
stime:=barslast(s); //上次开空信号到现在周期数
bpb:=l<ddd and c>ddd and btime>0 and btime<stime; //持有多仓时,同一K线平仓再开多仓
sps:=h>ggg and c<ggg and stime>0 and stime<btime; //持有空仓时,同一K线平仓再开空仓


batr:=ref(c,btime)-ref(l,btime+2); //上次开多时,止损距离点数
satr:=ref(h,stime+2)-ref(c,stime); //上次开空时,止损距离点数

//每日盈利与开仓时的止损空间的比例
ylbl:=if(btime<stime,
if(btime=0,(ref(c,1)-ggg)/satr,if(bpb=1,(ddd-ref(c,1))/batr,(c-ref(c,1))/batr)), //持有多仓时候,每天的盈利幅度,区别是否当天平多再开多
if(stime=0,(ddd-ref(c,1))/batr,if(sps=1,(ref(c,1)-ggg)/satr,(ref(c,1)-c)/satr)) //持有空仓时候,每天的盈利幅度,区别是否当天平多再开多
); //每个周期盈利比例

//按单利累加计算资金净值数
//盈利曲线:sum(ylbl,0),NODRAW;

zj:=1;
for i=0 to 10 DO
begin
zj=ref(zj,1)*ylbl;
end

盈利曲线2:zj;

--  作者:FireScript
--  发布时间:2019/9/9 16:56:23
--  
zj:1;
sw:ref(zj,1);
for i=0 to 3 DO
begin
zj:=sw*ylbl;
end

ref的使用放在外部试下。

--  作者:期货大圣
--  发布时间:2019/9/9 17:16:01
--  
不行,没有循环。值跟我的ylbl值相等。


[此贴子已经被作者于2019/9/9 17:17:12编辑过]

--  作者:期货大圣
--  发布时间:2019/9/9 17:22:31
--  
不过还好,你们金字塔可以复制数据,用exel,做这个循环非常简单。