以文本方式查看主题

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

--  作者:kuang0756
--  发布时间:2020/4/9 18:26:34
--  请老师帮忙改下模型

MA1:=MA(CLOSE,A);

MA2:=MA(CLOSE,B);

 

手数:=ss;

 

开多平空条件:=CROSS(MA1,MA2);//开多平空条件

开空平多条件:=CROSS(MA2,MA1);//开空平多条件

 

平空:SELLSHORT(开多平空条件,手数,MARKET);

平多:SELL(开空平多条件,手数,MARKET);

开多:BUY(开多平空条件,手数,MARKET);

开空:BUYSHORT(开空平多条件,手数,MARKET);

 

增加:


上次平仓亏损时,这次开仓加仓(上次开仓数量*2),上次平仓盈利时,这次开仓不加仓。

平仓盈利达到5000元或以上时,重置开仓仓位不初始仓位。

平仓盈利达到20000元时或以上时,自动停止模型的运行。

盈利达到停止时,可设置达到次数。




--  作者:FireScript
--  发布时间:2020/4/10 9:26:34
--  
 1.“上次平仓亏损时,这次开仓加仓(上次开仓数量*2),上次平仓盈利时,这次开仓不加仓。
上面的逻辑里面  平仓和开仓是否不考虑方向问题。也就是上次是平空,现在是开多。满足盈利条件是否加仓?

2.平仓盈利?是指最近一次平仓盈亏?还是总的盈亏?
3.“平仓盈利达到20000元时或以上时,自动停止模型的运行。” 数据多了,交易起始日期如果很久远,可能现在图表上都不会有信号。因为你在历史的位置上满足了平仓盈利20000点。

4.“盈利达到停止时,可设置达到次数。” 这个什么意思,没太明白。

--  作者:kuang0756
--  发布时间:2020/4/13 18:12:30
--  

谢谢老师的回复,是这样的:

15天线高于10线,并且5天线也高于60天线,并且20天线向上移动时开多

25天线低于10线时平多

35天线低于10线,并且5天线也低于60天线,并且20天线向下移动时开空

45天线高于10线时平空

5、  5天均线高于10均线时,K线颜色统一为红色,反之绿色。

6、  5天均线高于60天均线时,60天均线的颜色为红色,反之绿色。

7、  有持仓时平仓优先,先平仓后开仓

8、  上次平仓亏损时,这次开仓加仓(上次开仓数量*2)不考虑方向,上次平仓盈利时,这次开仓不加仓。

9、  最近一次平仓盈利达到5000元或以上时,重置开仓仓位为初始仓位。

10最近一次平仓盈利达到20000元时或以上时,自动停止模型的运行,不计算历史平仓。

11、 盈利达到停止时,可设置达到次数,是可以设置1次达到20000元或多次达到20000元就停止,设置为0时就长跑。



--  作者:FireScript
--  发布时间:2020/4/14 10:03:41
--  
 1.“并且20天线向上移动时开多” 这个向上移动必须明确定义下。肉眼观察得出来是一回事,程序里面需要一个明确的代码逻辑才行。比如可以定义为连续多少周期都是增长 ,这个你考虑下。
2. 第5,6 2条K线颜色没有函数可以直接改。这个不好做。
3.“有持仓时平仓优先,先平仓后开仓”  这种大概只能处理成平仓条件和加仓同时满足的时候,只平仓不加仓。


--  作者:kuang0756
--  发布时间:2020/4/14 14:03:03
--  
谢谢老师,那就这样:
1、20天线的上下移动以最新一个K线的收盘后增长了就算向上移动,反之同理。不涨不跌按原方向。
2、5和6不好做就取消
3、先平仓后开仓有资金使用率的问题,但如果冲突,就先开后平也要在亏损状态下做到有加仓动作。

--  作者:gxx978
--  发布时间:2020/4/14 14:55:52
--  

需要再跟你确认下一下两点:

1、20天线的上下移动以最新一个K线的收盘后增长了就算向上移动,是否是可以这样表示:ma(c,20)>ref(ma(c,20),1)。向下移动就是这样表示:ma(c,20)<ref(ma(c,20),1)。

2、第8条中,若之前的平仓一直亏损,加仓是不设置次数的吗?只要满足开仓条件就无限加仓?


--  作者:kuang0756
--  发布时间:2020/4/14 21:28:05
--  
是的,1、2都是的。


--  作者:FireScript
--  发布时间:2020/4/15 9:55:22
--  
VARIABLE:ct:=0;//统计盈利达到条件的次数
INPUT:ss(1,1,100,1),cs(5,0,100,1);//cs是次数限制,ss是初始仓位手数
手数:=ss;
MA1:MA(CLOSE,5);
MA2:MA(CLOSE,10);
MA3:MA(C,20);
MA4:MA(C,60);
 
kdcd:=ma1>ma2 and ma1>ma4 and MA3>ref(MA3,1);
pdcd:=ma1<ma2;

kkcd:=ma1<ma2 and ma1<ma4 and MA3<ref(MA3,1);
pkcd:=ma1>ma2;

if pkcd and holding<0 then
begin
平空:SELLSHORT(pkcd,holding,MARKET);
if NUMPROFIT(1)>20000 then ct:=ct+1;//每次平仓时候如果平仓盈利达到20000 全局变量值累加1
end

if pdcd and holding>0 then
begin
平多:SELL(pdcd,holding,MARKET);    
if NUMPROFIT(1)>20000 then ct:=ct+1;
end

手数:=if(NUMPROFIT(1)<0,手数*2,手数);//根据上次盈亏情况调整手数
手数:=if(NUMPROFIT(1)>=5000,ss,手数);//根据上次盈亏情况来重置开仓手数

开多:BUY(kdcd and holding=0 and (ct<cs or cs=0),手数,MARKET);
开空:BUYSHORT(kkcd and holding=0 and (ct<cs or cs=0),手数,MARKET);


[此贴子已经被作者于2020/4/15 9:57:34编辑过]