tbquant函数小bug--average等小于指定周期的时候并没有无效值 [开拓者 TB]
-
咨询内容:
本帖最后由 quant_yunjinqi 于 2020-4-20 17:44 编辑
函数的说明
图表显示的结果
理论上,不是应该在current_bar小于10的时候,short_ma的值是无效值吗?为什么是前面的bar的平均值?
公式代码- Params
- //此处添加参数
- Numeric millsecs(1000);
- numeric short_window(10);
- numeric long_window(20);
- Vars
- //此处添加变量
- Numeric avg;
- Global Integer timerId;
- Series<Numeric> my_short_ma;
- Series<Numeric> my_long_ma;
- Defs
- //此处添加公式函数
- Numeric calcAvg(Numeric a,Numeric b)
- {
- return (a+b)/2;
- }
- Events
- //此处实现事件函数
-
- //初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作
- OnInit()
- {
- timerId=createTimer(millsecs);
- //与数据源有关
- 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_StrategyQuote()); //设置返回公式行情
-
- //AddDataFlag(Enum_Data_NotGenReport()); //设置数据源不参与生成报告标志
-
- //=========交易相关设置==============
- //SetMarginRate(0.1); //设置保证金率为10%
-
- //SetCommissionRate(BitOr(Enum_Rate_FreeOfExitToday,Enum_Rate_ByFillAmount),5); //设置手续费率为成交金额的5%%,不收平今, BitOr进行位或运算即设置属性和
-
- //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()
- {
- }
- //在新bar的第一次执行之前调用一次,参数为新bar的图层数组
- OnBarOpen(ArrayRef<Integer> indexs)
- {
- }
- //Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
- OnBar(ArrayRef<Integer> indexs)
- {
- my_short_ma = average(close,short_window);
- my_long_ma = average(close,long_window);
- Commentary("CurrentBar: "+text(CurrentBar));
- Commentary("my_short_ma: "+text(my_short_ma));
- Commentary("my_long_ma: "+text(my_long_ma));
- if (my_short_ma[1]>my_long_ma[1] and MarketPosition<=0){buy(1,open);}
- if (my_short_ma[1]<=my_long_ma[1] and MarketPosition>=0 ){sellshort(1,open);}
-
- }
- //持仓更新事件函数,参数pos表示更新的持仓结构体
- OnPosition(PositionRef pos)
- {
-
- }
- //委托更新事件函数,参数ord表示更新的委托结构体
- OnOrder(OrderRef ord)
- {
-
- }
- //成交更新事件函数,参数ordFill表示更新的成交结构体
- OnFill(FillRef ordFill)
- {
-
- }
- //定时器更新事件函数,参数id表示定时器的编号,millsecs表示定时间的间隔毫秒值
- OnTimer(Integer id,Integer intervalMillsecs)
- {
-
- }
来源:CXH99.COM
- Params
-
TB技术人员:
- Params
- Series<Numeric> Price(1); //数值型序列值
- Numeric Length(10); //周期数
- Vars
- Numeric AvgValue;
- Begin
- AvgValue = Summation(Price, Length) / Length;
- Return AvgValue;
- End
只不过此时的计算结果是可能不符合交易者需求的,所以建议在代码里做一些判断控制,不要用此计算结果来进行交易的判断。 - Params
有思路,想编写各种指标公式,交易模型,选股公式,还原公式的朋友
可联系技术人员 QQ: 262069696 或微信号:cxh99cxh99 进行 有偿收费 编写!
(注:由于人数限制,QQ或微信请选择方便的一个联系我们就行,加好友时请简单备注下您的需求,否则无法通过。谢谢您!)
相关文章
-
没有相关内容