input: lot(5), num(3); //lot是手数,num是平仓反向的次数
var: mp(0), flag(num);
mp=marketposition;
if mp[1]*mp=-1 then
flag=flag-1
else if mp[1]=0 and mp<>0 then
flag=num;
{这段是平仓反向的次数统计;平仓反向一次,flag就减少一次;从持仓为0到开仓之后,flag的值重新赋值为平仓反向的次数num}
if marketposition=0 and condition1 then
buy lot shares next bar at market;
if marketposition=0 and condition2 then
sellshort lot shares next bar at market;
if marketposition=-1 and condition1 and flag>0 then
buy lot shares next bar at market;
if marketposition=1 and condition2 and flag>0 then
sellshort lot shares next bar at market;
if marketposition=1 and condition3 and flag=0 then
sell next bar at market;
if marketposition=-1 and condition4 and flag=0 then
buytocover next bar at market;
{condition1是买入进场的条件;condition2是卖出进场的条件;condition3和condition4都是出场条件}
注意:从代码的效率来说,这样并不高;您可以使用if else将整个代码优化一下。
input: lot(5), num(3); //lot是手数,num是平仓反向的次数
var: mp(0), flag(num);
mp=marketposition;
if mp[1]*mp=-1 then
flag=flag-1
else if mp[1]=0 and mp<>0 then
flag=num;
{这段是平仓反向的次数统计;平仓反向一次,flag就减少一次;从持仓为0到开仓之后,flag的值重新赋值为平仓反向的次数num}
if marketposition=0 and condition1 then
buy lot shares next bar at market;
if marketposition=0 and condition2 then
sellshort lot shares next bar at market;
if marketposition=-1 and condition1 and flag>0 then
buy lot shares next bar at market;
if marketposition=1 and condition2 and flag>0 then
sellshort lot shares next bar at market;
if marketposition=1 and condition3 and flag=0 then
sell next bar at market;
if marketposition=-1 and condition4 and flag=0 then
buytocover next bar at market;
{condition1是买入进场的条件;condition2是卖出进场的条件;condition3和condition4都是出场条件}
注意:从代码的效率来说,这样并不高;您可以使用if else将整个代码优化一下。
input: sf(5);
var: mp(0), flag_b(1), flag_s(1);
{原理还是一样的,都是通过变量来控制条件和相关的逻辑;这里flag_b为1时,可以买入进场,0时不允许;flag_s为1时,可以卖出进场,0时不允许}
mp=marketposition;
if flag_b=1 and condition1 then begin
buy next bar at market;
flag_s=1;
end;
{当买入进场之后,将flag_s赋值为1,也就是多头进场之后,空头可以允许进场}
if flag_s=1 and condition2 then begin
sellshort next bar at market;
flag_b=1;
end;
{空头进场之后,允许多头进场}
setstoploss(bigpointvalue*minmove*sf point);
setprofittarget(bigpointvalue*minmove*sf point);
{使用set系列关键字进行实时止损止盈}
if mp[1]=1 and mp=0 and positionprofit(1)<0 then
flag_b=0
else if mp[1]=-1 and mp=0 and positionprofit(1)<0 then
flag_s=0;
{当多头止损时,将flag_b赋值为0,表示不允许多头进场,唯一将flag_b赋值为1的时刻是空头进场之后;同理对于,空头止损,逻辑也是一样的}
input: sf(5);
var: mp(0), flag_b(1), flag_s(1);
{原理还是一样的,都是通过变量来控制条件和相关的逻辑;这里flag_b为1时,可以买入进场,0时不允许;flag_s为1时,可以卖出进场,0时不允许}
mp=marketposition;
if flag_b=1 and condition1 then begin
buy next bar at market;
flag_s=1;
end;
{当买入进场之后,将flag_s赋值为1,也就是多头进场之后,空头可以允许进场}
if flag_s=1 and condition2 then begin
sellshort next bar at market;
flag_b=1;
end;
{空头进场之后,允许多头进场}
setstoploss(bigpointvalue*minmove*sf point);
setprofittarget(bigpointvalue*minmove*sf point);
{使用set系列关键字进行实时止损止盈}
if mp[1]=1 and mp=0 and positionprofit(1)<0 then
flag_b=0
else if mp[1]=-1 and mp=0 and positionprofit(1)<0 then
flag_s=0;
{当多头止损时,将flag_b赋值为0,表示不允许多头进场,唯一将flag_b赋值为1的时刻是空头进场之后;同理对于,空头止损,逻辑也是一样的}