以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  请教一个问题  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=94442)

--  作者:qq代人发帖
--  发布时间:2016/3/7 15:59:15
--  请教一个问题
假设我定义了5个波形。分别代表公式A,B,C,D,E。判断波形有没有发生的话就调用\'A.signal\'拿到结果。现在我想做的事情是,我定义了5个周期,1分钟,5分钟,15分钟,30分钟,60分钟。如果1分钟周期上最近20个周期内发生过某个波形且任何一个大周期20个周期内也发生过某个波形。就作为一个买入信号。5分钟,15分钟同理。请教应该如果实现。好像有点复杂。

--  作者:panda1987
--  发布时间:2016/3/7 16:00:49
--  
我希望公式能够尽量通用,以后改个周期,加个波形都不需要有太多修改
--  作者:pyd
--  发布时间:2016/3/7 16:04:26
--  
用stkindi 函数跨周期跨品种调用指标,具体用法您可以看下函数说明
--  作者:panda1987
--  发布时间:2016/3/7 16:06:37
--  
这个我知道,但是我想知道大概的程序逻辑。我用传统的编程语言思维发现差距比较大。循环,数组,在逐K线模式下我没有彻底的理解。所以想请教一下大师,能不能给我大概写个框架,应该不需要太多代码。
--  作者:panda1987
--  发布时间:2016/3/7 16:08:32
--  
比如金字塔有没有二维数组的概念等等我还不是很清楚
--  作者:yukizzc
--  发布时间:2016/3/7 16:08:32
--  

count计算多少周期内符合条件的数量,这个A.sinnal是你自己的指标是吧

你在a公式里去统计count(sinnal,20),如果这大于1就是符合条件了

然后用3楼那个函数去跨周期调用就行了


--  作者:panda1987
--  发布时间:2016/3/7 16:09:45
--  
这个我知道。但是因为涉及到很多周期,很多波形。难道必须一个个写出来吗?这样以后修修改改就比较麻烦了,能不能用循环语句比如?
--  作者:jinzhe
--  发布时间:2016/3/7 16:11:20
--  
要一个个写出来,不要省略
--  作者:panda1987
--  发布时间:2016/3/7 16:17:53
--  
最笨的办法我知道,比如:
signalA_1分钟:=STKINDI(\'\',\'A.signal\',0,1),NOAXIS,NODRAW;
signalB_1分钟:=STKINDI(\'\',\'B.signal\',0,1),NOAXIS,NODRAW;
signalC_1分钟:=STKINDI(\'\',\'C.signal\',0,1),NOAXIS,NODRAW;
signalD_1分钟:=STKINDI(\'\',\'D.signal\',0,1),NOAXIS,NODRAW;
signalE_1分钟:=STKINDI(\'\',\'E.signal\',0,1),NOAXIS,NODRAW;

signalA_5分钟:=STKINDI(\'\',\'A.signal\',0,2),NOAXIS,NODRAW;
signalB_5分钟:=STKINDI(\'\',\'B.signal\',0,2),NOAXIS,NODRAW;
signalC_5分钟:=STKINDI(\'\',\'C.signal\',0,2),NOAXIS,NODRAW;
signalD_5分钟:=STKINDI(\'\',\'D.signal\',0,2),NOAXIS,NODRAW;
signalE_5分钟:=STKINDI(\'\',\'E.signal\',0,2),NOAXIS,NODRAW;

...

signal_1分钟 = count(signalA_1分钟,20) > 0 || count(signalB_1分钟,20) > 0 || count(signalC_1分钟,20) > 0 || count(signalD_1分钟,20) > 0 || count(signalE_1分钟,20) > 0;
signal_5分钟 = count(signalA_5分钟,20) > 0 || count(signalB_5分钟,20) > 0 || count(signalC_5分钟,20) > 0 || count(signalD_5分钟,20) > 0 || count(signalE_5分钟,20) > 0;
signal_15分钟 = count(signalA_15分钟,20) > 0 || count(signalB_15分钟,20) > 0 || count(signalC_15分钟,20) > 0 || count(signalD_15分钟,20) > 0 || count(signalE_15分钟,20) > 0;
signal_30分钟 = count(signalA_30分钟,20) > 0 || count(signalB_30分钟,20) > 0 || count(signalC_30分钟,20) > 0 || count(signalD_30分钟,20) > 0 || count(signalE_30分钟,20) > 0;
signal_60分钟 = count(signalA_60分钟,20) > 0 || count(signalB_60分钟,20) > 0 || count(signalC_60分钟,20) > 0 || count(signalD_60分钟,20) > 0 || count(signalE_60分钟,20) > 0;

if signal_1分钟 then begin
    if signal_5分钟 || signal_15分钟 || signal_30分钟 || signal_60分钟 then begin
        buy...
    end
end

这样的代码我实在是受不了T_T,而且我的判断逻辑比这个还要复杂。这么写的话改起来就要崩溃了。

--  作者:panda1987
--  发布时间:2016/3/7 16:19:46
--  
那这个公式就不能用到5分钟上了,因为我希望5分钟也可以跑起来,15分钟也可以跑起来等等。
另外我的波形可能是有方向的,做多或者做空,只有同方向的话才去下单。这些条件再加上去,那么这样代码实在臃肿不堪。

有没有比较灵活的办法?比如能不能用个循环减少代码量?
[此贴子已经被作者于2016/3/7 16:21:28编辑过]