- 精华
- 0
- 在线时间
- 39 小时
- UID
- 259001
- 积分
- 47
- 帖子
- 31
- 阅读权限
- 10
- 注册时间
- 2017-11-11
- 最后登录
- 2022-9-15
- 精华
- 0
- UID
- 259001
- 积分
- 47
- 帖子
- 31
- 主题
- 10
- 阅读权限
- 10
- 注册时间
- 2017-11-11
- 最后登录
- 2022-9-15
|
策略思路:
如果多头净仓位超过最大仓位,则增加空头仓位;
如果空头净仓位超过最大仓位,则增加多头仓位。
*/
Params
//此处添加参数
Integer netMaxPos(5);//净持仓上线
//String mySym("ag1912.SHFE");
String mySym("i9000.SHFE");
Vars
//此处添加变量
Integer side(0);
Integer lMaxPos(0);
Integer sMaxPos(0);
Array<Integer> ids;
Global Position myPos;
Global Integer i(0);
Defs
//log 输出
Integer LogFile(String str)
{
FileAppend(FormulaName()+".txt","["+Text(SystemDateTime())+"] "+ str);
Return 0;
}
//控制仓位循环发单
Integer trySendOrder(StringRef sym,Numeric price,Integer volume)
{
If(len(myPos.symbol)==0)
{
A_GetPosition(sym,myPos);
}
lMaxPos=myPos.longCurrentVolume+myPos.longActiveVolume+myPos.longActiveCloseVolume;
sMaxPos=myPos.shortCurrentVolume+myPos.shortActiveVolume+myPos.shortActiveCloseVolume;
//多头超过最大持仓,提高空头持仓
If(lMaxPos>=netMaxPos)
{
side=-1;
}
//空头超过最大持仓,提高多头持仓
If(sMaxPos>=netMaxPos)
{
side=1;
}
//如果有未成交单先平仓
If(myPos.longActiveVolume !=0 || myPos.shortActiveVolume!=0 ||myPos.longActiveCloseVolume !=0 || myPos.shortActiveCloseVolume!=0)
{
A_DeleteAccountOrder(sym);
Return 1;
}
LogFile("try:"+Text(side)+",l="+Text(lMaxPos)+",s="+Text(sMaxPos));
If(side>0)
{
if(sMaxPos==0)
{
A_SendOrderEx(sym,Enum_Buy,Enum_Entry,volume,price,ids);
}
Else if(myPos.shortCurrentVolume >0)
{
A_SendOrderEx(sym,Enum_Buy,Enum_ExitAuto,volume,price,ids);
}
}Else
{
if(lMaxPos==0)
{
A_SendOrderEx(sym,Enum_Sell,Enum_Entry,volume,price,ids);
}Else if(myPos.longCurrentVolume >0)
{
A_SendOrderEx(sym,Enum_Sell,Enum_ExitAuto,volume,price,ids);
}
}
Return 1;
}
Events
//初始化事件函数,策略运行期间,首先运行且只有一次
OnInit()
{
SubscribeBar(mySym,"10s");
}
//OnBarOpen 更新事件函数,参数 indexs 表示变化的数据源图层 ID 数组
OnBarOpen(ArrayRef<Integer> indexs)
{
Range[i=0ataCount-1]
{
if(BarStatus==2)
{
If(BarCount%2==0)
{
trySendOrder(Symbol(),Open,1);
}
}
}
}
//持仓更新事件函数,参数 pos 表示更新的持仓结构体
OnPosition(PositionRef pos)
{
myPos=pos;
LogFile("持 仓 更 新 : "+pos.symbol+",lsz="+Text(pos.longCurrentVolume)+",ssz="+Text(pos.shortCurrentVolume));
}
//委托更新事件函数,参数 ord 表示更新的委托结构体
OnOrder(OrderRef ord)
{
//如果委托已经撤单,且撤单操作员是当前策略,则重新委托
LogFile("委 托 更 新 : "+ord.accountId+",index="+Text(ord.orderId)+",exchOrdId="+ord.exchOrderId+","+ord.note+","+ord.createSource);
} |
|