您现在的位置:程序化交易>> 期货公式>> 金字塔等>> 金字塔知识>>正文内容

关于大周期开只有多单过程中,小周期开空单问题 [金字塔]

咨询内容:
您好!
我想实现在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;


 

 来源: WWW.CXH99.COM

金字塔资深技术: 图表不支持锁仓,有多单情况下是不能开空单
所以平仓时候平holding全部平,试下
如果还没有空单信号说明就是空单条件不满足,或者在开空条件满足时候是有多单持仓的

  • 技术交流: 谢谢!
  •  

    有思路,想编写各种指标公式,交易模型,选股公式,还原公式的朋友

    可联系技术人员 QQ: 262069696  点击在线交流或微信号:cxh99cxh99  进行 有偿收费 编写!

    怎么收费,代编流程等详情请点击阅读!

    (注:由于人数限制,QQ或微信请选择方便的一个联系我们就行,加好友时请简单备注下您的需求,否则无法通过。谢谢您!)


    【字体: 】【打印文章】【查看评论

    相关文章

      没有相关内容