
等级: 新手上路
- 注册:
- 2022-11-12
- 曾用名:
|
标题:急,
图表程序化交易,策略代码如下:
*******************************BEGIN*********************************
INPUT:N1(5,5,20,1),N2(10,10,50,5),N3(20,20,100,10);
N4:=30;
N:=10;
M:=2;
/////////////////////////////////////////////////////////////////////////////////////
//P2:公共逻辑
TP:=(OPEN+HIGH+LOW+CLOSE)/4;
YTP:=REF(TP,1);
VARIABLE:可用资金余额=TCASH();
VARIABLE:可用资金余额2=TACCOUNT(49);
VARIABLE:占资=TACCOUNT(28);
/////////////////////////////////////////////////////////////////////////////////////
//P3:均线逻辑
MA1:=MA(TP,N1);
MA2:MA(TP,N2),COLORGREEN;
MA3:MA(TP,N3),LINETHICK2;
MA4:=MA(TP,N4);//【**】
/////////////////////////////////////////////////////////////////////////////////////
//P4:箱形线逻辑
VARIABLE:通道顶=0;
VARIABLE:通道底=0;
//VARIABLE:Y通道顶=0;
//VARIABLE:Y通道底=0;
VARIABLE:udBOX=0;//箱形线涨跌标志
VARIABLE:nBOX=1;//
VARIABLE:XX=0;
//STEP1:确定基准与波幅。
BOXWAVE:=MA(TR,N)*M;
//STEP2:确定每K线的理论上下线。
BOXTOP:=TP+BOXWAVE;
BOXBTM:=TP-BOXWAVE;
//【**】STEP3:计算前一根K线的理论上下线。
YBOXTOP:=REF(BOXTOP,1);
YBOXBTM:=REF(BOXBTM,1);
//STEP4:计算通道上下线。
IF BARPOS<=N+1{这里如果是<=N,结果永远是错的} THEN BEGIN
通道顶:=BOXTOP;
通道底:=BOXBTM;
udBOX:=0;
nBOX:=1;//统计箱形线的序数。
END
ELSE BEGIN
IF (HIGH>通道顶 && LOW<通道底) THEN BEGIN
通道顶:=通道顶;//YBOXTOP;
通道底:=通道底;//YBOXBTM;
IF (TP>YTP) THEN BEGIN
udBOX:=11;
END
ELSE BEGIN
udBOX:=-12;
END
END
IF (HIGH>通道顶 && LOW>通道底) THEN BEGIN
nBOX:=nBOX+1;
通道顶:=BOXTOP;
通道底:=BOXBTM;
udBOX:=13;
END
IF (HIGH<通道顶 && LOW<通道底) THEN BEGIN
nBOX:=nBOX+1;
通道底:=BOXBTM;
通道顶:=BOXTOP;
udBOX:=-14;
END
END
TOP:REF(通道顶,1);
BTM:REF(通道底,1);
/////////////////////////////////////////////////////////////////////////////////////
//P5:交易控制
VARIABLE:ORDERTIME=0;//TODO:未完成。下单次数控制,防止出现下单不成功后,反复下单造成高额费用的事。
udSTK:=GETINIFILE('D:\BAIDUSYNCDISK\A_TRADE\STK_TREND.INI',STKLABEL(),'STK_TREND');//合约涨跌标志:1表示上涨趋势,-1表示下跌趋势,0表示盘整趋势;
手数:=GETINIFILE('D:\BAIDUSYNCDISK\A_TRADE\STK_TREND.INI',STKLABEL(),'OPEN_NUMBER');//交易手数;
信号开始时间:=GETINIFILE('D:\BAIDUSYNCDISK\A_TRADE\STK_TREND.INI',STKLABEL(),'STARTDATE');
/////////////////////////////////////////////////////////////////////////////////////
//P6:交易条件
开多条件:=MA2>=MA3 AND (CLOSE-MA3)>REF(CLOSE,1)-REF(MA3,1) AND UDBOX>0 AND TBUYHOLDINGEX('','',2)=0;
开空条件:=MA2<=MA3 AND (CLOSE-MA3)<REF(CLOSE,1)-REF(MA3,1) AND UDBOX<0 AND TSELLHOLDINGEX('','',2)=0;
平多条件:=MA2<=MA3 OR CLOSE<HHV(HIGH,OPENBAR())*0.985;
平空条件:=MA2>=MA3 OR CLOSE>LLV(LOW,OPENBAR())*1.015;
//Flag:'TF:'&NUMTOSTR(开多条件,0)&NUMTOSTR(平多条件,0)&"||"&NUMTOSTR(开空条件,0)&NUMTOSTR(平空条件,0);
/////////////////////////////////////////////////////////////////////////////////////
//P7:交易系统
回报信息1:='';
回报信息2:='';
IF DATE>信号开始时间 THEN BEGIN
SENDPHONEMSG(STRCAT(numtostr(barpos(),0),NUMTOSTR(TCASH(),0)),1),ALLOWREPEAT;
IF udSTK=1 THEN BEGIN
IF 开多条件 THEN BEGIN
回报信息1:=NUMTOSTR(DATE(),0)&' '&NUMTOSTR(TIME(),0);
IF TCASH()>=20000 THEN BEGIN
BUY(1,手数,MARKET);
回报信息2:=': '&STKLABEL()&';价'&NUMTOSTR(ENTERPRICE(),0)&';BUY;量'&NUMTOSTR(手数,0)&';占'& NUMTOSTR(TACCOUNT(28),0) {TMARGINEX('','',0,0)}&';余'&NUMTOSTR(TACCOUNT( 19),0);
END
ELSE BEGIN
回报信息2:=': '&'账户资金不足,无法下单!';
END
END
IF 平多条件 THEN BEGIN
SELL(1,手数,MARKET);
回报信息1:=NUMTOSTR(DATE(),0)&' '&NUMTOSTR(TIME(),0);
回报信息2:=': '&STKLABEL()&';价'&NUMTOSTR(ENTERPRICE(),0)&';SELL;量'&NUMTOSTR(手数,0)&';余'&NUMTOSTR(TACCOUNT( 49),0);
END
END
IF udSTK=-1 THEN BEGIN
IF 开空条件 THEN BEGIN
回报信息1:=NUMTOSTR(DATE(),0)&' '&NUMTOSTR(TIME(),0);
IF TCASH()>=20000 THEN BEGIN
BUYSHORT(1,手数,MARKET);
回报信息2:=': '&STKLABEL()&';价'&NUMTOSTR(ENTERPRICE(),0)&';BUYs;量'&NUMTOSTR(手数,0)&';占'& NUMTOSTR(TACCOUNT(28),0) {TMARGINEX('','',0,0)}&';余'&NUMTOSTR(TACCOUNT( 19),0);
END
ELSE BEGIN
回报信息2:=': '&'账户资金不足,无法下单!';
END
END
IF 平空条件 THEN BEGIN
SELLSHORT(1,手数,MARKET);
回报信息1:=NUMTOSTR(DATE(),0)&' '&NUMTOSTR(TIME(),0);
回报信息2:=': '&STKLABEL()&';价'&NUMTOSTR(ENTERPRICE(),0)&';SELLs;量'&NUMTOSTR(手数,0)&';占'&NUMTOSTR(TACCOUNT( 49),0);
END
END
END
DEBUGFILE2('D:\BAIDUSYNCDISK\A_TRADE\LOG.TXT',开多条件,1111,0);
DEBUGFILE2('D:\BAIDUSYNCDISK\A_TRADE\LOG.TXT',开空条件,1111,0);
DEBUGFILE2('D:\BAIDUSYNCDISK\A_TRADE\LOG.TXT',平多条件,1111,0);
DEBUGFILE2('D:\BAIDUSYNCDISK\A_TRADE\LOG.TXT',平空条件,1111,0);
****************************END***********************************
请问,为什么LOG.TXT文件的内容是:
D:\BAIDUSYNCDISK\A_TRADE\STK_T
STK_TREND
STK_TREND
D:\BAIDUSYNCDISK\A_TRADE\STK_T
D:\BAIDUSYNCDISK\A_TRADE\STK_T
STK_TREND
STK_TREND
D:\BAIDUSYNCDISK\A_TRADE\STK_T
D:\BAIDUSYNCDISK\A_TRADE\STK_T
STK_TREND
STK_TREND
D:\BAIDUSYNCDISK\A_TRADE\STK_T
D:\BAIDUSYNCDISK\A_TRADE\STK_T
STK_TREND
STK_TREND
D:\BAIDUSYNCDISK\A_TRADE\STK_T
D:\BAIDUSYNCDISK\A_TRADE\STK_T
STK_TREND
STK_TREND
D:\BAIDUSYNCDISK\A_TRADE\STK_T
D:\BAIDUSYNCDISK\A_TRADE\STK_T
STK_TREND
STK_TREND
...........
上面的内容中,D:\BAIDUSYNCDISK\A_TRADE\STK_T 应该是被截断了,完整的应该是:D:\BAIDUSYNCDISK\A_TRADE\STK_TREND.INI。
通过其它方式调试,比如在主图上显示,开多条件,开空条件,平多条件,平空条件 这4个变量的值也是这样,始终显示:D:\BAIDUSYNCDISK\A_TRADE\STK_TREND.INI 和 STK_TREND 中的一个。
请问:
(1)按正常逻辑,这4个变量的值应该是1(成立)或0(不成立)吧?
(2)为什么会是这样的结果?
(3)如何解决?
|
|