紧急求助!!!
本帖最后由 xhqh96801317 于 2019-11-9 13:53 编辑代码如下:
//------------------------------------------------------------------------
// 简称: bull_trade
// 名称:
// 类别: 用户函数
// 类型: 用户函数
// 输出: 数值型
//------------------------------------------------------------------------
//开多仓
Params
Numeric number(2); //买卖手数
Numeric sell_price(0.2); //买卖价格---滑点?
Numeric A(100.12); //当前收盘价下跌x%
Numeric M30_20(20); //20根(半小时K线周期)
Numeric loss(100.20); //止损
Numeric BandRange(20);
Vars
Numeric bull_mid; //布林线中轨
Numeric bull_down; //布林线下轨
Numeric bull_up; // 布林线上轨
Numeric entry; //标记进入策略
Numeric B; //平均进入价格
NumericSeries myflag(0);
Begin
If(BarStatus == 0)
{
myflag = 0;
}Else
{
bull_mid = Average(Close, M30_20); //20根均线--中轨
PlotNumeric("bull_mid", bull_mid);
bull_down = Average(Close, M30_20)-2*StandardDev(Close, M30_20);
PlotNumeric("bull_down", bull_down);
bull_up = Average(Close, M30_20)+2*StandardDev(Close, M30_20);
PlotNumeric("bull_up", bull_up);
//---------集合竞价和小节休息过滤-------/////
If(IsCallAuctionTime()) return;//集合竞价
If ((Close==Q_LowerLimit || Close==Q_UpperLimit) AND BarStatus == 2) Return;
If (MarketPosition == 0 && time!=0.1459 && myflag==0)
{
If(bull_up-bull_mid>BandRange)
{
If (High > bull_up*A/100)
{
myflag=1; //进场信号发出,下根K线开盘进场
}
}
}
Else If(MarketPosition == 0 && time!=0.1459 && myflag==1 && Close<bull_up)
{
SellShort(number, Open+sell_price);
myflag=2; //持仓
} Else If(MarketPosition<0 and BarsSinceEntry >0)
{
B=AvgEntryPrice;
If(Close>=B*loss/100 and (Close>bull_up || Open>bull_up) ) //止损
{
BuyToCover(0, Close+sell_price);
myflag=0;
}
If(Close <= bull_mid and myflag == 2)
{
BuyToCover(0, Close+sell_price);
myflag=0;
}
}Else
{
myflag=0;
}
}
End
//------------------------------------------------------------------------
// 编译版本 GS2015.12.25
// 用户版本 2019/11/01 10:33:21
// 版权所有 cying01
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
问题就是在实盘中 当我持仓 1手空单时,BuyToCover(0, Close+sell_price); 并不是平仓1手,而是开了2手多单,空单的持仓依然存在,还有就是此公式运用在30分钟K线,但是BuyToCover(0, Close+sell_price)的交易发生的时间却是在23分,而不是K线走完时的价格,跪求解决
另:开空仓时间为早上10点,平仓时间为当天下午1点23分 没人知道原因吗? 1,bull_mid,bull_up,bull_down这三个变量都是使用close来计算的,这个数据在盘中是会实时变化的,不稳定的。且开平仓条件中使用到这些变量,是会导致信号闪烁或消失的可能 。
2,30分钟周期上,是永远不可能满足time==0.1459的。所以在公式中使用的2019年11月11日 11:26:05!=0.1459的判断是永远成立的,这样能达到你的限制要求吗?
3,myflag=1的赋值及条件并不能控制进场信号在下个K线的开盘。所以,当K线盘任意时间,只要条件满足,就能发出信号指令以及委托,所以在1:23发出委托是符合公式代码逻辑的。
4,如果上述的交易结果并不是你想要的,那么你就要重新去思考并修改公式逻辑了。 小米 发表于 2019-11-11 11:42 static/image/common/back.gif
1,bull_mid,bull_up,bull_down这三个变量都是使用close来计算的,这个数据在盘中是会实时变化的,不稳定的 ...
BuyToCover(0, Close+sell_price)为什么不是平掉所有的空仓,而且直接开了2个多仓,空仓依然存在 小米 发表于 2019-11-11 11:42 static/image/common/back.gif
1,bull_mid,bull_up,bull_down这三个变量都是使用close来计算的,这个数据在盘中是会实时变化的,不稳定的 ...
BuyToCover(0, Close+sell_price)为什么不是平掉所有的空仓,而且直接开了2个多仓,空仓依然存在,这样会影响接下来指令的运行 dxting 发表于 2019-11-11 16:34 static/image/common/back.gif
BuyToCover(0, Close+sell_price)为什么不是平掉所有的空仓,而且直接开了2个多仓,空仓依然存在 ...
首先,信号是平空没错吧?
委托单如果是开多的话,你要看看系统设置---风控,是否勾选了日内开平转换? 本帖最后由 xhqh96801317 于 2019-11-12 11:19 编辑
小米 发表于 2019-11-12 09:01 static/image/common/back.gif
首先,信号是平空没错吧?
委托单如果是开多的话,你要看看系统设置---风控,是否勾选了日内开平转换? ...
信号确实是平空,勾了日内开平转换,是不是要取消了就不会出现这种情况
。
xhqh96801317 发表于 2019-11-12 11:12 static/image/common/back.gif信号确实是平空,勾了日内开平转换,是不是要取消了就不会出现这种情况 ...
是的。
如果这个交易效果不是你想要的,就去掉勾选。
页:
[1]