下面的策略如何实现,烦请Alex回复,谢谢 [MC]
-
MC用户求助:
我希望在开仓价格开仓之后,假设价格为2000,朝着开仓方向,每隔60点就记录一次,假设做多,涨了180点,就是3,240点就是4,做空,跌180,就是3,跌240点就是4,这个该如何写,谢谢
-
MC回复讨论一:
以双均线策略为例,您的策略代码如下:
inputs: Price( Close ), FastLength( 9 ), SlowLength( 18 ) ;
variables: var0( 0 ), var1( 0 ) ;
variables: recalcpersist flag(0), recalcpersist valueh(0), recalcpersist valuel(0);
{这里新建了三个变量,使用了recalcpersist声明,也就是这3个变量每次计算的值都会被保存;若没有加这个关键字的声明,那么这3个变量的计算值只会在当根bar收盘时的计算值才会被保存}
once begin
flag=0;
valueh=0;
valuel=0;
end;
recalclastbarafter(10);
{这里使用了关键字recalclastbarafter,当信号当前的时间超过信号最近一次计算的时间10秒时,信号执行重新计算一次,这种计算可以取关键字的值及函数的计算,但是不能执行委托单的操作,也就是即使条件满足也不能发送委托单;只能等到当根bar收盘时时条件满足才会执行委托单的操作}
condition1=getappinfo(aicalcreason)=3;
{信号的计算方式有很多,condition1为true表示当前的计算是基于recalclastbarafter的计算}
if condition1=false then begin
var0 = AverageFC( Price, FastLength ) ;
var1 = AverageFC( Price, SlowLength ) ;
condition2 = CurrentBar > 1 and var0 crosses above var1 ;
if condition2 then
Buy ( "MA2CrossLE" ) next bar at market ;
condition2 = CurrentBar > 1 and var0 crosses under var1 ;
if condition2 then
Sell Short ( "MA2CrossSE" ) next bar at market ;
end;
{以上基于condition1=false的代码段,您可以将主要的代码放在这里面,这段代码会基于当根bar收盘时进行计算,这样可以减少信号不必要的计算量}
if marketposition=0 then begin
flag=0;
valueh=0;
valuel=0;
end
else
if marketposition=1 then begin
valuel=0;
if high>valueh then
valueh=high;
if valueh<>entryprice then
flag=intportion((valueh-entryprice)/60);
{当多头进场之后,利用变量valueh始终保存进场之后的最高价,然后flag的计算等于(valueh与进场价的差)/60;当然您也可以直接使用每次计算时的最新价赋值给valueh,这个地方需要看您的策略了}
end
else if marketposition=-1 then begin
valueh=0;
if low<valuel then
valuel=low;
if valuel<>entryprice then
flag=intportion((entryprice-valuel)/60);
end;
注意事项:
1.您的策略可以在非bar内模式下,但是可能会计算不会及时
2.您的策略可以使用两个信号,一个信号用于发送委托单(非bar内),另一个信号用于计算flag变量(开bar内)
3.通过以上的方式,您可以在非bar内模式下及时进行计算flag,也就是及时进行记录盈利的点数。 -
MC回复讨论二:
牛的,不过信息量有点大,我最后其实只需要用到flag里的值,我对第一部分不是很理解,容我细细学习之后再向您请教
-
MC回复讨论三:
-
MC回复讨论四:
有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友
可联系技术人员 QQ: 511411198 进行 有偿 编写!(不贵!点击查看价格!)
相关文章
-
没有相关内容