设为首页收藏本站

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

怎么实现"跟踪止损"??? [复制链接]

Rank: 2

精华
0
UID
5686
积分
95
帖子
19
主题
7
阅读权限
30
注册时间
2009-10-17
最后登录
2019-3-30
跳转到指定楼层
1#
发表于 2009-10-20 18:53:28 |只看该作者 |倒序浏览
由于程序是针对每一根K线都执行一遍,所安排的参数在每根K线执行时重新置为默认值,不知道应该怎么实现跟踪止损,请高手指点....

我的想法是这样的对CU而言)
开仓之后亏损200点时止损,
赢利200点时,将止损位向赢利方向移动200点,
赢利达到400点时,再次将止损位向赢利方向移动200点,
赢利达到600点时,再次将止损位向赢利方向移动200点,
依此重复,
直至跟踪止损被触及时出场,或者在收盘前平仓,

请知道的大哥给个大概的方向就行,具体编程我自己可以慢慢磨....

Rank: 10Rank: 10Rank: 10

精华
2
UID
4130
积分
20901
帖子
6519
主题
17
阅读权限
200
注册时间
2009-4-15
最后登录
2019-4-12
2#
发表于 2009-10-21 09:23:06 |只看该作者
SetStopLoss //止损函数
用MarketPosition判断持多头or空头

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
4740
积分
1247
帖子
251
主题
9
阅读权限
60
注册时间
2009-6-29
最后登录
2019-3-30
3#
发表于 2009-10-21 09:47:22 |只看该作者
if (持仓 并且 盈利大于400)
    止损线=盈利-200;
else
   止损线=开仓价-200;

算是个提示吧,方法多种多样。

使用道具 举报

Rank: 2

精华
0
UID
5686
积分
95
帖子
19
主题
7
阅读权限
30
注册时间
2009-10-17
最后登录
2019-3-30
4#
发表于 2009-10-21 11:02:08 |只看该作者
恩,谢谢...

语法 Bool SetStopLoss(Integer Type,Numeric Value,Bool ExitPosition=False)
参数 Type 止损平仓的设置类型,参数定义如下:
0 按照持仓亏损数来计算止损平仓
1 按照每张合约亏损数来计算止损平仓

示例 SetStopLoss(0,2000,True); 当前所有持仓亏损达到2000之后,执行所有持仓位置的止损平仓。(此时是计算所有持仓的亏损数)
SetStopLoss(1,50, False); 当前持仓的某一个建仓位置每张合约的亏损达到50之后,执行该持仓位置的止损平仓。(此时只计算该持仓位置的每张合约亏损)  

请问一下,示例1中的2000是指资金亏损,示例2中的50是指每手合约的点数亏损吗?

如果我想对所有持仓合约按照平均持仓均价计算,亏损200(CU)点时止损(转换成资金是每手合约1000元),是不是应该按照示例2实现?还是一律将亏损转换成资金计算???

另外,如果我现在赢利800点了,这时的的跟踪止损位其实是在赢利600点的地方,根本不存在亏损, SetStopLoss()函数怎样实现将实际的赢利算成"亏损"?

不知道我说清楚了没,呵呵...

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
2
UID
4130
积分
20901
帖子
6519
主题
17
阅读权限
200
注册时间
2009-4-15
最后登录
2019-4-12
5#
发表于 2009-10-21 11:09:35 |只看该作者
第二个参数指的是价格
SetStopLoss()只是一个止损动作,具体变动的止损价格还需要您在程序中计算,然后用变量代入SetStopLoss()中

使用道具 举报

Rank: 2

精华
0
UID
5686
积分
95
帖子
19
主题
7
阅读权限
30
注册时间
2009-10-17
最后登录
2019-3-30
6#
发表于 2009-10-21 11:32:23 |只看该作者
非常感谢您的持续关注.....

还有好多问题,我自己也表达不明白,呵呵

等我想想明白点再向您请教.....

使用道具 举报

Rank: 2

精华
0
UID
5686
积分
95
帖子
19
主题
7
阅读权限
30
注册时间
2009-10-17
最后登录
2019-3-30
7#
发表于 2009-10-21 11:34:13 |只看该作者
变量在每条K线时重置为初始值,搞得停头痛,想记录一个历史的事件没有太好的办法实现...

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
2
UID
4130
积分
20901
帖子
6519
主题
17
阅读权限
200
注册时间
2009-4-15
最后登录
2019-4-12
8#
发表于 2009-10-21 11:50:51 |只看该作者
举例,我们记录图表上第一个bar的收盘价,并且输出到C:\a.txt里面
Vars
NumericSeries myclose;
begin

If(BarStatus==0)           //判断是否第一个bar
{
myclose=Close;        //把第一个bar的收盘价保存起来
}Else
{
myclose=myclose[1];          //在每个bar上传递,myclose[1]是指前一个bar的myclose
}
FileAppend("C:\\a.txt",Text(myclose));      //输出myclose
End

使用道具 举报

Rank: 2

精华
0
UID
5686
积分
95
帖子
19
主题
7
阅读权限
30
注册时间
2009-10-17
最后登录
2019-3-30
9#
发表于 2009-10-21 12:16:46 |只看该作者
帅,我懂了,谢谢啊.....

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
11
UID
1
积分
25127
帖子
6291
主题
149
阅读权限
255
注册时间
2007-7-20
最后登录
2024-4-22
10#
发表于 2009-10-21 12:22:23 |只看该作者
实现的是楼1的想法。
Vars
                Numeric MinPrice;//最小变动单位
                NumericSeries MyPrice;
                NumericSeries MyLoss;//跟踪止损价格
        Begin
                If(date != date[1])
                {
                        MyPrice = InvalidNumeric;
                        MyLoss = InvalidNumeric;
                }Else
                {
                        MyPrice = MyPrice[1];
                        MyLoss = MyLoss[1];
                }
                MinPrice = MinMove * PriceScale;
                If(MarketPosition == 0)
                {
                        If(High > High[1])//假设的开仓条件
                        {
                                Buy(1,close + MinPrice);
                                MyPrice = Close + MinPrice;
                        }
                }Else If(MarketPosition == 1)
                {
                        If(High >= MyPrice + 20 * MinPrice)
                        {
                                MyPrice = MyPrice + 20 * MinPrice;
                        }
                        If(Low < MyLoss)
                        {
                                Sell(0,close - MinPrice);
                                MyPrice = InvalidNumeric;
                                MyLoss = InvalidNumeric;
                        }
                }
                MyLoss = MyPrice - 20 * MinPrice;       
                If(Time >= 0.1455)
                {
                        Sell(0,close - MinPrice);
                }
                Commentary("MyPrice" + text(MyPrice));
                Commentary("MyLoss" + text(MyLoss));
       
        End
交易开拓者 - 期货程序化与量化系统自动交易领航者

网站已支持在线开通模拟账户功能

使用道具 举报

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

bottom

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

GMT+8, 2024-5-3 23:00

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部