设为首页收藏本站

 找回密码
 注册
查看: 1359|回复: 1
打印 上一主题 下一主题

高频交易这个案例要如何配置才能看到效果啊 [复制链接]

Rank: 1

精华
0
UID
259001
积分
47
帖子
31
主题
10
阅读权限
10
注册时间
2017-11-11
最后登录
2022-9-15
跳转到指定楼层
1#
发表于 2019-12-17 22:17:24 |只看该作者 |倒序浏览
策略思路:
如果多头净仓位超过最大仓位,则增加空头仓位;
如果空头净仓位超过最大仓位,则增加多头仓位。
*/
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);
    }

Rank: 1

精华
0
UID
293582
积分
19
帖子
13
主题
6
阅读权限
10
注册时间
2020-7-4
最后登录
2020-7-23
2#
发表于 2020-7-6 20:00:44 |只看该作者
有Q、A开头的函数,做不了回测的,挂个账户才行

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-5 01:09

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部