没有持仓时,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
穿越次数不应该用全局变量吗?
没仔细看代码
不过感觉统计个寂寞
所以一直是计数不对