设为首页收藏本站

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

平仓指令,不能实现自动止损平仓.SetStopLoss(1,100,true), [复制链接]

Rank: 5Rank: 5

精华
0
UID
7593
积分
609
帖子
109
主题
14
阅读权限
60
注册时间
2010-3-19
最后登录
2014-5-18
跳转到指定楼层
1#
发表于 2010-4-26 10:52:05 |显示全部楼层 |倒序浏览
Dear Adm and all,
      我写了一个模型测试一下,使用函数SetStopLoss(1,100,true)不能进行自动平仓,望管理员及各位高手给予帮助,谢谢。
代码如下:
//------------------------------------------------------------------------
// 简称: my_trtst
// 名称: my_trtst
// 类别: 交易指令
// 类型: 其他
// 输出:
//------------------------------------------------------------------------

Params
Numeric down_length(1.5);
Numeric up_length(0.5);
Vars

//-------------止损平仓1000-----------------
SetStopLoss(1,100,true);
//-------------价格盈利回落10%(0.1)实行平仓------------
SetPercentTrailing(600,0.1,true);

//----------------获得当前持仓位置的浮动盈亏--------------
if (MarketPosition!=0 And BarStatus ==2){
FileDelete("C:\\Program_Trading.log");  
FileAppend("C:\\Program_Trading.log","浮动盈亏 = "+Text(A_ProfitLoss()));为什么输出的是一个N/A的字符串。

}
End

//------------------------------------------------------------------------
// 编译版本        GS2004.06.12
// 用户版本        2010/04/17 23:44
// 版权所有        zejunl
// 更改声明        TradeBlazer Software保留对TradeBlazer平台
//                        每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
此贴在lh948同志的大力支持下已经得到解决。
Submitter: zejunl

[ 本帖最后由 zejunl 于 2010-4-27 13:42 编辑 ]

Rank: 5Rank: 5

精华
0
UID
7593
积分
609
帖子
109
主题
14
阅读权限
60
注册时间
2010-3-19
最后登录
2014-5-18
2#
发表于 2010-4-26 12:10:28 |显示全部楼层
请问这个函数的说明中为什么有该函数仅支持交易指令 ,及怎样去区分函数是否支持交易指令。谢谢!
SetStopLoss
说明 根据参数进行止损平仓操作。
语法 Bool SetStopLoss(Integer Type,Numeric Value,Bool ExitPosition=False)
参数 Type 止损平仓的设置类型,参数定义如下:
0 按照持仓亏损数来计算止损平仓
1 按照每张合约亏损数来计算止损平仓
Value 根据Type类型而不同的设定值。
ExitPosition 布尔值,为True时,表示对当前所有持仓一起计算进行平仓,为False对每一个仓位单独计算进行平仓。  
备注 根据参数进行止损平仓操作,返回值为布尔型,执行成功返回True,否则返回False,该函数仅支持交易指令
止损平仓是指当亏损大于等于设定值时,自动进行平仓操作,平仓的价格是满足亏损值等于设定值的价格。止损平仓在计算亏损时不考虑佣金。如果Type和Value的输入值无效,该函数的操作将被忽略。  
示例 SetStopLoss(0,2000,True); 当前所有持仓亏损达到2000之后,执行所有持仓位置的止损平仓。(此时是计算所有持仓的亏损数)
SetStopLoss(1,50, False); 当前持仓的某一个建仓位置每张合约的亏损达到50之后,执行该持仓位置的止损平仓。(此时只计算该持仓位置的每张合约亏损)

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
7593
积分
609
帖子
109
主题
14
阅读权限
60
注册时间
2010-3-19
最后登录
2014-5-18
3#
发表于 2010-4-26 13:45:17 |显示全部楼层
Sorry,是我表述错误,我的意思是,如果在函数解释中标注有“该函数仅支持交易指令”,我怎样去区分这交易函数是只能用于历史测试,还是可以用于实盘操作呢?期待您的解答!谢谢。
Zejunl

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
7593
积分
609
帖子
109
主题
14
阅读权限
60
注册时间
2010-3-19
最后登录
2014-5-18
4#
发表于 2010-4-26 14:58:59 |显示全部楼层

回复 7# lh948 的帖子

不明白您的意思,我是说在所有的交易函数中,那些函数可以用于实盘交易,那些只能用于测试中使用,因为我看了交易函数解释,通通都有这样一句,”该函数仅支持交易指令“,所以就把我弄糊涂了哈。请给予帮助解答。谢谢。

zejunl

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
7593
积分
609
帖子
109
主题
14
阅读权限
60
注册时间
2010-3-19
最后登录
2014-5-18
5#
发表于 2010-4-26 15:05:08 |显示全部楼层
请看附图。
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
7593
积分
609
帖子
109
主题
14
阅读权限
60
注册时间
2010-3-19
最后登录
2014-5-18
6#
发表于 2010-4-27 00:05:42 |显示全部楼层
请问一下管理员同志及其它大侠,Bool A_SendOrder(Integer BuyOrSell,Integer EntryOrExit,Numeric fLot,Numeric fPrice)函数,能否把Numeric fPrice 替换为NextOpen来获取交易价格数据,因为这样不会发生重复开仓的问题,谢谢!
if ( tr_hbop[1] > tr_x[1] And (Abs(tr_s1[1]-tr_x[1])<=0 or Abs(tr_s1[1]-tr_x[1])<=0.50))
{
        if (A_SellPosition()>0)
        {
                A_SendOrder(Enum_Sell,Enum_Exit,A_SellPosition(),Q_AskPrice());
        }
        A_SendOrder(Enum_Buy,Enum_Entry,1,Q_BidPrice());
}

if ( tr_hbop[1]<tr_x[1]  And (Abs(tr_b1[1]-tr_x[1])<=0  or Abs(tr_b1[1]-tr_x[1])<=0.50))
{
        if (A_BuyPosition()>0)
        {
                A_SendOrder(Enum_Buy,Enum_Exit,A_BuyPosition(),Q_BidPrice());
        }
        A_SendOrder(Enum_Sell,Enum_Entry,1,Q_AskPrice());
}
//----------------止损操作--------------
if ((A_BuyPosition()>0 or A_SellPosition()>0 ) And BarStatus ==2)
{
//-------------止损平仓100-----------------
        if (A_BuyProfitLoss()<=-100)
        {
                A_SendOrder(Enum_sell,Enum_exit,A_BuyPosition(),Q_BidPrice());
        }
        if (A_SellProfitLoss()<=-100)
        {
                A_SendOrder(Enum_Buy,Enum_exit,A_SellPosition(),Q_AskPrice());
        }

By,Zejunl

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
7593
积分
609
帖子
109
主题
14
阅读权限
60
注册时间
2010-3-19
最后登录
2014-5-18
7#
发表于 2010-4-27 00:09:41 |显示全部楼层

回复 6# ranran0623 的帖子

谢谢[size],呵呵。

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
7593
积分
609
帖子
109
主题
14
阅读权限
60
注册时间
2010-3-19
最后登录
2014-5-18
8#
发表于 2010-4-27 09:09:27 |显示全部楼层
Hi, 请看下列代码,为什么不能根据自动止损平仓呢?谢谢!
交易指令应用周期:1分钟,
开仓方向:多仓
开仓价格:SR1101 4995
现在价格:SR1101 4958
损失:SR1101 5995-4958= -370

//----------------止损操作--------------
if ((A_BuyPosition()>0 or A_SellPosition()>0 ) And BarStatus ==2)
{
//-------------止损平仓100-----------------
        if (A_BuyProfitLoss()<=-100)
        {
                A_SendOrder(Enum_Sell,Enum_Exit,A_BuyPosition(),Q_BidPrice());
        }
        if (A_SellProfitLoss()<=-100)
        {
                A_SendOrder(Enum_Buy,Enum_Exit,A_SellPosition(),Q_AskPrice());
        }
       
       
}

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
7593
积分
609
帖子
109
主题
14
阅读权限
60
注册时间
2010-3-19
最后登录
2014-5-18
9#
发表于 2010-4-27 10:23:25 |显示全部楼层
好的,请问,是否我把BarStatus ==2 删除了就能实现自动止损平仓了呢。? 我现在就去难一下。

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
7593
积分
609
帖子
109
主题
14
阅读权限
60
注册时间
2010-3-19
最后登录
2014-5-18
10#
发表于 2010-4-27 10:49:44 |显示全部楼层
刚刚才我把程序代码做了些修改,主要是为了避免同一方向重复下单的问题,按照您的提示,我把代码修改如下,请看下列代码,其中我有一个疑问,为什么还是在重复发送同一方向的单,我应该把SetGlobalVar(0,0) and SetGlobalVar(1,0)的初始值放在程序的那一部分。如果把SetGlobalVar(0,0) and SetGlobalVar(1,0)放在Begin and End 之间的话,可能随时都会去把默认值识为当前值。期待您及高手的回答!
关于开平仓记录请看附件中的文件,先行谢过了。
Parms
......
Vars
......
Begin
{
//前面程序计算部分.........

SetGlobalVar(0,0);//多开平仓标志,没有多单持仓用0表示,有多单持仓用1表示。获取数据用GetGlobalVar(0);
SetGlobalVar(1,0);//空开平仓标志,没有空单持仓用0表示,有空单持仓用1表求。获取数据用GetGlobalVar(1);


if ( tr_hbop[1] > tr_x[1] And (Abs(tr_s1[1]-tr_x[1])<=0 or Abs(tr_s1[1]-tr_x[1])<=0.50))
{
        if (GetGlobalVar(1)==1)
        {
                A_SendOrder(Enum_Sell,Enum_Exit,A_SellPosition(),Q_AskPrice());
                SetGlobalVar(1,0);
        }
        if (GetGlobalVar(0)==0)
        {
                A_SendOrder(Enum_Buy,Enum_Entry,1,Q_BidPrice());
                SetGlobalVar(0,1);               
        }
}

if ( tr_hbop[1]<tr_x[1]  And (Abs(tr_b1[1]-tr_x[1])<=0  or Abs(tr_b1[1]-tr_x[1])<=0.50))
{
        if (GetGlobalVar(0)==1)
        {
                A_SendOrder(Enum_Buy,Enum_Exit,A_BuyPosition(),Q_BidPrice());
                SetGlobalVar(0,0);
        }
        if (GetGlobalVar(1)==0)
        {
                A_SendOrder(Enum_Sell,Enum_Entry,1,Q_AskPrice());
                SetGlobalVar(1,1);
        }
}

End


By : Zejunl

[ 本帖最后由 zejunl 于 2010-4-27 12:47 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

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

bottom

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

GMT+8, 2024-5-18 17:38

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部