以文本方式查看主题

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

--  作者:幸运60
--  发布时间:2020/10/19 14:05:02
--  求助,跨周期改写的方法
老师,跨周期调用很慢,改写成本周期的
如,1分钟调用10分钟的波动力
==================================

TRA:=MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
ATR:=MA(TRA,3);


TRA0:=MAX(MAX((CALLSTOCK(STKLABEL,VThigh,18,0)-CALLSTOCK(STKLABEL,VTlow,18,0)),ABS(REF(CALLSTOCK(STKLABEL,VTclose,18,0),1)-CALLSTOCK(STKLABEL,VThigh,18,0))),ABS(REF(CALLSTOCK(STKLABEL,VTclose,18,0),1)-CALLSTOCK(STKLABEL,VTlow,18,0))); 
TRA1:=MAX(MAX((CALLSTOCK(STKLABEL,VThigh,18,-1)-CALLSTOCK(STKLABEL,VTlow,18,-1)),ABS(REF(CALLSTOCK(STKLABEL,VTclose,18,-1),1)-CALLSTOCK(STKLABEL,VThigh,18,-1))),ABS(REF(CALLSTOCK(STKLABEL,VTclose,18,-1),1)-CALLSTOCK(STKLABEL,VTlow,18,-1)));
TRA2:=MAX(MAX((CALLSTOCK(STKLABEL,VThigh,18,-2)-CALLSTOCK(STKLABEL,VTlow,18,-2)),ABS(REF(CALLSTOCK(STKLABEL,VTclose,18,-2),1)-CALLSTOCK(STKLABEL,VThigh,18,-2))),ABS(REF(CALLSTOCK(STKLABEL,VTclose,18,-2),1)-CALLSTOCK(STKLABEL,VTlow,18,-2)));


ATRS:=(TRA0+TRA1+TRA2)/3;



经过这样改写,在1分钟周期上,轨道并不完全相同,请老师帮忙修改下



--  作者:FireScript
--  发布时间:2020/10/19 14:16:28
--  
 你这个需求描述的太笼统了。“轨道并不完全相同” 就这样我是无法处理的。我完全不清楚怎么改写你的代码的。

--  作者:幸运60
--  发布时间:2020/10/19 14:24:23
--  

TRA:=MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
ATR:=MA(TRA,3);

up:今天开盘价+(W1/10)*ATR;
down:今天开盘价-(W1/10)*ATR;
==================
上面为在1分钟周期内跨周期调用10分钟的轨道

想把波动力改为,下面代码,直接在1分钟周期内显示,不用跨周期调用,谢谢
TRA0:=MAX(MAX((CALLSTOCK(STKLABEL,VThigh,18,0)-CALLSTOCK(STKLABEL,VTlow,18,0)),ABS(REF(CALLSTOCK(STKLABEL,VTclose,18,0),1)-CALLSTOCK(STKLABEL,VThigh,18,0))),ABS(REF(CALLSTOCK(STKLABEL,VTclose,18,0),1)-CALLSTOCK(STKLABEL,VTlow,18,0))); 
TRA1:=MAX(MAX((CALLSTOCK(STKLABEL,VThigh,18,-1)-CALLSTOCK(STKLABEL,VTlow,18,-1)),ABS(REF(CALLSTOCK(STKLABEL,VTclose,18,-1),1)-CALLSTOCK(STKLABEL,VThigh,18,-1))),ABS(REF(CALLSTOCK(STKLABEL,VTclose,18,-1),1)-CALLSTOCK(STKLABEL,VTlow,18,-1)));
TRA2:=MAX(MAX((CALLSTOCK(STKLABEL,VThigh,18,-2)-CALLSTOCK(STKLABEL,VTlow,18,-2)),ABS(REF(CALLSTOCK(STKLABEL,VTclose,18,-2),1)-CALLSTOCK(STKLABEL,VThigh,18,-2))),ABS(REF(CALLSTOCK(STKLABEL,VTclose,18,-2),1)-CALLSTOCK(STKLABEL,VTlow,18,-2)));
ATRS:=(TRA0+TRA1+TRA2)/3;


--  作者:FireScript
--  发布时间:2020/10/19 14:39:03
--  
TRA0:MAX(MAX((CALLSTOCK(STKLABEL,VThigh,18,0)-CALLSTOCK(STKLABEL,VTlow,18,0)),ABS(REF(CALLSTOCK(STKLABEL,VTclose,18,-1),1)-CALLSTOCK(STKLABEL,VThigh,18,0))),ABS(REF(CALLSTOCK(STKLABEL,VTclose,18,-1),1)-CALLSTOCK(STKLABEL,VTlow,18,0)));

下面的REf 你没有进行处理的。后面的TRA1,TRA2 也要相应处理下。在-1基础上变化为-2,-3

TRA:=MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));

--  作者:幸运60
--  发布时间:2020/10/19 14:55:55
--  
老师,能完全写到和调用的跨周期一致吗?就是完全相同?
--  作者:FireScript
--  发布时间:2020/10/19 15:02:32
--  
 不对 还要改下。你源代码里面怎么还带了个ref 没注意到。要去掉。

CALLSTOCK(STKLABEL,VTclose,18,-1) 和 ref(CALLSTOCK(STKLABEL,VTclose,18,0) ,1) 不是等效的。ref是基于当前周期的。

下面这样就行了:
TRA0:MAX(MAX((CALLSTOCK(STKLABEL,VThigh,18,0)-CALLSTOCK(STKLABEL,VTlow,18,0)),ABS(CALLSTOCK(STKLABEL,VTclose,18,-1)-CALLSTOCK(STKLABEL,VThigh,18,0))),ABS(CALLSTOCK(STKLABEL,VTclose,18,-1)-CALLSTOCK(STKLABEL,VTlow,18,0)));
 我本地测试和跨周期调用过来的是一致的。

--  作者:幸运60
--  发布时间:2020/10/19 15:17:05
--  
谢谢,老师,老师,牛逼