没有持仓时,MarketPosition()总是不等于0,这个问题困扰我很久了。恳请详细指教,谢谢

没有持仓时,MarketPosition()总是不等于0,导致计算持仓后计算穿越次数总是不对,这个问题怎么解决啊?这个问题困扰我很久了。谢谢// 双均线交易系统Params Numeric FastLength(10);// 短期指数平均线参数 Numeric SlowLength(60);// 长期指数平均线参数Vars Series<Numeric> AvgValue1; Series<Numeric> AvgValue2; Integer CrossTimes; // 穿越次数Events OnBarOpen(ArrayRef<Integer> indexs) { AvgValue1 = AverageFC(Close,FastLength); AvgValue2 = AverageFC(Close,SlowLength); PlotNumeric("MA1",AvgValue1); PlotNumeric("MA2",AvgValue2); Print("时间===" + Text(Year) + Text(Month) + Text(Day) + Text(Time)); Print("MarketPosition:" + Text(MarketPosition()));//没有持仓时,MarketPosition()总是不等于0,这个问题怎么解决啊? If(MarketPosition==0) { CrossTimes=0;//在没有持仓前,穿越次数为0 }If(MarketPosition <>0 && AvgValue1[1]>AvgValue2[1] && AvgValue1[2]<AvgValue2[2]){crosstimes = crosstimes+1; //均线穿越一次,穿越次数+1 Print("时间===" + Text(Year) + Text(Month) + Text(Day) + Text(Time)); Print("向上穿越+1:==" + Text(CrossTimes));Buy(0,Open);}If(MarketPosition <>0 && AvgValue1[1]<AvgValue2[1] && AvgValue1[2]>AvgValue2[2]){SellShort(0,Open);crosstimes = crosstimes+1; //均线穿越一次,穿越次数+1 Print("时间===" + Text(Year) + Text(Month) + Text(Day) + Text(Time)); Print("向下穿越+1:==" + Text(CrossTimes));}}

?你是不是搞错了什么东西。marketposition是图表上的持仓不是你实际账户的你截个模拟账户的是什么意思?

回复:要获得实际账户的持仓用哪个呢?

回复:我在模拟账户上编辑测试啊,麻烦请不吝赐教,谢谢

回复:我是有实际交易账户的

回复:真实账户是用a函数的。我记得我时给你发过零基础课程的。图表和账户交易系统的区别特点,零基础课程里都是有的。你为什么不先好好学习一下零基础课程呢?你问的东西都是课程里讲过的。 https://www.bilibili.com/video/BV1Gw411k7bD/?spm_id_from=333.1387.collection.video_card.click 这一课甚至是分别用了两种机制去写同一种策略,为的就是展示两种机制的异同点。

回复:好的,谢谢,搞定了。多谢多谢

// 双均线交易系统Params Numeric FastLength(10);// 短期指数平均线参数 Numeric SlowLength(60);// 长期指数平均线参数Vars Series<Numeric> AvgValue1; Series<Numeric> AvgValue2; Integer CrossTimes; // 穿越次数Events OnBarOpen(ArrayRef<Integer> indexs) { AvgValue1 = AverageFC(Close,FastLength); AvgValue2 = AverageFC(Close,SlowLength); PlotNumeric("MA1",AvgValue1); PlotNumeric("MA2",AvgValue2); //没有持仓时,第一次开仓初始化穿越次数 If(MarketPosition ==0 && AvgValue1[1]>AvgValue2[1] && AvgValue1[2]<AvgValue2[2]) { crosstimes = 1; //初始化向上穿越 Print("时间===" + Text(Year) + Text(Month) + Text(Day) + Text(Time)); Print("初始化向上穿越+1:==" + Text(CrossTimes)); Buy(0,Open); } If(MarketPosition ==0 && AvgValue1[1]<AvgValue2[1] && AvgValue1[2]>AvgValue2[2]) { SellShort(0,Open); crosstimes = 1; //初始化向下穿越 Print("时间===" + Text(Year) + Text(Month) + Text(Day) + Text(Time)); Print("初始化向下穿越+1:==" + Text(CrossTimes)); } //有持仓时,每次穿越,穿越次数+1 If(MarketPosition <>1 && AvgValue1[1]>AvgValue2[1] && AvgValue1[2]<AvgValue2[2]) { crosstimes = crosstimes+1; //均线穿越一次,穿越次数+1 Print("时间===" + Text(Year) + Text(Month) + Text(Day) + Text(Time)); Print("向上穿越+1:==" + Text(CrossTimes)); Buy(0,Open); } If(MarketPosition <>-1 && AvgValue1[1]<AvgValue2[1] && AvgValue1[2]>AvgValue2[2]) { SellShort(0,Open); crosstimes = crosstimes+1; //均线穿越一次,穿越次数+1 Print("时间===" + Text(Year) + Text(Month) + Text(Day) + Text(Time)); Print("向下穿越+1:==" + Text(CrossTimes)); } }执行上面代码的时候 它完全忽视第一段代码,如图所示的输出永远也不会触发

逻辑判断错了 持仓重置穿越次数 空进行买卖

回复:试过第一次开仓重置穿越次数了,还是不行

我要从没有持仓到有持仓后开始计算穿越次数,不管是持有多单还是空单还是中途有反手,只要收盘有持仓就计算穿越次数。收盘没有持仓就重置穿越次数为0

回复:穿越次数不应该用全局变量吗?

回复:没仔细看代码不过感觉统计个寂寞所以一直是计数不对