金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 1770|回复: 2

关于大周期开只有多单过程中,小周期开空单问题

[复制链接]

101

主题

219

帖子

229

积分

Rank: 6Rank: 6

等级: 机构版

注册:
2021-5-20
曾用名:
发表于 2022-2-12 15:10 | 显示全部楼层 |阅读模式

您好!
      我想实现在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;


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号? 微信登录

x
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2022-2-12 20:14 | 显示全部楼层
图表不支持锁仓,有多单情况下是不能开空单
所以平仓时候平holding全部平,试下
如果还没有空单信号说明就是空单条件不满足,或者在开空条件满足时候是有多单持仓的
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

101

主题

219

帖子

229

积分

Rank: 6Rank: 6

等级: 机构版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2022-2-14 21:44 | 显示全部楼层
谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2024-12-23 14:56 , Processed in 0.186580 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表