- 精华
- 0
- 在线时间
- 15 小时
- UID
- 188804
- 积分
- 9
- 帖子
- 6
- 阅读权限
- 10
- 注册时间
- 2014-6-17
- 最后登录
- 2018-11-21
- 精华
- 0
- UID
- 188804
- 积分
- 9
- 帖子
- 6
- 主题
- 3
- 阅读权限
- 10
- 注册时间
- 2014-6-17
- 最后登录
- 2018-11-21
|
我编写了2个函数,一个是get_dir(),一个是get_stploss(),get_dir()返回当前K线的多空状态,get_stploss()返回当前K线该方向下的止损点是多少。相当于我把一个模型给封装到两个函数里了,一个返回方向,一个返回止损点。
我现在想在get_dir()==“多头”的时候以开盘价开1手多单,开仓后,如果在没有改变方向的前提下,最低价达到“止损价+10跳的价格”再加1手多单,加仓后如果没浮盈就get_dir()=="空头"了,就以开盘价全平2手多单,而且以开盘价反手开1手空单,加空道理一样,达到“止损价-10跳的价格”加1手空,如此循环。
减仓的条件是:后来加仓的那1手单子以它自己的开仓价获利30跳直接止盈,而且止盈后不再加仓。
贴上代码:
Params
Numeric N(3);//传给get_dir和get_stploss的一个参数
Numeric maxcnt(2);//最大建仓次数
Numeric plush(10);//加仓阈,价格达到“止损价+plsuh跳”范围内加仓
Numeric tp(30);//减仓止赢阈,加仓后,加仓的单子获利tp跳直接止盈平仓
Numeric offset(0);//报单价格偏移
Numeric kc(1);//开仓数量
Numeric jc(1);//减仓数量
Vars
Numeric minpoint;//最小跳
NumericSeries kccnt;//记录开仓加仓次数
Numeric myentryprice;//开仓价
Numeric myplusprice;//加仓价
Numeric myexitprice;//减仓价
StringSeries dir;//记录get_dir返回的方向
NumericSeries stploss;//记录get_stploss返回的止损点
Begin
minpoint=MinMove*PriceScale;//最小跳
dir=get_dir(n);//获取方向
stploss=get_stploss(n);//获取止损价
Commentary("方向:"+dir);
Commentary("止损:"+Text(stploss));
//策略开始:
if(dir=="多头")
{
if(MarketPosition<=0) myentryprice=open;
Buy(kc,myentryprice);
kccnt=1;
}//多头状态下开1手多单
if(MarketPosition==1)
{
myplusprice=stploss+plush*minpoint;
if(l<myplusprice)
{
if(kccnt<maxcnt)
{
Buy(kc,myplusprice);
kccnt=kccnt+1;
}
}
}//加1手多单
if(CurrentContracts==2)
{
myexitprice=LastEntryPrice+tp*minpoint;
if(high>myexitprice)
Sell(jc,myexitprice);
}//减1手多单
//*********************************************************************************************************
if(dir=="空头")
{
if(MarketPosition>=0) myentryprice=open;
SellShort(kc,myentryprice);
kccnt=-1;
}//空头状态下开1手空单
if(MarginRatio==-1)
{
myplusprice=stploss-plush*minpoint;
if(high>myplusprice)
{
if(Abs(kccnt)<maxcnt)
{
SellShort(kc,myplusprice);
kccnt=kccnt-1;
}
}
}//加1手空单
if(CurrentContracts==-2)
{
myexitprice=LastEntryPrice-tp*minpoint;
if(low<myexitprice)
BuyToCover(jc,myexitprice);
}//减1手空单
End |
|