//------------------------------------------------------------------------
// 简称: DaySession_Breakout_L
// 名称: 白盘开盘突破做多策略(带14:45强制平仓)
// 类别: 策略应用
// 类型: 内建应用
//------------------------------------------------------------------------
// 策略说明:
// 1. 仅在国内商品期货白盘时段交易(9:00-15:00)
// 2. 统计开盘半小时(9:00-9:30)的最高/最低价
// 3. 使用9:29时的ATR值计算交易参数
// 4. 价格突破基准高点+4跳时做多
// 5. 设置固定止损和ATR止盈
// 6. 无论盈亏,14:45强制平仓
//
// 入场条件:
// 1. 白盘时段(9:30之后)
// 2. 价格 ≥ 基准最高价 + 4跳
//
// 出场条件:
// 1. 止损: 价格 ≤ 基准最高价 - 35跳
// 2. 止盈: 价格 ≥ 基准最高价 + 达标ATR值
// 3. 强制平仓: 每日14:45以收盘价平仓
//----------------------------------------------------------------------//
Params
Numeric ATRPeriod(14); // ATR计算周期
Numeric AfternoonStart(1330); // 下午开盘时间(13:30)
Numeric ForceExitTime(1445); // 强制平仓时间(14:45)
Vars
Numeric MinPoint; // 最小变动单位(1跳价格)
Numeric BaseHigh(0); // 基准最高价(开盘半小时内)
Numeric BaseLow(0); // 基准最低价(开盘半小时内)
Numeric StdATR(0); // 标准ATR值
Numeric TargetATR(0); // 达标ATR值
Bool FirstBarFlag(True); // 当日第一根Bar标志
Bool ATRCalculated(False); // ATR已计算标志
Series<Numeric> ATRVal; // ATR值序列
Numeric EntryPrice; // 理论进场价
Numeric StopLossPrice; // 止损价格
Numeric TakeProfitPrice; // 止盈价格
Numeric CurrentTime; // 当前时间(HHMM格式)
Bool ForceExitFlag(False); // 强制平仓已执行标志
Numeric ForceExitPrice; // 强制平仓价格标记
Events
OnBar(ArrayRef<Integer> indexs)
{
// 计算最小变动单位
MinPoint = MinMove * PriceScale;
CurrentTime = Time / 100; // 转换为HHMM格式
// 初始化强制平仓价格标记
ForceExitPrice = InvalidNumeric;
// 当日第一根Bar初始化
If (Date != Date[1])
{
BaseHigh = High;
BaseLow = Low;
FirstBarFlag = True;
ATRCalculated = False;
ForceExitFlag = False;
}
// 只处理白盘时段(9:00-15:00)
If (CurrentTime >= 900 && CurrentTime < 1500)
{
// 开盘半小时内(9:00-9:30)更新基准高/低价
If (CurrentTime >= 900 && CurrentTime < 930)
{
If (FirstBarFlag)
{
BaseHigh = High;
BaseLow = Low;
FirstBarFlag = False;
}
Else
{
If (High > BaseHigh) BaseHigh = High;
If (Low < BaseLow) BaseLow = Low;
}
// 在9:29计算ATR值
If (CurrentTime >= 929 && CurrentTime < 930 && !ATRCalculated)
{
ATRVal = AvgTrueRange(ATRPeriod);
StdATR = IntPart(ATRVal) + 1;
TargetATR = IntPart(1.2 * StdATR);
ATRCalculated = True;
// 计算理论交易价格
EntryPrice = BaseHigh + 4 * MinPoint;
StopLossPrice = BaseHigh - 35 * MinPoint;
TakeProfitPrice = BaseHigh + TargetATR * MinPoint;
// 使用字符串连接输出多个值
Commentary("基准高价:" + Text(BaseHigh) + " 基准低价:" + Text(BaseLow));
Commentary("标准ATR:" + Text(StdATR) + " 达标ATR:" + Text(TargetATR));
Commentary("进场价:" + Text(EntryPrice) + " 止损价:" + Text(StopLossPrice) + " 止盈价:" + Text(TakeProfitPrice));
}
}
// 9:30之后交易时段
If (CurrentTime >= 930 && ATRCalculated && !ForceExitFlag)
{
// 检查是否到达强制平仓时间(14:45)
If (CurrentTime >= ForceExitTime)
{
If (MarketPosition == 1)
{
Sell(0, Close);
ForceExitFlag = True;
ForceExitPrice = Close; // 记录平仓价格
Commentary("14:45强制平仓! 价格:" + Text(Close));
}
Return; // 跳过当日后续交易
}
// 多头入场条件
If (MarketPosition == 0 && High >= EntryPrice && Vol > 0)
{
Buy(1, Max(Open, EntryPrice));
Commentary("做多进场! 价格:" + Text(Max(Open, EntryPrice)));
}
// 多头持仓管理
If (MarketPosition == 1)
{
// 止损出场
If (Low <= StopLossPrice && Vol > 0)
{
Sell(0, Min(Open, StopLossPrice));
Commentary("止损出场! 价格:" + Text(Min(Open, StopLossPrice)));
}
// 止盈出场
Else If (High >= TakeProfitPrice && Vol > 0)
{
Sell(0, Min(Open, TakeProfitPrice));
Commentary("止盈出场! 价格:" + Text(Min(Open, TakeProfitPrice)));
}
}
}
// 下午开盘重新激活交易(防止上午未触发)
If (CurrentTime >= AfternoonStart && !ATRCalculated && CurrentTime < ForceExitTime)
{
ATRVal = AvgTrueRange(ATRPeriod);
StdATR = IntPart(ATRVal) + 1;
TargetATR = IntPart(1.2 * StdATR);
ATRCalculated = True;
EntryPrice = BaseHigh + 4 * MinPoint;
StopLossPrice = BaseHigh - 35 * MinPoint;
TakeProfitPrice = BaseHigh + TargetATR * MinPoint;
}
}
// 绘制关键价格线
PlotNumeric("BaseHigh", BaseHigh);
PlotNumeric("EntryPrice", EntryPrice);
// 绘制止损止盈线
If (MarketPosition == 1)
{
PlotNumeric("StopLoss", StopLossPrice);
PlotNumeric("TakeProfit", TakeProfitPrice);
}
// 标记强制平仓时间点 - 使用价格点标记代替垂直线
If (CurrentTime == ForceExitTime)
{
PlotNumeric("ForceExit", High + 5 * MinPoint, Red);
Commentary("到达强制平仓时间:14:45");
}
}
这是想表达什么意思
表达的时间大于九点半
看下帮助文档这个表达方式
替我回答了。
不过我总感觉,上面像ai写的
估计ai在进化
已经越来越贴近tb了
不打好基础,用不好AI的
这句话应该挂社区头版横幅