go语言做量化交易,go语言做量化交易和python哪个好
理工科如何转做金融--量化交易?
一、什么是量化对冲基金
站在用户的角度思考问题,与客户深入沟通,找到哈密网站设计与哈密网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站建设、成都做网站、企业官网、英文网站、手机端网站、网站推广、域名申请、网络空间、企业邮箱。业务覆盖哈密地区。
量化对冲基金的盈利模式很简单,就是发基金产品,然后提2%管理费(产品总规模的2%)+20%业绩提成(产品收益的20%)。对冲基金的一大特性是杠杆,借入资金,获得杠杆和高收益率,“对冲”是字面的假象,并非是做多空对冲,而是杠杆买卖。
七亏两平一赚的道理哪里都适用,不管是餐饮行业还是互联网行业,不管是证券私募基金(PE),还是量化对冲基金,包括华尔街的对冲基金行业也一样,大部分都是亏货,最终都倒闭破产了;少量盈亏平衡,做的平庸无奇;屈指可数的极少数功成名就,做大做强,发大财出大名,留下神话般的业绩和伟大的传说,索罗斯西蒙斯这类型,华尔街百年历史也就那么几个,屈指可数,可见这个行业竞争是有多激烈,多残酷,存活率有多低。所以不要总看到量化对冲基金这个行业特别牛,特别高大上,那只是幸存者都看起来很光鲜而已,更多的已经死掉了,你根本而且永远都不会知道。
不过中国的量化对冲基金行业相比国外,有一个优势,那就是行业刚刚起步,国内做的好的证券私募基金(PE),可能大家勉强还能说出来一两家,国内做得特别好的、特别出名的、规模特别大的、盈利能力特别强的、能傲视群雄、形成寡头垄断的、最顶尖的量化对冲基金,现在还没有。
二、量化对冲基金的核心岗位---量化交易岗位
这个岗位到底干啥,简单的说,两个字——挣钱。具体的包括,算法设计、策略测试、参数优化、模型实现、实盘下单等,再深入一些还包括系统维护、策略更新、风险控制、资金管理、品种筛选、极端行情应对等,甚至还需要写宣传资料和推介资料,做一些路演和宣讲。所以一个合格的成熟的量化交易团队(实际中负责投资交易的,很多不是个人而是团队),那就是公司把钱(基金产品)交到你手上,你能在一定限制条件下(一年封闭期,20%止损线等)在市场里赚到钱,而且最好把曲线做的漂亮一些,稳定一些,收益高一些回撤低一些。
跟量化对冲基金行业一样,量化交易岗位竞争也很激烈,而且更激烈,更残酷,存活率更低。首先这个岗位要求极高,这是一个横跨数学、计算机、金融、投资,甚至社会学、心理学,等多领域多学科的岗位,而且对所有相关知识都要求很高,要能融会贯通,其次还要有极强的实践操作能力,要有大量的金融市场实战投资经验才行,否则让从来没做过投机交易的程序员来写几个程序就想赚大钱,根本不可能,最后对于职业交易者的自我修炼、道德品格、性格塑造、学识见识、心胸视野等有很高的要求。
量化交易岗位责任极大,压力极大,要运作大量资金,去最血腥最残酷的金融市场里竞争博弈,并且要在非常严格的条件下(比如一年封闭期,20%止损线,甚至还可能有最大回撤的硬性限制要求),战胜同样厉害的竞争对手,去赚取对方亏损的钱,其难度可想而知。 所以,你真的适合做量化交易吗?你真的有能力在这么残酷的竞争中胜出吗?
别只看到胜出者管理着大量的资金,每天写写代码,说说笑笑,几百万几千万就轻松到手,那是赢者该有的一切。更多的人赔掉了本钱,赔掉了青春,赔掉了自信,赔掉了在其他行业其他岗位上大展宏图的机会,甚至赔掉了美好的生活,但你根本甚至永远都不可能知道他们。
三、做好量化交易,首先需要兴趣与使命感
量化交易这个岗位太难了,要求太高,压力太大,一般人很难坚持下去,圈内朋友经常相互开玩笑,做这个工作,寿命都要比正常人短好几年。相信愿意把青春的赌注压在这上面的,都是对于量化交易有着无法抑制的兴趣和冲动。 巴菲特在某大学演讲时,有人问他说我马上要毕业了,如何知道这份工作是否适合我,巴菲特说,如果你每天早上醒来,立马就高高兴兴的、蹦蹦跳跳的、迫不及待的、兴冲冲的跑去办公室开始一天的工作,那这份工作就是你应该一生从事的事业。
兴趣是最好的导师,有了兴趣才会去钻研,才会不断学习进步,才会拥有一种不断追求完美的精神,用一种工匠精神,用一生的时间和精力去做到最好。
四、做好量化交易,需要交叉学科、融汇贯通的知识体系
数学、概率统计、数据结构、算法设计、经济、金融、证券、衍生品相关、投资与分析、主流策略开发语言等,都需要了解,而且要融会贯通。
关于做量化交易用什么语言更好,其实还是看自己的习惯和要达到的目标,如果是大型金融机构做量化分析系统或量化交易系统,可以用python,R,C++等都可以,各有优劣,看对于速度要求如何了。如果是个人或者中小机构,对于速度要求不高,策略也相对简单,可支出成本有限,而且缺乏的技术支持,用一些成熟的第三方平台,如文华、TB、金字塔、MC等也可以,我还见过用matlab,excel,包括一些网上平台,做量化交易的,其实只要策略能很好的实现,实盘能盈利就行。
这里讨论一下,有两个观点:
(1)错误理解:不自己做系统,不自己写接口的都不是量化交易,量化交易门槛特别高,low逼别玩。
其实不是这样,量化交易只是一种理念,是一种方法,是一种工具,是为交易策略服务的,只要策略开发和下单实现,都是运用的数学模型和计算机程序,而非人为主观判断,就是量化交易。一些股票老玩家,有一个可能盈利的交易策略,然后用第三方平台,搞来历史数据测一测,发现确实能盈利,然后就开始把系统架上去跑,这也是量化交易。就像搭建一个实体模型,比如艾尔菲铁塔什么的,你最好自己制作搭建材料,这样可以更好的更个性化的实现自己的目标,但你也可以去买一些已经做好了的现成的模型材料,用别人做好的材料来搭建模型,两种做法都是搭建模型,核心在于你搭建模型的思路和方法。用第三方平台就像搭积木,人家已经给你把积木做好了,你按照自己的想法把积木搭建起来就是,只是一些特别个性化的搭积木的想法,可能会受到积木本身的限制罢了。
自己做系统自己写接口的优势在于更加个性化,更符合自己的需求,而且速度更快,信息保密也能做得更好;缺点是财务成本更高,人员和硬件配备要求更高,而且系统更容易出BUG(别说什么大牛,华尔街海龟写的系统就不会有任何问题,还记得光大乌龙指事件吗?)。用第三方平台的优势在于成本低,重大BUG相对较少(不像自己做的系统,第三方平台毕竟几万人用了好几年,而且每天都在不断改进),交易者可以只专注于策略开发,而不用考虑系统维护;缺点是速度更慢,策略思路的实现会受到第三方平台功能的限制等。当然如果做高频交易,肯定得自己做系统写接口了,但现在国内的股票和股指期货市场,是做不了高频交易的。
(2)错误理解:量化交易的核心竞争力是优秀的计算机语言编程能力。
其实量化交易的核心竞争力是策略的有效性,能长期稳定盈利的策略是一切的关键,一些中低频交易策略,手动和量化区别不一定会很大。数学、计算机程序、金融、实盘交易经验,做好量化交易,这四样缺一不可,只是因为计算机程序这一块最有特色,是区别于其他交易方法的主要特点,所以总被外界当做量化交易的噱头和宣传点,久而久之大家甚至把编程能力作为最核心竞争力了,这明显有些喧宾夺主。
五、做好量化交易,需要丰富的交易经验
从来没做过交易的程序员来写几个程序就想挣钱,不可能。要做好量化交易,长期的实盘交易经验是必须的,这样才能更好的懂得市场的特性,品种的特性,行情的变化等,才能写出更加贴合市场,更加有竞争力的策略和模型。数学思维能力和编程能力很重要,但如果不熟悉市场,不了解品种特性,不了解金融市场百年发展史,不懂得人性的贪婪和恐惧,没自己实盘做过股票期货,很多东西数学模型和程序语言是不会告诉你的,就像你有再好的木匠工具,如果没有做木匠活的经验,你也很难做出漂亮实用的家具。
有人可能会说那用数据挖掘啊,让程序自己去开发策略,这也是现在一个很有潜力的流派,但问题就在于数据挖掘某种程度上也是依靠概率,没有绝对的必然性,通过数据挖掘做的策略可能会存在巨大风险。就像之前在书上看到的,就是数据挖掘发现,美国标普指数跟非洲某地咖啡产量连续多年相关性达到99%以上,美国原油指数价格跟一种墨西哥烧饼的价格连续多年相关性达到99%以上等等,如果真采用这两组数据的相关性去做策略,很明显是滑稽的。
其实数据挖掘可能出现的小概率风险,也就是我们常说的参数优化中的参数孤岛。简单的说,就是用历史数据测试策略,发现某个参数表现特别好,但这个参数是独立的,不连续的,跟次优参数差别很大,无法组成一个较优参数集合,这很有可能就是遇到了小概率事件,如果使用这个参数,历史回测可能很漂亮,实盘交易就会遭殃。
而且只有经过大量的实盘交易,你才会知道挣钱没有那么容易,亏钱却易如反掌,交易这行其实很苦很累,每天在盈利与亏损中挣扎,如何控制风险,获取收益是一个永恒的命题,更别说要做到长期稳定盈利。像巴菲特一样五十年如一日,年均收益20%多,真的就太难了。别去迷信短期暴利,几个月翻几倍之类的神话,毫无意义,资本市场最不缺神话,缺的是寿星,做量化交易就是做资产管理行业,我们是靠规模和复利取胜,而不是冒着巨大风险去博取短期暴利。
做外部客户委托的资金,无论是单账户还是基金产品,一定要亲自去操作,去实践,才能真正学到东西,成长起来,而且一定要公开化,阳光化,最好网上公布业绩。这样你才会了解到,受人委托,肩上的责任有多大,心理压力有多大,你能否在这样大的压力下,各种严格的限制条件下做好交易,这是真正的难点所在。你才会知道操作自己的资金,跟操作客户的资金,跟操作基金产品的区别有多大。有的人能做好交易工作室,但也仅限于此,做资产管理行业不像做工作室,难度大多了,因为是戴着镣铐,在众目睽睽之下舞蹈,每天都要公布净值的,这谁玩谁知道。
六、如何创建自己的量化对冲基金管理公司
过程很复杂,核心是要有起始资金,或者主要投资人,还有核心交易团队,这是最基本条件,然后还有大量的各种各样的工作要做,你要能独挡N面才行,比如你是核心交易团队,那就得会说服投资人投资,找合作途径发产品,找客户销售产品,注册成立公司,管理公司,公司制度建设,人员招聘,薪酬制定等等。
关于量化交易,这些入门知识你需要了解
; 这篇文章将向你介绍量化交易系统的一些基本概念。本文主要面向两类读者,第一类是正在努力寻找一份量化交易员工作的求职者,第二类是期望尝试开启自己量化交易事业的个人投资者。关于量化交易,这些入门知识你需要了解。
量化交易是数量金融学一个极其艰深复杂的领域。若要通过面试或构造你自己的交易策略,就需要你投入时间学习一些必备知识。
量化交易系统包括四个主要部分:
策略识别:搜索策略、挖掘优势、确定交易频率。
回溯测试:获取数据、分析策略性能、剔除偏差。
交割系统:连接经纪商、使交易自动化、使交易成本最小化。
风险管理:最优资本配置、最优赌注或凯利准则、交易心理学。
我们首先来谈谈如何识别一个交易策略。
策略识别
所有量化交易流程都肇始于一个初期研究。这个研究流程包括搜索一个策略、检验它是否适合你可能正在运作的策略组合、获取任何测试策略时所需数据、努力优化策略使其预期年化预期收益更高且(或)风险更低。如果你是一个“散户”交易员,一定要清楚自己的资金是否充足,以及交易成本对策略的影响。
通过各种公开数据搜索可盈利的策略实际上十分简单,并没有大家想的那么难。研究学者会定期发表理论交易结果(虽然大多为交易成本总额)。一些数量金融学主题博文也会详细讨论策略。交易期刊还会简报一下基金管理公司使用的一些策略。
你可能会问,个人与公司怎么可能愿谈他们的可盈利策略,特别是当他们知道,如果其他人“复制相同的策略”,长期而言它终将失效。
原因就在于,他们通常不会透露具体的参数以及他们所使用的调参方法,而这些优化技能才是把一个表现平庸的策略调成一个回报丰厚的策略所需的关键技术。实际上,若要创建你自己的、独一无二的策略,一个最好的法子就是寻找相似的方法,尔后执行你自己的优化程序。
你所看到的很多策略都可归入均值回归交易策略、趋势跟随或动量交易策略两类。
均值回归策略试图利用这么一个事实:“价格序列”(如两个关联资产的价差)存在一个长期均值,价格对均值的短期偏离终将回归。
动量交易策略则试图“搭上市场趋势的顺风车”,利用投资心理和大基金结构信息在一个方向积聚动量,跟随趋势直至回归。
定量交易还有一个重要方面,即交易策略的频率。低频交易(Low Frequency Trading, LFT)通常指持有资产超过一个交易日的策略。相应地,高频交易(High Frequency Trading, HFT)通常指持有资产一个交易日的策略。
超高频交易(Ultra-High Frequency Trading, UHFT)指持有资产的时常达秒级与毫秒级的策略。虽然散户可以进行HFT与UHFT交易,但也只是在你掌握了交易“技术栈”与订单簿动力学的详细知识后才有可能。本篇入门文章,我们不会对这些问题做任何深入探讨。
策略或策略集合一旦确定,现在就需要在历史数据上测试其盈利能力,这就进入了回溯测试的工作范围。
回溯测试
回溯测试的目标是提供证据,佐以证明通过以上流程所确定的策略,无论是应用于历史(训练)数据还是测试数据均可盈利。它可以反映该策略未来在“真实世界”中的预期表现。
由于种种原因,回溯测试不能保证一定成功。这或许就是量化交易最为微妙之处,由于它包含了大量的偏差,我们必须尽尽力仔细审查并剔除它们。
我们将讨论几种常见类型的偏差,包括先窥偏差、幸存者偏差与优化偏差(亦称“数据窥视偏差”)。回溯测试中其他几个重要方面,包括历史数据的可用性与清洁度、真实交易成本及可靠回测平台上的决定。我们会在后续“交割系统”一节深入讨论交易成本。
策略一旦确定,我们就需要获取历史数据,并藉此展开测试,如有可能还可改进策略。现在卖数据的很多,所有资产类型的数据都有。通常,数据的质量、深度、时间间隔不同,其价格也不同。
刚入门的量化交易员(至少零售等级)最初使用雅虎金融板块(Yahoo Finance)的免费数据就行。对于数据供应商,这里不再赘言。我想重点谈一谈处理历史数据时,时常遇到的问题。
对于历史数据,人们主要关心的问题,包括数据精度或清洁度、幸存者偏差、应对如分发红利、拆分股票等公司行为的调整。
精度与数据整体质量有关,无论数据是否包含错误。有时错误容易识别,比如使用一个窄带滤波器,就可以找出时间序列数据中的“窄带”并更正它们。其他时候,错误又很难甄别,经常需要根据多个数据供应商提供的数据进行对比检查。
幸存者偏差通常是免费数据集或廉价数据集的一个”特征“。对于一个带有幸存者偏差的数据集,它不包含已经不再交易的资产数据。不再交易的证券,则表示已经退市或破产公司的股票。如果数据集中含有此类偏差,策略在此数据集上的测试表现可能比在”真实世界“里表现的更好,毕竟历史”赢家“已经被预先筛选出来,作为训练数据使用。
公司行为即公司开展的常引发原始价格阶梯形变化的”逻辑“活动,它不应该计入价格预期年化预期收益。公司分发红利和拆分股票行为是引发调整的两个常见行为,二者无论发生哪一种,都需要进行一个”回调“的流程。我们一定要留心,不要把股票拆分和真实预期年化预期收益调整混为一谈。许多交易员在处理公司行为时都碰过壁!
为了开展回溯测试,我们必须使用一个软件平台。你可以选择一个专门的回测软件如MultiCharts,一个数值平台如Excel或MATLAB,或者一个用Python或C++完全自主实现的平台。对于MultiCharts(或类似平台),个人是比较介绍,对于编程的要求比较低。
在做系统回测时,一定要量化表示系统性能。定量策略的“业界标准”度量为最大资金回挫与夏普比率。最大资金回挫表示一段时间(通常一年)内账户资金曲线从波峰至波谷的最大跌幅,常使用百分比表示。
由于大量的统计因素,LFT策略比HFT策略的资金回挫更高。历史回测会显示过去的最大资金回挫,它能够较为贴切地反映策略的未来资金回挫情况。第二个度量指标是夏普比率,它被启发式地定义为“超额预期年化预期收益均值与超额预期年化预期收益标准差的比值”。
这里,超额预期年化预期收益表示策略预期年化预期收益超出某个预定基准,如标普500或三月期短期国债(预期年化预期收益)的额度。注意人们通常不使用历史预期年化预期收益指标,因为它忽略了策略波动性的影响,而夏普比率却考虑到了这一点。
如果经过回测,策略的夏普比率很高且其最大资金回挫已经最小化,则可以认为它趋于无偏,下一步就是要搭建一个交割系统。
交割系统
交割系统是一个方法集合,由它来控制交易策略生成的交易列表的发送和经纪商的交割行为。事实上,交易可以半自动、甚至全自动生成,而执行机制可以手动、半自动(即“点击一次交割一项”)或者全自动。
尽管如此,对于LFT策略,手动和半自动技术却比较常见;对于HFT策略,则必须创建一个全自动交割机制,由于策略和技术彼此依赖,还要经常与交易指令生成器紧密相接。
在搭建交割系统时,我们需要考虑几个关键因素:连接经纪商的接口、交易成本(包括佣金、滑动价差与价差)最小化、实时系统与回测时系统性能的差异。
联系经纪人的方法有很多,你可以直接电话联系他,也可以通过一个全自动高性能的应用程序接口(API)实现。理想情况,就是希望交割交易的自动化程度尽可能高。这样一来,你不仅可以脱开身集中精力进行深入研究,还能运行多个策略、甚至HFT策略(实际上,如果没有自动化交割,HFT根本不可能)。
前面说过的几种常用回溯测试软件如MATLAB、Excel和MultiCharts,对于LFT策略或简单策略都是不错的选择。但是,如果要做真正的HFT,你就必须要构造一个用高性能语言(如C++)编写的内部交割系统。
说个我的亲身经历,以前受聘于一家基金管理公司,我们有一个十分钟的“交易周期”,每隔十分钟下载一次新的市场数据,然后根据这十分钟的信息进行交割。这里用的是一个优化的Python脚本。对于任何处理分钟级或秒级频率数据的工作,我相信C/C++更理想。
在一家大型的基金管理公司,交割系统的优化通常不在量化交易员的工作范围。但是,在小点的公司或高频交易公司,交易员就是交割人,所以技术面越广越好。你要想进一家基金管理公司,一定要记住这一点。你的编程能力不说比你的统计学和计量经济学禀赋更重要,至少也同样重要!
另外一个属于交割系统的重要问题是交易成本最小化。一般地,交易成本由三部分构成:佣金(或税收)、损耗与价差。佣金是向经纪商、交易所和证券交易委员会(或类似政府监管机构)支付的费用;滑动价差是你的预期交割价位与真实交割价位的差值;价差则是待交易证券的卖出价与买入价之差。注意价差不是常数,它依赖于市场当前流动性(即买单和卖单数量)。
交易成本是决定一个策略是高夏普比率且盈利丰厚,还是低夏普比率且极不盈利的关键。根据回溯测试正确预测未来的交易成本很具有挑战性,你需要根据策略频率,及时获取带有卖出价与买入价信息的历史交易数据。
为此,大型基金管理公司量化交易的整个团队都专注于交割优化。当基金管理公司需要抛售大量交易时(原因五花八门),如果向市场“倾泻”大批股票,会迅速压低价格,可能都来不及以最优价格交割。
因此,纵使遭受损耗风险,基金管理公式也会选择使用算法交易,通过“打点滴”的方式向市场出单。此外,其他策略如若“捕到”这些必要性条件,也能利用市场失效(获利)。这是基金结构性套利的内容。
交割系统最后一个主要问题关系到策略的实时性能与回测性能的差异。这种差异由多种因素造成,比如我们在“回溯测试”一节已经深入讨论过的前窥偏差与最优化偏差。
然而,对于有些策略,在部署之前不易测得这些偏差。这种情况对于HFT最为常见。交割系统和交易策略本身均可能存在程序错误,回溯测试时没有显现却在实时交易时出来捣乱。市场可能受到继交易策略部署后的一场政变的影响,而新的监管环境、投资者情绪与宏观经济形势的变化也均可能导致现实市场表现与回溯测试表现的差异,从而造成策略盈利性上的分歧。
风险管理
量化交易迷宫的最后一块是风险管理程序。风险包含我们之前谈论的所有偏差。它包括技术风险,比如所有在交易所的服务器突然发生硬盘故障。它还包括经纪风险,如经纪商破产(此说并非危言耸听,引发恐慌的明富环球就是一个例子)。
总而言之,它覆盖了几乎所有可能干扰到交易实现的因素,而其来源各不相同。已经有成套的书籍介绍量化交易策略的风险管理,本人也就不再对所有可能的风险来源做详细说明。
风险管理还包括投资组合理论的一个分支,即所谓的“最优资本配置”,涉及到如何将资本分配给一组策略、如何将资本分配给策略内不同交易的方法。这是一个复杂的领域,依赖于一些高级数学知识。
最优资本配置与投资策略杠杆通过一个名为凯利准则的业界标准建立联系。本文是一篇入门文章,我在此不详谈其计算。凯利准则对策略预期年化预期收益的统计性质做过一些假设,但是它们在金融市场中并不一定成立,交易员因此在实现时通常会有所保留。
风险管理的另外一个关键成分涉及到交易员自身心理因素的处理。尽管大家都承认,算法交易若无人为干涉,不太容易出现问题。交易员在交易时,稍不留神仍然可能会掺入许多认知偏差。
一个常见的偏差是厌恶规避,当人发现损失已成定局,其所带来的痛苦,可能会麻痹人的行为,不能做到及时抛盘止损。类似地,由于太过忧心已经到手的预期年化预期收益可能赔掉,人们可能也会过早抛盘收利。
另外一个常见的偏差是所谓的偏好偏差:交易员太看重事件而非长远地看问题。此外,当然不能落下“恐惧与贪婪”这对经典的情绪偏差。这两种偏差常导致杠杆不足或杠杆过度,造成爆仓(账户资产净值近乎为零或更糟)或盈利缩水的局面。
总结
由此观之,量化交易是数量金融学中一个虽趣味十足但极其复杂的领域。我对这个话题的讨论浅尝辄止,文章就已经这么长了!我在文中三言两句带过的问题,已经有大量的相关书籍和论文出版。
因此,在你申请量化基金交易职位前,务必要进行大量的基础调研,至少应当具有统计学和计量经济学的广泛背景,以及使用MultiCharts、MATLAB、Python或者R程序语言实现的丰富经验。如果应对的是更加复杂的高频端策略,你的技能组合可能还要包含Linux内核修改、C/C++、汇编编程和网络延迟优化。
一学就会,手把手教你用Go语言调用智能合约
智能合约调用是实现一个 DApp 的关键,一个完整的 DApp 包括前端、后端、智能合约及区块 链系统,智能合约的调用是连接区块链与前后端的关键。
我们先来了解一下智能合约调用的基础原理。智能合约运行在以太坊节点的 EVM 中。因此要 想调用合约必须要访问某个节点。
以后端程序为例,后端服务若想连接节点有两种可能,一种是双 方在同一主机,此时后端连接节点可以采用 本地 IPC(Inter-Process Communication,进 程间通信)机制,也可以采用 RPC(Remote Procedure Call,远程过程调用)机制;另 一种情况是双方不在同一台主机,此时只能采用 RPC 机制进行通信。
提到 RPC, 读者应该对 Geth 启动参数有点印象,Geth 启动时可以选择开启 RPC 服务,对应的 默认服务端口是 8545。。
接着,我们来了解一下智能合约运行的过程。
智能合约的运行过程是后端服务连接某节点,将 智能合约的调用(交易)发送给节点,节点在验证了交易的合法性后进行全网广播,被矿工打包到 区块中代表此交易得到确认,至此交易才算完成。
就像数据库一样,每个区块链平台都会提供主流 开发语言的 SDK(Software Development Kit,软件开发工具包),由于 Geth 本身就是用 Go 语言 编写的,因此若想使用 Go 语言连接节点、发交易,直接在工程内导入 go-ethereum(Geth 源码) 包就可以了,剩下的问题就是流程和 API 的事情了。
总结一下,智能合约被调用的两个关键点是节点和 SDK。
由于 IPC 要求后端与节点必须在同一主机,所以很多时候开发者都会采用 RPC 模式。除了 RPC,以太坊也为开发者提供了 json- rpc 接口,本文就不展开讨论了。
接下来介绍如何使用 Go 语言,借助 go-ethereum 源码库来实现智能合约的调用。这是有固定 步骤的,我们先来说一下总体步骤,以下面的合约为例。
步骤 01:编译合约,获取合约 ABI(Application Binary Interface,应用二进制接口)。 单击【ABI】按钮拷贝合约 ABI 信息,将其粘贴到文件 calldemo.abi 中(可使用 Go 语言IDE 创建该文件,文件名可自定义,后缀最好使用 abi)。
最好能将 calldemo.abi 单独保存在一个目录下,输入“ls”命令只能看到 calldemo.abi 文件,参 考效果如下:
步骤 02:获得合约地址。注意要将合约部署到 Geth 节点。因此 Environment 选择为 Web3 Provider。
在【Environment】选项框中选择“Web3 Provider”,然后单击【Deploy】按钮。
部署后,获得合约地址为:0xa09209c28AEf59a4653b905792a9a910E78E7407。
步骤 03:利用 abigen 工具(Geth 工具包内的可执行程序)编译智能合约为 Go 代码。abigen 工具的作用是将 abi 文件转换为 Go 代码,命令如下:
其中各参数的含义如下。 (1)abi:是指定传入的 abi 文件。 (2)type:是指定输出文件中的基本结构类型。 (3)pkg:指定输出文件 package 名称。 (4)out:指定输出文件名。 执行后,将在代码目录下看到 funcdemo.go 文件,读者可以打开该文件欣赏一下,注意不要修改它。
步骤 04:创建 main.go,填入如下代码。 注意代码中 HexToAddress 函数内要传入该合约部署后的地址,此地址在步骤 01 中获得。
步骤 04:设置 go mod,以便工程自动识别。
前面有所提及,若要使用 Go 语言调用智能合约,需要下载 go-ethereum 工程,可以使用下面 的指令:
该指令会自动将 go-ethereum 下载到“$GOPATH/src/github.com/ethereum/go-ethereum”,这样还算 不错。不过,Go 语言自 1.11 版本后,增加了 module 管理工程的模式。只要设置好了 go mod,下载 依赖工程的事情就不必关心了。
接下来设置 module 生效和 GOPROXY,命令如下:
在项目工程内,执行初始化,calldemo 可以自定义名称。
步骤 05:运行代码。执行代码,将看到下面的效果,以及最终输出的 2020。
上述输出信息中,可以看到 Go 语言会自动下载依赖文件,这就是 go mod 的神奇之处。看到 2020,相信读者也知道运行结果是正确的了。
本文题目:go语言做量化交易,go语言做量化交易和python哪个好
文章链接:http://ybzwz.com/article/dscpipp.html