//------------------------------------------------------------------------
// 简称: 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线图上发现开平仓价格对不上?