如何写一个变量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 进行 有偿 编写!(不贵!点击查看价格!)
相关文章
-
没有相关内容