以文本方式查看主题

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

--  作者:Hxpj
--  发布时间:2019/11/27 10:35:40
--  请教老师代写编码问题
老师,我想判断MACD在 15分钟,60分钟,日 ,三个周期内同时收到金叉信号才进行交易,这个代码怎么写?
--  作者:FireScript
--  发布时间:2019/11/27 10:44:32
--  
 先单独编写一个指标A:
input:p(26,20,100,8),s(12,5,40,4),m(9,2,60,6);//参数设置

DIFF : =EMA(CLOSE,S) - EMA(CLOSE,P);
DEA  := EMA(DIFF,M);
MACD1 := 2*(DIFF-DEA), COLORSTICK;
macdjc:cross(diff,dea);//macd金叉
macdsc:cross(dea,diff);

然后跨周期调用指标A的macdjc变量即可。
15min_jc:=STKINDI(\'\',\'A.macdjc\',0,3,0);
60min_jc:=STKINDI(\'\',\'A.macdjc\',0,5,0);
day_jc:=STKINDI(\'\',\'A.macdjc\',0,6,0);

cd:15min_jc and 60min_jc and day_jc;

if cd  and holding=0 then
begin
//这里编写下单语句即可
end


--  作者:Hxpj
--  发布时间:2019/11/27 11:37:12
--  
老师,这里的 A 是什么??没有看都代入?
--  作者:FireScript
--  发布时间:2019/11/27 13:08:27
--  
 A是新建的一个指标,字母A是指标名称。你要新建一个指标,把下面代码放进去。

input:p(26,20,100,8),s(12,5,40,4),m(9,2,60,6);//参数设置

DIFF : =EMA(CLOSE,S) - EMA(CLOSE,P);
DEA  := EMA(DIFF,M);
MACD1 := 2*(DIFF-DEA), COLORSTICK;
macdjc:cross(diff,dea);//macd金叉
macdsc:cross(dea,diff);



--  作者:FireScript
--  发布时间:2019/11/27 13:11:11
--  
 这个A 是单独的一个指标的。

图片点击可在新窗口打开查看此主题相关图片如下:temp.png
图片点击可在新窗口打开查看

--  作者:Hxpj
--  发布时间:2019/11/27 13:36:45
--  
//MACD
X1:CROSS(DIFF,DEA);
X2:CROSS(DEA,DIFF);

//条件1
X3:MA1>MA2 AND MA2>MA3 AND MA3>MA4 AND MA4>MA5 AND MA5>MA6 AND MA1>REF(MA1,1) AND MA2>REF(MA2,1) AND MA3>REF(MA3,1) AND MA4>REF(MA4,1) AND MA5>REF(MA5,1) AND MA6>REF(MA6,1);
X4:MA1<MA2 AND MA2<MA3 AND MA3<MA4 AND MA4<MA5 AND MA5<MA6 AND MA1<REF(MA1,1) AND MA2<REF(MA2,1) AND MA3<REF(MA3,1) AND MA4<REF(MA4,1) AND MA5<REF(MA5,1) AND MA6<REF(MA6,1);

X5:X1 AND X3;
X6:X2 AND X4;

15min_jc:=STKINDI(\'\',\'X5\',0,3,0);
60min_jc:=STKINDI(\'\',\'X5\',0,5,0);
day_jc:=STKINDI(\'\',\'X5\',0,6,0);

KDCL:15min_jc and 60min_jc and day_jc;

回测没有数据,错在哪里呢?

--  作者:Hxpj
--  发布时间:2019/11/27 13:47:25
--  
是否由于公式是 5、60、日,而公式测试里的开仓条件只能是日,所以无法返回数据?
--  作者:FireScript
--  发布时间:2019/11/27 14:04:54
--  
 1.你上面代码里面都没有下单语句吗 还是只是没帖出来?
 2.你跨周期代码写的不对 。首先macd金叉的代码要单独放在一个指标下。
  然后红色部分格式也不对。 是  “公式名.被调用的变量”
15min_jc:=STKINDI(\'\',\'X5\',0,3,0);
参考下图的做法:


图片点击可在新窗口打开查看此主题相关图片如下:temp.png
图片点击可在新窗口打开查看

这是2个指标,macd单独在一个指标里面。

3.跨周期的调用是不会自动补充数据的。你要补充5分钟和日线数据。
  单个品种得话 你可以在K线上切换到相应周期然后用键盘上下箭 就能自动触发历史数据的补充。

--  作者:Hxpj
--  发布时间:2019/11/27 16:19:51
--  

图片点击可在新窗口打开查看此主题相关图片如下:a20191127161814.jpg
图片点击可在新窗口打开查看


//条件汇总

15min_jc:=STKINDI(\'\',\'MADC_T.macdjc\',0,3,0);
60min_jc:=STKINDI(\'\',\'MADC_T.macdjc\',0,5,0);
day_jc:=STKINDI(\'\',\'MADC_T.macdjc\',0,6,0);

15min_ga:=STKINDI(\'\',\'GMMA-T.X3\',0,3,0);
60min_ga:=STKINDI(\'\',\'GMMA-T.X3\',0,5,0);
day_ga:=STKINDI(\'\',\'GMMA-T.X3\',0,6,0);


KDCL:15min_jc and 60min_jc and day_jc and 15min_ga and 60min_ga and day_ga;



老师,我按例子重新修改了,X3如下

指标名称:GMMA-T

X3:MA1>MA2 AND MA2>MA3 AND MA3>MA4 AND MA4>MA5 AND MA5>MA6 AND MA1>REF(MA1,1) AND MA2>REF(MA2,1) AND MA3>REF(MA3,1) AND MA4>REF(MA4,1) AND MA5>REF(MA5,1) AND MA6>REF(MA6,1);

同时也补充了 15 分钟 60分钟,日数据,还是出不了结果?
图片点击可在新窗口打开查看


--  作者:Hxpj
--  发布时间:2019/11/27 16:32:52
--  
下单的语句先不写了,万一真的下单了,就比较危险,所以先做好预警,只是3个周期MACD的条件,也出不了数据?