以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (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=188352) |
-- 作者:kevinsss -- 发布时间:2021/5/18 9:46:11 -- 请教下语句 1,空单。空单下单的那根k,定义一下下单后前N日内最高点(high或者c)价格,涨过这个价位空单止损 2,多单。多单下单的那根k,定义一下下单后前N日内最低点(high或者c)价格,跌破这个价位多单止损 还有个疑问,如果连续多次开空单,程序是按一次做空计算的,那么会不会止损价会不停变化?我只想要第一笔空单的止损价
|
-- 作者:FireScript -- 发布时间:2021/5/18 9:54:36 -- 你是会有加仓的动作吗?如果是正常的平仓后再次开仓 那没什么特殊好处理,但是如果是加仓 并且还是按照开仓位置取止损价 那估计得全局变量了。 |
-- 作者:kevinsss -- 发布时间:2021/5/18 10:22:25 -- 先不考虑全局变量了,就简单的取止损价止损吧 |
-- 作者:FireScript -- 发布时间:2021/5/18 10:33:00 -- 不是啊。用不用取决于你是不是有加仓操作,你要是加仓。你就只能用全局变量去纪录。 |
-- 作者:kevinsss -- 发布时间:2021/5/18 10:45:10 -- 可能会有加仓,但是根据程序的逻辑,在高点再次开空仓,可能前一单就已经止损了,如果没有达到止损价又开了空单,说明价格变化不大,用之前的止损价或者新开仓k重新获取止损价的价格应该相差不多,所以我觉得是不用考虑全局了,不知道是否正确 |
-- 作者:kevinsss -- 发布时间:2021/5/18 10:48:09 -- 对了,再加一条把,如果上次仓,不管的空单还是多单,只要上一次开仓最后止损了,本次开仓加一手 |
-- 作者:FireScript -- 发布时间:2021/5/18 11:00:37 -- 那这样做: 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 直接获取最近一次开仓的位置,然后进行取值。
|
-- 作者:kevinsss -- 发布时间:2021/5/18 11:36:12 -- 1,p1 取价格如果不包含开仓k,那假如开空k比前一根k价格高,以前一根算周期最高价,那么开仓这根k已经涨过止损价了,就造成了又开又平? 2,请老师把6楼的问题帮忙解答下吧,谢谢~
|
-- 作者:FireScript -- 发布时间:2021/5/18 13:50:55 -- 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.这个得全局变量了。 你稍等下,我前几天刚写过一个。我找出来给你。
|
-- 作者:FireScript -- 发布时间:2021/5/18 13:53:25 -- 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 基本差不多。就是在平仓时候 判断下盈亏情况,如果亏损了,那么全局变量(手数)增加。
|