向大神求教,我在程序中添加了如下止损代码,虽然没头没脑的貌似解决了,但是始终没明白原因。
2024-04-21 16:07
向大神求教,我在程序中添加了如下止损代码
Numeric zs(15);
Bool bool_zs_buy;
Bool bool_zs_sell;
bool_zs_buy = close <= EntryPrice *(1-zs/100) and MarketPosition<>-1;
bool_zs_sell = close >= EntryPrice *(1+zs/100) and MarketPosition<>1;
//平仓条件
If( MarketPosition<>-1 and bool_zs_buy )
{
Sell(0,close);
}
If( MarketPosition<>1 and bool_zs_sell )
{
BuyToCover(0,close);
}
=================
结果是止损没问题,但在止损后,加下来出现的开多和开空,会出现当天开当天自动平的问题。知道我在平仓条件中加入了“barsince>1”
,问题得到排除。但问题是,我至今无法理解源代码哪里出问题了,解释不了。
改后如下:
//平仓条件
If( barsince>1 and MarketPosition<>-1 and bool_zs_buy )
{
Sell(0,close);
}
If( barsince>1 and MarketPosition<>1 and bool_zs_sell )
{
BuyToCover(0,close);
}
之前我贴错了,应该是BarsSinceEntry。也就是加上了,最开始的代码执行是正常的。后来为了控制浮亏,加了额外的止损代码部分,如下:
Numeric zs(10);//参数定义
Bool bool_zs_buy;//布尔定义
Bool bool_zs_sell;//布尔定义
bool_zs_buy = close <= EntryPrice *(1-zs/100) and MarketPosition<>-1;//止损条件定义
bool_zs_sell = close >= EntryPrice *(1+zs/100) and MarketPosition<>1;//止损条件定义
//以下是最开始的止损条件
If( MarketPosition<>-1 and bool_zs_buy )
{
Sell(0,close);
}
If( MarketPosition<>1 and bool_zs_sell )
{
BuyToCover(0,close);
}
在日k线周期下,上述止损代码加入后,原代码止损正常,但是紧跟着的下一次或多次开仓信号下,会出现当根k线(日线周期),当根开当根平(即开即日平)的情况。之后我在“止损条件定义”中加入了“BarsSinceEntry>1”,问题得到解决。但现在的问题是,我没想明白为什么日k线下,必须加入“BarsSinceEntry>1”,而有的公式不加入也没关系,也没影响正常的开仓平仓。
应该是barssince
另外其他代码我没有贴出来,只贴了平仓部分,您提到的内容,源代码里都有的