Iquant空中比特币怎么买入入

阅读原文:
京东金融官方资讯QQ群: 有什么想咨询的都可以来询问我们
近日,比特币交易所Coinbase正与潜在投资者就新一轮融资展开商谈,寻求逾1亿美元的股权融资,如此这家机构最新估值将超过10亿美元,成为全球首家比特币投资领域的独角兽企业。
这背后,折射出当前比特币投资持续火热的趋势。
过去一个月,比特币价格上涨120%,一度触及历史新高2790美元。更令市场意外的是,此次推动比特币离奇大涨的幕后推手,主要是日本渡边太太与韩国散户投资者。
多位国内比特币交易平台负责人告诉21世纪经济报道记者,当前日韩两国比特币交易量占据全球50%-60%,足以左右全球比特币价格走势。
不过,比特币的疯狂上涨并未持续多久,5月27-28日比特币骤跌约900美元,跌幅超过30%,令不少追涨的日韩散户投资者陷入亏损窘境。截至6月5日,比特币徘徊在2445.20美元附近。
日韩散户追捧引发暴涨
近日,多位国内比特币平台负责人骤然发现,过去两个月全球比特币的交易重心,正从中国迅速转向日韩两国。
火币网最新研究数据显示,在全球各国比特币交易成交量排名中:
日本成交量占比逾46%;
其次是美国,占比超过26%;
中国排第三,交易量降至10%.
此前,中国比特币交易量占比一度超过80%。
在业内人士看来,日本比特币成交量骤增的最大驱动力,是4月日本宣布承认比特币属于法定支付方式,推动比特币在当地日常生活的支付应用增加,提振当地比特币需求,让渡边太太们嗅到其中的买涨获利机会。
不少日本比特币交易机构顺势推波助澜。他们给渡边太太们算了一笔账,未来10年全球可流通的比特币数量仅仅从1630万枚提高至1700万枚,随着越来越多国家承认比特币作为合法支付方式,其需求增幅远远超过供应量,决定了比特币拥有巨大涨幅空间。
21世纪经济报道记者多方了解到,不少日本渡边太太因此纷纷采取杠杆投资方式买涨比特币,即采取50-100倍杠杆投资比特币,不过她们基本都会当天结清交易,不会持币过夜,导致日本出现比特币量价持续大涨的现象。
在日本比特币投资热驱动下,韩国也随之加入。不少韩国投资者纷纷押注比特币价格上涨,填补退休金收益不足的缺口。
“在5月25日比特币创历史新高当天,一些韩国散户投资者甚至报出4495美元,以两倍溢价抢购比特币,而当天美国市场比特币最高价格只有2790美元。”一家国内比特币交易平台负责人向21世纪经济报道记者透露。
日韩散户投资者之所以追捧比特币,除了看好比特币作为合法支付方式所衍生的巨大需求,还打着等待接盘者出现的算盘。
在日韩投资者看来,目前市场存在三大接盘者:
一是美国Winklevoss等机构正酝酿发行比特币ETF基金产品;
二是中国投资者跟风买盘;
三是俄罗斯等国家可能跟进承认比特币成为合法支付方式,引发当地比特币投资热潮。
“目前而言,日韩投资者恐怕要失望了。”上述国内比特币交易平台负责人透露,由于比特币缺乏金融监管,近期美国金融监管部门不大会允许机构发行比特币ETF基金产品。
“更重要的是,尽管中国央行相关部门尚未出台比特币交易平台管理办法,但可以肯定的是,金融监管部门不会允许国内投资者杠杆投资比特币。”上述国内比特币交易平台负责人指出。
此前相关部门向国内3家提供比特币杠杆投融资服务的交易平台各罚款500万元,足以彰显相关部门规范比特币合规投资操作的决心。
此外,尽管中国央行近期悄然放开了国内比特币交易平台的提币权限,但由于反洗钱监管要求,投资者必须通过网银手动操作支付款项提币,不得通过第三方支付机构渠道,整个提币流程较为缓慢,某种程度也降低了国内散户投资者的投资兴趣。
在他看来,算盘的落空,导致5月底比特币短短两天出现30%跌幅,上演过山车行情。
“其实,比特币存在的诸多投资交易保管漏洞,也在这场暴涨行情中逐步体现。”上述国内比特币交易平台负责人透露,不少日韩散户投资者在手机端买入比特币,没有将比特币委托给当地比特币交易平台保管,一旦比特币交易App出现故障打不开或手机丢失,这些投资者就再也找不到比特币。
与此同时,日韩两国的比特币投资欺诈行为日益增多,令不少投资者受损,无形间也令这两个国家比特币炒作潮难以持久。
同时,日韩国家金融监管部门也开始加大比特币监管力度。韩国金融服务委员会(FSC)近日表示,已成立特别小组专门研究虚拟货币监管。日本金融厅也要求当地比特币交易所向投资者对价格剧烈波动风险做出充分解释。
“不过,不少日本渡边太太认为这反而是抄底机会,纷纷逢低抢购比特币,令比特币在2400美元附近企稳反弹。”上述国内比特币交易平台负责人透露。这也令市场意料不到。
套利机构的狙击算盘
在业内人士看来,引发比特币上演过山车行情的幕后推手,似乎另有其人。
“在日韩散户投资者疯狂追捧比特币同时,一批欧美金融机构纷纷入场赚取利差收益。”上述国内比特币交易平台负责人透露,尤其是5月底韩国比特币交易价格比美国市场一度高出约2000美元,迅速激发他们的套利热情。
→ 这些欧美金融机构只需先花2000多美元,在美国比特币交易所买入一个比特币。
→ 然后将它拿到韩国比特币交易所卖掉,就可以收入等值近4000美元的韩元。
→ 只需换汇成美元就能到美国市场买近两个比特币。
→ 再拿到韩国比特币交易所卖掉,如此循环操作赚取不菲的收益。
美国加密货币对冲基金Polychain Capital首席执行官Olaf Carlson-Wee告诉21世纪经济报道记者,近期不少套利机构都采取类似操作,但成功者并不多。究其原因,比特币网络每秒只允许发生约7笔交易,且硬分叉等技术难题往往导致交易迟滞,令这种套利策略执行效率并不高。
但Olaf Carlson-Wee强调,即便套利交易执行难度不小,但由于比特币交易流动性不高,少量套利交易的成功执行,也足以导致比特币价格出现一定幅度下跌,扭转市场追捧比特币的信心。
在他看来,更多套利机构将主战场放在不同数字货币之间的价差套利,尤其是这些机构通过自身投资模型发现比特币相比以太币(Ether)等其他数字货币存在估值偏高现象,就会抛售比特币,买入以太币套取价差。
“当前数字货币的交易流动性都不高,一旦大笔机构资金参与这种价差套利投资,两者价差就会迅速抹平,带动比特币价格反转下跌。”
事实上,比特币上演过山车行情的深层次原因,还是它存在不少监管盲点,导致不少套利机构可以利用不同国家的监管差异,以及“人为操纵”不同数字货币的供需关系,获取大量套利收益。
“何况,比特币作为全新的数字货币,依然存在很多发展不确定性。当一种新技术突然出现取代了区块链或比特币,那么它的价值将瞬间一无所有。这也是每当比特币暴涨时,就有套利机构敢于沽空套利的最大原因之一。”
阅读原文:
比特币交易平台排名
美国众议院贸易、制造业和商业小组委员会于3月17号就当今的虚拟货币以及区域块的技术特点以及其监管立法方面进行了探讨。
与会的专家小组包括了比特币银行Circle 首席 John Beccia;比特币...
疯狂暴涨曾破 2 万美元的比特币,到底是怎么一回事?
(点击上方公众号,可快速关注)2017 年对比特币来说,是极为疯狂的一年。年初,一枚比特币的价格不到 1,000 美元。在 11 月价格持续突破 8,000、9,000 和 10,000 美元大关。在...
比特币的大问题:2020年,能耗将超过目前全球总用电
比特币价格一飞冲天。可是“挖矿”的代价也日益高昂。根据最新的报告,挖掘比特币消耗的电力现在已经超过了塞尔维亚整个国家的用电。更有测算预计,到2019年中时比特币P2P网络的耗电将超过美国全国用电量,到...
比特币一天暴涨74%破900美元“中国土豪”现身炒币
对许多人来说,第一次知道比特币这个神秘玩意。今年四月份当时的比特币从最高的266美元直线下坠,一天之内跌去60%。而11月19日,比特币冲破900美元,一天狂涨74%,这个神秘的幽灵货币瞬间成了金融市...
2017 年对比特币来说,是极为疯狂的一年。年初,一枚比特币的价格不到 1,000 美元。在 11 月价格持续突破 8,000、9,000 和 10,000 美元大关。
在 12 月 17 日,...
IT派 - {技术青年圈}持续关注互联网、大数据、人工智能领域关注往期精彩回顾
重大改变!Excel即将接入Python!办公软件也要革命2017年大数据领域薪资有多高?上新 | 五一劳动节样式欣赏...
BTC是一种抽血币,大家看到了它抽血的表面现象,但往往不理解它抽血的内在机理。大量的资金进入市场,可能会面向1000种币,明明绝大部分新韭菜资金根本不碰BTC,但为什么最后这些资金会被BTC持有者抽走...
(本文作于2016年1月)
Bitcoin 再次突破了1000美元。上一次是在2013年底到2014年间。
要说没有赚钱也是假的,作为比特币的早期用户、投资者甚至是所谓创业者,我从比特币上...
没有更多推荐了,独家专访Iquant CEO金良及团队用生态的视角打造世界级区块链资产交易_比特币_金色财经
独家专访Iquant CEO金良及团队用生态的视角打造世界级区块链资产交易
金良:全球数字资产交易平台iquant CEO,资深金融领域专家,5年以上世界500强高管工作经验,对全球资产配置有深入研究和行业经验,擅长大数据挖掘分析,对数字货币交易有丰富投资经验。
  数字资产的交易平台,在整个区块链产业链中处于上游的位置,未来的交易所不仅仅提供数字货币撮合交易,还会在投融资、投资顾问、币改、链改、量化等进行布局,通过融合行业内的各项资源,进行资源的聚合和输出,进一步促进区块链整体发展。
  在这个产业上游游走的交易平台众多,为什么iquant(i网)显得那么“与众不同”?从团队的基因来说,iquant团队来自于全球知名金融机构和顶级量化团队,平台和美国Collective2合作,在金融和量化交易层面具有丰富的理论知识和实操经验,对于数字货币的认知也达到一定的高度。CTO WALKLE,早期区块链技术探索、研发者,拥有资深区块链研究开发经验,深圳大学客座教授,collective2工程师,10年数据挖掘及软件架构、开发经验,长期海外工作背景。COO Tony ,工商企管专业,2008年开始创业,对全球市场投资、量化模型投资及数字货币投资有丰富经验。有多年上市公司高管工作经验,在市场调研、渠道建设、商务合作、商业模式方面有丰富的实战经验。同时是区块链行业坚定的支持者、研究者。
  从行业的推动因素来说,iquant平台首次提出“超级矿工”计划。这个计划旨在打造全球化的去角色、重分工的数字资产平台,真正给予矿工尊重与高度认可。从产业的纵向服务链来说,iquant将提供全球化的智能投资顾问服务,为企业机构和项目提供全球化视野的服务。
 8月12日,iquant推出全球公测之后,CMC排名暂列第一
  由iquant团队倾力打造的数字资产交易挖矿正在布局中,并首次提出“超级矿工”计划,旨在建立社区自治型数字资产平台。之所以取得如此骄人的战绩,源自于战略上,广泛布局区块链全产业链,包括基金、链改实验室、衍生品研发等,利用团队全球知名金融机构和顶级量化的背景,打造世界级的区块链资产交易平台,为全球用户提供更安全、更快捷的区块链资产兑换服务。
  产品上,目前已经提供PC端和APP端,安全性和便捷性是最大的优势。近期的交易挖矿,iquant充分整合客户的需求而定制开发,是真正关心用户需求的平台。市场上,通过娴熟的市场运作和金融运作,联合各大区块链同行,一起打造区块链生态,业界的认可度非常高。运营上,通过精准的客户定位和平台运营,提出“超级矿工”计划,建立高质量的社区,也给客户提供高质量的服务。
iquant平台介绍
  谈到未来的发展规划,iquant CEO金良说到,“iquant的信仰,就像荷花,出淤泥而不染,不忘初心,坚持做价值的创造者和输出者。从设立的那一天起,一直为打造成为世界级的区块链资产交易平台,为全球用户提供更安全、更快捷的区块链资产兑换服务而努力。”
  未来iqunat平台将会利用金融背景和技术优势,在衍生品、基金、链改、孵化器等进行布局,同时联合其他区块链公司和PR团队,例如和GLAB(全球区块链项目节选赛)来进行区块链全产业链的布局,建立iquant区块链生态体系,为区块链行业的发展贡献iquant的力量。
文章作者: i量化链
声明:本文由入驻金色财经的作者撰写,观点仅代表作者本人,绝不代表金色财经赞同其观点或证实其描述。
微信公众号
区块链 未来属于WNG权益证明!
京ICP备号Copyright (C) 金色财经 版权所有
您投送的稿件违反了金色财经的投稿协议,现已关闭您的投稿功能,如有异议请发邮件至进行申诉。震撼来袭 | 天空币半月内,又登陆一家新交易所(iquant)
摘要:天空币被预测,未来极有可能超过比特币,2018年的涨势更是一路高歌。
继1月4日登陆第3个交易所后,半个月时间内,再次登陆了一家新交易所——iquant交易所。
目前为止,天空币已经登陆的交易所包括:新西兰C网、c2cx.com、COIN918——澳洲数字资产交易平台、iquant交易所。
向往财务自由的你,来注册持有吧。
具体了解iquant交易所的情况,记得登陆www.5iquant.org。
目前的优惠政策是,注册就送SKY。
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
今日搜狐热点量化对冲网格模型 基于BotVS 平台 的 比特币 OKCoin期货 交易策略 - 简书
量化对冲网格模型 基于BotVS 平台 的 比特币 OKCoin期货 交易策略
OKCoin期货跨期对冲策略,季度、当周、次周
1、 季度-当周
2、 季度-次周
3、 当周-次周
4、在周五交割前5分钟会自动 平仓, 锁定15分钟 后再正常运行。
作者本人呢 是菜鸟程序猿一个, 平时没什么爱好,就喜欢写代码。最近一年在BotVS上学到了不少新知识, 模仿Zero 大神的商品期货对冲网格策略,写了一个 电子货币 (BTC期货) 的对冲网格策略。回测一下还行(当然回测只是最初步的检测,不代表任何结论!)
以下代码不能直接运行,需要配置参数(在BotVS平台)。
代码连接:
var checkTime = 0;
var residualTime = 0;
var checkPreTime = 0;
var JGDate = [];
// 交割模拟。 ["BTC1129", "BTC1229", "BTC0316"];
var JGDateIndex = 0;
// 模拟交割索引。
var JGHoursCorrect = 8;
// 检测交割剩余小时,在实盘中需要修正 8小时。 模拟时该值设置为0
var A = 1;
var B = 2;
var PRE = 3;
var PLUS = 4;
var MINUS = 5;
var FREE = 6;
function init(){
if(istry){
JGHoursCorrect = 0;
// 模拟中 该值修改为0
Log("启用模拟 交割,初始化交割日期列表。");
UpdateJGDate();
function UpdateJGDate(){
// 循环31次 遍历出 当前月份的所有 星期5的 日期, 取时间戳, 对比当前时间戳,小于当前的 丢弃,大于当前的第一个即是
// 在用时间戳恢复日期,拿到 字符串
var array_JG_stamp = [];
var date = new Date();
var nowStamp = date.getTime();
var nowMonth = date.getMonth();
var nextJG_Stamp = 0;
date.setHours(16);
date.setMinutes(0);
date.setSeconds(0);
for(var i = 1 ; i &= 31; i++){
date.setDate(i);
var EveryDay = date.getDay();
if(EveryDay === 5 && nowMonth == date.getMonth()){
var fridayStamp = date.getTime();
array_JG_stamp.push(fridayStamp);
for(var j = 0 ; j & array_JG_stamp. j++){
if(nowStamp &= array_JG_stamp[j]){
nextJG_Stamp = array_JG_stamp[j];
if(j == array_JG_stamp.length - 1){
nextJG_Stamp = array_JG_stamp[j] + 1000 * 7 * 24 * 60 * 60;
array_JG_stamp = [];
for(var n = 1 ; n &= 100; n++){
// 生成 100 个 模拟交割日期。
if(n == 1){
array_JG_stamp.push(nextJG_Stamp);
nextJG_Stamp += 1000 * 7 * 24 * 60 * 60;
array_JG_stamp.push(nextJG_Stamp);
var date2 = new Date();
for(var m = 0 ; m & array_JG_stamp. m++){
date2.setTime(array_JG_stamp[m]);
var strMonth = date2.getMonth() + 1;
var strDate = date2.getDate();
if(strMonth & 10){
strMonth = '0' + strM
if(strDate & 10){
strDate = '0' + strD
JGDate.push("BTC" + strMonth + strDate);
Log("模拟生成的交割日期:", JGDate);
function CheckDelivery(nowTime, Symbol, task) {
var contractInfo =
if(checkTime &= 0){
var contractName = "";
var ContractIndex = 0;
if(Symbol === "this_week"){
ContractIndex = 0;
}else if(Symbol === "next_week"){
ContractIndex = 1;
}else if(Symbol === "quarter"){
ContractIndex = 2;
if(istry === true){
// 判断是不是 模拟测试
contractName = JGDate[JGDateIndex];
// 模拟测试 交割日期
JGDateIndex++;
} catch(e){
Log("回测模式,更新交割日期错误", e);
JGDateIndex--;
while (contractName == "") {
//var contractInfo = HttpQuery("https://www.okcoin.com/api/v1/future_hold_amount.do?symbol=btc_usd&contract_type=this_week"); //只是检测this_week ,避免重复调用提高效率
switch(ContractIndex){
case 0: contractInfo = HttpQuery("https://www.okcoin.com/api/v1/future_hold_amount.do?symbol=btc_usd&contract_type=this_week");
case 1: contractInfo = HttpQuery("https://www.okcoin.com/api/v1/future_hold_amount.do?symbol=btc_usd&contract_type=next_week");
case 2: contractInfo = HttpQuery("https://www.okcoin.com/api/v1/future_hold_amount.do?symbol=btc_usd&contract_type=quarter");
default: Log("contractInfo:", contractInfo);
//throw "switch NumContractType Error!";
//根据 contractType 类型 选择读取合约交割日期
if (!contractInfo || contractInfo.length === 0) {
Sleep(100);
contractName = (JSON.parse(contractInfo))[0].contract_
} catch (e) {
Log("CheckDelivery Error",contractInfo, e);
var nowDateTime = new Date();
contractName = contractName.split("BTC")[1]; //抽取BTC后的字符串 重新赋值
var strMonth = contractName[0] + contractName[1];
var strDay = contractName[2] + contractName[3];
var strYear = nowDateTime.getFullYear() + ""; //获取 年份字符串
// 处理跨年问题
var nowMonth = nowDateTime.getMonth(); // 获取月份
if(strMonth & nowMonth){
strYear = (strYear - 0) + 1;
strYear = strYear + "";
var strDate = strYear + '-' + strMonth + '-' + strDay + ' ' + "16:00:00";
var deliveryTime = (new Date(strDate)).getTime();
// + 16 * 60 * 60 * 1000;
nowTime = nowDateTime.getTime();
residualTime = (deliveryTime - nowTime) / 1000 / 60 / 60 - JGHoursC //单位是小时
checkTime = (deliveryTime - nowTime) - JGHoursCorrect * 1000 * 60 * 60;
//还差多少毫秒交割
checkPreTime = nowT
//记录开始的时间
Log("合约", Symbol, "交割日期获取:", strDate);
checkTime -= nowTime - checkPreT
//减去消耗的时间
checkPreTime = nowT
residualTime = checkTime / 1000 / 60 / 60;
// 计算距离交割多少小时
if(residualTime & 24){
//交割小于24小时
MSG_String = "  " + Symbol + " 交割时间剩余:" + residualTime + "小时!!#FF0000";
if((checkTime / 1000 / 60) &= 5 && task.isFrozen == false){
// 每次交割前5分钟 锁定。
Log("距离交割剩余5分钟,平掉所有仓位!#FF0000");
for(var index = 0; index & task.dic. index++){
if(task.dic[index].hold & 0){
// 平空A 平多B
task.action = [index, "closesell", "closebuy", task.dic[index].hold];
Log(JSON.stringify(task.action));
Hedge_Open_Cover(task);
$.PlotFlag(nowTime, "C", "closesell-closebuy", "circlepin");
}else if(task.dic[index].hold & 0){
// 平多A 平空B
task.action = [index, "closebuy", "closesell", task.dic[index].hold];
Log(JSON.stringify(task.action));
Hedge_Open_Cover(task);
$.PlotFlag(nowTime, "C", "closebuy-closesell", "circlepin");
task.nowAccount = _C(task.e.GetAccount);
var Positions = _C(task.e.GetPosition);
UpdatePosition(task, Positions);
Log("全部仓位已平,检查持仓:", Positions, "程序冻结15分钟!#FF0000");
task.isFrozen =
task.FrozenStartTime = new Date().getTime();
MSG_String = "  " + Symbol + " 交割时间剩余:" + residualTime + "小时!!";
return _N(residualTime, 3);
function OpenPriceToActual(Price, Piece){
var OnePieceEquivalentCoin = 100 / P
var OpenFee = Piece * (OnePieceEquivalentCoin) * (0.03 * 0.01);
var Actual = Price + (OpenFee * Price) / (OnePieceEquivalentCoin * Piece);
//Log("Actual:", Actual, "OpenFee:", OpenFee, "OnePieceEquivalentCoin:", OnePieceEquivalentCoin, "保证金:", OpenFee / 0.01 / 0.03 / 10); // 测试
//var Actual = Price + ((0.03 * 0.01) * Price);
function CreateHedgeList(Begin, End, Size, Step, AmountOfPoint, SymbolA, SymbolB){
// "(this_week&quarter)100:90:1;110:100:1;120:110:1;130:120:1;140:130:1;150:140:1;160:150:1;170:160:1;180:170:1;190:180:1";
if((SymbolA !== "this_week" && SymbolA !== "next_week" && SymbolA !== "quarter") || (SymbolB !== "this_week" && SymbolB !== "next_week" && SymbolB !== "quarter")){
throw "合约代码错误: SymbolA " + SymbolA + " SymbolB " + SymbolB;
var BodyString = "";
var HeadString = '(' + SymbolA + '&' + SymbolB + ')';
for(var i = B i &= E i += Step){
if(i + Step & End){
BodyString += (i + ':') + (i - Size) + (':' + AmountOfPoint);
BodyString += (i + ':') + (i - Size) + (':' + AmountOfPoint) + ';';
var HL = HeadString + BodyS
Log("按参数生成对冲列表:", HL);
return HL;
function UpdatePosition(task, Positions, onlyAorBorPRE){
if(Positions.length & 2){
Log(Positions, "Positions 长度大于2!#FF0000");
throw "同类型合约不能同时持有多仓空仓。";
if(onlyAorBorPRE == PRE){
task.Pre_APositions = task.AP
task.Pre_BPositions = task.BP
for(var i = 0; i & Positions. i++){
if(Positions[i].ContractType == task.symbolA && onlyAorBorPRE !== B){
task.APositions = Positions[i];
if(Positions[i].ContractType == task.symbolB && onlyAorBorPRE !== A){
task.BPositions = Positions[i];
if(Positions.length == 0){
if(onlyAorBorPRE !== B){
task.APositions = {MarginLevel: 0, Amount: 0, FrozenAmount: 0, Price: 0, Profit: 0, Type: 0, ContractType: ""};
if(onlyAorBorPRE !== A){
task.BPositions = {MarginLevel: 0, Amount: 0, FrozenAmount: 0, Price: 0, Profit: 0, Type: 0, ContractType: ""};
if(onlyAorBorPRE !== A && onlyAorBorPRE !== B){
task.APositions = {MarginLevel: 0, Amount: 0, FrozenAmount: 0, Price: 0, Profit: 0, Type: 0, ContractType: ""};
task.BPositions = {MarginLevel: 0, Amount: 0, FrozenAmount: 0, Price: 0, Profit: 0, Type: 0, ContractType: ""};
function DealAction(task, AorB, amount){
if(amount &= 0){
throw "错误: DealAction 的 amount 参数为:" +
if(AorB == A){
task.e.SetContractType(task.symbolA);
task.e.SetDirection(task.action[1]);
if(task.action[1] == "buy" || task.action[1] == "closesell"){
idA = task.e.Buy(-1, typeof(amount) == "undefined" ? Math.abs(task.action[3]) : amount, task.symbolA);
}else if(task.action[1] == "sell" || task.action[1] == "closebuy"){
idA = task.e.Sell(-1, typeof(amount) == "undefined" ? Math.abs(task.action[3]) : amount, task.symbolA);
if(AorB == B){
task.e.SetContractType(task.symbolB);
task.e.SetDirection(task.action[2]);
if(task.action[2] == "buy" || task.action[2] == "closesell"){
idB = task.e.Buy(-1, typeof(amount) == "undefined" ? Math.abs(task.action[3]) : amount, task.symbolB);
}else if(task.action[2] == "sell" || task.action[2] == "closebuy"){
idB = task.e.Sell(-1, typeof(amount) == "undefined" ? Math.abs(task.action[3]) : amount, task.symbolB);
function DealActionLimit(task, AorB, Piece, isAgain){
var tradeInfo
var Price = 0;
var Piece = Math.abs(Piece);
if(isAgain){
while(true){
task.e.SetContractType(task.symbolA);
var Adepth = task.e.GetDepth();
task.e.SetContractType(task.symbolB);
var Bdepth = task.e.GetDepth();
if(!Adepth || !Bdepth || Adepth.Asks.length === 0 || Adepth.Bids.length === 0 || Bdepth.Asks.length === 0 || Bdepth.Bids.length === 0){
//Log("获取深度信息异常!", Adepth, Bdepth);
Sleep(Interval);
task.Adepth = A
task.Bdepth = B
task.Adiff = _N(Adepth.Bids[0].Price - Bdepth.Asks[0].Price);
task.Bdiff = _N(Adepth.Asks[0].Price - Bdepth.Bids[0].Price);
task.e.SetContractType(AorB == A ? task.symbolA : task.symbolB);
task.e.SetDirection(task.action[AorB]);
if(task.action[AorB] == "buy"){
Price = AorB == A ? task.Adepth.Asks[0].Price : task.Bdepth.Asks[0].P
tradeInfo = task.P.OpenLong(AorB == A ? task.symbolA : task.symbolB, Piece, Price);
}else if(task.action[AorB] == "sell"){
Price = AorB == A ? task.Adepth.Bids[0].Price : task.Bdepth.Bids[0].P
tradeInfo = task.P.OpenShort(AorB == A ? task.symbolA : task.symbolB, Piece, Price);
}else if(task.action[AorB] == "closebuy"){
Price = AorB == A ? task.Adepth.Bids[0].Price : task.Bdepth.Bids[0].P
tradeInfo = task.P.Cover(AorB == A ? task.symbolA : task.symbolB, Price, Piece, PD_LONG); // task.action[AorB]
}else if(task.action[AorB] == "closesell"){
Price = AorB == A ? task.Adepth.Asks[0].Price : task.Bdepth.Asks[0].P
tradeInfo = task.P.Cover(AorB == A ? task.symbolA : task.symbolB, Price, Piece, PD_SHORT); // task.action[AorB]
if((task.action[AorB] == "buy" || task.action[AorB] == "sell") && tradeInfo.amount === 0){
}else if((task.action[AorB] == "closebuy" || task.action[AorB] == "closesell") && tradeInfo == 0){
return tradeI
function CalcActualPrice(task){
if(task.action[0] == 0){
var A_Pv = task.APositions.P
var B_Pv = task.BPositions.P
task.dic[task.action[0]].ActualPrice = A_Pv - B_Pv;
Log(task.symbolA, A_Pv, task.symbolB, B_Pv, "#FF0000");
}else if(task.APositions.Amount == 1 && task.BPositions.Amount == 1){
var A_Pv = task.APositions.P
var B_Pv = task.BPositions.P
task.dic[task.action[0]].ActualPrice = A_Pv - B_Pv;
Log(task.symbolA, A_Pv, task.symbolB, B_Pv, "#FF0000");
var A_Pv = task.APositions.P
var A_P1 = task.Pre_APositions.P
var A_m = task.APositions.Amount - task.Pre_APositions.A
var A_n = task.Pre_APositions.A
var B_Pv = task.BPositions.P
var B_P1 = task.Pre_BPositions.P
var B_m = task.BPositions.Amount - task.Pre_BPositions.A
var B_n = task.Pre_BPositions.A
var A_P2 = A_Pv * A_P1 * A_m / ((A_m + A_n) * A_P1 - A_n * A_Pv);
var B_P2 = B_Pv * B_P1 * B_m / ((B_m + B_n) * B_P1 - B_n * B_Pv);
task.dic[task.action[0]].ActualPrice = A_P2 - B_P2;
Log(task.symbolA, A_P2, task.symbolB, B_P2, "#FF0000");
function Hedge_Open_Cover(task){
if(task.isUseMarketOrder === false){
if((task.action[1] === "buy" && task.action[2] === "sell") || (task.action[1] === "sell" && task.action[2] === "buy")){ // open
var tradeInfo_A = DealActionLimit(task, A, task.action[3]);
var dealAmount_A = Math.abs(task.action[3]);
while(tradeInfo_A == false || (dealAmount_A -= tradeInfo_A.amount) !== 0){
Log("合约:" + task.symbolA + "已对冲" + (tradeInfo_A == false ? 0 : tradeInfo_A.amount), "剩余,重试!张数:" + dealAmount_A);
tradeInfo_A = DealActionLimit(task, A, dealAmount_A, true);
Sleep(Interval);
var tradeInfo_B = DealActionLimit(task, B, task.action[3]);
var dealAmount_B = Math.abs(task.action[3]);
while(tradeInfo_B == false || (dealAmount_B -= tradeInfo_B.amount) !== 0){
Log("合约:" + task.symbolB + "已对冲" + (tradeInfo_B == false ? 0 : tradeInfo_B.amount), "剩余,重试!张数:" + dealAmount_B);
tradeInfo_B = DealActionLimit(task, B, dealAmount_B, true);
Sleep(Interval);
task.dic[task.action[0]].hold = task.action[3];
// task.dic[task.action[0]].ActualPrice = _N(orderA.AvgPrice - orderB.AvgPrice);
}else if((task.action[1] === "closesell" && task.action[2] === "closebuy") || (task.action[1] === "closebuy" && task.action[2] === "closesell")){ // cover
var tradeInfo_A_Piece = DealActionLimit(task, A, task.action[3]);
var dealAmount_A = Math.abs(task.action[3]);
while(tradeInfo_A_Piece == false || (dealAmount_A -= tradeInfo_A_Piece) !== 0){
Log("合约:" + task.symbolA + "已对冲" + (tradeInfo_A == false ? 0 : tradeInfo_A_Piece), "剩余,重试!张数:" + dealAmount_A);
tradeInfo_A_Piece = DealActionLimit(task, A, dealAmount_A, true);
Sleep(Interval);
var tradeInfo_B_Piece = DealActionLimit(task, B, task.action[3]);
var dealAmount_B = Math.abs(task.action[3]);
while(tradeInfo_B_Piece == false || (dealAmount_B -= tradeInfo_B_Piece) !== 0){
Log("合约:" + task.symbolB + "已对冲" + (tradeInfo_B == false ? 0 : tradeInfo_B_Piece), "剩余,重试!张数:" + dealAmount_B);
tradeInfo_B_Piece = DealActionLimit(task, B, dealAmount_B, true);
Sleep(Interval);
task.dic[task.action[0]].hold = 0;
task.dic[task.action[0]].ActualPrice = 0;
task.dic[task.action[0]].CoverTimes += 1;
Sleep(100);
}else if(task.isUseMarketOrder === true){
var orderA =
var orderB =
if((task.action[1] === "buy" && task.action[2] === "sell") || (task.action[1] === "sell" && task.action[2] === "buy")){ // open
DealAction(task, A);
DealAction(task, B);
while(!idA || !idB){
DealAction(task, A);
DealAction(task, B);
while(true){
if(!orderA || orderA.Status !== ORDER_STATE_CLOSED){
orderA = task.e.GetOrder(idA);
if(!orderB || orderB.Status !== ORDER_STATE_CLOSED){
orderB = task.e.GetOrder(idB);
if(orderA && orderB && orderA.Status == ORDER_STATE_CLOSED && orderB.Status == ORDER_STATE_CLOSED){
Sleep(Interval);
//Log("Open symbolA:", orderA, "symbolB:", orderB);
task.dic[task.action[0]].hold = task.action[3];
task.dic[task.action[0]].ActualPrice = _N(orderA.AvgPrice - orderB.AvgPrice);
}else if((task.action[1] === "closesell" && task.action[2] === "closebuy") || (task.action[1] === "closebuy" && task.action[2] === "closesell")){ // cover
DealAction(task, A);
DealAction(task, B);
while(!idA || !idB){
DealAction(task, A);
DealAction(task, B);
while(true){
if(!orderA || orderA.Status !== ORDER_STATE_CLOSED){
orderA = task.e.GetOrder(idA);
if(!orderB || orderB.Status !== ORDER_STATE_CLOSED){
orderB = task.e.GetOrder(idB);
if(orderA && orderB && orderA.Status == ORDER_STATE_CLOSED && orderB.Status == ORDER_STATE_CLOSED){
Sleep(Interval);
//Log("Cover symbolA:", orderA, "symbolB:", orderB);
task.dic[task.action[0]].hold = 0;
task.dic[task.action[0]].ActualPrice = 0;
task.dic[task.action[0]].CoverTimes += 1;
Sleep(100); // 避免访问过于频繁。
function TasksController(){ // 任务控制器 构造函数
// 构造用于返回的 控制器对象
var self = {};
self.tasks = []; // 控制器的任务数组。
self.AddTask = function(e, symbolA, symbolB, HedgeList){ // 添加对冲 任务, 函数中进行 构造, 部分参数变量未初始化。在main 函数开始 根据界面参数列表,确定task 个数 进行构造。
var task = {
// 任务的参数变量
symbolA : symbolA,
symbolB : symbolB,
HedgeList : HedgeList,
Adepth : null,
Bdepth : null,
Adiff : 0,
Bdiff : 0,
action : null,
lastUpdateLineTime : 0,
MarginLevel : MarginLevel,
isUseMarketOrder : true,
// 账户信息
initAccount : _C(e.GetAccount),
nowAccount : null,
isFrozen : false,
FrozenStartTime : 0,
APositions : null,
BPositions : null,
Pre_APositions : null,
Pre_BPositions : null,
PositionsLastUpdateTime : 0,
isLogProfit : false,
taskProfit : 0,
State : FREE,
self.tasks.push(task);
self.InitTask = function(){ // 初始化 任务,设置合约 杠杆等
_.each(self.tasks, function(task){
var arr = task.HedgeList.split(';');
var hedgeDirection = 1;
// 可扩展 恢复持仓,读取当前持仓。
_.each(arr, function(pair){
var tmp = pair.split(':');
// 把每个 网格节点的 单元 按照':'字符 分割成 参数 数组 tmp
if (tmp.length != 3) {
// 由于 格式 是
开仓差价: 平仓差价: 下单量
,所以 用 ':' 分割后 tmp长度 不是3的 即 格式错误
throw "开仓表不正确";
// 抛出异常
var st = {
// 每次迭代的时候 构造一个对象
open: Number(tmp[0]),
即 30:15:1 按 ':' 分割后 生成的数组中的 第一个元素
30 , 通过 Number 函数 转换为数值
cover: Number(tmp[1]),
amount: Number(tmp[2]),
// 持仓 初始为0
ActualPrice: 0,
PointProfit : 0,
// 但个仓位累计差价。
CoverTimes : 0,
// 平仓次数
task.dic.push(st);
// 处理其它 初始化工作
task.P = $.NewPositionManager(task.e);
task.isUseMarketOrder = isUseMarketO
// 初始是否使用市价单
task.e.SetMarginLevel(task.MarginLevel);
// 设置杠杆
task.nowAccount = _C(task.e.GetAccount);
// 初始化 当前账户信息
// 检查, 启用的网格 是否会 耗尽资金
if((task.dic[0].open & 0 && isCreateHedgeList) || (task.dic[0].cover & 0 && isCreateHedgeList)){
// throw "自动网格生成错误:第一个节点开仓值、平仓值 小于0,会引起产生重复部分。" +JSON.stringify(task.dic);
var dic_length = task.dic.
var sumPiece = 0;
for(var i = 0; i & dic_ i++){
sumPiece += task.dic[i].
sumPiece = sumPiece * 2;
task.e.SetContractType(task.symbolA);
var tickerA = _C(task.e.GetTicker);
task.e.SetContractType(task.symbolB);
var tickerB = _C(task.e.GetTicker);
var Margin = sumPiece * 100 * OK_Rate / ((tickerA.Last + tickerB.Last) / 2) / task.MarginL
if(MarginRatio * task.initAccount.Stocks & Margin){
if(istry == false || IsVirtual()){
throw "满仓所需保证金:" + Margin + " 超出 限制比例: " + MarginR
Log("注意,实盘测试模式开启!#FF0000");
Log("按照当前初始化,满仓将开" + sumPiece + "张合约,共需要 保证金:" + Margin + "BTC");
self.DealTask = function(nowTime){
// 处理task 任务
tbls = []; // 每次初始清空
_.each(self.tasks, function(task){
// 迭代处理 task
task.e.SetContractType(task.symbolA);
var Adepth = task.e.GetDepth();
task.e.SetContractType(task.symbolB);
var Bdepth = task.e.GetDepth();
if(!Adepth || !Bdepth || Adepth.Asks.length === 0 || Adepth.Bids.length === 0 || Bdepth.Asks.length === 0 || Bdepth.Bids.length === 0){
task.Adepth = A
task.Bdepth = B
task.Adiff = _N(Adepth.Bids[0].Price - Bdepth.Asks[0].Price);
task.Bdiff = _N(Adepth.Asks[0].Price - Bdepth.Bids[0].Price);
if(nowTime - task.lastUpdateLineTime & 1000 * 60){
$.PlotLine("plus", task.Adiff);
$.PlotLine("minus", task.Bdiff);
task.lastUpdateLineTime = nowT
// 判断解除冻结
if(nowTime - task.FrozenStartTime & 1000 * 15 * 60 && task.isFrozen == true){
task.isFrozen =
if(For_USD == false){
var lastRate = OK_R
OK_Rate = task.e.GetUSDCNY();
task.e.SetRate(OK_Rate);
Log("冻结解除!", For_USD == false ? "并且更新汇率,上次汇率:" + lastRate + "更新后汇率:" + OK_Rate + "#FF0000" : "#FF0000");
// 交易逻辑
var SumHold = task.dic.
for(var index = 0; index & task.dic.length && task.isFrozen == index++){
if(task.dic[index].hold === 0){
if(task.dic[index].open &= task.Adiff && task.State !== MINUS){
// 正对冲 空A 多B
task.action = [index, "sell", "buy", task.dic[index].amount];
Log(JSON.stringify(task.action));
Hedge_Open_Cover(task);
$.PlotFlag(nowTime, "O", "sell-buy", "flag", "red");
task.isLogProfit =
task.nowAccount = _C(task.e.GetAccount);
var Positions = _C(task.e.GetPosition);
// 获取持仓信息。
UpdatePosition(task, Positions, PRE);
Log("Open symbolA:", task.APositions, "symbolB:", task.BPositions);
CalcActualPrice(task);
task.State = PLUS;
}else if(task.dic[index].open &= -task.Bdiff && task.State !== PLUS){
// 反对冲 多A 空B
task.action = [index, "buy", "sell", -task.dic[index].amount];
Log(JSON.stringify(task.action));
Hedge_Open_Cover(task);
$.PlotFlag(nowTime, "O", "buy-sell", "flag", "red");
task.isLogProfit =
task.nowAccount = _C(task.e.GetAccount);
var Positions = _C(task.e.GetPosition);
// 获取持仓信息。
UpdatePosition(task, Positions, PRE);
Log("Open symbolA:", task.APositions, "symbolB:", task.BPositions);
CalcActualPrice(task);
task.State = MINUS;
SumHold--;
if(task.dic[index].hold & 0 && task.dic[index].cover &= task.Bdiff){
// 平空A 平多B
task.action = [index, "closesell", "closebuy", task.dic[index].hold];
Log(JSON.stringify(task.action));
// Buy_SymbolA_Sell_SymbolB(task);
Hedge_Open_Cover(task);
$.PlotFlag(nowTime, "C", "closesell-closebuy", "circlepin");
task.nowAccount = _C(task.e.GetAccount);
var Positions = _C(task.e.GetPosition);
// 获取持仓信息。
UpdatePosition(task, Positions);
Log("Cover symbolA:", task.APositions, "symbolB:", task.BPositions);
}else if(task.dic[index].hold & 0 && task.dic[index].cover &= -task.Adiff){
// 平多A 平空B
task.action = [index, "closebuy", "closesell", task.dic[index].hold];
Log(JSON.stringify(task.action));
// Sell_SymbolA_Buy_SymbolB(task);
Hedge_Open_Cover(task);
$.PlotFlag(nowTime, "C", "closebuy-closesell", "circlepin");
task.nowAccount = _C(task.e.GetAccount);
var Positions = _C(task.e.GetPosition);
// 获取持仓信息。
UpdatePosition(task, Positions);
Log("Cover symbolA:", task.APositions, "symbolB:", task.BPositions);
if(SumHold != 0 && nowTime - task.PositionsLastUpdateTime & 1000 * 30){
var Positions = _C(task.e.GetPosition);
// 获取持仓信息。
UpdatePosition(task, Positions);
task.PositionsLastUpdateTime = nowT
}else if(SumHold == 0 && task.isLogProfit == false){
sumProfit = 0;
task.State = FREE;
for(var a = 0 ; a & TC.tasks. a++){
sumProfit += TC.tasks[a].taskP
LogProfit(sumProfit, "当前:", task.nowAccount, "初始:", task.initAccount);
task.taskProfit = task.nowAccount.Stocks - task.initAccount.S
task.isLogProfit =
// 检测交割剩余时间、发送 交割前平仓命令
CheckDelivery(nowTime, "this_week", task);
// 检测 当周交割。 必须在当周交割前平仓。
// 测试 将数据现在状态栏
var tbl = {
type : "table",
title : task.symbolA + "&" + task.symbolB,
cols : ["key", "value"],
for(var key in task){
value = task[key];
if(key === "dic" || key === "Adepth" || key === "Bdepth" || key === "initAccount" || key === "nowAccount" || key === "isFrozen" ||
key === "FrozenStartTime" || key === "P" || key === "Pre_APositions" || key === "Pre_BPositions"){ // 过滤显示
if(key === "e"){
value = "初始: " + JSON.stringify(task.initAccount) + " 当前: " + JSON.stringify(task.nowAccount);
key = task[key].GetName();
tbl.rows.push([key, value]);
// 判断下网格方向
if(task.dic[0].hold & 0){
for(var j = 0; j & task.dic. j++){
var task_dic = JSON.stringify(task.dic[j]);
if(task.dic[j].hold & 0){
task_dic += "#FF0000";
}else if(task.dic[j].hold & 0){
task_dic += "#32CD32";
tbl.rows.push([j, task_dic]);
}else if(task.dic[0].hold & 0){
for(var j = task.dic.length - 1; j &= 0; j--){
var task_dic = JSON.stringify(task.dic[j]);
if(task.dic[j].hold & 0){
task_dic += "#FF0000";
}else if(task.dic[j].hold & 0){
task_dic += "#32CD32";
tbl.rows.push([j, task_dic]);
for(var j = 0; j & task.dic. j++){
var task_dic = JSON.stringify(task.dic[j]);
if(task.dic[j].hold & 0){
task_dic += "#FF0000";
}else if(task.dic[j].hold & 0){
task_dic += "#32CD32";
tbl.rows.push([j, task_dic]);
tbls.push(tbl);
if(tbls.length === 0){ // 容错模式,或者实盘中 可能有原因导致 _.each 迭代中 返回,tbls 为
[] ,处理此种情况。
LogStatus("轮询耗时:" + StrLoopTime + " 当前时间:" + _D() + MSG_String + '\n`' + JSON.stringify(tbls) + '`'); // 输出到状态栏
// 返回对象
var TC = // TasksController 对象
var tbls = [];
var MSG_String = "  ";
var StrLoopTime = "";
var OK_Rate = 0;
var SumUseTime = 0;
var times = 0;
var sumTimes = 0;
var sumProfit = 0;
function main(){
// 测试代码 模拟界面参数
if(isFilter){
Log("启用过滤常规错误信息。");
SetErrorFilter("502:|503:|tcp|character|unexpected|network|timeout|WSARecv|Connect|GetAddr|no such|reset|http|received|EOF|reused");
var Positions = [];
for(var j = 0 ; j & exchanges. j++){
var position = _C(exchanges[j].GetPosition);
if(position.length !== 0){
Positions.push(position);
if(AutoRecoveryState == false && Positions.length == 0){
// 没有持仓,并且关闭了自动恢复
if(isCreateHedgeList == true){
HedgeTable = CreateHedgeList(begin, end, size, step, amountOfPoint, symbolA, symbolB);
// 输出对冲控制表,并检查。
Log("对冲控制表", HedgeTable);
if(HedgeTable == "(this_week&quarter)30:15:1"){
Log("注意!对冲控制表 当前为 默认值!可能引起亏损。");
// 创建控制器对象
TC = TasksController();
var exchangesNum = 0;
var e_index = 0;
for(var i = 0; i & exchanges. i++){ // 遍历交易所对象数组
exchangesNum++;
var arr = HedgeTable.split('(');
_.each(arr, function(item) {
if (item != '') {
var tmp = item.split(')');
var pair = tmp[0].replace('(', '').split('&');
// Log("pair:", pair, "tmp:", tmp); // 测试 显示 处理后的 控制表字符串
TC.AddTask(exchanges[e_index], pair[0], pair[1], tmp[1]);
if(For_USD){
// 设置汇率
OK_Rate = 1;
exchanges[e_index].SetRate(1);
Log("使用的价格为美元计价,汇率:", OK_Rate, ",请注意 ”对冲 控制表“ 是否为美元差价#FF0000"); // 币种提示
OK_Rate = exchanges[e_index].GetUSDCNY();
exchanges[e_index].SetRate(OK_Rate);
Log("使用的价格为RMB计价,汇率:", OK_Rate, ",请注意 ”对冲 控制表“ 是否为RMB差价#FF0000");
// 币种提示
if(--exchangesNum & 0){
throw "添加的交易所 和 对冲控制表 不匹配!交易所个数:" + exchanges.length + " arr:" +
}else if(exchangesNum !== 0){
e_index++;
Log("交易所对象最大索引 e_index:", e_index, "关联后剩余交易所数量: exchangesNum:", exchangesNum); // 测试
// 调用控制器对象的初始化函数
TC.InitTask();
}else if(AutoRecoveryState == false && Positions.length !== 0){
// 未开启恢复,有持仓
throw "未开启自动恢复,检测到有持仓信息:" + JSON.stringify(Positions);
}else if(AutoRecoveryState == true && Positions.length == 0 && (istry == false || IsVirtual())){
// 开启自动恢复, 无持仓信息
throw "未检测到持仓信息,无法恢复!";
// 恢复持仓
Log("恢复持仓!");
if(isCreateHedgeList == true){
HedgeTable = CreateHedgeList(begin, end, size, step, amountOfPoint, symbolA, symbolB);
// 输出对冲控制表,并检查。
Log("对冲控制表", HedgeTable);
if(HedgeTable == "(this_week&quarter)30:15:1"){
Log("注意!对冲控制表 当前为 默认值!可能引起亏损。");
// 创建控制器对象
TC = TasksController();
var exchangesNum = 0;
var e_index = 0;
for(var i = 0; i & exchanges. i++){ // 遍历交易所对象数组
exchangesNum++;
var arr = HedgeTable.split('(');
_.each(arr, function(item) {
if (item != '') {
var tmp = item.split(')');
var pair = tmp[0].replace('(', '').split('&');
// Log("pair:", pair, "tmp:", tmp); // 测试 显示 处理后的 控制表字符串
TC.AddTask(exchanges[e_index], pair[0], pair[1], tmp[1]);
if(For_USD){
// 设置汇率
OK_Rate = 1;
exchanges[e_index].SetRate(1);
Log("使用的价格为美元计价,汇率:", OK_Rate, ",请注意 ”对冲 控制表“ 是否为美元差价#FF0000"); // 币种提示
OK_Rate = exchanges[e_index].GetUSDCNY();
exchanges[e_index].SetRate(OK_Rate);
Log("使用的价格为RMB计价,汇率:", OK_Rate, ",请注意 ”对冲 控制表“ 是否为RMB差价#FF0000");
// 币种提示
if(--exchangesNum & 0){
throw "添加的交易所 和 对冲控制表 不匹配!交易所个数:" + exchanges.length + " arr:" +
}else if(exchangesNum !== 0){
e_index++;
Log("交易所对象最大索引 e_index:", e_index, "关联后剩余交易所数量: exchangesNum:", exchangesNum); // 测试
// 调用控制器对象的初始化函数
TC.InitTask();
var PreTC = _G("TC");
for(var index = 0; index & TC.tasks. index++){
for(var key in TC.tasks[index]){
if(key == "e" || key == "Adepth" || key == "Bdepth" || key == "P"){
TC.tasks[index][key] = PreTC.tasks[index][key];
while(true){
var nowTime = new Date().getTime();
TC.DealTask(nowTime);
Sleep(Interval);
var endTime = new Date().getTime();
if(times & 100000){
SumUseTime += (endTime - nowTime);
SumUseTime = 0;
times = 0;
SumUseTime += (endTime - nowTime);
sumTimes++;
var avgUseTime = _N(SumUseTime / times);
StrLoopTime = (endTime - nowTime) + " ms " + "平均耗时:" + avgUseTime + "循环次数:" + sumT
function onexit(){
Log("退出策略,自动保存状态。");
_G("TC", TC);
发明者量化(FMZ.COM)
原 BotVS 量化平台。
(Boll)指标是股市技术分析的常用工具之一,通过计算股价的“标准差”,再求股价的“信赖区间”。该指标在图形上画出三条线,其中上下两条线可以分别看成是股价的压力线和支撑线,而在两条线之间还有一条股价平均线,布林线指标的参数最好设为20。一般来说,股价会运行在压力线和支撑线所...
多品种商品期货对冲网格交易策略 分析 与 实现 先睹为快,对于自动化、量化交易策略的研究分类大致为,趋势型、 对冲型、 网格策略、 高频策略、 人工智能、 算法交易、 深度学习。其中 网格策略 和 对冲类型策略 可以算是比较经典的策略类型。 如果网格和对冲策略组合起来可以产...
之前给大家介绍了一下三角套利的原理,现在为大家奉上考虑交易成本的三角套利方法和代码。 一、考虑交易成本情况下的策略调整 我们以第一个策略(正循环套利_挣CNY策略为例)。 图:正循环套利(挣CNY)策略示意图 我们设计的套利策略是被动套利策略,具体来讲,我们在LTC/BTC...
这篇文章几乎回答了你对量化对冲的所有疑问 一、基础篇 1、在市场不稳定的情况下如何稳健套利? 套利,本就是很稳健的一种盈利方式。套利和盈利不同,相信您问的是在市场不稳定的情况下稳健“盈利”。先明确量化和对冲的概念,可下载OA系统中“量化对冲 产品基础知识学习手册”进行详细学...
已经很久很久没有扬起头来,看头顶的一片天空了。 白日做梦,这个标签似乎从很小很小的时候,就已经贴在我的身上。 无论是帮家里在农田里放黄豆累了,干脆就地躺在草堆上,看着万里碧空飘过来的一朵朵白云; 还是放假的傍晚,和表姐表弟一起躺在外婆家二楼的阳台上,对着灿烂的晚霞编织着一个...
有的人从梦中来,演绎着人生,不知不觉中也就把不相关的人带入了梦中。迷上红楼梦的人,多数会迷上林黛玉。娟烟眉、含情目`心較比干多一竅,病入西子勝三分。寶黛初會的寥寥數言的描寫,就足以讓我對這個來自離恨天灌愁海的绛珠仙草,降入紅塵的形象想入非非了。
這是個人迷戀的角色,相傳...
空杯心态这本书告诉我们要调整自己,给自己做一个减压。让自己静下心来,节奏慢下来,把你的压力放下来。 对于压力我们要知道,压力无处不在,压力阻力,但它更可能是动力。压力过大的时候我们需要学会的是使用一些方法来帮助我们去排解。 1我们要调节自己的心态,把自己的心态调整到最好,让...
人这一生啊,总有一天会变得冷漠的。 尤其是在完全死心的时候。从此以后,不再联系,那个人的好坏,与我无关。 “有些东西,你要是不提,我不去回忆。”第一次听到《来日方长》的时候,我就忍不住躲在被子里红了眼眶,有些事情,你要是不提,我真的已经忘记了。可是光是一句话,一个动作,一个...

我要回帖

更多关于 比特币怎么买入 的文章

 

随机推荐