新手写完不知道哪错了

//------------------------------------------------------------------------ // 简称: 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线上是错的,不知道错哪了?

基本属于瞎写 close在盘中表示最新价 只有这根bar走完了变成历史bar了,close才代表收盘价 那么已经变成历史bar了 怎么可能还用这个价格去交易呢? 正确的逻辑应该是上一根bar的收盘价和均线进行判断,如果达成条件,就以当前bar的开盘价报单

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

回复:比如这一句, 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%/每手保证金(就是每次开仓都是一半仓位) 按照上边这个意思,这个程序其他地方有没有错的?劳烦工程师帮忙检查

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

这程序,直接的错误是if语句的最后,不应该加分号。 用应该是: if(marketposition<>1&&close>ma_1) { 。。。。。 } 另外,用close做判断是大忌,最好用High、low,或者干脆close[1]

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