hi,老师好,下面是个焦煤的自动网格单,1370之下每下跌40个点高抛低吸
问题:1为什么会产生信号闪烁 我用的是close[1]及open 应该不会产生信号闪缩
2 经过价格验证 我感觉账户净仓是对的 信号净仓没变化 那后续账户净仓仍然会执行我的策略高抛低吸 那我就不不管信号净仓?
//------------------------------------------------------------------------
// 简称: WANGGE_JM2
// 名称: 网格焦煤回溯+open
// 类别: 避免闪烁信号 但是指令价(一根30mk达成 随时触发)还未达成
// 每隔间距40 JM初始基准价1370 每个网格4手(包括建底仓时)
//------------------------------------------------------------------------
Params
Numeric gridSpacing (40); // 网格间距
Vars
Global Numeric baseBKVol; // 净多仓
Global Numeric basePrice; // 作为衡量的基准价格
Global Numeric gridCount; // 用于计算买量的变量
Defs
// 这里没有需要添加的公式函数
Events
// 初始化事件函数,策略运行期间,首先运行且只有一次
OnInit()
{
// 初始化变量
baseBKVol = 0;
basePrice = 0;
gridCount = 0;
}
// Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
OnBar(ArrayRef<Integer> indexs)
{
// 初始建仓(保持Close)
If (MarketPosition == 0 and Close[1] <= 1370)
{
gridCount = RoundDown((1370 - Close[1]) / gridSpacing, 0);
if (gridCount >= 1)
{
baseBKVol = 4 * gridCount;
Buy(4 * gridCount, Open);
basePrice = Open;
Commentary("抄底初始建仓@网格" + Text(gridCount)+",买入建仓价:" + Text(Open) + ",当前净多仓:" + Text(baseBKVol));
}
}
// 持仓网格逻辑 下跌买入(严格基于最新basePrice)
else if (MarketPosition > 0 and Close[1] <= basePrice - gridSpacing)
{
// 计算当前价格与基准价格的差值对应的网格数
Numeric gridDiff = RoundDown((basePrice - Close[1]) / gridSpacing, 0);
if (gridDiff >= 1)
{
// 根据网格数进行一次性增仓操作
Buy(4 * gridDiff, Open);
baseBKVol = baseBKVol + 4 * gridDiff;
basePrice = Open;
Commentary("抄底加仓买入@网格" + Text(gridDiff) + ",手数:" + Text(4 * gridDiff) + ",价格:" + Text(basePrice) + ",当前净多仓:" + Text(baseBKVol));
}
}
// 上涨卖出(严格基于最新basePrice)
else if (MarketPosition > 0 and Close[1] >= basePrice + gridSpacing)
{
// 计算当前价格与基准价格的差值对应的网格数(这里是上涨情况)
Numeric gridDiff = RoundDown((Close[1] - basePrice) / gridSpacing, 0);
if (gridDiff >= 1 && baseBKVol > 0)
{
// 确定卖出数量,不超过持仓量
Numeric sellVol = Min(4 * gridDiff, baseBKVol);
Sell(sellVol, Open);
baseBKVol = baseBKVol - sellVol;
basePrice = Open;
Commentary("抄底减仓卖出@网格" + Text(gridDiff) + ",手数:" + Text(sellVol) + ",价格:" + Text(basePrice) + ",当前净多仓:" + Text(baseBKVol));
}
}
}
你这个网格变量global那你每次启动不就不同了?
hi 对 这样baseBKVol、 basePrice、gridCount每次会更新成最新的 除了信号闪烁 打印都是对的 账户净仓都是对的
我刚刚删除了3个Global 现在一个信号都没有了 请问我该怎么办 就差这个网格的更新了 麻烦指导一下 🤝
Global Numeric baseBKVol; // 净多仓
Global Numeric basePrice; // 作为衡量的基准价格
Global Numeric gridCount; // 用于计算买量的变量
加了global 因模拟在跑 除了信号闪烁 成交、账户净仓都是对的 开平、权益也感觉没啥我呢提 但是信号净仓那不更新 吐血 想跑实盘也不敢跑 就差这个信号闪烁问题 不用global 以下三个变量都不更新了 不知道什么问题导致信号闪烁
Global Numeric baseBKVol; // 净多仓
Global Numeric basePrice; // 作为衡量的基准价格
Global Numeric gridCount; // 用于计算买量的变量