以文本方式查看主题
- 金字塔客服中心 - 专业程序化交易软件提供商 (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
![dvubb 图片点击可在新窗口打开查看](UploadFile/2014-11/2014111810314738923.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
![dvubb 图片点击可在新窗口打开查看](UploadFile/2014-11/2014111810475383587.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可以随便设一下,我自己设置好的就不说);
|