tbquant函數(shù)小bug--average等小于指定周期的時候并沒有無效值
作者:開拓者 TB 來源:cxh99.com 發(fā)布時間:2021年04月20日
-
咨詢內(nèi)容:
本帖最后由 quant_yunjinqi 于 2020-4-20 17:44 編輯
函數(shù)的說明
圖表顯示的結(jié)果
理論上,不是應(yīng)該在current_bar小于10的時候,short_ma的值是無效值嗎?為什么是前面的bar的平均值?
公式代碼- Params
- ? ? ? ? //此處添加參數(shù)
- ? ? ? ? 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
- ? ? ? ? //此處添加公式函數(shù)
- ? ? ? ? Numeric calcAvg(Numeric a,Numeric b)
- ? ? ? ? {
- ? ? ? ? ? ? ? ? return (a+b)/2;
- ? ? ? ? }
- Events
- ? ? ? ? //此處實現(xiàn)事件函數(shù)
- ? ? ? ?
- ? ? ? ? //初始化事件函數(shù),策略運行期間,首先運行且只有一次,應(yīng)用在訂閱數(shù)據(jù)等操作
- ? ? ? ? OnInit()
- ? ? ? ? {
- ? ? ? ? ? ? ? ? timerId=createTimer(millsecs);
- ? ? ? ? ? ? ? ? //與數(shù)據(jù)源有關(guān)
- ? ? ? ? ? ? ? ? Range[0:DataCount-1]
- ? ? ? ? ? ? ? ? {
- ? ? ? ? ? ? ? ? ? ? ? ? //=========數(shù)據(jù)源相關(guān)設(shè)置==============
- ? ? ? ? ? ? ? ? ? ? ? ? //AddDataFlag(Enum_Data_RolloverBackWard());? ? ? ? //設(shè)置后復(fù)權(quán)
- ? ? ? ? ? ? ? ? ? ? ? ? //AddDataFlag(Enum_Data_RolloverRealPrice());? ? ? ? //設(shè)置映射真實價格
- ? ? ? ? ? ? ? ? ? ? ? ? //AddDataFlag(Enum_Data_AutoSwapPosition());? ? ? ? //設(shè)置自動換倉
- ? ? ? ? ? ? ? ? ? ? ? ? //AddDataFlag(Enum_Data_IgnoreSwapSignalCalc());? ? ? ? //設(shè)置忽略換倉信號計算
- ? ? ? ? ? ? ? ? ? ? ? ? //AddDataFlag(Enum_Data_OnlyDay());? ? ? ? ? ? ? ? //設(shè)置僅日盤
- ? ? ? ? ? ? ? ? ? ? ? ?
- ? ? ? ? ? ? ? ? ? ? ? ? //AddDataFlag(Enum_Data_OnlyNight());? ? ? ? //設(shè)置僅夜盤
- ? ? ? ? ? ? ? ? ? ? ? ? //AddDataFlag(Enum_Data_StrategyQuote());? ? ? ? //設(shè)置返回公式行情
- ? ? ? ? ? ? ? ? ? ? ? ?
- ? ? ? ? ? ? ? ? ? ? ? ? //AddDataFlag(Enum_Data_NotGenReport());? ? ? ? //設(shè)置數(shù)據(jù)源不參與生成報告標(biāo)志
- ? ? ? ? ? ? ? ? ? ? ? ?
- ? ? ? ? ? ? ? ? ? ? ? ? //=========交易相關(guān)設(shè)置==============
- ? ? ? ? ? ? ? ? ? ? ? ? //SetMarginRate(0.1);? ? ? ? //設(shè)置保證金率為10%
- ? ? ? ? ? ? ? ? ? ? ? ?
- ? ? ? ? ? ? ? ? ? ? ? ? //SetCommissionRate(BitOr(Enum_Rate_FreeOfExitToday,Enum_Rate_ByFillAmount),5);? ? ? ? //設(shè)置手續(xù)費率為成交金額的5%%,不收平今, BitOr進(jìn)行位或運算即設(shè)置屬性和
- ? ? ? ? ? ? ? ? ? ? ? ?
- ? ? ? ? ? ? ? ? ? ? ? ? //SetSlippage(Enum_Rate_PointPerHand,2);? ? ? ? //設(shè)置滑點為2跳/手
- ? ? ? ? ? ? ? ? ? ? ? ?
- ? ? ? ? ? ? ? ? ? ? ? ? //SetOrderPriceOffset(2);? ? ? ? //設(shè)置委托價為叫買/賣價偏移2跳
- ? ? ? ? ? ? ? ? ? ? ? ?
- ? ? ? ? ? ? ? ? ? ? ? ? //SetOrderMap2MainSymbol();? ? ? ? //設(shè)置委托映射到主力
- ? ? ? ? ? ? ? ? ? ? ? ?
- ? ? ? ? ? ? ? ? ? ? ? ? //SetOrderMap2AppointedSymbol(symbols, multiples); ? ? ? ? //設(shè)置委托映射到指定合約,symbols是映射合約數(shù)組,multiples是映射倍數(shù)數(shù)組
- ? ? ? ? ? ? ? ? }
- ? ? ? ? ? ? ? ? //與數(shù)據(jù)源無關(guān)
- ? ? ? ? ? ? ? ? //SetBeginBarMaxCount(10);? ? ? ? //設(shè)置最大起始bar數(shù)為10
- ? ? ? ? ? ? ? ? ? ? ? ?
- ? ? ? ? ? ? ? ? //SetBackBarMaxCount(10);? ? ? ? //設(shè)置最大回溯bar數(shù)為10
- ? ? ? ? ? ? ? ?
- ? ? ? ? ? ? ? ? //=========交易相關(guān)設(shè)置==============
- ? ? ? ? ? ? ? ? //SetInitCapital(1000000);? ? ? ? //設(shè)置初始資金為100萬
- ? ? ? ? ? ? ? ?
- ? ? ? ? ? ? ? ? //AddTradeFlag(Enum_Trade_Ignore_Buy());? ? ? ? //設(shè)置忽略多開
- ? ? ? ? ? ? ? ? ? ? ? ?
- ? ? ? ? ? ? ? ? //AddTradeFlag(Enum_Trade_Ignore_Sell());? ? ? ? //設(shè)置忽略多平
- ? ? ? ? ? ? ? ? ? ? ? ?
- ? ? ? ? ? ? ? ? //AddTradeFlag(Enum_Trade_Ignore_SellShort());? ? ? ? //設(shè)置忽略空開
- ? ? ? ? ? ? ? ? ? ? ? ?
- ? ? ? ? ? ? ? ? //AddTradeFlag(Enum_Trade_Ignore_Buy2Cover());? ? ? ? //設(shè)置忽略空平
- ? ? ? ? }
- ? ? ? ? //在所有的數(shù)據(jù)源準(zhǔn)備完成后調(diào)用,應(yīng)用在數(shù)據(jù)源的設(shè)置等操作
- ? ? ? ? OnReady()
- ? ? ? ? {
- ? ? ? ? }
- ? ? ? ? //在新bar的第一次執(zhí)行之前調(diào)用一次,參數(shù)為新bar的圖層數(shù)組
- ? ? ? ? OnBarOpen(ArrayRef<Integer> indexs)
- ? ? ? ? {
- ? ? ? ? }
- ? ? ? ? //Bar更新事件函數(shù),參數(shù)indexs表示變化的數(shù)據(jù)源圖層ID數(shù)組
- ? ? ? ? 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);}
- ??? ? ? ? ? ? ? ?
- ? ? ? ? }
- ? ? ? ? //持倉更新事件函數(shù),參數(shù)pos表示更新的持倉結(jié)構(gòu)體
- ? ? ? ? OnPosition(PositionRef pos)
- ? ? ? ? {
- ? ? ? ? ? ? ? ?
- ? ? ? ? }
- ? ? ? ? //委托更新事件函數(shù),參數(shù)ord表示更新的委托結(jié)構(gòu)體
- ? ? ? ? OnOrder(OrderRef ord)
- ? ? ? ? {
- ? ? ? ? ? ? ? ?
- ? ? ? ? }
- ? ? ? ? //成交更新事件函數(shù),參數(shù)ordFill表示更新的成交結(jié)構(gòu)體
- ? ? ? ? OnFill(FillRef ordFill)
- ? ? ? ? {
- ? ? ? ? ? ? ? ?
- ? ? ? ? }
- ? ? ? ? //定時器更新事件函數(shù),參數(shù)id表示定時器的編號,millsecs表示定時間的間隔毫秒值
- ? ? ? ? OnTimer(Integer id,Integer intervalMillsecs)
- ? ? ? ? {
- ? ? ? ? ? ? ? ?
- ? ? ? ? }
?
?來源:CXH99.COM
-
TB技術(shù)人員:
- Params
- ? ? ? ? Series<Numeric> Price(1);? ? ? ? //數(shù)值型序列值
- ? ? ? ? Numeric Length(10);? ? ? ? ? ? ? ? ? ? ? ? //周期數(shù)
- Vars
- ? ? ? ? Numeric AvgValue;
- Begin
- ? ? ? ? AvgValue = Summation(Price, Length) / Length;
- ? ? ? ? Return AvgValue;
- End
復(fù)制代碼從average函數(shù)的算法里可以看出,在length小于指定周期時,也會有相應(yīng)的計算值 ,并不會是無效值 。。
只不過此時的計算結(jié)果是可能不符合交易者需求的,所以建議在代碼里做一些判斷控制,不要用此計算結(jié)果來進(jìn)行交易的判斷。