设为首页收藏本站

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

想按资金量开多少仓,平仓时 能平相应手数 [复制链接]

Rank: 1

精华
0
UID
198726
积分
22
帖子
15
主题
7
阅读权限
10
注册时间
2014-12-9
最后登录
2017-3-19
跳转到指定楼层
1#
发表于 2016-6-20 12:47:55 |只看该作者 |倒序浏览
主要想按资金量开多少仓,平仓时 能平相应手数,,但5.3版摸测不对,只平1手,我是应射到主力合约。代码如下,请高手帮改改。
//------------------------------------------------------------------------
// 简称: sjx16617
// 名称: sjx
// 类别: 公式应用
// 类型: 用户应用
// 输出:
//------------------------------------------------------------------------
Params
         Numeric spp(1);//开仓资金占可用资金比率
Numeric bzb(15);//保证金比率


Vars
        NumericSeries AvgValue1;
        NumericSeries AvgValue2;
        Numeric moff(0);
   Numeric mylot(0);
       
        NumericSeries HighestAfterEntry;        // 开仓后出现的最高价
   NumericSeries LowestAfterEntry;         // 开仓后出现的最低价   
  
   Numeric MyEntryPrice(0);
   Numeric MyExitPrice(0);
       
        BoolSeries p1(false);
   BoolSeries p2(false);
       
        Numeric kd(0);//开仓资金占可用资金比率
Numeric kk(0);//保证金比率
       
       
       
Begin
        AvgValue1 = AverageFC(Close,5);
        AvgValue2 = AverageFC(Close,20);

        PlotNumeric("MA1",AvgValue1);
        PlotNumeric("MA2",AvgValue2);               
       
        // 集合竞价和小节休息过滤
        If(!CallAuctionFilter()) Return;
       
        //实际账户

If(BarStatus==2)
{


mylot=IntPart(A_FreeMargin*spp/(close*bzb*0.01*BigPointValue*contractunit));



}
moff=MinMove*PriceScale;//滑点

        //
        If(BarStatus==0)
   {
    SetGlobalVar(0,0);  
        }
        //
       
        p1= CrossOver(AvgValue1[1] , AvgValue2[1]);
p2=CrossUnder(AvgValue1[1] , AvgValue2[1]);
       
        If(MarketPosition <>1  and p1)
        {
         
                  Buy(mylot,o);
                  kd=mylot;
     
        }
       
        If(MarketPosition <>-1  and p2)
        {
                        
                   SellShort(mylot,o); kk=mylot;
     
   
        
                 
        }       
        //平仓:
If((MarketPosition>0   And BarsSinceEntry >=10))
{
   
                                {
                                Sell(kd,o);
                                }
}
  
If((marketposition<0    And BarsSinceEntry >=10))
{
  
                                {                               
                                BuyToCover(kk,o);
                                }
}
//跟踪止损

//
End


//------------------------------------------------------------------------
// 编译版本        GS2015.12.25
// 用户版本        2016/06/17 11:15:51
// 版权所有        zxqh106300032
// 更改声明        TradeBlazer Software保留对TradeBlazer平台
//                        每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
2#
发表于 2016-6-20 14:27:24 |只看该作者
mylot的算法问题,会导致开仓信号只在最后K线上显示,历史里信号会消失的。
开仓信号消失,自然没法得出平仓信号

使用道具 举报

Rank: 1

精华
0
UID
198726
积分
22
帖子
15
主题
7
阅读权限
10
注册时间
2014-12-9
最后登录
2017-3-19
3#
发表于 2016-6-20 22:08:00 |只看该作者
If(BarStatus==2)
{


mylot=IntPart(A_FreeMargin*spp/(close*bzb*0.01*BigPointValue*contractunit));请帮我改一下算法可否?



}

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
129699
积分
136
帖子
75
主题
23
阅读权限
40
注册时间
2011-1-1
最后登录
2022-2-4
4#
发表于 2016-6-20 23:15:27 |只看该作者
直接读取账户资金实战不可行:出问题几率大,且不便于资金管理。
把资金量设为参数,随时修改,更有实战价值。

使用道具 举报

Rank: 1

精华
0
UID
198726
积分
22
帖子
15
主题
7
阅读权限
10
注册时间
2014-12-9
最后登录
2017-3-19
5#
发表于 2016-6-21 12:09:05 |只看该作者
说对了易出问题,但我的资金股指商品同做,有时股指开了仓,余下资金做商品,资金量是变的,不好总改,想取得动态可用资金就好。

使用道具 举报

Rank: 1

精华
0
UID
198726
积分
22
帖子
15
主题
7
阅读权限
10
注册时间
2014-12-9
最后登录
2017-3-19
6#
发表于 2016-6-27 11:47:43 |只看该作者
用A 函数平仓为何也平不了?
Params

        
      Numeric bzb(17);

Vars

   Numeric moff(0);  
   Numeric mylot(0);
      NumericSeries AvgValue1;  

       NumericSeries AvgValue2;

Begin

       AvgValue1 = AverageFC(Close,5);

        AvgValue2 = AverageFC(Close,20);
moff=MinMove*PriceScale;//滑点 PriceScale为当前公式应用商品的计数单位,返回值为浮点数。

PlotNumeric("MA1",AvgValue1);
PlotNumeric("MA2",AvgValue2);       


If(BarStatus==0)
   {
    SetGlobalVar(0,0);
}
     //1用A行数交易,平仓仅平1手   
If(BarStatus==2 )
{


mylot=IntPart(A_FreeMargin*0.96/(close*bzb*0.01*BigPointValue*contractunit));

SetGlobalVar(15,mylot);

}

  

      If(MarketPosition <>1 && AvgValue1[1] > AvgValue2[1])

        {

                 Buy(GetGlobalVar(15),o+5*moff);
        
       }

       If(MarketPosition <>-1 && AvgValue1[1] < AvgValue2[1])

        {
SellShort(GetGlobalVar(15),o-5*moff);

        }

       //平仓
  
      If((MarketPosition>0   And BarsSinceEntry >=10))
{
   
                         
              
                If(BarStatus==2 and data1.a_buyposition>0)
                                {
                                data1.A_SendOrder(Enum_Sell,Enum_Exit,data1.a_buyposition,data1.Q_BidPrice-5*moff);
                                }else
                                {
                                Sell(0,o-5*moff);
                                }
}
  
If((marketposition<0    And BarsSinceEntry >=10))
{
  
                       
               If(barstatus==2 and data1.A_SellPosition>0)
                                {
                                data1.A_SendOrder(Enum_Buy,Enum_Exit,data1.A_SellPosition,data1.Q_askPrice+5*moff);
                                }else
                                {                               
                                BuyToCover(0,o+5*moff);
                                }
}


End

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
7#
发表于 2016-6-27 15:05:53 |只看该作者
zxqh106300032 发表于 2016-6-27 11:47
用A 函数平仓为何也平不了?
Params

对于A函数的使用,因为没有直观的信号标识,建议使用fileappend写日志来调试问题。

使用道具 举报

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

bottom

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

GMT+8, 2024-5-12 20:40

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部