以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  编写2个基于MACD指标  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=184327)

--  作者:qq代人发帖
--  发布时间:2021/2/22 9:13:16
--  编写2个基于MACD指标
请教:麻烦老师根据下面的代码,编写2个基于MACD指标,适合简单图表自动交易策略公式。
DIFF:=EMA(CLOSE,S) - EMA(CLOSE,P) ,COLORGREEN;
DEA:=EMA(DIFF,M);
MACD:=2*(DIFF-DEA);
IF(DIFF>=REF(DIFF,1),DIFF,DRAWNULL),COLORRED;


设计要求:
1、如果有持仓,要求先平后开;
2、数量要求在总量控制的前提下连续分次交易,每次间隔0.5秒钟。
3、交易时间,从9:02到14:58,结束时平仓所有多单或者空单。

一、金叉死叉交易策略:
当快线上穿慢线金叉,如果原空仓则开多,如果有空头持仓,则平空开多;
当快线下穿慢线死叉,如果原空仓则开空,如果有多头持仓,则平多开空;
数量:每次2手,连续交易3次,平仓开仓数量相等。

二、红绿变色交易策略:
当快线颜色从绿转红,如果原空仓则开多,如果有空头持仓,则平空开多;
当快线颜色从红转绿,如果原空仓则开空,如果有多头持仓,则平多开空;
数量:每次2手,连续交易3次,平仓开仓数量相等。

--  作者:FireScript
--  发布时间:2021/2/22 9:23:22
--  
需要明确下:
1.“数量要求在总量控制的前提下连续分次交易,每次间隔0.5秒钟。”这个是怎样的逻辑。将下的单拆分开下单?
2.“快线上穿慢线”快线和慢线分别是指diff 和dea?


--  作者:老江
--  发布时间:2021/2/22 15:19:43
--  
老师好,回复老师,两个都是这样的意思,比如总量6手,每次2手,分次交易,间隔0.5秒钟。金叉或者死叉是指DIFF和DEA交叉,谢谢。
--  作者:FireScript
--  发布时间:2021/2/23 17:22:43
--  
 “总量6手,每次2手,分次交易,间隔0.5秒钟”。0.5秒的间隔,这个时间太短,无法实现到这么精细。 这个需求目前专业版里面的大单拆分可以做到,但是这个最多只能到1秒钟。  大单拆分功能是可以把下单拆分批次下的。  建议这个需求先搁置下。如果你后面需要用到更多专业版功能,可以再考虑。

其他的部分基本可以实现。我处理好后会发在这里。另外你加下官方群:629417537  新注册用户发帖有时候会延迟显示,你发了新内容 可以在群里说下避免我这边看不到。

--  作者:老江
--  发布时间:2021/2/23 20:17:50
--  回复FireScript:
老师好,那就麻烦以1秒钟间隔方式交易
--  作者:FireScript
--  发布时间:2021/2/24 9:23:15
--  
 策略1:

input:p(26,20,100,8),s(12,5,40,4),m(9,2,60,6),ss(6,1,100,1);
DIFF :EMA(CLOSE,S) - EMA(CLOSE,P);
DEA  :EMA(DIFF,M);
MACD1 :2*(DIFF-DEA), COLORSTICK;
macdjc:=cross(diff,dea),NODRAW;//macd金叉
macdsc:=cross(dea,diff),NODRAW;

timecd:time>=130200 and time<185800;//时间周期限制,这个在一分钟较有效。

if macdjc then
begin
sellshort(holding<0,holding,market);
buy(holding=0,ss,market);   
end

if macdsc then
begin
sell(holding>0,holding,market);
buyshort(holding=0,ss,market);   
end


if time>=185900 then //收盘前全平
begin
sell(holding>0,holding,market);
sellshort(holding<0,holding,market);   
end
[此贴子已经被作者于2021/2/24 9:45:39编辑过]

--  作者:FireScript
--  发布时间:2021/2/24 9:45:21
--  
 策略2:
策略2这里要说明下。你原先思路是要按照那个线变化来,但是实际上红绿线变化时候能在图上看出来至少需要连续2个周期满足DIFF>=REF(DIFF,1) 或者DIFF<REF(DIFF,1). 因此实际写成策略时候 在图表上是变化后的第二个K。如果只死板的按照DIFF>=REF(DIFF,1)的条件来,会出现前后都不满足,就中间一个K满足的特殊情况,而这个情况你只看图表上红绿线变化是完全看不到的。


input:p(26,20,100,8),s(12,5,40,4),m(9,2,60,6),ss(6,1,100,1);
DIFF :EMA(CLOSE,S) - EMA(CLOSE,P);
DEA  :EMA(DIFF,M);
MACD1 :2*(DIFF-DEA), COLORSTICK;
cd:=DIFF>=REF(DIFF,1);
IF(cd,DIFF,DRAWNULL),COLORRED;
x:=count(cd,2)=2;
y:=count(not(cd),2)=2;


if x and not(ref(x,1)) then
begin
sellshort(holding<0,holding,market);
buy(holding=0,ss,market);   
end

if y and not(ref(y,1)) then
begin
sell(holding>0,holding,market);
buyshort(holding=0,ss,market);   
end

--  作者:FireScript
--  发布时间:2021/2/24 10:15:49
--  
工具-选项 下面这里设置下。但是这个是付费的专业版的功能才行。
 
图片点击可在新窗口打开查看此主题相关图片如下:temp.png
图片点击可在新窗口打开查看


--  作者:老江
--  发布时间:2021/2/24 12:45:35
--  
收到,谢谢老师!我是贵公司标准版本用户,先学习,可能会继续麻烦老师。
--  作者:老江
--  发布时间:2021/2/24 19:47:43
--  

老师好,对于上面的策略公式,还有几个问题要再次麻烦请教。

一是关于交易时间,从上午902到下午1458

策略1里面的代码是:

timecd:time>=130200 and time<185800;//时间周期限制,这个在一分钟较有效。

if time>=185900 then //收盘前全平
是不是有笔误?

二是关于交易数量,要求在总量控制的前提下连续分次交易,每次间隔1秒钟或者X秒钟。如总量6手,每次2手,间隔1秒钟,这个在策略1里面,是在哪些代码里体现出来?如果我想改变交易数量和间隔时间,应该怎样做?

三是如何把老师给编写的策略公式安装入软件,并开始自动交易?

拜托老师!