您现在的位置:程序化交易>> 期货公式>> (MC)multicharts>> MC知识>>正文内容

如何写一个变量Mynet,用来指示每次平仓时,账户净值是否创新高? [MC]

  • MC用户求助:

    input: account("9999-088194(BaseCurrency)"), Price( Close ), FastLength( 9 ), SlowLength( 18 ) ;
    {取交易追踪器中账户栏位的”今日余额“,所以需要初始输入您的资金账号给参数account}

    variables: var0( 0 ), var1( 0 ), mynet(0);

    array: jzhi[1](0);
    {声明了一个数组,jzhi[1]用于存储历史最高的今日余额,而jzhi[0]取最新的今日余额}

    once jzhi[1]=getrtaccountequity(account);
    {取初始的今日余额}

    var0 = AverageFC( Price, FastLength ) ;
    var1 = AverageFC( Price, SlowLength ) ;
    {这里以简单的MA策略为例,var0为快线值,var1为慢线值}

    condition1 = CurrentBar > 1 and var0 crosses over var1 ;
    if condition1 then begin
            jzhi[0]=getrtaccountequity(account);
            if jzhi[0]>jzhi[1] then begin
                    mynet=1;
                    jzhi[1]=jzhi[0];
            end
            else mynet=-1;                       
    {金叉出现时,取一次今日余额,与历史最高今日余额作比较,若创新高则赋值mynet为1并且将新高存储起来;若没有创新高则赋值为-1返回 }
            Buy ( "MA2CrossLE" ) next bar at market ;
    {这里使用的是市价单,而且在下单前取今日余额进行判断,并没有将平仓与进场分开;尽管这样会与先平仓,然后取今日余额有稍微的差异}
    end;

    {下面是空头进场的例子,与上面逻辑相同,不再多述}
    condition1 = CurrentBar > 1 and var0 crosses under var1 ;
    if condition1 then begin
            jzhi[0]=getrtaccountequity(account);
            if jzhi[0]>jzhi[1] then begin
                    mynet=1;
                    jzhi[1]=jzhi[0];
            end
            else mynet=-1;                               
            Sell Short ( "MA2CrossSE" ) next bar at market ;
    end;

    注意事项:
    一、我使用的是simnow账号进行测试的,每一分钟,交易追踪器中账户栏位的数据更新一次,但是实盘的这些数据更新频率我并没有测试过,所以希望您自己测试一下。

    二、交易追踪器中账户栏位的数据,MC模拟账号是开仓和平仓时更新一次,所以通过getrtaccountequit函数在交易中取的值在没有开仓平仓情况下实际上是不变的数据。

    三、这里使用的是平仓反向语句下单,并没有将平仓和反向开仓分开进行,所以在下市价单之前取”今日余额“的数值进行判断;若将平仓和开仓分开进行,取的”今日余额“更准确一些,并且这种情况对条件单也会更准确一些。

    四、将平仓和反向进场一起使用,也就是直接使用平仓反向委托语句时,不能使用条件单,因为这样判断的误差会很大,条件单在哪一根bar上成交实际上是不确定的;若您根据您的条件单的价格对”今日余额“进行调整,这个调整后的“今日余额”会更准确。

     

  • MC回复讨论一:

    input: account("9999-088194(BaseCurrency)"), Price( Close ), FastLength( 9 ), SlowLength( 18 ) ;
    {取交易追踪器中账户栏位的”今日余额“,所以需要初始输入您的资金账号给参数account}

    variables: var0( 0 ), var1( 0 ), mynet(0);

    array: jzhi[1](0);
    {声明了一个数组,jzhi[1]用于存储历史最高的今日余额,而jzhi[0]取最新的今日余额}

    once jzhi[1]=getrtaccountequity(account);
    {取初始的今日余额}

    var0 = AverageFC( Price, FastLength ) ;
    var1 = AverageFC( Price, SlowLength ) ;
    {这里以简单的MA策略为例,var0为快线值,var1为慢线值}

    condition1 = CurrentBar > 1 and var0 crosses over var1 ;
    if condition1 then begin
            jzhi[0]=getrtaccountequity(account);
            if jzhi[0]>jzhi[1] then begin
                    mynet=1;
                    jzhi[1]=jzhi[0];
            end
            else mynet=-1;                       
    {金叉出现时,取一次今日余额,与历史最高今日余额作比较,若创新高则赋值mynet为1并且将新高存储起来;若没有创新高则赋值为-1返回 }
            Buy ( "MA2CrossLE" ) next bar at market ;
    {这里使用的是市价单,而且在下单前取今日余额进行判断,并没有将平仓与进场分开;尽管这样会与先平仓,然后取今日余额有稍微的差异}
    end;

    {下面是空头进场的例子,与上面逻辑相同,不再多述}
    condition1 = CurrentBar > 1 and var0 crosses under var1 ;
    if condition1 then begin
            jzhi[0]=getrtaccountequity(account);
            if jzhi[0]>jzhi[1] then begin
                    mynet=1;
                    jzhi[1]=jzhi[0];
            end
            else mynet=-1;                               
            Sell Short ( "MA2CrossSE" ) next bar at market ;
    end;

    注意事项:
    一、我使用的是simnow账号进行测试的,每一分钟,交易追踪器中账户栏位的数据更新一次,但是实盘的这些数据更新频率我并没有测试过,所以希望您自己测试一下。

    二、交易追踪器中账户栏位的数据,MC模拟账号是开仓和平仓时更新一次,所以通过getrtaccountequit函数在交易中取的值在没有开仓平仓情况下实际上是不变的数据。

    三、这里使用的是平仓反向语句下单,并没有将平仓和反向开仓分开进行,所以在下市价单之前取”今日余额“的数值进行判断;若将平仓和开仓分开进行,取的”今日余额“更准确一些,并且这种情况对条件单也会更准确一些。

    四、将平仓和反向进场一起使用,也就是直接使用平仓反向委托语句时,不能使用条件单,因为这样判断的误差会很大,条件单在哪一根bar上成交实际上是不确定的;若您根据您的条件单的价格对”今日余额“进行调整,这个调整后的“今日余额”会更准确。

 

有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友

可联系技术人员 QQ: 511411198  点击这里给我发消息进行 有偿 编写!不贵!点击查看价格!


【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容