Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

extractMin5Data负数问题 #224

Open
dogfood1 opened this issue Dec 6, 2023 · 1 comment
Open

extractMin5Data负数问题 #224

dogfood1 opened this issue Dec 6, 2023 · 1 comment

Comments

@dogfood1
Copy link
Contributor

dogfood1 commented Dec 6, 2023

WTSKlineData* WTSDataFactory::extractMin5Data(WTSKlineSlice* baseKline, uint32_t times, WTSSessionInfo* sInfo, bool bIncludeOpen /* = true */, bool bAlignSec /* = false */)
...
	for (auto i = 0; i < baseKline->size(); i++)
	{
		const WTSBarStruct& curBar = *baseKline->at(i);

		uint32_t uTradingDate = curBar.date;
		uint32_t uDate = TimeUtils::minBarToDate(curBar.time);
		if(uDate == 19900000)
			uDate = uTradingDate;
		uint32_t uTime = TimeUtils::minBarToTime(curBar.time);
		uint32_t uMinute = sInfo->timeToMinutes(uTime);
		uint32_t uBarMin = 0;
		/*
		 *	By Wesley @ 2023.05.31
		 *	这里是按小节对齐的核心逻辑
		 *	1、先增加一个基础分钟数,如果不按小节对齐,就固定为0
		 *	2、如果按小节对齐,则判断当前分钟处于哪个小节,然后以上个小节结束的分钟数做基础分钟数
		 *	3、然后根据基础分钟数的差量计算新的对齐分钟数
		 *	4、最终得到bar的时间戳
		 */
		if (bAlignSec)
		{
			auto it = std::lower_bound(secMins.begin(), secMins.end(), uMinute);
			auto secIdx = it - secMins.begin();
			if (secIdx == 0)
			{
				uMinute -= 5;
				uBarMin = (uMinute / steplen)*steplen + steplen;
				if (uBarMin > secMins[secIdx])
					uBarMin = secMins[secIdx];
			}
			else
			{
				uMinute -= secMins[secIdx - 1];
				uBarMin = secMins[secIdx - 1] + (uMinute / steplen)*steplen + steplen;
				if (uBarMin > secMins[secIdx])
					uBarMin = secMins[secIdx];
			}
		}
		else
		{
			uMinute -= 5;
			uBarMin = (uMinute / steplen)*steplen + steplen;
		}

...

如果uMinute 为0 接下去在执行uMinute -= 5; 会导致uMinute为负数
uint32_t uMinute 所以会导致问题

在回测中表现为

image 会出现0844这种 image

对应session.json

{
    "ALLDAY":{
        "name":"全天候盘",
        "offset": -480,
        "sections":[
            {
                "from": 800,
                "to": 800
            }
        ]
    },
    "XXXX":{
        "name":"全天候盘",
        "offset": -480,
        "sections":[
            {
                "from": 800,
                "to": 800
            }
        ]
    }
}
@wondertrader
Copy link
Owner

有一个问题,如果出现负数,很可能是传入的5分钟数据的时间戳不对,因为wt采用的是EOB的时间戳,以股票为例,第一条min5的时间一定是0935,0935则不可能是minute==0,所以你需要检查你传入的min5是否正确

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants