看了论坛上几位大侠的帖子。整合了一个每亏损一次加仓一手,一直加至m手,并加上了止盈止损的模板。不过加上止盈止损以后就有问题了,再测试就不能正确加仓了。感觉应该是止盈止损部分里全局变量赋值的原因。请高手帮忙看看问题出在哪里?
Input:m(5,1,10,1)
Variable: maxprofit=0;
Variable: sellnum=1;
Variable: buynum=1;
ma5:=ma(c,5);
ma10:=ma(c,10);
Longcond: = cross(ma5,ma10);
Shortcond: = cross(ma10,ma5);
if holding>0 then begin
if Shortcond and c>enterprice then begin
sell(1,holding,thisclose);
sellnum:=1;
buynum:=1;
end
if Shortcond and c<enterprice then begin
sell(1,holding,thisclose);
if sellnum<m then sellnum:=sellnum+1;
else sellnum:=m;
end
end
if holding<0 then begin
if Longcond and c<enterprice then begin
sellshort(1,holding,thisclose);
buynum:=1;
sellnum:=1;
end
if Longcond and c>enterprice then begin
sellshort(1,holding,thisclose);
if buynum<m then buynum:=buynum+1;
else buynum:=m;
end
end
if holding=0 then begin
if Longcond then begin
buy(1,buynum,thisclose);
maxprofit:=0;
end
if Shortcond then begin
buyshort(1,sellnum,thisclose);
maxprofit:=0;
end
end
end
//止盈止损,止盈止损后下次开仓数归1
win:=0;
win2:=0;
//多头止盈
if holding > 0 and enterbars > 2 then
begin
win:=(c-enterprice)/enterprice*100; //记录最大盈利
if win > maxprofit then
maxprofit:=win;
win2:=(maxprofit-win)/maxprofit*100; //最大盈利后的回调幅度
end
//空头止盈
if holding < 0 and enterbars > 2 then
begin
win:=(enterprice-c)/enterprice*100; //记录最大盈利
if win > maxprofit then
maxprofit:=win;
win2:=(maxprofit-win)/maxprofit*100;//最大盈利后的回调幅度
end
//出现浮动亏损比如2%平仓
if holding>0 then begin
if win<-2 and numprofit(1)<0 then begin
多止损: sell(1,holding,thisclose);
buynum:=1;
sellnum:=1;
end
end
if holding<0 then begin
if win<-2 and numprofit(1)<0 then
空止损: sellshort(1,holding,thisclose);
buynum:=1;
sellnum:=1;
end
//出现最高盈利后,回落到盈利的60%平仓出场
if holding>0 then begin
if win2>=60 and openprofit>0 then
多止盈: sell(1,holding,thisclose);
buynum:=1;
sellnum:=1;
end
if holding<0 then begin
if win2>=60 and openprofit>0 then
空止盈: sellshort(1,holding,thisclose);
buynum:=1;
sellnum:=1;
end
楼上。先不管思路。我只是先想知道错在哪里。为什么不能加仓。能否指点一下。
我问的是程序为什么不能加仓。谢谢。
不是问操作思路为什么不能加仓。我只是想了解程序设计方面的问题。不是要了解怎么怎么操作。
2个错误比较明显:
1,平仓时,要全部平仓的吧 ,不能填,填0,这样写sell(1,0,thisclose); sellshort(1,0,thisclose)
2
//出现浮动亏损比如2%平仓
if holding>0 then begin
if win<-2 and numprofit(1)<0 then begin
多止损: sell(1,holding,thisclose);
buynum:=1; //止损后是要加仓的,怎么会重置为1呢?
sellnum:=1;
end
end
if holding<0 then begin
if win<-2 and numprofit(1)<0 then
空止损: sellshort(1,holding,thisclose);
buynum:=1;
sellnum:=1;
end
改为
//出现浮动亏损比如2%平仓
if holding>0 then begin
if win<-2 then begin
多止损: sell(1,holding,thisclose);
end
end
if holding<0 then begin
if win<-2 then
空止损: sellshort(1,holding,thisclose);
end
另外,平仓最好放开仓前面。
火哥这么晚还在啊。 辛苦了。
SELL可不可以不带0呢。之后还想用在图表的框架组合策略,上次回复我如果固定轮询,就不能带0,不然策略间会平仓。
Input:m(5,1,10,1);
Variable: maxprofit=0;
Variable: sellnum=1;
Variable: buynum=1;
ma5:=ma(c,5);
ma10:=ma(c,10);
Longcond: = cross(ma5,ma10);
Shortcond: = cross(ma10,ma5);
if holding>0 then begin
if Shortcond and c>enterprice then begin
sell(1,holding,thisclose);
sellnum:=1;
buynum:=1;
end
if Shortcond and c<enterprice then begin
sell(1,holding,thisclose);
if sellnum<m then sellnum:=sellnum+1;
end
end
if holding<0 then begin
if Longcond and c<enterprice then begin
sellshort(1,holding,thisclose);
buynum:=1;
sellnum:=1;
end
if Longcond and c>enterprice then begin
sellshort(1,holding,thisclose);
if buynum<m then buynum:=buynum+1;
end
end
if holding=0 then begin
if Longcond then begin
buy(1,buynum,thisclose);
maxprofit:=0;
end
if Shortcond then begin
buyshort(1,sellnum,thisclose);
maxprofit:=0;
end
end
win:=0;
win2:=0;
//多头止盈
if holding > 0 and enterbars > 2 then begin
win:=(c-enterprice)/enterprice*100;
if win > maxprofit then
maxprofit:=win; //记录最大盈利
win2:=(maxprofit-win)/maxprofit*100; //最大盈利后的回调幅度
end
//空头止盈
if holding < 0 and enterbars > 2 then begin
win:=(enterprice-c)/enterprice*100;
if win > maxprofit then
maxprofit:=win; //记录最大盈利
win2:=(maxprofit-win)/maxprofit*100;//最大盈利后的回调幅度
end
//出现浮动亏损比如2%平仓
if holding>0 and win<-2 then begin // and numprofit(1)<0
多止损: sell(1,holding,thisclose);
buynum:=1;
sellnum:=1;
end
if holding<0 and win<-2 then begin
空止损: sellshort(1,holding,thisclose);
buynum:=1;
sellnum:=1;
end
//出现最高盈利后,回落到盈利的60%平仓出场
if holding>0 and win2>=60 and openprofit>0 then begin
多止盈: sell(1,holding,thisclose);
buynum:=1;
sellnum:=1;
end
if holding<0 and win2>=60 and openprofit>0 then begin
空止盈: sellshort(1,holding,thisclose);
buynum:=1;
sellnum:=1;
end