以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  金字塔软件问题提交  (http://222.73.7.161/bbs/list.asp?boardid=2)
----  [求助]请教定期增加下单量的写法  (http://222.73.7.161/bbs/dispbbs.asp?boardid=2&id=161135)

--  作者:alohamora
--  发布时间:2018/1/18 10:37:19
--  [求助]请教定期增加下单量的写法

//该模型为简单示范模型,用户需根据自己交易经验,修改完善后再实际应用!!!
//作者 Z7C9

RUNMODE:0;
//中间变量
INPUT:AVGLENGTH(40),ATRLENGTH(40),SS(1,1,10000,1);//定义参数值
MA1:=REF(MA((HIGH+LOW+CLOSE)/3,AVGLENGTH),1);//定义MA1
手数:=ss;
//交易条件
UPPERBAND:=MA1+REF(MA(TR,ATRLENGTH),1);//上轨
LOWERBAND:=MA1-REF(MA(TR,ATRLENGTH),1);//下轨
ENTRYLONGCOND:=MA1>REF(MA1,1) AND HIGH>=UPPERBAND;//开多条件
EXITLONGCOND:=LOW<=MA1;//平多条件
ENTRYSHORTCOND:=MA1<REF(MA1,1) AND LOW<=LOWERBAND;//开空条件
EXITSHORTCOND:=HIGH>=MA1;//平空条件
//交易系统

IF HOLDING=0 THEN BEGIN //若持仓为0
 IF ENTRYLONGCOND THEN //且满足开多条件
  BUY(1,手数,LIMITR,MAX(OPEN,UPPERBAND));//开多单
END

IF HOLDING=0 THEN BEGIN//若持仓为0
 IF ENTRYSHORTCOND THEN//且满足开空条件
  BUYSHORT(1,手数,LIMITR,MIN(OPEN,LOWERBAND));//开空单
END

IF HOLDING>0 THEN BEGIN//若持有多单
 IF EXITLONGCOND THEN//且满足平多条件
  SELL(1,HOLDING,LIMITR,MIN(OPEN,MA1));//平多单
END

IF HOLDING<0 THEN BEGIN//若持有空单
 IF EXITSHORTCOND THEN//且满足平空条件
  SELLSHORT(1,HOLDING,LIMITR,MAX(OPEN,MA1));//平空单
END

//其他
当前持仓:HOLDING,COLORGRAY,LINETHICK0;
当前资产:ASSET,NOAXIS,COLORGRAY;

 

以系统自带策略为例,默认下单的手数为1,如果我想每过2个月时间间隔,策略自动把下单量增加某个数量。也就是每过2个月后,新的默认下单手数变成之前的默认下单手数+N。请教该怎么写?


--  作者:FireScript
--  发布时间:2018/1/18 11:12:51
--  

你这个每过2个月,是要按照严格的天数跨度来吗?


--  作者:alohamora
--  发布时间:2018/1/18 12:28:09
--  
以下是引用FireScript在2018/1/18 11:12:51的发言:

你这个每过2个月,是要按照严格的天数跨度来吗?

基本上是的。可以粗略设定为60天间隔。


--  作者:FireScript
--  发布时间:2018/1/18 14:01:46
--  

那按照如下方式处理:

比如说策略在图表上第一个K是落在2017一月,那么在图表的历史信号上, 2017一月下单是按照每次1手,到了2017四月的信号就按照2手来下单,后面一直按照60天增加。  这样符合你的需求吧?

 

 

 

 


--  作者:alohamora
--  发布时间:2018/1/18 14:12:09
--  
是的。
以下是引用FireScript在2018/1/18 14:01:46的发言:

那按照如下方式处理:

比如说策略在图表上第一个K是落在2017一月,那么在图表的历史信号上, 2017一月下单是按照每次1手,到了2017四月的信号就按照2手来下单,后面一直按照60天增加。  这样符合你的需求吧?

 

 

 

 


--  作者:FireScript
--  发布时间:2018/1/18 14:33:20
--  
FirstDate:ref(date,BARPOS-1);//第一个K对应的日期
diff:DATEDIFF(FIRSTDATE, date);//当前日期和初始位置的间隔(日)
ss:INTPART(diff/60)+1;//下单手数

--  作者:FireScript
--  发布时间:2018/1/18 14:33:32
--  
试下上面的代码。
--  作者:alohamora
--  发布时间:2018/1/18 17:42:45
--  
 
以下是引用FireScript在2018/1/18 14:33:32的发言:
试下上面的代码。

您的代码完美解决,非常感谢。