以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://weistock.com/bbs/list.asp?boardid=4) ---- [求助]编写简单模型框架 (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=88053) |
-- 作者:h13004480057 -- 发布时间:2015/12/3 19:52:09 -- [求助]编写简单模型框架 老师好,请求编写模型,策略主要是采用浮动仓位来开仓,收盘价上穿均线平掉所有的空单持仓并计算出平仓的盈亏,跟据盈亏满足的条件决定开多仓的手数,收盘价下穿均线平掉所有的多单持仓并计算出平仓的盈亏,跟据盈亏满足的条件来决定开空仓的手数, 一,初始化开仓手数:=ss; 因第一次开仓,取不到平仓盈亏,满足不了盈亏条件无法确定第一次开仓的手数,所以要确定初始第一次开仓手 数为ss手, 二,中间变量均线为MA1:=MA(CLOSE,60); 三,交易条件 平空开多条件:=CROSS(c,MA1);//开多平空条件 平多开空条件:=CROSS(MA1,c);//开空平多条件 四,当模型达到平仓条件,先平掉所有的持仓, 取本次平仓盈亏值, 取本次平仓前的持仓手数, 同时开仓之前先根据平仓盈亏值判断 当本次平仓盈亏值满足条件a1时,决定下次开仓手数为ss手, 当本次平仓盈亏值满足条件b1时,决定下次开仓手数为ss+1手, 当本次平仓盈亏值满足条件c1时,决定下次开仓手数为平仓前的持仓手数, 拫据手数开仓, |
-- 作者:wenarm -- 发布时间:2015/12/4 9:47:44 -- 取本次平仓前的持仓手数, 这个指的是你最有一次开仓的手数,还是当时的所有持仓 |
-- 作者:h13004480057 -- 发布时间:2015/12/4 9:55:38 -- 平仓前的所有持仓手数 |
-- 作者:wenarm -- 发布时间:2015/12/4 10:32:48 -- 类似于下面的思路。用户可以参考考自行修改 MA1:=MA(CLOSE,60); if 平多开空条件 and a=0 then begin if a>a2 and a<a3 then begin if a>a2 then begin [此贴子已经被作者于2015/12/4 10:39:10编辑过]
|
-- 作者:心静 -- 发布时间:2015/12/4 23:16:54 -- 老师好,请帮助查一下,通不了 MA1:=MA(CLOSE,60); 平空开多条件:=CROSS(c,MA1);//开多平空条件 平多开空条件:=CROSS(MA1,c);//开空平多条件 SS:=10;//手数 a:NUMPROFIT(1); //取平仓盈亏值, dd:ref(a,exitbars);//取平仓前的持仓手数, //第一次 if 平空开多条件 and HOLDING=0 then begin // SELLSHORT(1,holding,MARKET); BUY(1,ss,MARKET); end if 平多开空条件 and HOLDING=0 then begin // SELL(1,holding,MARKET); BUYSHORT(1,ss,MARKET); end if 平空开多条件 and HOLDING>0 then begin//平仓条件用户自行添加 SELLSHORT(1,holding,MARKET); end if 平多开空条件 and anda>0 then begin BUYSHORT(1,ss-1,MARKET); end if 平多开空条件 and anda<0 then begin BUYSHORT(1,ss+1,MARKET); end if 平多开空条件 and a=0 then begin BUYSHORT(1,dd,MARKET); end if 平多开空条件 and HOLDING>0 then begin sell(1,HOLDING,MARKET); if 平空开多条件 and a>0 then begin BUY(1,ss-1,MARKET); end if 平空开多条件 anda<0 then begin BUY(1,ss+1,MARKET); end if 平空开多条件 and a=0 then begin BUY(1,dd,MARKET); end |
-- 作者:wenarm -- 发布时间:2015/12/4 23:24:21 -- 代码少写了一个end,用红色标注出来了。建议用户根据提示调试代码,可以提高自己的编程能力。 MA1:=MA(CLOSE,60); 平空开多条件:=CROSS(c,MA1);//开多平空条件 平多开空条件:=CROSS(MA1,c);//开空平多条件 SS:=10;//手数 a:NUMPROFIT(1); //取平仓盈亏值, dd:ref(a,exitbars);//取平仓前的持仓手数, //第一次 if 平空开多条件 and HOLDING=0 then begin // SELLSHORT(1,holding,MARKET); BUY(1,ss,MARKET); end if 平多开空条件 and HOLDING=0 then begin // SELL(1,holding,MARKET); BUYSHORT(1,ss,MARKET); end if 平空开多条件 and HOLDING>0 then begin//平仓条件用户自行添加 SELLSHORT(1,holding,MARKET); end if 平多开空条件 and anda>0 then begin BUYSHORT(1,ss-1,MARKET); end if 平多开空条件 and anda<0 then begin BUYSHORT(1,ss+1,MARKET); end if 平多开空条件 and a=0 then begin BUYSHORT(1,dd,MARKET); end if 平多开空条件 and HOLDING>0 then begin sell(1,HOLDING,MARKET); end if 平空开多条件 and a>0 then begin BUY(1,ss-1,MARKET); end if 平空开多条件 anda<0 then begin BUY(1,ss+1,MARKET); end if 平空开多条件 and a=0 then begin BUY(1,dd,MARKET); end
|