以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  写的这段程序是不是存在问题!请老师给修改一下  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=72098)

--  作者:FJ6008
--  发布时间:2014/11/18 10:20:51
--  写的这段程序是不是存在问题!请老师给修改一下

MA1:=MA(CLOSE,1);
MA2:=o5,LINETHICK0;
variable:maxprofit=0;//有仓位时最大获利幅度
//开多
IF CROSS(MA1,MA2) THEN
BEGIN
SELLSHORT( HOLDING<0,HOLDING,market); //平空操作
BUY( HOLDING=0,1,market);//开多操作 
 maxprofit:=0;
END//平仓
SELL(CROSS(MA2,MA1) and  HOLDING>0,HOLDING,market);//平多
BUYSHORT(CROSS(MA2,MA1) and HOLDING=0,1,market); //开空操作

//判断当前持仓状态下的最大盈利

 

问题请教:开多和平空是不是要分开写,再加一个循环。谢谢


--  作者:jinzhe
--  发布时间:2014/11/18 10:22:57
--  

编译下来:o5未定义

 


--  作者:FJ6008
--  发布时间:2014/11/18 10:28:57
--  

有,我没有显示。他不是问题。只要循环不存在问题就行,谢谢!

 

 


--  作者:FJ6008
--  发布时间:2014/11/18 10:31:51
--  

图片点击可在新窗口打开查看此主题相关图片如下:未命名.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2014/11/18 10:32:06编辑过]

--  作者:jinzhe
--  发布时间:2014/11/18 10:34:49
--  
你的代码哪里能体现出循环了?你是不是把 if  begin   end当循环了?
--  作者:FJ6008
--  发布时间:2014/11/18 10:43:32
--  
可能吧,我就是想让他实现:M1、M2死叉平多开空;M1/M2金叉平空开多;你看这种写法可以吗?现在的持仓是:有正有负个一首
[此贴子已经被作者于2014/11/18 10:44:54编辑过]

--  作者:jinzhe
--  发布时间:2014/11/18 10:44:13
--  

用IF  BEGIN 

END的写法好,通用性强


--  作者:FJ6008
--  发布时间:2014/11/18 10:47:54
--  
主要一个方向持仓就行了,老师看看如何处理,给改一下吧!
图片点击可在新窗口打开查看此主题相关图片如下:未命名.jpg
图片点击可在新窗口打开查看

--  作者:jinzhe
--  发布时间:2014/11/18 10:52:59
--  
这样的程序代码,但是你有两个方向的持仓,说明不是程序的问题,是你该平的单子没平掉
--  作者:FJ6008
--  发布时间:2014/11/18 10:53:37
--  

MA1:=MA(CLOSE,1)*ml;
MA2:=o5*ml,LINETHICK0;
variable:maxprofit=0;//有仓位时最大获利幅度
//开多
IF CROSS(MA1,MA2) THEN
BEGIN

SELLSHORT( HOLDING<0,HOLDING,market); //平空操作
BUY( HOLDING=0,1,market);//开多操作 
 maxprofit:=0;
END//平仓
SELL(CROSS(MA2,MA1) and  HOLDING>0,HOLDING,market);//平多
BUYSHORT(CROSS(MA2,MA1) and HOLDING=0,1,market); //开空操作
//判断当前持仓状态下的最大盈利
win:=0;
win2:=0;
if holding > 0 and enterbars > 0 then
begin
 win:=(c-enterprice)/enterprice*100; //记录最大盈利
 if win > maxprofit then
  maxprofit:=win; 
 win2:=(maxprofit-win)/maxprofit*100; //最大盈利后的回调幅度
end
if holding < 0 and enterbars > 0 then
begin
 win:=(enterprice-c)/enterprice*100; //记录最大盈利
 if win > maxprofit then
  maxprofit:=win; 
 win2:=(maxprofit-win)/maxprofit*100; //最大盈利后的回调幅度
end
//出现浮动亏损比如2%平仓
止损:SELL(win < -1,0);
//出现最高盈利后,回落到盈利的60%平仓出场
//止赢:SELL(win2 >=60 and openprofit > 0, 0);

请老师给指导一下这段程序是否存在问题(O5可以随便设一下,我自己设置好的就不说);