咨詢內容:
您好!
我想實現在10分鐘K線圖表中實現如下功能:
1、當上一根60分鐘K線滿足60分鐘開多條件后,在60分鐘結束后的第一根10分鐘K線結束后開多;
當60分鐘觸發止損或者平多條件,則平多,同樣在滿足條件的60分鐘結束后的第一根10分鐘K線平多。
2、在60分鐘滿足持有多單的條件下,如果10分鐘滿足開空條件,則開空單。
在10分鐘滿足平空條件下,則平空(平空不需要60分鐘持有多單的條件限制
我回測過程中,在10分鐘圖表上滑動鼠標,左上角顯示的多單和空單數量的變化,就是我想要實現的,時間節點也都正確,但是有一個問題,測試報告中,只有多單開倉和平倉記錄,而沒有空單的開平倉記錄,我找不到原因,請幫忙指點一下,萬分謝謝!
下面是鼠標在10分鐘K線移動過程中,多單和空單實際變化情況,和我想要的一致,下圖截取的是2022-1-17日10:40分(開多)-2022-1-24日10:40分平多,這一段多單持有期間,多單空單數量變化情況。
圖片上面有標注執行的時間節點,可能看不清楚,我列個表格如下:
但是,回測報告明細中,并沒有空單開平倉記錄:
萬分感謝!
我的代碼如下:
//////////////////////////////////////////////////////////////////////////////////////////
variable:B[1]:=(1);//1手多單
variable:S[1]:=(1);//1手空單
variable:ZSDS=50;//止損點數
variable:lotsB=0;//持有多單數量
variable:lotsS=0;//持有空單數量
60_l:=CALLSTOCK('',vtlow,5,-1);//60分鐘最低價
60_c:=CALLSTOCK('',vtclose,5,-1);//60分鐘收盤價
MA5_60:=Stkindiex('','MY_MA.MYMA5',0,5,-1,0),COLORGREEN,LINETHICK2; //60分鐘5均線
{MY_MA里面代碼:
MYMA5:=MA(C,5);
}
DIF60:=Stkindiex('','macd.diff(26,12,9)',0,5,-1,0),nodraw;
DEA60:=Stkindiex('','macd.dea(26,12,9)',0,5,-1,0),nodraw;
MACD60:=2*(DIF60-DEA60);
deathcross60:=CROSS(DEA60,DIF60);//60分鐘死叉
J60:=Stkindiex('','MYKDJ.J',0,5,-1,0),nodraw;//60分鐘J值
{MYKDJ里面代碼:
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K:=SMA(RSV,3,1);
D:=SMA(K,3,1);
J:=3*K-2*D;
}
DRAWTEXT(CROSS(J60,0),60_l*0.998,'底'),COLORRED;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//開多單
CON_BUY1:=CROSS(J60,0);//60分鐘J值從0以下上穿
CON_BUY2:=MACD60>REF(MACD60,1);//60分鐘MACD柱體放大
CON_SELL1:=deathcross60;//60分鐘DIF和DEA死叉
KDuo:=CON_BUY1 AND CON_BUY2; //開多條件
PDuo:=CON_SELL1;//平多條件
//如果上面60分鐘持有多單,仍然滿足持有條件,那么10分鐘上面只要出現10分鐘收盤價格低于上一根60分鐘5均線值,并且10分鐘DIF和DEA死叉,則開對沖的1手空單。
DIF10:=Stkindiex('','macd.diff(26,12,9)',0,18,0,0),nodraw;
DEA10:=Stkindiex('','macd.dea(26,12,9)',0,18,0,0),nodraw;
J10:=Stkindiex('','MYKDJ.J',0,18,0,0),nodraw;
CON1:=DIF10<DEA10;//10分鐘DIF和DEA死叉
CONS:=DIF10>DEA10;//10分鐘DIF和DEA金叉
PKong:=CONS; //10分鐘平空條件
KKong:=CON1;// 10分鐘開空條件
////////////////////////////////////////////////////////////////////////////////////////////
IF lotsB>0 THEN begin
//如果持有多單過程中,如果此時滿足10分鐘開空條件,則在10分鐘K線開空單
IF KKONG and lotsS=0 THEN begin
開空:=BuySHORT(1,S[1],NEXTOPEN);
lotsS:=S[1];
end
//止損
IF ENTERPRICE-60_c>=ZSDS THEN
BEGIN
多損:SELL(1,B[1],MARKET),ORDERQUEUE;
lotsB:=0;
END
{平多單}
IF PDuo THEN BEGIN
平多:=Sell(1,B[1],NEXTOPEN);
lotsB:=0;
end
END
{開多單}
IF KDuo and lotsB=0 THEN begin
開多:=Buy(1,B[1],NEXTOPEN);
lotsB:=B[1];
end
///////////////////////////////////////////////////////////////////////////////////////////////
//平空單,不需要滿足60分鐘多單持有條件,只需要滿足10分鐘平空條件即可
IF PKong AND lotsS>0 THEN BEGIN
平空:=SellSHORT(1,S[1],NEXTOPEN);
lotsS:=0;
END
空單:lotsS,linethick0;
多單:lotsB,linethick0;
資產:=asset-10000000,colorred,noaxis;
最大回撤:=MaxDrawDown,nodraw;
盈虧比:=資產/最大回撤,nodraw;
?
?來源: m.kzuj.com.cn
金字塔資深技術:
圖表不支持鎖倉,有多單情況下是不能開空單
所以平倉時候平holding全部平,試下
如果還沒有空單信號說明就是空單條件不滿足,或者在開空條件滿足時候是有多單持倉的
技術交流:
謝謝!