[求助]请老师帮忙写一段关于仓位管理的代码 (文华财经WH8赢智V8.2)

投资者咨询:[求助]请老师帮忙写一段关于仓位管理的代码 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2019-6-17 14:18
 S:=MONEY*0.3/(C*MARGIN*UNIT+FEE);

条件1:只要上一笔交易是亏损,就在上一笔交易手数基础上减5%,如果是连续亏损,则最下限减到S*10%;
条件2:只要上一笔交易是盈利,就在上一笔交易手数基础上加5%,如果是连续盈利,则最上限加到S

我试了很久没写出来,只能麻烦老师们了。谢谢!
技术人员回复
日期:2019-6-17 14:31

核实一下

 

例如上次交易20手,且上一笔亏损,那么本次交易开仓(1-5%)*20=19手?每次开仓手数最小是S*10?%

 

那么第一次开仓多少手?

 

另外您是一开一平交替的模型?

 

 

 

 

投资者咨询:[求助]请老师帮忙写一段关于仓位管理的代码 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2019-6-17 14:18
 
先回答老师问题:
例如上次交易20手,且上一笔亏损,那么本次交易开仓(1-5%)*20=19手?每次开仓手数最小是S*10?% ---- 对的
是一开一平交替的模型  ----是的
第一次开仓手数以初始资金的30%来算

我的解释:
第一次开仓以初始资金的30%来算,例如按第一次开仓是S手,然后第一笔亏了就S*0.95手开仓,再亏就S*0.95*0.95手,连续亏则N次了,则最低手数起码是S*0.1手不再下降。
连续盈利则最大手数是S手,不再增加。
但S是不固定的,是当时的可用资金的30%,应该也算是个变量。


 
技术人员回复
日期:2019-6-17 14:56

参考:

 

S:=MONEY*0.3/(C*MARGIN*UNIT+FEE);
N:=MAX(POW(0.95,TNUMSEQLOSS)*S,0.1*S);
开仓条件&&(EVERY(BKVOL+SKVOL=0,BARPOS)||LASTOFFSETPROFIT>=0),BK(S);
开仓条件&&LASTOFFSETPROFIT<0,BK(N);

投资者咨询:[求助]请老师帮忙写一段关于仓位管理的代码 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2019-6-17 14:18
  MA1:MA(C,M1);
MA2:MA(C,M2);

S:=MONEY*0.3/(C*MARGIN*UNIT+FEE);
N:=MAX(POW(0.95,TNUMSEQLOSS)*S,0.1*S);

CROSSUP(MA1,MA2)&&(EVERY(BKVOL+SKVOL=0,BARPOS)||LASTOFFSETPROFIT>=0),BK(S);
CROSSUP(MA1,MA2)&&LASTOFFSETPROFIT<0,BK(N);
CROSSUP(MA2,MA1)&&(EVERY(BKVOL+SKVOL=0,BARPOS)||LASTOFFSETPROFIT>=0),SK(S);
CROSSUP(MA2,MA1)&&LASTOFFSETPROFIT<0,SK(N);
CROSSUP(MA1,MA2),BP(SKVOL);
CROSSUP(MA2,MA1),SP(BKVOL);

用最简单的均线互穿测试了一下,发现空单开不出来,开的都是多单。可能SK的条件不能直接照搬BK的?

另外,还实现不了“只要上一笔交易是盈利,就在上一笔交易手数基础上加5%,如果是连续盈利,则最上限加到S”,现在的写法只实现了亏损减仓,而盈利则直接开S手了。

请老师指点。
技术人员回复
日期:2019-6-17 16:29

 参考:

 

M1:=5;
M2:=10;
MA1:MA(C,M1);
MA2:MA(C,M2);

S:MONEY*0.3/(C*MARGIN*UNIT+FEE);
N:=POW(0.95,COUNT(CROSSDOWN(BKVOL+SKVOL,0.5)&&LASTOFFSETPROFIT<0,0))*POW(1.05,COUNT(CROSSDOWN(BKVOL+SKVOL,0.5)&&LASTOFFSETPROFIT>=0,0))*S;

CROSSUP(MA1,MA2)&&EVERY(BKVOL+SKVOL=0,BARPOS),BK(S);
CROSSUP(MA1,MA2)&&LASTOFFSETPROFIT<0,BK(MAX(N,0.1*S));
CROSSUP(MA1,MA2)&&LASTOFFSETPROFIT>=0,BK(MIN(N,S));
CROSSUP(MA2,MA1)&&EVERY(BKVOL+SKVOL=0,BARPOS),SK(S);
CROSSUP(MA2,MA1)&&LASTOFFSETPROFIT<0,SK(MAX(N,0.1*S));
CROSSUP(MA2,MA1)&&LASTOFFSETPROFIT<0,SK(MIN(N,S));
CROSSUP(MA1,MA2),BP(SKVOL);
CROSSUP(MA2,MA1),SP(BKVOL);