//------------------------------------------------------------------------
// 简称: test
// 名称: 上线卖开并22:55平仓策略
// 类别: 公式应用
// 类型: 用户应用
// 输出: Void
//------------------------------------------------------------------------
Params
// 此处添加参数
Numeric millsecs(1000);
Vars
// 此处添加变量
Numeric avg;
Global Integer timerId;
Global Integer hasSoldOpen; // 标记是否已经卖开
Global Integer hasClosed; // 标记是否已经平仓
Defs
// 此处添加公式函数
Numeric calcAvg(Numeric a, Numeric b)
{
return (a + b) / 2;
}
Events
// 此处实现事件函数
// 初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作
OnInit()
{
timerId = createTimer(millsecs);
hasSoldOpen = 0;
hasClosed = 0;
// 与数据源有关
Range[0:DataCount - 1]
{
//=========数据源相关设置==============
//AddDataFlag(Enum_Data_RolloverBackWard()); // 设置后复权
//AddDataFlag(Enum_Data_RolloverRealPrice()); // 设置映射真实价格
//AddDataFlag(Enum_Data_AutoSwapPosition()); // 设置自动换仓
//AddDataFlag(Enum_Data_IgnoreSwapSignalCalc()); // 设置忽略换仓信号计算
//AddDataFlag(Enum_Data_OnlyDay()); // 设置仅日盘
//AddDataFlag(Enum_Data_OnlyNight()); // 设置仅夜盘
//AddDataFlag(Enum_Data_NotGenReport()); // 设置数据源不参与生成报告标志
//=========交易相关设置==============
//MarginRate rate;
//rate.ratioType = Enum_Rate_ByFillAmount; // 设置保证金费率方式为成交金额百分比
//rate.longMarginRatio = 0.1; // 设置保证金率为10%
//rate.shortMarginRatio = 0.2; // 设置保证金率为20%
//SetMarginRate(rate);
//CommissionRate tCommissionRate;
//tCommissionRate.ratioType = Enum_Rate_ByFillAmount;
//tCommissionRate.openRatio = 5; // 设置开仓手续费为成交金额的5%%
//tCommissionRate.closeRatio = 2; // 设置平仓手续费为成交金额的2%%
//tCommissionRate.closeTodayRatio = 0; // 设置平今手续费为0
//SetCommissionRate(tCommissionRate); // 设置手续费率
//SetSlippage(Enum_Rate_PointPerHand, 2); // 设置滑点为2跳/手
//SetOrderPriceOffset(2); // 设置委托价为叫买/卖价偏移2跳
//SetOrderMap2MainSymbol(); // 设置委托映射到主力
//SetOrderMap2AppointedSymbol(symbols, multiples); // 设置委托映射到指定合约,symbols是映射合约数组,multiples是映射倍数数组
}
// 与数据源无关
//SetBeginBarMaxCount(10); // 设置最大起始bar数为10
//SetBackBarMaxCount(10); // 设置最大回溯bar数为10
//=========交易相关设置==============
//SetInitCapital(1000000); // 设置初始资金为100万
//AddTradeFlag(Enum_Trade_Ignore_Buy()); // 设置忽略多开
//AddTradeFlag(Enum_Trade_Ignore_Sell()); // 设置忽略多平
//AddTradeFlag(Enum_Trade_Ignore_SellShort()); // 设置忽略空开
//AddTradeFlag(Enum_Trade_Ignore_Buy2Cover()); // 设置忽略空平
}
// 在所有的数据源准备完成后调用,应用在数据源的设置等操作
OnReady()
{
}
// 基础数据更新事件函数
OnDic(StringRef dicName, StringRef dicSymbol, DicDataRef dicValue)
{
}
// 在新bar的第一次执行之前调用一次,参数为新bar的图层数组
OnBarOpen(ArrayRef<Integer> indexs)
{
}
// Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
OnBar(ArrayRef<Integer> indexs)
{
if (hasSoldOpen == 0)
{
// 上线就卖出开仓一手
SellShort(1, Open);
hasSoldOpen = 1;
}
}
// 下一个Bar开始前,重新执行当前bar最后一次,参数为当前bar的图层数组
OnBarClose(ArrayRef<Integer> indexs)
{
}
// Tick更新事件函数,需要SubscribeTick函数订阅后触发,参数evtTick表示更新的tick结构体
OnTick(TickRef evtTick)
{
if (hasSoldOpen == 1 && hasClosed == 0)
{
// 获取当前时间
//Numeric currentTime = TimeNum;
// 转换为小时和分钟
//Numeric hour = Floor(currentTime / 10000);
//Numeric minute = Floor((currentTime - hour * 10000) / 100);
if (hour == 22 && minute == 55)
{
// 22点55分平仓
BuyToCover(1, Close);
hasClosed = 1;
}
}
}
// 持仓更新事件函数,参数pos表示更新的持仓结构体
OnPosition(PositionRef pos)
{
}
// 策略账户仓更新事件函数,参数pos表示更新的账户仓结构体
OnStrategyPosition(PositionRef pos)
{
}
// 委托更新事件函数,参数ord表示更新的委托结构体
OnOrder(OrderRef ord)
{
}
// 成交更新事件函数,参数ordFill表示更新的成交结构体
OnFill(FillRef ordFill)
{
}
// 定时器更新事件函数,参数id表示定时器的编号,millsecs表示定时间的间隔毫秒值
OnTimer(Integer id, Integer intervalMillsecs)
{
}
// 通用事件触发函数,参数evtName为事件名称,参数evtValue为事件内容
OnEvent(StringRef evtName, MapRef<String, String> evtValue)
{
}
// 当前策略退出时触发
OnExit()
{
}
//------------------------------------------------------------------------
// 编译版本 2025/02/25 214429
// 版权所有 gjqh809202799
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
可以回测,为啥实盘就是没法成功下单呢。
做的标的是豆粕期权,卖出开仓操作。
是没出信号,还是出了信号不报单,还是报单了没成交,说详细