如何做期货投资资策略篇之:如何选择品种

让期货交易变得如此简单
什么是期货的交易策略呢,对于期货交易的策略很多人不理解或者理解的不是很深刻,今天就给大家分享一下在期货的交易过程当中大家必须掌握的内容期货交易策略---------盘感。&(字节数: 2014) [原创
21:17:43]&&
期货市场的知识并不是太多,只要你肯努力,3个月就能够把期货知识学习完毕。所以期货的入门非常容易,这就是学习的最初步阶段。很多人在完成这种初步的学习之后认为:期货很容易操作,进而开始进场交易。在真实的交易中他才发现需要学习的东西还太多,以至于不知道该学习什么了。似乎什么都需要学,又似乎学什么都没有用。绝大部分投资者都没度过这个阶段,就被市场淘汰了。能够度过这个阶段的投资者将进入另外一种状态,他能够形成自己的交易理念,形成自己的交易模式,达到这种状态后,已经开始处于微盈利状态,距离稳定盈利还有一定...&(字节数: 1480) [原创
20:20:47]&&目前国内期货品种数目上海4个,大连3个,郑州3个.考虑到品种波动相关性(大豆与豆粕,强麦与硬麦),品种数目应该为8个.一般投资者8个品种全部杀进杀出的几乎没有,有的话也一定是赔光走人了,毕竟人的精力是有限的,你能照顾得过来吗。 在我们平时研究做盘后功课的时候库选择2-3个品种进行研究分析,在实盘的时候操作好一个投资品种就够了,大家都知道一旦接触实盘,真金白银的教训告诉我们还是只能选择一个品种进行操作,操作的品种多了,你照顾不过来,选择时应该注意自己的资金量和风险承受能力,资金量大风险承...&(字节数: 651) [原创
10:38:27]&&在交易实战当中,执行力是考核成功与否的一个十分关键的指标,如果执行力不够多么完美的交易策略资金管理也是空谈,衡量期货执行力好坏的标准就是:按计划完成自己的交易,实现赚多亏少。
执行力的四个核心要素:1、方向选择;2、交易系统的建立;3、资金管理;4、心态控制。&(字节数: 1241) [原创
20:09:51]&&你好,欢迎加入到我们的团队,感谢您很幸运的成为了我们当中的一员。对于新人如何开始您的期货学习生涯,我在这里给大家一点建议。第一:把Vip课程里的内容重复的看三遍,如果你连三遍的没时间看,你就没资格提问。第二:对于我们周三 周五的课程安排,请参看课程表第三:我们每周的讲的课程内容,是所有Vip的综合性的内容,根据市场的行情分析的,如果你没看完内容就去听课,我估计你也听得一头雾水,我们的房间地址是YY频道 呱呱频道386839,如果注册有帐号的朋友也看通过论坛 &(字节数: 0) [原创
0:46:36]&&期货市场无兼职,进来的散户都梦想着从这个市场里分一杯羹,即便是全心投入,其结果也未必如愿。有一部分原因是源于希望,准确点说是因为不切实际的幻想。每个人都会认为自己有过人之处,都梦想着幸运之神的垂青。这是人性的一个特点。而这个市场仿佛就是为激发、放大人性特点而设的。一个人在这个市场亏钱,并不是次次交易都是失败的,而是每几次失败后总会有一两次赚钱的时候,当你想退出的时候,前方好像一直有点希望的光亮隐约告诉你,也许下一次就会赚到,却不知道正是这个隐约的光亮可能引着你走向深渊,一个刚进这行的新手往往会亏钱,...&(字节数: 662) [原创
21:58:58]&&最近一直有很多朋友问我,学习期货难吗。没基础的可以学会吗。这样的问题对于已经入门的朋友来说算是很简单的问题了。但是对于想一直在这样一个充满机会与挑战的市场里扎根的朋友来说,这样一个简单的问题对于他们很重要,这将是他们进入市场开始了解期货的起点,其实期货没大家想的那么难,难的就是控制好你的心态只有你能控制好你的贪婪 管住你的资金,付出努力,对于一个正常人做好期货是没什么问题的。
怎样学习期货呢,学习技术,练习心态,控制贪婪,管好资金&(字节数: 415) [原创
10:01:04]&&
这段时间一直很忙,基本每天都到凌晨1点才入睡,我以前都是白天做行情,晚上还要跟大家一起交流行情,随着群的朋友越来越多,要回答的问题很多,有的都是问了很多次重复的问题,我还是要不断的回答,我知道大家对期货的热爱,因为我自己也是从亏损当中走过来的,我能理解大家的心情,回答着重复的问题虽然很浪费时间,但只要大家少亏钱,能进步我就已经很高兴,但是毕竟我个人的时间和精力有限啊,一个朋友无意当中的一句话点醒了我,我们能不能做一个论坛,有了论坛同样的问题你就不需要回答很多次了,一些资料也可以发布在上面啊,我想...&(字节数: 756) [原创
10:18:13]&&
期货是个什么样的东西,期货交易能给我们的生活带来什么,能改变我们我们的生活吗,能像股票一样赚钱吗,带着这样一些疑问使我开始走上了期货的交易成长之路,记得我认识期货是在07年,当时有过做股票的2年交易生涯,做股票也是一边上班一边做比起专门做股票的人来说一不算那么有经验,当时股票做得也还可以,应该算是我毕业工作以后做的最大一笔投资,每当下班有闲暇时间我都会去看一下新闻 研究一下市场的情况,在做股票的第一年我就知道有期货这样一种东西,当时自己连股票都还没做好,也没有时间去了解期货,我跟期货认识是做了股...&(字节数: 1412) [原创
10:34:09]&&今天终于闲暇下来思考了一些东西,一个人坐在一个安静的生活环境里,面对着又一个不同心境的地方,对生活的看法和对市场的思考比以前有了一个不同的转变,记得号,为了自己的梦想暂时离开了一直关心支持我的朋友们,今天看到了他们给我的留言,我的心情难以表达,我想只有他们能理解我,毕竟大家一起在这个金融市场里风风雨雨的走过了这条不寻常的路,日子久了不用言语的表达,大家都形成了默契,在中秋节来临之际。祝一直以来关心支持晓邱的朋友们,有你们一路陪我走过了2011年。有些东西只有一个人内心平静的时候才能...&(字节数: 918)1 |
已成功添加“”到 个分组
请不要超过6个字豆丁微信公众号
君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
探寻股指期货跨品种的最优组合-另类交易策略系列之三十-160103
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口苹果/安卓/wp
积分 143, 距离下一级还需 2 积分
权限: 自定义头衔
道具: 涂鸦板, 彩虹炫, 雷达卡, 热点灯, 显身卡, 匿名卡, 金钱卡
购买后可立即获得
权限: 隐身
道具: 金钱卡, 变色卡, 彩虹炫, 雷达卡, 热点灯, 涂鸦板
BotVS的 CTP商品期货多品种海龟交易法源码分享/* 参数
Instruments& && && && && &合约列表& && && && && && && && && &&&字符串(string)
LoopInterval& && && && &&&轮询周期(秒)& && && && && && && && & 数字型(number)& && &&&3
RiskRatio& && && && && &&&% Risk Per N ( 0 - 100)& && && && &数字型(number)& && &&&1
ATRLength& && && && && &&&ATR计算周期& && && && && && && && & 数字型(number)& && &&&20
EnterPeriodA& && && && &&&系统一入市周期& && && && && && && &&&数字型(number)& && &&&20
LeavePeriodA& && && && &&&系统一离市周期& && && && && && && &&&数字型(number)& && &&&10
EnterPeriodB& && && && &&&系统二入市周期& && && && && && && &&&数字型(number)& && &&&55
LeavePeriodB& && && && &&&系统二离市周期& && && && && && && &&&数字型(number)& && &&&20
UseEnterFilter& && && && &使用入市过滤& && && && && && && && & 布尔型(true/false)& & true
IncSpace& && && && && && &加仓间隔(N的倍数)& && && && && && && &数字型(number)& && &&&0.5
StopLossRatio& && && && & 止损系数(N的倍数)& && && && && && && &数字型(number)& && &&&2
MaxLots& && && && && && & 单品种加仓次数& && && && && && && && &数字型(number)& && &&&4
RMode& && && && && && && &进度恢复模式& && && && && && && && & 下拉框(selected)& && &自动|手动
VMStatus@RMode==1& && && &手动恢复字符串& && && && && && && && &字符串(string)& && &&&{}
WXPush& && && && && && &&&推送交易信息& && && && && && && && & 布尔型(true/false)& &&&true
*/
var _bot = $.NewPositionManager();//&&声明一个全局变量, 值由 $.NewPositionManager 这个导出函数 返回, 返回的是一个 对象
var TTManager = {//&&一个对象,全局对象, 生成器。
& & New: function(needRestore, symbol, riskRatio, atrLen, enterPeriodA, leavePeriodA, enterPeriodB, leavePeriodB, useFilter,
& && &&&multiplierN, multiplierS, maxLots) {//构造函数
& && &&&//New函数参数:【needRestore】需要重启 ,symbol【合约编号】,riskRatio【风险比率】,atrLen【art指标长度】,enterPeriodA【入市期A】,leavePeriodA【离市期A】,
& && &&&//enterPeriodB【入市期B】,leavePeriodB【离市期B】,useFilter【使用过滤】,multiplierN【乘数N】,multiplierS【乘数S】,maxLots【单品种加仓次数】
& && &&&// subscribe
& && &&&var symbolDetail = _C(exchange.SetContractType, symbol);//根据合约编号设置合约类型,回去返回的合约信息,symbolDetail
& && &&&if (symbolDetail.VolumeMultiple == 0 || symbolDetail.MaxLimitOrderVolume == 0 || symbolDetail.MinLimitOrderVolume == 0 || symbolDetail.LongMarginRatio == 0 || symbolDetail.ShortMarginRatio == 0) {
& && && && &//合约一首 份数 == 0& & 或者& &最大下单量 == 0& & 或者& &最小下单量 == 0 或者 多头仓保证金率 == 0 或者&&空头仓保证金率 == 0
& && && && &Log(symbolDetail);//输出&&合约详细信息。
& && && && &throw &合约信息异常&;//抛出 合约 异常错误,策略停止。
& && &&&} else {
& && && && &Log(&合约&, symbolDetail.InstrumentName, &一手&, symbolDetail.VolumeMultiple, &份, 最大下单量&, symbolDetail.MaxLimitOrderVolume, &保证金率:&, _N(symbolDetail.LongMarginRatio), _N(symbolDetail.ShortMarginRatio), &交割日期&, symbolDetail.StartDelivDate);
& && && && &//显示合约一部分信息。
& && &&&}
& && &&&var obj = {//在New 函数内声明的对象,该对象在New函数最后会作为返回值返回。以下还会声明 obj对象的成员函数、成员属性。
& && && && &symbol: symbol, // 把New 函数准备构造对象 传进来的参数 symbol ,初始化给 obj 对象的成员 symbol,合约代码
& && && && &riskRatio: riskRatio,//风险比率
& && && && &atrLen: atrLen,//ATR指标长度
& && && && &enterPeriodA: enterPeriodA,// 入市 、 离市 周期
& && && && &leavePeriodA: leavePeriodA,
& && && && &enterPeriodB: enterPeriodB,
& && && && &leavePeriodB: leavePeriodB,//
& && && && &useFilter: useFilter,// 使用过滤
& && && && &multiplierN: multiplierN, // 乘数N
& && && && &multiplierS: multiplierS&&// 乘数S
& && &&&};
& && &&&obj.maxLots = maxL // 为什么不在obj 内声明、 初始化& &单品种加仓次数
& && &&&obj.lastPrice = 0; //最后价格 初始化0
& && &&&obj.symbolDetail = symbolD //合约的详细信息
& && &&&obj.status = { //obj对象的状态,&&status 也是个 对象
& && && && &symbol: symbol,//合约代码
& && && && &recordsLen: 0, //K线长度
& && && && &vm: [], //一个数组 ,用来保存 marketPosition ,openPrice , N , leavePeriod , preBreakoutFailure
& && && && &open: 0, //开仓次数
& && && && &cover: 0,//平仓次数
& && && && &st: 0, //
& && && && &marketPosition: 0, //
& && && && &lastPrice: 0, //最后价格
& && && && &holdPrice: 0, //持仓价格
& && && && &holdAmount: 0, //持仓数量
& && && && &holdProfit: 0, //持仓盈亏
& && && && &N: 0, //N值
& && && && &upLine: 0, //上线
& && && && &downLine: 0, //下线
& && && && &symbolDetail: symbolDetail, //合约的详细信息
& && && && &lastErr: &&, // 最近错误
& && && && &lastErrTime: && // 最近错误时间
& && &&&};
& && &&&obj.setLastError = function(err) {//设置 最后一次出错
& && && && &if (typeof(err) === 'undefined' || err === '') {//如果 err 参数没有传入, 火车 err 为空字符串,执行以下
& && && && && & obj.status.lastErr = &&; //给 obj.status.lastErr 赋值 空字符串
& && && && && & obj.status.lastErrTime = &&; // 同样也赋值 空字符串
& && && && && & //返回
& && && && &}
& && && && &var t = new Date(); // 获取当前时间
& && && && &obj.status.lastErr = // 把错误信息 赋值给 obj.status.lastErr
& && && && &obj.status.lastErrTime = t.toLocaleString(); // 调用了 Date 对象的方法,toLocaleString() 方法可根据本地时间把 Date 对象转换为字符串,并返回结果。
& && && && &// 赋值给 obj.status.lasrErrTime
& && &&&};
& && &&&obj.reset = function(marketPosition, openPrice, N, leavePeriod, preBreakoutFailure) { //重启函数
& && &&&& & & && && && && && &&&//& && && && && &最后一次加仓价&&, N值 , 离市周期 , 前一次失败跳出
& && && && &if (typeof(marketPosition) !== 'undefined') { //如果 marketPosition 不等于&&未定义,即 在函数调用的时候 ,全部传入参数
& && && && && & obj.marketPosition = marketP // 把 参数传进来的 marketPosition 赋值给 obj相应的 成员
& && && && && & obj.openPrice = openP // 创建obj.openPrice 参数赋值给 obj对象的相应的成员 ,最后一次加仓价
& && && && && & obj.preBreakoutFailure = preBreakoutF // 创建了 obj 对象的成员 preBreakoutFailure ,并且有 函数参数初始化, 上次突破(布尔值)
& && && && && & obj.N = N;&&// 创建obj.N, 给obj.N 赋值
& && && && && & obj.leavePeriod = leaveP // 创建了 obj对象的成员 leavePeriod 离市周期 , 函数传入参数 给其赋值
& && && && && & var pos = _bot.GetPosition(obj.symbol, marketPosition & 0 ? PD_LONG : PD_SHORT); //调用商品期货交易类库 这个模板生成的 对象_bot 的成员函数
& && && && && & // GetPosition ,传入 reset 自身对象obj 的成员symbol(这个对象管理的合约代码),根据marketPosition 选择 方向 PD_LONG 多仓, PD_SHORT 空仓,获取该
& && && && && & //合约的 一个方向的持仓信息
& && && && && & if (pos) {// 如果 返回的持仓信息 pos 不是 null ,即 有持仓信息
& && && && && && &&&obj.holdPrice = pos.P //给obj.holdPrice 赋值 持仓均价
& && && && && && &&&obj.holdAmount = pos.A //给 obj.holdAmount 赋值 持仓数量
& && && && && && &&&Log(obj.symbol, &仓位&, pos); // 在日志打印 合约代码 , 持仓信息。
& && && && && & } else {//如果 pos 是null
& && && && && && &&&throw &恢复& + obj.symbol + &的持仓状态出错, 没有找到仓位信息&;//抛出错误 , 恢复 symbol 这个合约的 时候 持仓状态出错,没有找到持仓信息。
& && && && && & }
& && && && && & Log(&恢复&, obj.symbol, &加仓次数&, obj.marketPosition, &持仓均价:&, obj.holdPrice, &持仓数量:&, obj.holdAmount, &最后一次加仓价&, obj.openPrice, &N值&, obj.N, &离市周期:&, leavePeriod, &上次突破:&, obj.preBreakoutFailure ? &失败& : &成功&);
& && && && && & //在日志打印, 合约代码 ,&&加仓次数 ,持仓均价 ,持仓数量 ,最后一次加仓价
& && && && && & obj.status.open = 1;//恢复开仓次数 1
& && && && && & obj.status.vm = [obj.marketPosition, obj.openPrice, obj.N, obj.leavePeriod, obj.preBreakoutFailure]; //给obj.status.vm 赋值
& && && && &} else {// marketPosition === 'undefined' 即 在调用该函数时 ,没有传入任何参数。
& && && && && & obj.marketPosition = 0;// 加仓次数 为0
& && && && && & obj.holdPrice = 0;// 持仓均价 0
& && && && && & obj.openPrice = 0; // 最后一次加仓价格 0
& && && && && & obj.holdAmount = 0; // 持仓量&&0
& && && && && & obj.holdProfit = 0; // 持仓 盈亏 0
& && && && && & obj.preBreakoutFailure = // test system A& &//上次突破是否失败, true即真
& && && && && & obj.N = 0; // N值&&0
& && && && && & obj.leavePeriod = leavePeriodA; // 系统A 的离市周期(界面参数) 赋值给 leavePeriod&&
& && && && &}
& && && && &obj.holdProfit = 0; // 主要用于 if条件触发
& && && && &obj.lastErr = &&; // if&&和&&else&&操作 都会执行该语句
& && && && &obj.lastErrTime = &&; // 同上
& && &&&};
& && &&&obj.Status = function() {// 更新obj 对象的 Status 属性
& && && && &obj.status.N = obj.N; // 用obj对象相应的属性去赋值 (status属性中相应的 成员) N值
& && && && &obj.status.marketPosition = obj.marketP //加仓次数 (也是持仓方向 +&&-&&代表方向, 数值代表 操作的次数,一个方向 直到 平仓)
& && && && &obj.status.holdPrice = obj.holdP
& && && && &obj.status.holdAmount = obj.holdA
& && && && &obj.status.lastPrice = obj.lastP
& && && && &if (obj.lastPrice & 0 && obj.holdAmount & 0 && obj.marketPosition !== 0) {
& && && && && & obj.status.holdProfit = _N((obj.lastPrice - obj.holdPrice) * obj.holdAmount * symbolDetail.VolumeMultiple, 4) * (obj.marketPosition & 0 ? 1 : -1);
& && && && &} else {
& && && && && & obj.status.holdProfit = 0;
& && && && &}
& && && && &return obj.
& && &&&};
& && &&&obj.Poll = function() {
& && && && &var suffix = WXPush ? '@' : '';
& && && && &// switch symbol
& && && && &_C(exchange.SetContractType, obj.symbol);
& && && && &var records = exchange.GetRecords();
& && && && &if (!records) {
& && && && && & obj.setLastError(&获取K线失败&);
& && && && && &
& && && && &}
& && && && &obj.status.recordsLen = records.
& && && && &if (records.length & obj.atrLen) {
& && && && && & obj.setLastError(&K线长度小于 & + obj.atrLen);
& && && && && &
& && && && &}
& && && && &var opCode = 0; // 0: IDLE, 1: LONG, 2: SHORT, 3: CoverALL
& && && && &var lastPrice = records[records.length - 1].C
& && && && &obj.lastPrice = lastP
& && && && &if (obj.marketPosition === 0) {
& && && && && & obj.status.upLine = 0;
& && && && && & obj.status.downLine = 0;
& && && && && & for (var i = 0; i & 2; i++) {
& && && && && && &&&if (i == 0 && obj.useFilter && !obj.preBreakoutFailure) {
& && && && && && && && &
& && && && && && &&&}
& && && && && && &&&var enterPeriod = i == 0 ? obj.enterPeriodA : obj.enterPeriodB;
& && && && && && &&&if (records.length & (enterPeriod + 1)) {
& && && && && && && && &
& && && && && && &&&}
& && && && && && &&&var highest = TA.Highest(records, enterPeriod, 'High');
& && && && && && &&&var lowest = TA.Lowest(records, enterPeriod, 'Low');
& && && && && && &&&obj.status.upLine = obj.status.upLine == 0 ? highest : Math.min(obj.status.upLine, highest);
& && && && && && &&&obj.status.downLine = obj.status.downLine == 0 ? lowest : Math.max(obj.status.downLine, lowest);
& && && && && && &&&if (lastPrice & highest) {
& && && && && && && && &opCode = 1;
& && && && && && &&&} else if (lastPrice & lowest) {
& && && && && && && && &opCode = 2;
& && && && && && &&&}
& && && && && && &&&obj.leavePeriod = (enterPeriod == obj.enterPeriodA) ? obj.leavePeriodA : obj.leavePeriodB;
& && && && && & }
& && && && &} else {
& && && && && & var spread = obj.marketPosition & 0 ? (obj.openPrice - lastPrice) : (lastPrice - obj.openPrice);
& && && && && & if (spread & (obj.N * 2)) {
& && && && && && &&&opCode = 3;
& && && && && && &&&obj.preBreakoutFailure =
& && && && && && &&&Log(obj.symbolDetail.InstrumentName, &止损平仓&, suffix);
& && && && && && &&&obj.status.st++;
& && && && && & } else if (-spread & (0.5 * obj.N)) {
& && && && && && &&&opCode = obj.marketPosition & 0 ? 1 : 2;
& && && && && & } else if (records.length & obj.leavePeriod) {
& && && && && && &&&if ((obj.marketPosition & 0 && lastPrice & TA.Lowest(records, obj.leavePeriod, 'Low')) ||
& && && && && && && && &(obj.marketPosition & 0 && lastPrice & TA.Highest(records, obj.leavePeriod, 'High'))) {
& && && && && && && && &obj.preBreakoutFailure =
& && && && && && && && &Log(obj.symbolDetail.InstrumentName, &正常平仓&, suffix);
& && && && && && && && &opCode = 3;
& && && && && && && && &obj.status.cover++;
& && && && && && &&&}
& && && && && & }
& && && && &}
& && && && &if (opCode == 0) {
& && && && && &
& && && && &}
& && && && &if (opCode == 3) {
& && && && && & _bot.Cover(obj.symbol);
& && && && && & obj.reset();
& && && && && & _G(obj.symbol, null);
& && && && && &
& && && && &}
& && && && &// Open
& && && && &if (Math.abs(obj.marketPosition) &= obj.maxLots) {
& && && && && & obj.setLastError(&禁止开仓, 超过最大持仓 & + obj.maxLots);
& && && && && &
& && && && &}
& && && && &var atrs = TA.ATR(records, atrLen);
& && && && &var N = _N(atrs[atrs.length - 1], 4);
& && && && &var account = _bot.GetAccount();
& && && && &var unit = parseInt(account.Balance * (obj.riskRatio / 100) / N / obj.symbolDetail.VolumeMultiple);
& && && && &var canOpen = parseInt(account.Balance / (opCode == 1 ? obj.symbolDetail.LongMarginRatio : obj.symbolDetail.ShortMarginRatio) / (lastPrice * 1.2) / obj.symbolDetail.VolumeMultiple);
& && && && &unit = Math.min(unit, canOpen);
& && && && &if (unit & obj.symbolDetail.MinLimitOrderVolume) {
& && && && && & obj.setLastError(&可开 & + unit + & 手 过小无法开仓&);
& && && && && &
& && && && &}复制代码
var ret =
if (opCode == 1) {
ret = _bot.OpenLong(obj.symbol, unit);
} else {
ret = _bot.OpenShort(obj.symbol, unit);
}
if (!ret) {
obj.setLastError(&下单失败&);
Log(obj.symbolDetail.InstrumentName, obj.marketPosition == 0 ? &开仓& : &加仓&, &离市周期&, obj.leavePeriod, suffix);
obj.N = N;
obj.openPrice = ret.
obj.holdPrice = ret.position.P
if (obj.marketPosition == 0) {
obj.status.open++;
}
obj.holdAmount = ret.position.A
obj.marketPosition += opCode == 1 ? 1 : -1;
obj.status.vm = [obj.marketPosition, obj.openPrice, N, obj.leavePeriod, obj.preBreakoutFailure];
_G(obj.symbol, obj.status.vm);
};
var vm =
if (RMode === 0) {
vm = _G(obj.symbol);
} else {
vm = JSON.parse(VMStatus)[obj.symbol];
}
if (vm) {
Log(&准备恢复进度, 当前合约状态为&, vm);
obj.reset(vm[0], vm[1], vm[2], vm[3], vm[4]);
} else {
if (needRestore) {
throw &没有找到& + obj.symbol + &的进度恢复信息&;
}
obj.reset();
}
function onexit() {
Log(&已退出策略...&);
}
function main() {
if (exchange.GetName().indexOf('CTP') == -1) {
throw &只支持商品期货CTP&;
}
SetErrorFilter(&login|ready|流控|连接失败|初始|Timeout&);
var mode = exchange.IO(&mode&, 0);
if (typeof(mode) !== 'number') {
throw &切换模式失败, 请更新到最新托管者!&;
}
while (!exchange.IO(&status&)) {
Sleep(3000);
LogStatus(&正在等待与交易服务器连接, & + new Date());
}
var positions = _C(exchange.GetPosition);
if (positions.length & 0) {
Log(&检测到当前持有仓位, 系统将开始尝试恢复进度...&);
}
Log(&风险系数:&, RiskRatio, &N值周期:&, ATRLength, &系统1: 入市周期&, EnterPeriodA, &离市周期&, LeavePeriodA, &系统二: 入市周期&, EnterPeriodB, &离市周期&, LeavePeriodB, &加仓系数:&, IncSpace, &止损系数:&, StopLossRatio, &单品种最多开仓:&, MaxLots, &次&);
var tts = [];
var filter = [];
var arr = Instruments.split(',');
for (var i = 0; i & arr. i++) {
var symbol = arr[i].replace(/^\s+/g, &&).replace(/\s+$/g, &&);
if (typeof(filter[symbol]) !== 'undefined') {
Log(symbol, &已经存在, 系统已自动过滤&);
}
filter[symbol] =
var hasPosition =
for (var j = 0; j & positions. j++) {
if (positions[j].ContractType == symbol) {
hasPosition =
}
}
var obj = TTManager.New(hasPosition, symbol, RiskRatio, ATRLength, EnterPeriodA, LeavePeriodA, EnterPeriodB, LeavePeriodB, UseEnterFilter, IncSpace, StopLossRatio, MaxLots);
tts.push(obj);
}
var initAccount = _bot.GetAccount();
Log(&资产信息&, initAccount);
var preTotalHold = -1;
var lastStatus = '';
while (true) {
while (!exchange.IO(&status&)) {
Sleep(3000);
LogStatus(&正在等待与交易服务器连接, & + new Date() + &\n& + lastStatus);
}
var tblStatus = {
type: &table&,
title: &持仓信息&,
cols: [&合约名称&, &持仓方向&, &持仓均价&, &持仓数量&, &持仓盈亏&, &加仓次数&, &开仓次数&, &止损次数&, &成功次数&, &当前价格&, &N&],
rows: []
};
var tblMarket = {
type: &table&,
title: &数据信息&,
cols: [&合约名称&, &合约乘数&, &保证金率&, &柱线长度&, &上线&, &下线&, &异常描述&, &发生时间&],
rows: []
};
var totalHold = 0;
var vmStatus = {};
var ts = new Date().getTime();
for (var i = 0; i & tts. i++) {
tts[i].Poll();
var d = tts[i].Status();
if (d.holdAmount & 0) {
vmStatus[d.symbol] = d.
}
tblStatus.rows.push([d.symbolDetail.InstrumentName, d.holdAmount == 0 ? '--' : (d.marketPosition & 0 ? '多' : '空'), d.holdPrice, d.holdAmount, d.holdProfit, Math.abs(d.marketPosition), d.open, d.st, d.cover, d.lastPrice, d.N]);
tblMarket.rows.push([d.symbolDetail.InstrumentName, d.symbolDetail.VolumeMultiple, _N(d.symbolDetail.LongMarginRatio, 4) + '/' + _N(d.symbolDetail.ShortMarginRatio, 4), d.recordsLen, d.upLine, d.downLine, d.lastErr, d.lastErrTime]);
totalHold += Math.abs(d.holdAmount);
}
var now = new Date();
var elapsed = now.getTime() -
var tblAssets = _bot.GetAccount(true);
var nowAccount = _bot.Account();
if (tblAssets.rows.length & 10) {
// replace AccountId
tblAssets.rows[0] = [&InitAccount&, &初始资产&, initAccount];
} else {
tblAssets.rows.unshift([&NowAccount&, &当前可用&, nowAccount], [&InitAccount&, &初始资产&, initAccount]);
}
lastStatus = '`' + JSON.stringify([tblStatus, tblMarket, tblAssets]) + '`\n轮询耗时: ' + elapsed + ' 毫秒, 当前时间: ' + now.toLocaleString();
if (totalHold & 0) {
lastStatus += &\n手动恢复字符串: & + JSON.stringify(vmStatus);
}
LogStatus(lastStatus);
if (preTotalHold & 0 && totalHold == 0) {
LogProfit(nowAccount.Balance - initAccount.Balance);
}
preTotalHold = totalH
Sleep(LoopInterval * 1000);
}
}复制代码
总评分:&经验 + 22&
论坛币 + 22&
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
论坛法律顾问:王进律师

我要回帖

更多关于 期货品种的选择 的文章

 

随机推荐