如何计算昨涨跌停板价?

历史涨跌停的读取

由system创建,

最终由system编辑,

更新于2024/07/31,

阅读量2085


历史涨跌停的读取

涨跌停是一种极端行情,在这样的极端行情下,一是可能产生特殊的交易机会。二是对常规策略的风险控制也提出了新的要求,另外对历史测试的真实性也造成了障碍。所以读取历史的涨跌停板做细节处理非常有必要。

TBQuant提供了历史涨跌停的基础数据,我们本节就用一个简单的案例,来介绍下涨跌停历史数据的使用。

策略思路:

在距离几跳就要停板时,顺势追入,并启动追踪止损。 关键代码解读: 首先我们要定义两个基础数据变量来获取历史的结算价和停板比例。

Vars
	Dic<Array<Numeric>> mysettleprice("TB_SettlePrice");  //结算价
	Dic<Array<Numeric>> mypricelimit("TB_PriceLimit");    //停板比例

然后我们在当根bar要能读到对应的这两个基础数据。 所以我们用mysettleprice[0][0]和mypricelimit[0][0]分别获取结算价和停板比例。 最后我们按照交易所的计算规则产生涨跌停价格。注意各个交易所的计算规则有差别。

If(ExchangeCode=="CZCE")
	{
		myuplimit=RoundUp(mysettleprice[0][0]*(1+0.01*mypricelimit[0][0])/myjump,0)*myjump;
		mydnlimit=RoundDown(mysettleprice[0][0]*(1-0.01*mypricelimit[0][0])/myjump,0)*myjump;
	}Else If(ExchangeCode=="DCE")
	{
		myuplimit=RoundDown(mysettleprice[0][0]*(1+0.01*mypricelimit[0][0])/myjump,0)*myjump;
		mydnlimit=RoundUp(mysettleprice[0][0]*(1-0.01*mypricelimit[0][0])/myjump,0)*myjump;

	}Else If(ExchangeCode=="SHFE")
	{
		myuplimit=RoundDown(mysettleprice[0][0]*(1+0.01*mypricelimit[0][0])/myjump,0)*myjump;
		mydnlimit=RoundDown(mysettleprice[0][0]*(1-0.01*mypricelimit[0][0])/myjump,0)*myjump;
	}Else If(ExchangeCode=="CFFEX")
	{
		myuplimit=RoundDown(mysettleprice[0][0]*(1+0.01*mypricelimit[0][0])/myjump,0)*myjump;
		mydnlimit=RoundUp(mysettleprice[0][0]*(1-0.01*mypricelimit[0][0])/myjump,0)*myjump;
	}
完整代码:
Params
	Numeric lastnum(1);		//距离几跳停板
	Numeric hcrate(1);		//回撤价格百分比幅度
Vars
	Series<Numeric> buylasthigh;	//买入持仓盈利价格峰值
	Series<Numeric> selllastlow;	//卖出持仓盈利价格低谷
	Dic<Array<Numeric>> mysettleprice("TB_SettlePrice");  //结算价
	Dic<Array<Numeric>> mypricelimit("TB_PriceLimit");    //停板比例
	Series<Numeric> myuplimit;   //涨停价
	Series<Numeric> mydnlimit;	 //跌停价	
Events
OnBar(ArrayRef<Integer> indexs)
{
	//计算涨跌停价格
	Numeric myjump=MinMove*pricescale;
	If(ExchangeCode=="CZCE")
	{
		myuplimit=RoundUp(mysettleprice[0][0]*(1+0.01*mypricelimit[0][0])/myjump,0)*myjump;
		mydnlimit=RoundDown(mysettleprice[0][0]*(1-0.01*mypricelimit[0][0])/myjump,0)*myjump;
	}Else If(ExchangeCode=="DCE")
	{
		myuplimit=RoundDown(mysettleprice[0][0]*(1+0.01*mypricelimit[0][0])/myjump,0)*myjump;
		mydnlimit=RoundUp(mysettleprice[0][0]*(1-0.01*mypricelimit[0][0])/myjump,0)*myjump;

	}Else If(ExchangeCode=="SHFE")
	{
		myuplimit=RoundDown(mysettleprice[0][0]*(1+0.01*mypricelimit[0][0])/myjump,0)*myjump;
		mydnlimit=RoundDown(mysettleprice[0][0]*(1-0.01*mypricelimit[0][0])/myjump,0)*myjump;
	}Else If(ExchangeCode=="CFFEX")
	{
		myuplimit=RoundDown(mysettleprice[0][0]*(1+0.01*mypricelimit[0][0])/myjump,0)*myjump;
		mydnlimit=RoundUp(mysettleprice[0][0]*(1-0.01*mypricelimit[0][0])/myjump,0)*myjump;
	}
	
	If(myuplimit<=mydnlimit) Return;
	PlotNumeric("myuplimit",myuplimit);
	PlotNumeric("mydnlimit",mydnlimit);它这段代码没有明确指出计算昨天的涨跌停板价。理论上计算昨天的涨跌停价,需要前日的结算价与昨天涨跌停比例,不知道如何获得这两个数据?

它这段代码没有明确指出计算昨天的涨跌停板价。理论上计算昨天的涨跌停价,需要前日的结算价与昨天涨跌停比例,不知道如何获得这两个数据?

历史涨跌停板比例数据不全,导致计算涨跌停板错误!!!
历史涨跌停板比例数据不全,导致计算涨跌停板错误!!!
停板价买入开仓
如何在小周期的历史Bar上判断价格是否到达了涨跌停价
查询昨仓
如何在公式里判断昨仓和今仓
如何实现涨跌停不开仓
回测时如何取到当前涨跌停价格?
开平互转无法平昨仓
涨停板返回的aks值

......如果你每根bar上都计算了当日的涨跌停价,那昨日涨跌停价不就是回溯一下就解决了吗?