以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  有没有LOOP2函数  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=184178)

--  作者:jy02362711
--  发布时间:2021/2/3 17:23:12
--  有没有LOOP2函数
有没有类似文华策略 LOOP2函数的功能
比如
LSETUP:=LOOP(BARPOS=1||BULLSETUP,0,REF(LSETUP,1)+1);//LOOP2为循环条件函数 意思是若从第一根K线开始并且BULLSETUP条件成立,则返回0,否则返回REF(LSETUP,1)+1

--  作者:FireScript
--  发布时间:2021/2/4 11:02:58
--  
 没有这个函数的。


--  作者:FireScript
--  发布时间:2021/2/4 11:04:37
--  
 但是这个函数的效果似乎可以用VALUEWHEN来替代吧。



--  作者:jy02362711
--  发布时间:2021/2/4 11:21:34
--  
这个是有做循环的,在循环中,满足条件a,返回x,否则返回y
VALUEWHEN 是满足a,返回x,并不会返回y
--  作者:yukizzc
--  发布时间:2021/2/4 12:49:02
--  

variable:a=0;

temp:=ref(a,1)+1;
if c>o then a:=0;
if not(c>o) then a:=temp;

b:a;

 

 

 


--  作者:jy02362711
--  发布时间:2021/2/4 13:45:51
--  
老师,我主要是文华的策略要改成金字塔的,数值计算大部分都是兼容,就剩这个循环,可以麻烦您看看如何改写吗?红色字标注


//定义MOMVALUE:等于收盘价减去五日前的收盘价
MOMVALUE:=C-REF(C,5);
//定义成交量加权为VWM:等于当日成交量*MOMVALUE的20日加权平均
VWM:=EMA(VOL*MOMVALUE,20);
//定义TRUEHIGH1:等于如果最高价大于上一根收盘,TRUEHIGH1等于最高价,否则等于上一根收盘价
TRUEHIGH1:=IF(HIGH>REF(C,1),HIGH,REF(C,1));
//定义TRUELOW1:等于如果最低价小于上一根收盘,TRUELOW1等于最低价,否则等于上一根收盘价
TRUELOW1:=IF(LOW<=REF(C,1),LOW,REF(C,1));
//定义TRUERANGE1:等于如果是最后一根K线,TRUERANGE1等于最高价-最低价,否则等于
TRUERANGE1:=IF(ISLASTBAR,H-L,TRUEHIGH1-TRUELOW1);TRUEHIGH1-TRUELOW1
//定义波动率AATR:等于TRUERANGE1的5日均价
AATR:=MA(TRUERANGE1,5);
//VWM上穿零轴定义多头势  
BULLSETUP:=CROSS(VWM,0);
//VWM下穿零轴定义空头势
BEARSETUP:=CROSS(0,VWM);
//LOOP2为循环条件函数 意思是若从第一根K线开始并且BULLSETUP条件成立,则返回0,否则返回REF(LSETUP,1)+1,也就是计算多头势头到当前的周期数
LSETUP:=LOOP2(BARPOS=1||BULLSETUP,0,REF(LSETUP,1)+1);
//定义LEPRICE:等于满足BULLSETUP成立时的收盘价
LEPRICE:=VALUEWHEN(BULLSETUP,C);
//空头势开始计数并记录当前价格(参考LSETUP的描述)
SSETUP:=LOOP2(BARPOS=1||BEARSETUP,0,REF(SSETUP,1)+1);
//定义SEPRICE:等于满足BEARSETUP成立时的收盘价
SEPRICE:=VALUEWHEN(BEARSETUP,C);

--  作者:yukizzc
--  发布时间:2021/2/4 14:36:23
--  

就上面那样你试下呢,c>o就是条件,a就是最后计算的结果

你在图上对比下呢,先不要想着直接策略转,先看这个效果是否一样


--  作者:FireScript
--  发布时间:2021/2/4 14:37:32
--  
 variable:a:=0,x:=0;

temp1:=ref(a,1)+1;
if BARPOS=1 or BULLSETUP then a:=0;
if not(BARPOS=1||BULLSETUP) then a:=temp1;
LSETUP:a


temp2:=ref(x,1)+1;
if BARPOS=1 or BEARSETUP then x:=0;
if not(BBARPOS=1 or BEARSETUP) then x:=temp;
SSETUP:x;

你自己整合进去吧。