打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【量化交易】如何建立算法交易系统(带信号和指标)

本指南应作为构建你自己的第一个算法交易系统的指导手册

Trading Systems

交易系统
让我们划分算法交易系统或自动交易系统的某些部分。我们将逐步介绍它们,然后在文章末尾展示一个完成的示例。

算法交易系统的一些关键要素:
1. 信号和指标
2. 交易执行系统
3. 回测模组

交易信号和指标

指标是信号的产生者。指标是一些信号发生器,可以在适当时机(股票,债券,期权等)向我们的交易系统发出警报。这可能意味着打开头寸,增加头寸,减少头寸,做空,对衍生工具采用某种策略等。长期以来,技术指标一直在算法交易系统中用于生成各类交易信号。算法交易者通常会构建和回溯指标,时间表和条目的数十种组合,以构建实际生成Alpha的信号。

You can get your API Token to start interacting with the API.

Using standard REST we’ll pass a ticker and our token and get back JSON:

开发者可以获取API令牌以开始与API进行交互。使用标准的REST,我们将传递代码和令牌,并返回JSON:

token = 'sp_znci3#zcnz49Kjznkkze'url = 'https://spawnerapi.com/bollinger/aapl/token'response = requests.get(url)print(response.json())

returns:

[{'upper’: [302.74, 307.65, (…)],

'lower’: [302.74, 288.01, (…)]}]

这些是布林带的上下带。

交易程序API中还有其他指标,例如RSI,Kelton Bands等。

使用此类API的好处是我们不必收集自己的数据。

我们可以跳过建立大量数据管道的操作,而直接访问我们的交易指标。

我们可以直观地看到上下布林带的样子:

bands = response.json()upper = bands[0]['upper']lower = bands[0]['lower']# Using Plotlyfig.add_trace(go.Scatter(x=date, y=upper, line_color='rgba(107, 191, 22,1)', name='Upper Band'))fig.add_trace(go.Scatter(x=date, y=lower, line_color='rgba(214, 14, 14,1)', name='Lower Band'))

上方和下方布林带的绘制是在股价的简单移动平均线(SMA)之上和之下的一个标准偏差处绘制的。这类波段对价格的波动较为敏感。一些交易者喜欢在价格触及下限时买入,从上限触及空头,并在价格触及移动平均线时退出任一头寸。

那么我们该如何在算法中实现该逻辑?让我们编写一些伪代码:

if price divided by lower band less than 5% different and price > lower band: long $1500if price divided by upper band less than 5% different and price < upper band: short $1500

然后,我们可以编写平仓交易头寸的逻辑。交易平仓逻辑可以变得非常复杂。例如,投资者可能希望逐渐获利,在某些条件下获利,比如说在头寸崩溃时下达止损单,等等……:

if position_value > 1550:       exit position if position_value < 1450:       exit position

让我们用Python编写此代码,看看如何执行订单。


订单执行系统

因此,我们收到了一个自己想要的交易信号,那么我们如何设置订单执行?我们将为此使用AlpacaAPI。羊驼(ALPACA) 有一个免费的交易API,通过它我们可以以编程方式建立我们的交易。除了以用户身份以外,我没有与羊驼毛有任何关联。但是我可以说,通过在各种经纪人中设置这些系统,Alpaca的使用要比主流经纪人提供的大多数API容易得多。我们可以构建一个API并为我们的交易系统(例如Flask App)公开端点。就本文而言,我们将所有内容保存在一个文件中。我们将使用计时器不断检查我们关注的股票行情的市场状况。如果其中任何一个触发我们的指标以发出信号,我们将执行交易!这是一个指标的例子。如果价格进入低于布林通道下限<0.5%的范围,我们将返回信号。

def indicator(ticker): # Get lower Bollinger Band url = 'https://spawnerapi.com/bollinger/' + ticker + '/' + token response = requests.get(url) bands = response.json() lower = bands[0]['lower'] moving_avg = bands[0]['average'] # get last value in list (latest band values) lower = lower[-1] moving_avg = moving_avg[-1] # Get real-time price quote url = 'https://spawnerapi.com/price/' + ticker + '/' + token response = requests.get(url) price = response.json()['price'] # Return signal or no signal if price > lower and ((price / lower)-1) < .005: return 'buy lower', moving_avg[-1], price else: return 'no signal', 'no avg', price

现在我们可以建立订单执行功能模组

#我们将传输一个报价(ticker),要购买的数量以及获利和止损限制。

def submit(ticker, quantity, profit_limit, stop_limit):    api.submit_order(       symbol=ticker,       side='buy',       type='market',       qty=str(quantity),       time_in_force='day',       order_class='bracket',       take_profit=dict(           limit_price=str(profit_limit),       ),       stop_loss=dict(           stop_price=str(stop_limit),           limit_price=str(stop_limit),       )    )

最后,我们将编写一个过于简化的函数(不健壮!),以便每隔几秒钟检查一次信号,并在信号触发时执行交易。注意:重要的是我们不要无限次触发购买订单, 信号可能会长时间保持高电平,因此请确保您摆脱了循环!实现此目的的一种方法是列出您正在观看的股票行情清单,每当触发购买时,都可以从列表中删除该股票行情。

由你决定!这是一个过于简化的功能,只会检查一次信号,执行并退出信号。

def timer(): x = True while x==True: print('Checking Signal...') signal, moving_avg, price = indicator('AAPL') if signal == 'buy lower': submit('AAPL', 5, moving_avg, (price-(price*.02))) print('Executing Trade.') # exit loop x = False else: print('No Signal.') time.sleep(2)

Let’s test!

自动交易系统…v0.1!

如果我们查看Alpaca门户网站,我们将看到已提交交易,并设置了我们的利润和止损限额。

订单历史风险管理将交易保持在设定的风险参数之内非常重要。这意味着要适当调整头寸大小,限制波动性等条件的暴露,最大程度地减少亏损,管理风险价值等……我们将在另一篇文章中讨论未来的风险。这些指标中的许多指标已在Spawner API中处于活动状态。

下期我们再来讨论回测系统。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
盈利封顶:释放MACD BOLL交易策略的力量(源码示例)
布林线、布林极限、极限宽指标公式
在期货交易系统中,用哪个指标做进出场信号比较靠谱?
[指标] 利用Donchianl通道突破构建有利可图的交易系统
通达信指标原码.BB布林极限 - 〖技术分析交流〗
期货慢速KD如何运用好点?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服