以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (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

基本差不多。就是在平仓时候 判断下盈亏情况,如果亏损了,那么全局变量(手数)增加。