全部 TBQuant功能 TBL语言 TB开户 问答专区 其他
固定市值开仓计算有误,请问老师问题出在哪里
xian2022 分享到
2022-05-08 12:35

例如用双均线测试,代码如下;在报告中查看交易记录,根据市值计算的手数有问题

//------------------------------------------------------------------------
// 简称: DualMA
// 名称: 双均线交易系统
// 类别: 公式应用
// 类型: 内建应用
//------------------------------------------------------------------------
Params
    Numeric FastLength(5);// 短期指数平均线参数
    Numeric SlowLength(20);// 长期指数平均线参数
    Numeric money(200000);             //固定市值开仓
Vars
    Numeric myprice;        //委托价格
    Numeric lots(1);        //下单手数
    Series<Numeric> AvgValue1; 
    Series<Numeric> AvgValue2;
Events
    OnInit()
{
    {
    //=========数据源相关设置==============
        SetBeginBarMaxCount(1);
    
        AddDataFlag(Enum_Data_RolloverBackWard()); //设置后复权

        AddDataFlag(Enum_Data_RolloverRealPrice()); //设置映射真实价格

        AddDataFlag(Enum_Data_AutoSwapPosition()); //设置自动换仓

        AddDataFlag(Enum_Data_IgnoreSwapSignalCalc()); //设置忽略换仓信号计算
  
        SetOrderMap2MainSymbol(); //设置委托映射到主力
    }
    
}

    OnBar(ArrayRef<Integer> indexs)
    {
        AvgValue1 = AverageFC(Close,FastLength);
        AvgValue2 = AverageFC(Close,SlowLength);
        PlotNumeric("MA1",AvgValue1);
        PlotNumeric("MA2",AvgValue2);        
        
        
        
        If(MarketPosition <>1 && AvgValue1[1] > AvgValue2[1])
        {
            myprice=close[1]; //确定委托价格
            if(money<>0)  //固定市值开仓
                lots=IntPart(money/(myprice*contractunit* BigPointValue)); //计算开仓手数
            Buy(lots,Open);
        }
        
        If(MarketPosition <>-1 && AvgValue1[1] < AvgValue2[1])
        {
            SellShort(lots,Open);
        }
        //PlotNumeric("PL",Portfolio_TotalProfit);    
    }
//------------------------------------------------------------------------
// 编译版本    GS2010.12.08
// 版权所有    TradeBlazer Software 2003-2025
// 更改声明    TradeBlazer Software保留对TradeBlazer平
//            台每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------

下一篇: tbpy安装
timinginfo

 lots=IntPart(money/(myprice*ContractUnit * BigPointValue * MarginRatio))

2022-05-10 11:53
kyover

myprice*contractunit* BigPointValue 这个计算的是一手合约的市值 不是保证金

2022-05-08 18:12
xian2022
@kyover

我是用市值去开仓的,比如设置单个品种的市值上限money是20万,算出手数;但是结果还是不对

2022-05-09 09:28
kyover
@xian2022

具体举个实例说明一下

2022-05-09 09:42
xian2022
@kyover

程序上面设置的固定市值是20万,例如豆粕的价格是3000,一手是10吨,一手的市值就是30000,20万的市值就是6手左右的豆粕

2022-05-10 11:37
xian2022
@kyover

我把BigPointValue去掉还是算的不对 

2022-05-10 11:37
您未登录,请先 登录注册 后发表评论
顶部