我想将成交日志写入文件,历史的成交日志,只写入了一次,很合理,但是最新的K线上的成交日志,会不停地写入日志,如果k线是1分钟的,会写入100多次。我试了用状态变量,写入一次变为true,作为判断,等新的k线出来再赋值为false;还试了记录一下写入时间,同一时间不再重复写入,但是这两种都没用,还是不同的写入,请问贵公司有合适的方案吗?有合适的代码片段吗?还是这个问题无法解决呢?如果无法解决我就不再试了
参考下这个例子:
//------------------------------------------------------------------------
// 简称: Samp_LogOnlyOnce
// 名称: 示例-实时只记录一次日志
// 类别: 策略应用
// 类型: 用户应用
// 输出: Void
//------------------------------------------------------------------------
Params
Numeric FastLength(5); // 短期指数平均线参数
Numeric SlowLength(20); // 长期指数平均线参数
Vars
Series<Numeric> AvgValue1;
Series<Numeric> AvgValue2;
Global String LongLogMsg;
Global String ShortLogMsg;
Defs
Integer LogFile(StringRef str)
{
If(IsTradeEnabled)
{
FileAppend("D:\\" + FormulaName() + ".txt", "[" + Text(SystemDateTime()) + "] " + str);
}
Return 0;
}
Events
OnBarOpen(ArrayRef<Integer> indexes)
{
LongLogMsg = "";
ShortLogMsg = "";
}
OnBar(ArrayRef<Integer> indexs)
{
AvgValue1 = AverageFC(Close,FastLength);
AvgValue2 = AverageFC(Close,SlowLength);
PlotNumeric("MA1",AvgValue1);
PlotNumeric("MA2",AvgValue2);
If(MarketPosition <> 1 && AvgValue1[1] > AvgValue2[1])
{
Buy(0,Open);
String logmsg = DateTimeToString(Date+Time) + ", Buy, 价格=" + Text(Open);
If(logmsg <> LongLogMsg)
{
LogFile(logmsg);
LongLogMsg = logmsg;
}
}
If(MarketPosition <>-1 && AvgValue1[1] < AvgValue2[1])
{
SellShort(0,Open);
String logmsg = DateTimeToString(Date+Time) + ", SellShort, 价格=" + Text(Open);
If(logmsg <> ShortLogMsg)
{
LogFile(logmsg);
ShortLogMsg = logmsg;
}
}
}
//------------------------------------------------------------------------
// 编译版本 2026/6/30 142205
// 版权所有 tblaocai
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TradeBlazer策略修改和重写的权利
//------------------------------------------------------------------------