以文本方式查看主题

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

--  作者:NH
--  发布时间:2018/2/28 10:15:12
--  代码求助
//该模型为简单示范模型,用户需根据自己交易经验,修改完善后再实际应用!!!
//变量申明
VARIABLE:DAYCOUNT=1,POSITIONCOUNT=1,SELLSIGN=0;//定义常数变量DAYCOUNT并初始化为1,定义常数变量POSITIONCOUNT并初始化为1,定义常数变量SELLSIGN并初始化为0
VARIABLE:ENTANDEXITSIGN=1,ENTPOINT=0,EXITPOINT=0;//定义常数变量ENTANDEXITSIGN并初始化为1,定义常数变量ENTPOINT并初始化为0,定义常数变量EXITPOINT并初始化为0
VARIABLE:N=0;//定义常数变量N并初始化为0

MA1:MA(C,5);//输出5日均价
MA3:MA(C,10);//输出10日均价
M:=MA(TR,20); //真实波幅的20周期均值
BUYHHV:=HHV(H,20);//20日最高价
SELLLLV:=LLV(L,10);//10日最低价

SS:N,LINETHICK0;
//交易系统
IF BARPOS>=21 THEN BEGIN //如果从上市到现在的交易日天数大于等于21天,那么
IF BARPOS=21 THEN        //如果从上市到现在的交易日天数等于21,那么   
N:=M;                    //N=M 
IF DAYCOUNT=6 OR BARPOS=21 THEN BEGIN{5天调整N值} 
N:=(19*N+TR)/20;{计算N值} 
DAYCOUNT:=2;
END 
DAYCOUNT:=DAYCOUNT+1; 
ENTPOINT:=ENTERBARS+1; 
IF ENTPOINT=ENTANDEXITSIGN THEN BEGIN{说明STOP指令买进头寸成功} 
POSITIONCOUNT:=POSITIONCOUNT+1;{头寸计数} 
SELLSIGN:=TRUE;{开始以STOP卖出,如果达到指定的价格} 
END 
IF POSITIONCOUNT=1 THEN BEGIN{第一头寸} 
HOW:=CASH(0)*0.01/N;{波动性百分比决定头寸规模} 
开1:BUY(H>=BUYHHV,HOW,MARKET);{在20日新高STOP指令买进} 
END 
IF POSITIONCOUNT=2 THEN BEGIN{如到第二头寸} 
HOW:=CASH(0)*0.01/N;{波动性百分比决定头寸规模} 
开2:BUY(H>=ENTERPRICE+0.5*N,HOW,MARKET);{在上头寸(即第一头寸)+0.5个N以STOP指令买进} 
END 
IF POSITIONCOUNT=3 THEN BEGIN{如到第三头寸} 
HOW:=CASH(0)*0.01/N; 
开3:BUY(H>=ENTERPRICE+0.5*N,HOW,MARKET);{在上头寸(即第二头寸)+0.5个N以STOP指令买进} 
END 
IF POSITIONCOUNT=4 THEN BEGIN 
HOW:=CASH(0)*0.01/N; 
开4:BUY(H>=ENTERPRICE+0.5*N,HOW,MARKET); 
END 
IF SELLSIGN=TRUE THEN BEGIN 
    EXITPOINT:=EXITBARS+1; 
    IF EXITPOINT=ENTANDEXITSIGN THEN BEGIN {说明卖出成功} 
       POSITIONCOUNT:=1;{头寸计算复原} 
       SELLSIGN:=FALSE; 
    END
    IF ENTERPRICE-2*N THEN SELL(L<=SELLLLV,100%,MARKET);{退出离盈利头寸} 
    ELSE 
    SELL(L<=ENTERPRICE-2*N,100%,MARKET);{退出亏损头寸} 
    END 
END;

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

IF POSITIONCOUNT=1 THEN BEGIN{第一头寸} 
HOW:=CASH(0)*0.01/N;{波动性百分比决定头寸规模} 
开1:BUY(H>=BUYHHV,HOW,MARKET);{在20日新高STOP指令买进} 
END 

1. 我想在IF  这里加上两个个条件  MA10>REF(MA,10)  和 cross(ma5,ma10),但是REF  和 cross 在这里加不进去 怎么改呢?

2.  IF ENTERPRICE-2*N THEN SELL(L<=SELLLLV,100%,MARKET);{退出离盈利头寸}   这里的MARKET  我想改成收盘价就平仓 ,如何实现?


辛苦您 谢谢老师!



--  作者:FireScript
--  发布时间:2018/2/28 11:01:40
--  

1.你是说ref和cross不能放在if里面是吧。 可以这样 把那2个条件单独计算出来。

比如这样

cd:ma10>ref(ma,10);

if  cd then begin end

 

 

2.收盘价就平仓什么意思?限价平仓吗? sell(l<=sellllv,100%,limit,c);


--  作者:NH
--  发布时间:2018/2/28 11:03:28
--  
好的!!
--  作者:NH
--  发布时间:2018/2/28 12:43:12
--  
老师 那我如果要在开完仓后 ,加入开仓K过后经历多久时间(例如5分钟) 或多少根K(例如30根K)后才触发平仓条件 怎么写呢?
--  作者:FireScript
--  发布时间:2018/2/28 13:11:42
--  
if  ENTERBARS>10 then sell(holding>0,holding,market); //开仓历史超过10个K的时候平仓
--  作者:NH
--  发布时间:2018/2/28 13:59:35
--  
谢谢 老师