SetTradeSide函数设置后为何交易不会产生(附源码)
//------------------------------------------------------------------------// 简称: test// 名称: test// 类别: 公式应用// 类型: 用户应用// 输出: Void//------------------------------------------------------------------------Params //此处添加参数 Numeric millsecs(500); Numeric V_SetTradeSide(1);//交易方向:0-普通(默认),1-双向持仓,2-单向多头,3-单向空头,4-空转多头,5-多转空头Vars //此处添加变量 Numeric avg; Global Integer timerId;Defs //此处添加公式函数 Numeric calcAvg(Numeric a,Numeric b) { return (a+b)/2; }Events //初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作 OnInit() { timerId=createTimer(millsecs); //设置双向持仓交易方向 SetTradeSide(V_SetTradeSide); //与数据源有关 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) { avg=calcAvg(high,low); Commentary("L1:平均价格avg:" + Text(avg) + ",MarketPosition=" + Text(MarketPosition)); Commentary("L1:双向持仓交易方向:【交易方向:0-普通(默认),1-双向持仓,2-单向多头,3-单向空头,4-空转多头,5-多转空头】V_SetTradeSide" + Text(V_SetTradeSide)); if(MarketPosition <>1 && Close > AvgPrice * 1.001) { Buy(0,Open); Commentary("L2:开多单:AvgPrice=" + Text(AvgPrice)); } if(MarketPosition <>-1 && Close < AvgPrice * 1.001) { SellShort(0,Open); Commentary("L3:开空单:AvgPrice=" + Text(AvgPrice)); } } //下一个Bar开始前,重新执行当前bar最后一次,参数为当前bar的图层数组 OnBarClose(ArrayRef<Integer> indexs) { } //Tick更新事件函数,需要SubscribeTick函数订阅后触发,参数evtTick表示更新的tick结构体 OnTick(TickRef evtTick) { } //持仓更新事件函数,参数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/06/13 015052// 版权所有 TEAMOL// 更改声明 TradeBlazer Software保留对TradeBlazer平台// 每一版本的TradeBlazer公式修改和重写的权利//------------------------------------------------------------------------