hi 上午好 请问这个豆粕的3250以下 每下跌10个点高抛低吸的策略为什么会信号闪烁
global 保证baseBKVol basePrice gridCount 更新 根据运行控制台打印看没啥问题
目前运行开来 账号持仓没有问题(价格达到就触发) 但是信号净仓不准确(一直少信号 价格达到了也不提醒信号)
老是提醒信号闪烁 闪烁得我头疼 麻烦看一下什么原因 非常感谢 ! 期待这您的回复!
///------------------------------------------------------------------------
// 简称: WANGGE_M2
// 名称: 网格豆粕回溯+open
// 类别: 避免闪烁信号 但是指令价(一根30mk达成 随时触发)还未达成
// 每隔间距50 初始基准价startprice 每个网格5手(包括建底仓时)
//------------------------------------------------------------------------
Params
Numeric gridSpacing (10); // 网格间距
Numeric lots (1);
Numeric startprice(3250);
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)
{
// 初始建仓
If (MarketPosition == 0 and Close[1] <= startprice) // ??? 要不要再加上 and open<Close[1] 防止跳空 但也限制开仓机会
{
gridCount = RoundDown((startprice - Close[1]) / gridSpacing, 0);
if (gridCount >= 1)
{
baseBKVol =lots * gridCount;
Buy(baseBKVol, Open);
basePrice = Open;
Commentary("抄底初始建仓@网格" + Text(gridCount)+",买入建仓价:" + Text(Open) + ",当前净多仓:" + Text(baseBKVol));
Print("抄底初始建仓@网格" + Text(gridCount)+",买入建仓价:" + Text(Open) + ",当前净多仓:" + Text(baseBKVol));
}
}
// 持仓网格逻辑 下跌买入(严格基于最新basePrice)
else if (MarketPosition > 0 and Close[1] <= basePrice - gridSpacing) // ??? 要不要再加上 and open<Close[1] 防止跳空 但也限制开仓机会
{
// 计算当前价格与基准价格的差值对应的网格数
Numeric gridDiff = RoundDown((basePrice - Close[1]) / gridSpacing, 0);
if (gridDiff >= 1)
{
// 根据网格数进行一次性增仓操作
Buy(lots * gridDiff, Open);
baseBKVol = baseBKVol + lots * gridDiff;
basePrice = Open;
Commentary("抄底加仓买入@网格" + Text(gridDiff) + ",手数:" + Text(lots * gridDiff) + ",价格:" + Text(basePrice) + ",当前净多仓:" + Text(baseBKVol));
Print("抄底加仓买入@网格" + Text(gridDiff) + ",手数:" + Text(lots * gridDiff) + ",价格:" + Text(basePrice) + ",当前净多仓:" + Text(baseBKVol));
//gridDiff = RoundDown((basePrice - Open) / gridSpacing, 0);
}
}
// 上涨卖出(严格基于最新basePrice)
else if (MarketPosition > 0 and Close[1] >= basePrice + gridSpacing) // ??? 要不要再加上 and open>Close[1] 防止跳空 但也限制开仓机会
{
// 计算当前价格与基准价格的差值对应的网格数(这里是上涨情况)
Numeric gridDiff = RoundDown((Close[1] - basePrice) / gridSpacing, 0);
if (gridDiff >= 1 && baseBKVol > 0)
{
// 确定卖出数量,不超过持仓量
Numeric sellVol = Min(lots * gridDiff, baseBKVol);
Sell(sellVol, Open);
baseBKVol = baseBKVol - sellVol;
basePrice = Open;
Commentary("抄底减仓卖出@网格" + Text(gridDiff) + ",手数:" + Text(sellVol) + ",价格:" + Text(basePrice) + ",当前净多仓:" + Text(baseBKVol));
Print("抄底减仓卖出@网格" + Text(gridDiff) + ",手数:" + Text(sellVol) + ",价格:" + Text(basePrice) + ",当前净多仓:" + Text(baseBKVol));
//gridDiff = RoundDown((Open - basePrice) / gridSpacing, 0);
}
}
}
//------------------------------------------------------------------------
// 编译版本 2025/04/03 144901
// 版权所有 tb282723
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TradeBlazer公式修改和重写的权利
//-----------------------------------------------------------------------------------------
这种图表加全局,很难想象你是如何设计的
你这里的baseprice肯定是之前的某个值吧,执行完sell,你变成open,我觉得你是如何保证前后图表一致的
全局global有问题 我替换掉了 目前没啥问题了 非常感谢您!
好