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元时或以上时,自动停止模型的运行。
四、盈利达到停止时,可设置达到次数。
1.“上次平仓亏损时,这次开仓加仓(上次开仓数量*2),上次平仓盈利时,这次开仓不加仓。”
上面的逻辑里面 平仓和开仓是否不考虑方向问题。也就是上次是平空,现在是开多。满足盈利条件是否加仓?
2.平仓盈利?是指最近一次平仓盈亏?还是总的盈亏?
3.“平仓盈利达到20000元时或以上时,自动停止模型的运行。” 数据多了,交易起始日期如果很久远,可能现在图表上都不会有信号。因为你在历史的位置上满足了平仓盈利20000点。
4.“盈利达到停止时,可设置达到次数。” 这个什么意思,没太明白。
谢谢老师的回复,是这样的:
1、5天线高于10线,并且5天线也高于60天线,并且20天线向上移动时开多
2、5天线低于10线时平多
3、5天线低于10线,并且5天线也低于60天线,并且20天线向下移动时开空
4、5天线高于10线时平空
5、 5天均线高于10均线时,K线颜色统一为红色,反之绿色。
6、 5天均线高于60天均线时,60天均线的颜色为红色,反之绿色。
7、 有持仓时平仓优先,先平仓后开仓
8、 上次平仓亏损时,这次开仓加仓(上次开仓数量*2)不考虑方向,上次平仓盈利时,这次开仓不加仓。
9、 最近一次平仓盈利达到5000元或以上时,重置开仓仓位为初始仓位。
10、最近一次平仓盈利达到20000元时或以上时,自动停止模型的运行,不计算历史平仓。
11、 盈利达到停止时,可设置达到次数,是可以设置1次达到20000元或多次达到20000元就停止,设置为0时就长跑。
1.“并且20天线向上移动时开多” 这个向上移动必须明确定义下。肉眼观察得出来是一回事,程序里面需要一个明确的代码逻辑才行。比如可以定义为连续多少周期都是增长 ,这个你考虑下。
2. 第5,6 2条K线颜色没有函数可以直接改。这个不好做。
3.“有持仓时平仓优先,先平仓后开仓” 这种大概只能处理成平仓条件和加仓同时满足的时候,只平仓不加仓。
谢谢老师,那就这样:
1、20天线的上下移动以最新一个K线的收盘后增长了就算向上移动,反之同理。不涨不跌按原方向。
2、5和6不好做就取消
3、先平仓后开仓有资金使用率的问题,但如果冲突,就先开后平也要在亏损状态下做到有加仓动作。
需要再跟你确认下一下两点:
1、20天线的上下移动以最新一个K线的收盘后增长了就算向上移动,是否是可以这样表示:ma(c,20)>ref(ma(c,20),1)。向下移动就是这样表示:ma(c,20)<ref(ma(c,20),1)。
2、第8条中,若之前的平仓一直亏损,加仓是不设置次数的吗?只要满足开仓条件就无限加仓?
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编辑过]