全部 智大领峰 TBQuant功能 TBL语言 TB开户 问答专区 高手圈 其他
新手写完不知道哪错了
tb00000 分享到
2022-09-04 01:00

//------------------------------------------------------------------------
// 简称: danjunxian
// 名称: 
// 类别: 公式应用
// 类型: 用户应用
// 输出: Void
//------------------------------------------------------------------------
Params
    numeric ma_1canshu(20);
    numeric baifenbi(50);
Vars
    numeric yitiao;
    series<numeric> ma_1;
    numeric kaicangshoushu;
    numeric tickzichan;
    numeric kaicangjia;
Events
    OnInit()
    {    
    AddDataFlag(Enum_Data_RolloverBackWard());    //设置后复权
    AddDataFlag(Enum_Data_RolloverRealPrice());    //设置映射真实价格
    AddDataFlag(Enum_Data_AutoSwapPosition());    //设置自动换仓
    AddDataFlag(Enum_Data_IgnoreSwapSignalCalc());    //设置忽略换仓信号计算
        //=========交易相关设置==============
    SetInitCapital(20000);    //设置初始资金为2万  
    
    }


    //Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
    OnBar(ArrayRef<Integer> indexs)
    {
    yitiao=MinMove*PriceScale;
    tickzichan = Portfolio_CurrentCapital() + Portfolio_UsedMargin();
    kaicangshoushu = intpart(tickzichan* (baifenbi/100))/(close[1] * ContractUnit()*BigPointValue()*(marginratio()+0.2));
    ma_1= AverageFC(Close,ma_1canshu);
    plotnumeric("MA1",ma_1);
    
    if(marketposition<>1&&close>ma_1);
      {
          kaicangjia = (close+yitiao);
          buy(kaicangshoushu,kaicangjia);
      }
                    
          
     if(marketposition<>-1&&close<ma_1);
       {
           kaicangjia = (close-yitiao);
        sellshort(kaicangshoushu,kaicangjia);
        }
          
          
    }

公式的意思:

单均线,close>ma_1反手买开,close<ma_1反手卖开

开仓价:收盘价 + 一滑点

开仓手数:总权益*50%/每手保证金(就是每次开仓都是一半仓位)

加载到K线上是错的,不知道错哪了?
 

TB_chenxili

这程序,直接的错误是if语句的最后,不应该加分号。

用应该是:

if(marketposition<>1&&close>ma_1)

{

。。。。。

}

另外,用close做判断是大忌,最好用High、low,或者干脆close[1]

2022-09-04 21:01
tb00000
@TB_chenxili

你好,还有个问题,修改完后我想以收盘价作为开平仓价格,但加载到K线图上发现开平仓价格对不上?

2022-09-05 16:23
TB_chenxili

程序里,开仓价是收盘价+/-一跳

2022-09-06 10:47
kyover

基本属于瞎写

close在盘中表示最新价 只有这根bar走完了变成历史bar了,close才代表收盘价

那么已经变成历史bar了 怎么可能还用这个价格去交易呢?

正确的逻辑应该是上一根bar的收盘价和均线进行判断,如果达成条件,就以当前bar的开盘价报单

2022-09-06 11:25
tb00000
@kyover

是哦,那么除了这个价格问题,其他地方有没有不对的?

2022-09-06 16:03
tb00000
@kyover

  比如这一句,

if(marketposition<>1&&close>ma_1);
      {
          kaicangjia = (close+yitiao);
          buy(kaicangshoushu,kaicangjia);
      }

改完后应该是这样对吗?

   if(marketposition<>1&&close[1]>ma_1);
      {
          kaicangjia = (open+yitiao);
          buy(kaicangshoushu,kaicangjia);
      }

公式的意思:

单均线,close>ma_1反手买开,close<ma_1反手卖开

开仓价:收盘价 + 一滑点

开仓手数:总权益*50%/每手保证金(就是每次开仓都是一半仓位)

按照上边这个意思,这个程序其他地方有没有错的?劳烦工程师帮忙检查

2022-09-06 16:15
您未登录,请先 登录注册 后发表评论
顶部