以文本方式查看主题
- 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp)
-- 公式模型编写问题提交 (http://222.73.7.161/bbs/list.asp?boardid=4)
---- 变量的问题 (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=12460)
|
-- 作者:aback
-- 发布时间:2012/6/17 15:52:43
-- 变量的问题
变量一直是我头疼的问题,写了个移动止损的例子,请高手看看错在哪里,谢谢!
我的想法是,开多后,每一次调整后的再次金叉,当根K线的开盘价即为止损价。
input:ma5(5,1,10,1); input:ma15(15,1,30,1); input:ma40(40,1,60,1);
variable:KD=0; variable:KK=0;
//设置变量 IF HOLDING>0 AND CROSS(MA5,MA15) THEN KD:=OPEN; KKD:KD; IF HOLDING<0 AND CROSS(MA15,MA5) THEN KK:=OPEN; KKK:KK;
//固定平仓规则 IF HOLDING>0 AND CROSS(MA(C,30),MA(C,10)) THEN SELL(1,0,MARKET); IF HOLDING<0 AND CROSS(MA(C,10),MA(C,30)) THEN SELLSHORT(1,0,MARKET);
//移动平仓规则 IF HOLDING>0 AND CLOSE<=KD THEN BEGIN SELL(1,0,MARKET); KD:=0; END IF HOLDING<0 AND CLOSE>=KK THEN BEGIN SELLSHORT(1,0,MARKET); KK:=0; END
//开仓规则 IF HOLDING=0 AND MA5>MA40 AND MA40>REF(MA40,1) THEN BUY(1,1,MARKET); IF HOLDING=0 AND MA40<MA5 AND MA40<REF(MA40,1) THEN BUYSHORT(1,1,MARKET);
IF TIME=151500 THEN BEGIN KD=0; KK=0; END
|
-- 作者:jinzhe
-- 发布时间:2012/6/18 9:04:31
--
在开仓规则那里添加上
kd:=open;
kk:=open;
注意多空仓不要搞反了
[此贴子已经被作者于2012-6-18 9:04:51编辑过]
|
-- 作者:aback
-- 发布时间:2012/6/18 10:12:12
--
还是不对啊,图表显示不出来啊!
|
-- 作者:just
-- 发布时间:2012/6/18 10:14:53
--
楼主去看看阿火秘笈http://www.weistock.com/bbs/dispbbs.asp?boardid=10&Id=9439
|
-- 作者:aback
-- 发布时间:2012/6/18 10:55:11
--
早看过了,呵呵,这是看过后才写出来的。
[此贴子已经被作者于2012-6-18 10:56:04编辑过]
|
-- 作者:just
-- 发布时间:2012/6/18 10:59:23
--
{ variable:hl=0,aa=0;
if cond and holding>0 and aa=0 then begin aa:=1; end //记录开仓 if h>hl and aa>0 then begin h:=hl; end //记录开仓后的最高价 if hl-h<5*mindiff and aa>0 then begin sell(1,1,market); aa:=0; hl:=0; end //最高价回落5个点移动止损离场并把变量初始化,表示移动止损完成。 }
基础移动止损代码,楼主可以看看。
|
-- 作者:aback
-- 发布时间:2012/6/18 11:28:46
--
开仓时记录变量,这个我会,可能这个很好判别。
我不是在开仓的时候记录变量,写的时候总是有冲突,虽然在图表上止损价格都能划线出来,但执行不了,会不会要用第二个变量辅助?
[此贴子已经被作者于2012-6-18 11:37:50编辑过]
|
-- 作者:aback
-- 发布时间:2012/6/18 13:00:30
--
修改了下
ma5:=MA(C,5); ma15:=MA(C,15); ma40:=MA(C,40);
variable:KD=0; variable:KK=0;
//设置变量 IF HOLDING>0 AND CROSS(MA5,MA15) THEN KD:=OPEN; KKD:KD; IF HOLDING<0 AND CROSS(MA15,MA5) THEN KK:=OPEN; KKK:KK;
//固定平仓规则 IF HOLDING>0 AND CROSS(MA(C,40),MA(C,15)) THEN SELL(1,0,MARKET); IF HOLDING<0 AND CROSS(MA(C,15),MA(C,40)) THEN SELLSHORT(1,0,MARKET);
//移动平仓规则 IF HOLDING>0 AND CLOSE<=KD THEN BEGIN SELL(1,0,MARKET); KD:=0; END IF HOLDING<0 AND CLOSE>=KK THEN BEGIN SELLSHORT(1,0,MARKET); KD:=0; END
//开仓规则 IF HOLDING=0 AND MA5>MA40 AND MA40>REF(MA40,1) THEN BEGIN BUY(1,1,MARKET); END IF HOLDING=0 AND MA40<MA5 AND MA40<REF(MA40,1) THEN BEGIN BUYSHORT(1,1,MARKET); END
IF TIME=151500 THEN
BEGIN KD=0; KK=0; END
|
-- 作者:just
-- 发布时间:2012/6/18 13:17:10
--
楼主的代码就是达到条件平仓吧,何来移动止损一说?
|
-- 作者:aback
-- 发布时间:2012/6/18 13:45:49
--
移动止损---开多后的每次回调后的均线再次金叉,则记录当根K线的开盘价,此开盘价就是新的止赢价格 。
IF HOLDING>0 AND CROSS(MA5,MA15) THEN KD:=OPEN; KKD:KD; IF HOLDING<0 AND CROSS(MA15,MA5) THEN KK:=OPEN; KKK:KK;
固定平仓规则----------正常的出场条件 IF HOLDING>0 AND CROSS(MA(C,40),MA(C,15)) THEN SELL(1,0,MARKET); IF HOLDING<0 AND CROSS(MA(C,15),MA(C,40)) THEN SELLSHORT(1,0,MARKET);
|