量化交易如何建立算法交易系统带信号和指标

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

算法交易系统的一些关键要素:
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 Plotly
fig.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 $1500
if 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中处于活动状态。

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/494681
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 19小时前
下一篇 2024 年 8 月 8 日

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注