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公式修改和重写的权利

//------------------------------------------------------------------------


同一个期货合约进行化自动交易时,为何回测时不会有冲突,而在实盘交易时有可能产生冲突?
日内交易为何收盘前不会自动退出
设置了SetTradeSide(1)为什么只平仓不开仓
BarsSinceEntry-这个内置函数为何回测看到不会刷新
OpenD(1)在产生交易后数据变了
设置双向交易平仓后,开仓、平仓为什么会间隔一个K线才执行
策略交易不产生开仓信号
自编公式导出为无源码能设置有限期吗?
SymbolInfo,插入这个公式后,为何没有任何信息?
为何K线图从第4图层开始就不会实时接收螺纹期权行情数据?

另外说一下,代码要放在代码块里

无关的代码可以删掉

这个当然,不然怎么编译运行得起来。


有信号啊,但程序的逻辑。。

为何中间那段没信号了?

你策略把图表的钱用完了

用完为何后面又有信号了?


有些问题我觉得应该先问是不是,再问为什么。

为什么你的策略,放在15分钟以上,就能出信号,放在15分钟以下,就不能呢?

你觉得这个跟SetTradeSide有关系吗?

还是有其他原因?

代码就我复制贴这里的,奇怪为何我这里15分钟也没有信号!

如果用双向交易

逻辑上是不能用MarketPosition了

分别取多单量、空单量

我还没有理解这里的双向的意思

可以解析么?