1,空单。空单下单的那根k,定义一下下单后前N日内最高点(high或者c)价格,涨过这个价位空单止损
2,多单。多单下单的那根k,定义一下下单后前N日内最低点(high或者c)价格,跌破这个价位多单止损
还有个疑问,如果连续多次开空单,程序是按一次做空计算的,那么会不会止损价会不停变化?我只想要第一笔空单的止损价
你是会有加仓的动作吗?如果是正常的平仓后再次开仓 那没什么特殊好处理,但是如果是加仓 并且还是按照开仓位置取止损价 那估计得全局变量了。
不是啊。用不用取决于你是不是有加仓操作,你要是加仓。你就只能用全局变量去纪录。
可能会有加仓,但是根据程序的逻辑,在高点再次开空仓,可能前一单就已经止损了,如果没有达到止损价又开了空单,说明价格变化不大,用之前的止损价或者新开仓k重新获取止损价的价格应该相差不多,所以我觉得是不用考虑全局了,不知道是否正确
对了,再加一条把,如果上次仓,不管的空单还是多单,只要上一次开仓最后止损了,本次开仓加一手
那这样做:
INPUT:N(10,1,100,1);
//这个P1,P2取值放到开仓语句后面
P1:REF(HHV(H,N),ENTERBARS+2),NODRAW;//开仓K前N周期最高价,不包含开仓K。
P2:REF(LLV(L,N),ENTERBARS+2),NODRAW;
if c<p2 then sell(1,holding,market);
if c>p1 then sellshort(1,holding,market);
你如果没有加仓,这样是ok的。用ref+ENTERBARS 直接获取最近一次开仓的位置,然后进行取值。
1,p1 取价格如果不包含开仓k,那假如开空k比前一根k价格高,以前一根算周期最高价,那么开仓这根k已经涨过止损价了,就造成了又开又平?
2,请老师把6楼的问题帮忙解答下吧,谢谢~
1.这样做:
INPUT:N(10,1,100,1);
//这个P1,P2取值放到开仓语句前面
P1:REF(HHV(H,N),ENTERBARS+1),NODRAW;//开仓K前N周期最高价,不包含开仓K。
P2:REF(LLV(L,N),ENTERBARS+1),NODRAW;
if c<p2 then sell(1,holding,market);
if c>p1 then sellshort(1,holding,market);
//开仓语句
这样就行了。依旧不包括开仓K,但是不会导致开仓了又平仓了。是否包含开仓K,你就调整ENTERBARS+1就行了
2.这个得全局变量了。
你稍等下,我前几天刚写过一个。我找出来给你。
VARIABLE:ss:=1;input:p(26,20,100,8),s(12,5,40,4),m(9,2,60,6);
DIFF :EMA(CLOSE,S) - EMA(CLOSE,P);
DEA :EMA(DIFF,M);
MACD1 :2*(DIFF-DEA), COLORSTICK;
macdjc:cross(diff,dea),NODRAW;//macd金叉
macdsc:cross(dea,diff),NODRAW;
if macdjc and holding=0 then
begin
buy(1,ss,market);
end
if macdsc and holding>0 then
begin
sell(1,holding,market);
if NUMPROFIT(1)<0 and ss<8 then ss:=ss*2;
if NUMPROFIT(1)>0 then ss:=1;end
原贴在这:
http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=188329
基本差不多。就是在平仓时候 判断下盈亏情况,如果亏损了,那么全局变量(手数)增加。