没有持仓时,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

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

没仔细看代码

不过感觉统计个寂寞

所以一直是计数不对