加減倉問題
作者:文華財經 來源:cxh99.com 發布時間:2015年06月29日
- 咨詢內容:
老師,再次麻煩您幫我看一下程序,具體程序如下,在回測報告中2014.9.29之前運行的結果都是正確的,2014.9.30主圖上顯示的信號強度是50,手數是29是正確的,但是交易明細里出來的結果是買開倉67手,執行的是按前一天信號強度延續下來計算出的手數。我想讓您幫忙看一下為什么交易明細里和回測報告中執行的語句不同,是不是我代碼中出現了什么歧義造成的。之前有老師回答我的手數不正確是BKVOL,SKVOL造成的,但是這次手數顯示錯誤不是這兩個函數造成的,就是下單方向改變后沒有識別到50的信號強度,而是延續前面空單信號強度,這個問題我昨天看了一天還是不知問題出在哪,麻煩老師們幫我看一下,我下面截圖中加載的是白糖指數,測試時間是2014.7.1開始,最后顯示的那根K線就是2014.9.30的信號強度和手數,和交易明細里的手數是不一樣的,正常交易明細應該和主圖上的結果一致才是正確的吧,而且這都是歷史回測應該不會像運行模擬那樣實時的出現信號錯誤什么的。但是不知道為什么不一致
FD:=ABS(C-REF(C,1))/REF(C,1);//K線漲跌幅度DD:=REF(ISDOWN,2)&&REF(ISDOWN,1)&&ISUP&&FD<MIN(REF(FD,1),REF(FD,2))*1/2;//跌頓的定義,由三根K線形成的組合,第一根K線為下跌綠線,第二根為下跌綠線,第三根為上漲紅線,且第三根K線幅度<前兩根K線幅度較小者*1/2ZD:=REF(ISUP,2)&&REF(ISUP,1)&&ISDOWN&&FD<MAX(REF(FD,1),REF(FD,2))*1/2;//漲頓的定義, 由三根K線形成的組合,第一根K線為上漲紅線,第二根為上漲紅線,第三根為下跌綠線,且第三根K線幅度<前兩根K線幅度較大者*1/2 MBX:=(H-O)>=4*(O-C)&&ISDOWN;//墓碑線:(高-開)>=4(開-收), 且K線為綠線 FMBX:=(O-L)>=4*(C-O)&&ISUP;//反向墓碑線: (開-低)>=4(收-開),且K線為紅線ST:=(C-O)/O;//實體部分幅度=(當根收盤-當根開盤)/當根開盤DYX1:= ST>=0.03;//大陽線指實體部分>=3%DYX2:= ST<=-0.03;//大陰線DYBDY1:=DYX1&&C-REF(O,1)>=0&&(C/REF(O,1)-1)<=0.005&& ABS(O/REF(C,1)-1)<=0.005;//大陽伴大陰指是大陽線,0<(收盤-前一根開盤)/前一根開盤<=0.5%;|(開盤-前一根收盤)/前一根收盤|<=0.5%DYBDY2:=DYX2&&C-REF(O,1)<0&&C/REF(O,1)-1>=-0.005&& ABS(O/REF(C,1)-1)<=0.005;//大陰伴大陽TKDK:=ISUP&&REF(ISUP,1)&&(REF(O,1)-REF(C,2))/REF(C,2)<=-0.02;// 跳空低開雙陽線,第一根K線為紅線,第二根K線為紅線,且第一根K線跳空幅度<=-2%TKGK:ISDOWN&&REF(ISDOWN,1)&&(REF(O,1)-REF(C,2))/REF(C,2)>=0.02;// 跳空高開雙陰線,第一根K線為綠線,第二根K線為綠線,且第一根K線跳空幅度>=2%QDO:=IF(OPI>REF(OPI,1),20,IF(OPI<REF(OPI,1),-10,0));//持倉量大于前一根,信號強度20,小于前一根,-10,其余為0QDV:=IF(V>REF(V,1),20,IF(V<REF(V,1),-10,0));// 成交量大于前一根,信號強度20,小于前一根,-10,其余為0DDQD:=IF(BKVOL>0&&SKVOL=0&&DD,30,IF(BKVOL=0&&SKVOL>0&&DD,-15,0)); //跌頓做多時信號強度為30,做空時信號強度為-15ZDQD:=IF(BKVOL>0&&SKVOL&&ZD=0,-15,IF(BKVOL=0&&SKVOL>0&&ZD,30,0)); //漲頓做多時信號強度為-25,做空時信號強度為30MBXQD:=IF(BKVOL>0&&SKVOL=0&&MBX,-25,IF(BKVOL=0&&SKVOL>0&&MBX,45,0)); //墓碑線做多時信號強度為-25,做空時信號強度為45FMBXQD:=IF(BKVOL>0&&SKVOL=0&&FMBX,45,IF(BKVOL=0&&SKVOL>0&&FMBX,-25,0)); //反向墓碑線做多時信號強度為45,做空時信號強度為-25DYX1QD:=IF(BKVOL>0&&SKVOL=0&&DYX1,35,IF(BKVOL=0&&SKVOL>0&&DYX1,-20,0)); //大陽線做多時信號強度為35,做空時信號強度為-20DYX2QD:=IF(BKVOL>0&&SKVOL=0&&DYX2,-20,IF(BKVOL=0&&SKVOL>0&&DYX2,35,0)); //大陰線做多時信號強度為-20,做空時信號強度為35DYBDY1QD:=IF(BKVOL>0&&SKVOL=0&&DYBDY1,55,IF(BKVOL=0&&SKVOL>0&&DYBDY1,-30,0)); //大陽伴大陰做多時信號強度為55,做空時信號強度為-30DYBDY2QD:=IF(BKVOL>0&&SKVOL=0&&DYBDY2,-30,IF(BKVOL=0&&SKVOL>0&&DYBDY2,55,0)); //大陰伴大陽做多時信號強度為-30,做空時信號強度為55TKDKQD:=IF(BKVOL>0&&SKVOL=0&&TKDK,65,IF(BKVOL=0&&SKVOL>0&& TKDK,-35,0)); //跳空低開雙陽做多時信號強度為65,做空時信號強度為-35TKGKQD:=IF(BKVOL>0&&SKVOL=0&&TKGK,-35,IF(BKVOL=0&&SKVOL>0&& TKGK,65,0)); //跳空高開雙陰做多時信號強度為-35,做空時信號強度為65QD1:= QDO+QDV+DDQD+ZDQD+MBXQD+FMBXQD+DYX1QD+DYX2QD+DYBDY1QD+DYBDY2QD+TKDKQD+TKGKQD,NODRAW;//初始信號強度50,否則為每根信號強度之和TJAA1:=(REF(ISLASTBP,1)&&ISLASTBK||REF(ISLASTSP,1)&&ISLASTSK);XHQD:IF(REF(NOT(ISLASTBK)&&NOT(ISLASTSK)&&NOT(ISLASTSP)&&NOT(ISLASTBP),1)||TJAA1,50,IF(REF(XHQD,1)+QD1>=200,200,REF(XHQD,1)+QD1)),NODRAW;XHQD2:IF(XHQD<0,0,IF(XHQD=0,REF(XHQD,1),IF(XHQD>200,200,XHQD)));//上面信號強度范圍在(0,200)SS:INTPART((MONEYTOT*XHQD2*0.02/UNIT)/C),NODRAW;//算手數,一個信號強度對應0.02倍杠桿SS1:INTPART((MONEYTOT*XHQD2*0.02/UNIT)/C)-INTPART(REF(SS,1));SS2:IF(XHQD2<200&&SS1<>0,SS1,IF(XHQD2=200&&XHQD2<>REF(XHQD2,1),SS1,0));TIME>=1458&&BKVOL=0&&SKVOL=0&&C>REF(C,30),BK(SS);//14:58當收盤價大于前第30根收盤價,買開多TIME>=1458&&BKVOL=0&&SKVOL=0&&C<REF(C,30),SK(SS);TIME>=1458&&BKVOL=0&&SKVOL>0&&C>REF(C,30),BP(SKVOL);//14:58當有空單,當收盤價大于前第30根收盤價,反手多TIME>=1458&&REF(BKVOL,1)>0&&SKVOL=0&&C<REF(C,30),SP(BKVOL);//14:58當有多單,當收盤價小于前第30根收盤價,反手空TIME>=1458&&BKVOL>0&&SKVOL=0&&SS1>0,BK(SS2);//有多頭持倉,新手數大于0,增開多TIME>=1458&&BKVOL=0&&SKVOL>0&&SS1>0,SK(SS2);//有空頭持倉,新手數大于0,增開空TIME>=1458&&BKVOL>0&&SKVOL=0&&SS1<0,SP(ABS(SS2));//有多頭持倉,新手數小于0,賣平多TIME>=1458&&BKVOL=0&&SKVOL>0&&SS1<0,BP(ABS(SS2));//有空頭持倉,新手數小于0,買平空CLOSEKLINE(1,120);//收盤前最后一根K線提前60秒走完TRADE_AGAIN(60);//含有該函數的非過濾模型中,同一指令行可以連續出60
此主題相關圖片如下:qq截圖20150127090507.png
- 文華技術人員:
可以參考如下寫法:
FD:=ABS(C-REF(C,1))/REF(C,1);//K線漲跌幅度DD:=REF(ISDOWN,2)&&REF(ISDOWN,1)&&ISUP&&FD<MIN(REF(FD,1),REF(FD,2))*1/2;//跌頓的定義,由三根K線形成的組合,第一根K線為下跌綠線,第二根為下跌綠線,第三根為上漲紅線,且第三根K線幅度<前兩根K線幅度較小者*1/2ZD:=REF(ISUP,2)&&REF(ISUP,1)&&ISDOWN&&FD<MAX(REF(FD,1),REF(FD,2))*1/2;//漲頓的定義, 由三根K線形成的組合,第一根K線為上漲紅線,第二根為上漲紅線,第三根為下跌綠線,且第三根K線幅度<前兩根K線幅度較大者*1/2 MBX:=(H-O)>=4*(O-C)&&ISDOWN;//墓碑線:(高-開)>=4(開-收), 且K線為綠線 FMBX:=(O-L)>=4*(C-O)&&ISUP;//反向墓碑線: (開-低)>=4(收-開),且K線為紅線ST:=(C-O)/O;//實體部分幅度=(當根收盤-當根開盤)/當根開盤DYX1:= ST>=0.03;//大陽線指實體部分>=3%DYX2:= ST<=-0.03;//大陰線DYBDY1:=DYX1&&C-REF(O,1)>=0&&(C/REF(O,1)-1)<=0.005&& ABS(O/REF(C,1)-1)<=0.005;//大陽伴大陰指是大陽線,0<(收盤-前一根開盤)/前一根開盤<=0.5%;|(開盤-前一根收盤)/前一根收盤|<=0.5%DYBDY2:=DYX2&&C-REF(O,1)<0&&C/REF(O,1)-1>=-0.005&& ABS(O/REF(C,1)-1)<=0.005;//大陰伴大陽TKDK:=ISUP&&REF(ISUP,1)&&(REF(O,1)-REF(C,2))/REF(C,2)<=-0.02;// 跳空低開雙陽線,第一根K線為紅線,第二根K線為紅線,且第一根K線跳空幅度<=-2%TKGK:ISDOWN&&REF(ISDOWN,1)&&(REF(O,1)-REF(C,2))/REF(C,2)>=0.02;// 跳空高開雙陰線,第一根K線為綠線,第二根K線為綠線,且第一根K線跳空幅度>=2%QDO:=IF(OPI>REF(OPI,1),20,IF(OPI<REF(OPI,1),-10,0));//持倉量大于前一根,信號強度20,小于前一根,-10,其余為0QDV:=IF(V>REF(V,1),20,IF(V<REF(V,1),-10,0));// 成交量大于前一根,信號強度20,小于前一根,-10,其余為0DDQD:=IF(BKVOL>0&&SKVOL=0&&DD,30,IF(BKVOL=0&&SKVOL>0&&DD,-15,0)); //跌頓做多時信號強度為30,做空時信號強度為-15ZDQD:=IF(BKVOL>0&&SKVOL&&ZD=0,-15,IF(BKVOL=0&&SKVOL>0&&ZD,30,0)); //漲頓做多時信號強度為-25,做空時信號強度為30MBXQD:=IF(BKVOL>0&&SKVOL=0&&MBX,-25,IF(BKVOL=0&&SKVOL>0&&MBX,45,0)); //墓碑線做多時信號強度為-25,做空時信號強度為45FMBXQD:=IF(BKVOL>0&&SKVOL=0&&FMBX,45,IF(BKVOL=0&&SKVOL>0&&FMBX,-25,0)); //反向墓碑線做多時信號強度為45,做空時信號強度為-25DYX1QD:=IF(BKVOL>0&&SKVOL=0&&DYX1,35,IF(BKVOL=0&&SKVOL>0&&DYX1,-20,0)); //大陽線做多時信號強度為35,做空時信號強度為-20DYX2QD:=IF(BKVOL>0&&SKVOL=0&&DYX2,-20,IF(BKVOL=0&&SKVOL>0&&DYX2,35,0)); //大陰線做多時信號強度為-20,做空時信號強度為35DYBDY1QD:=IF(BKVOL>0&&SKVOL=0&&DYBDY1,55,IF(BKVOL=0&&SKVOL>0&&DYBDY1,-30,0)); //大陽伴大陰做多時信號強度為55,做空時信號強度為-30DYBDY2QD:=IF(BKVOL>0&&SKVOL=0&&DYBDY2,-30,IF(BKVOL=0&&SKVOL>0&&DYBDY2,55,0)); //大陰伴大陽做多時信號強度為-30,做空時信號強度為55TKDKQD:=IF(BKVOL>0&&SKVOL=0&&TKDK,65,IF(BKVOL=0&&SKVOL>0&& TKDK,-35,0)); //跳空低開雙陽做多時信號強度為65,做空時信號強度為-35TKGKQD:=IF(BKVOL>0&&SKVOL=0&&TKGK,-35,IF(BKVOL=0&&SKVOL>0&& TKGK,65,0)); //跳空高開雙陰做多時信號強度為-35,做空時信號強度為65QD1:= QDO+QDV+DDQD+ZDQD+MBXQD+FMBXQD+DYX1QD+DYX2QD+DYBDY1QD+DYBDY2QD+TKDKQD+TKGKQD,NODRAW;//初始信號強度50,否則為每根信號強度之和TJAA1:=(REF(ISLASTBP,1)&&SKVOL=0||REF(ISLASTSP,1)&&BKVOL=0);XHQD:IF(REF(NOT(ISLASTBK)&&NOT(ISLASTSK)&&NOT(ISLASTSP)&&NOT(ISLASTBP),1)||TJAA1,50,IF(REF(XHQD,1)+QD1>=200,200,REF(XHQD,1)+QD1)),NODRAW;XHQD2:IF(XHQD<0,0,IF(XHQD=0,REF(XHQD,1),IF(XHQD>200,200,XHQD)));//上面信號強度范圍在(0,200)SS:INTPART((MONEYTOT*XHQD2*0.02/UNIT)/C),NODRAW;//算手數,一個信號強度對應0.02倍杠桿SS1:INTPART((MONEYTOT*XHQD2*0.02/UNIT)/C)-INTPART(REF(SS,1));SS2:IF(XHQD2<200&&SS1<>0,SS1,IF(XHQD2=200&&XHQD2<>REF(XHQD2,1),SS1,0));TIME>=1458&&BKVOL=0&&SKVOL=0&&C>REF(C,30),BK(SS);//14:58當收盤價大于前第30根收盤價,買開多TIME>=1458&&BKVOL=0&&SKVOL=0&&C<REF(C,30),SK(SS);TIME>=1458&&BKVOL=0&&SKVOL>0&&C>REF(C,30),BP(SKVOL);//14:58當有空單,當收盤價大于前第30根收盤價,反手多TIME>=1458&&REF(BKVOL,1)>0&&SKVOL=0&&C<REF(C,30),SP(BKVOL);//14:58當有多單,當收盤價小于前第30根收盤價,反手空TIME>=1458&&BKVOL>0&&SKVOL=0&&SS1>0,BK(SS2);//有多頭持倉,新手數大于0,增開多TIME>=1458&&BKVOL=0&&SKVOL>0&&SS1>0,SK(SS2);//有空頭持倉,新手數大于0,增開空TIME>=1458&&BKVOL>0&&SKVOL=0&&SS1<0,SP(ABS(SS2));//有多頭持倉,新手數小于0,賣平多TIME>=1458&&BKVOL=0&&SKVOL>0&&SS1<0,BP(ABS(SS2));//有空頭持倉,新手數小于0,買平空CLOSEKLINE(1,60);TRADE_AGAIN(60);//含有該函數的非過濾模型中,同一指令行可以連續出60
此主題相關圖片如下:image .png
- 文華客服:
老師您改過的程序是正確的,謝謝,我還想問一下我是把程序加載到白糖指數上,下單是下的白糖1505合約,現在手數計算是用白糖指數的收盤價來算的,怎么樣能變成用白糖1505合約的收盤價來計算手數
- 網友回復:
手數的計算是根據 指數數據來算的
這個無法改變的
只能加載到白糖1505合約來計算下
- 網友回復:
老師麻煩您再看一下1樓的程序我放到白糖上運行,起始時間是從昨天開始,為什么今天收盤的時候監控K線圖中昨天的SS指標沒有了,導致今天SS2也沒有計算結果
此主題相關圖片如下:qq圖片20150129155643.jpg