我2021年之前长期使用交易开拓者旗舰版,2022年后转用文华,现在准备改回交易开拓者进行交易,发现平台已经更新到V3,重新写了一遍模型,发现止盈条件方面在输出结果的时候有不同的地方,请教两个版本的异同。下面第一个是V3版本的模型,第二个是交易开拓者旗舰版的模型。
V3版本模型:
//------------------------------------------------------------------------
// 简称: BollingerBandit_Multi_WithStop
// 名称: 布林强盗_多空合并版(带止盈)
// 类别: 策略应用
// 类型: 内建应用
// 输出:
//------------------------------------------------------------------------
/*
策略说明:
基于布林通道的多空突破系统,增加止盈条件
止盈机制: 开仓后动态跟踪价格高低点,突破反向边界时平仓
修改要点:
1. 声明开仓后最高价/最低价序列变量
2. 开仓时初始化高低点
3. 持仓期间更新高低点
4. 增加高低点突破平仓条件
*/
Params
Numeric bollingerLengths(35); // 布林通道周期
Numeric Offset(1.25); // 通道宽度系数
Numeric StdDevDown(1.0); // 止盈标准差倍数(新增参数)[1](@ref)
Numeric Lots(0); // 交易手数
Vars
Series<Numeric> MidLine; // 布林通道中轨
Numeric Band(0);
Series<Numeric> upBand; // 布林通道上轨
Series<Numeric> dnBand; // 布林通道下轨
Series<Numeric> HighAfterEntry; // 开仓后最高价(新增)[citation:用户消息]
Series<Numeric> LowAfterEntry; // 开仓后最低价(新增)[citation:用户消息]
Events
OnReady()
{
Range[0:DataSourceSize() - 1]
{
setPlotOption("MidLine", "begin-bar", bollingerLengths);
setPlotOption("upBand", "begin-bar", bollingerLengths);
setPlotOption("dnBand", "begin-bar", bollingerLengths);
}
}
OnBar(ArrayRef<Integer> indexs)
{
// 布林通道计算(使用前值)
MidLine = AverageFC(Close[1], bollingerLengths);
Band = StandardDev(Close[1], bollingerLengths, 2);
upBand = MidLine + Offset * Band;
dnBand = MidLine - Offset * Band;
// 画布林通道
PlotNumeric("MidLine", MidLine);
PlotNumeric("upBand", upBand);
PlotNumeric("dnBand", dnBand);
//=== 动态止盈轨计算(新增模块)=== [citation:用户消息]
If (BarsSinceEntry == 0) // 开仓当根K线
{
// 初始化:基于开仓时中轨和标准差设定止盈轨道
HighAfterEntry = MidLine + 8 * Band;
LowAfterEntry = MidLine - 8* Band;
}
PlotNumeric("HighAfterEntry", HighAfterEntry);
PlotNumeric("LowAfterEntry", LowAfterEntry);
//=== 开仓逻辑(检测上根K线条件)===
// 多单开仓:上根K线突破上轨
If(MarketPosition != 1 && CrossOver(Close[1], upBand[1]) )
{
Buy(Lots, Open); // 以下根K线开盘价执行
}
// 空单开仓:上根K线突破下轨
If(MarketPosition != -1 && CrossUnder(Close[1],dnBand[1]) )
{
SellShort(Lots, Open); // 以下根K线开盘价执行
}
//=== 平仓逻辑(检测上根K线条件)===
// 原有平仓:多单平仓(回归中轨)
If(MarketPosition == 1 && BarsSinceEntry >= 1
&& Close[1] <= MidLine )
Sell(0, Open); // 以下根K线开盘价执行
// 原有平仓:空单平仓(回归中轨)
If(MarketPosition == -1 && BarsSinceEntry >= 1
&& Close[1] >= MidLine )
BuyToCover(0, Open); // 以下根K线开盘价执行
//=== 新增止盈平仓(检测上根K线条件)=== [citation:用户消息]
// 多单止盈:价格跌破开仓后最低轨道
If(MarketPosition == -1 && BarsSinceEntry >= 1
&& Close[1] <= LowAfterEntry[1])
BuyToCover(0, Open);
// 空单止盈:价格突破开仓后最高轨道
If(MarketPosition == 1 && BarsSinceEntry >= 1
&& Close[1] >= HighAfterEntry[1])
sell(0, Open);
}
开拓者旗舰版模型://------------------------------------------------------------------------
// 简称: BOLLGAI
// 名称:
// 类别: 公式应用
// 类型: 用户应用
// 输出:
//------------------------------------------------------------------------
Params//参数区
Numeric Length(300);//均线参数
Numeric StdDevUp(1.5);//上下轨标准差参数
Numeric StdDevDowm(8);//上下轨标准差参数
Numeric Lots1(1);//交易手数
Numeric Lots2(2);//交易手数
Vars//变量
NumericSeries UpperBand;//上轨
NumericSeries LowerBand;//下轨
NumericSeries AveMa;//均线
Numeric StdValue;//标准差
NumericSeries HighAfterEntry; // 开仓后出现的最高价
NumericSeries LowAfterEntry; // 开仓后出现的最低价
NumericSeries Opelong;//长持仓量
NumericSeries Opeshort;//短持仓量
Begin
//过滤集合竞价
If(!CallAuctionFilter()) return;
AveMa=Average(Close[1],Length);//均线
StdValue = StandardDev(Close[1],Length);//标准差
Opelong=Average(OpenInt[1],300);//长持仓量
Opeshort=Average(OpenInt[1],150);//短持仓量
UpperBand=Avema+StdDevUp*StdValue;//上轨
LowerBand=Avema-StdDevUp*StdValue;//下轨
PlotNumeric("UpperBand",UpperBand);//上轨划线
PlotNumeric("LowerBand",LowerBand);//下轨划线
PlotNumeric("AveMa",AveMa);//均线
//满足条件进行交易
If(MarketPosition!=1 &&CrossOver(Close[1],UpperBand[1]) && Opelong<Opeshort)
{
Buy(Lots2,Open);
}
If(MarketPosition!=1 &&CrossOver(Close[1],UpperBand[1]) && Opelong>Opeshort)
{
Buy(Lots1,Open);
}
If(MarketPosition!=-1 &&CrossUnder(Close[1],LowerBand[1]) && Opelong<Opeshort )
{
SellShort(Lots2,Open);}
If(MarketPosition!=-1 &&CrossUnder(Close[1],LowerBand[1]) && Opelong>Opeshort )
{
SellShort(Lots1,Open);}
If(MarketPosition==1 && Close[1]<AveMa[1] )
{
Sell(0,Open);
}
If(MarketPosition==-1 && Close[1]>AveMa[1])
{
BuyToCover(0,Open);}
//记录开仓后高低点
If(BarsSinceentry == 1)
{
HighAfterEntry = Avema[1]+StdDevDowm*StdValue;
LowAfterEntry = Avema[1]-StdDevDowm*StdValue;
}
If(MarketPosition==1 && Close[1]> HighAfterEntry[1] && BarsSinceentry >1)
{
Sell(0,Open);
}
If(MarketPosition==-1 && Close[1]<LowAfterEntry[1] && BarsSinceentry >1)
{
BuyToCover(0,Open);}
PlotNumeric("HighAfterEntry",HighAfterEntry);//上轨划线
PlotNumeric("LowAfterEntry",LowAfterEntry);//下轨划线
End
//------------------------------------------------------------------------
//------------------------------------------------------------------------
// 编译版本 GS2015.12.25
// 用户版本 2023/06/24 09:16:49
// 版权所有 gjqh85330520
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
TBQ没有TB好用。研究了几天TBQ还是放弃了。
新产品肯定是优于老产品的
另外每个指标的参数周期你确定一致么?
参数这个是可以调整的,但理论上止盈条件是开仓当根K线布林中轨的八倍标准差,也就是理论上开仓后止盈条件不会随着价格变化而变化
但这个实现这个结果
?什么意思?
你这个图你想说什么什么问题呢?我看到开仓以后,这个绿线白线确实都没有变化了呀?不是直到平仓了才变化吗?
好几个问题了,怎么感觉完全不知道你在问什么呢?你能仔细确认一下你的问题吗?
你这两个计算标准差的不一样
一个是总体标准差,一个是样本标准差