您的位置 首页 股票入门

【量化交易快速入门】多股票策略

在前文中,我们将单只股票移动平均策略的策略内容写如下:

如果昨日收盘价高于过去20日均价,今日开盘买入股票

如果昨天的收盘价低于过去20天的平均价格,该股将于今日卖出

现在,我们要利用计算机强大的数据处理能力,同时监控市场上的多只股票,在条件具备的情况下进行相应的交易. 简言之,原单只股票策略应针对多只股票实施

如果超过一只股票昨天的收盘价高于过去20天的平均价格,今天开盘买入该股

如果超过一只股票昨天的收盘价低于过去20天的平均价格,今天开盘卖出该股票

那么如何使用代码对计算机说呢?传统的方法是找出人们想做什么,然后把它翻译成代码

有多少股票?即确定股票的范围

(计算季: 让我帮你暗中侦查. 总是告诉我我在看谁!)每天检查每只股票昨天的收盘价是否高于过去20天的平均价格. 如果是,你可以在开盘时买,而不是在开盘时卖出. 每天都这样做. 循环

(计算器季: 哪只股票有动作,我拿小钱过去杀掉~)

下一步是按照前面提到的基本框架的例程来打牌,即初始化加循环

(季: 要想学好,套路不能少

我们要确定选股范围,这里有一个简单的点,只选两只,比如兔宝宝(002043)和思念你(002582). 代码如下:

def initialize(context):
    g.security = ['002043.XSHE','002582.XSHE']# 存入兔宝宝、好想你 的股票代码

相比之下,单只股票策略的初始化代码如下:

def initialize(context):
    g.security = '002043.XSHE'# 存入兔宝宝 的股票代码

如您所见,多个股票代码用逗号分隔,两边用括号括起来. 括在括号中的这种类型的数据称为列表. 形状如下:

[x1,x2,x3,...,xn]

当多个股票代码打包成一个列表时,我们可以将它们一起命名(例如这里的security). 就像我们把多个股票代码放在一个盒子里,然后把它们的名字写在盒子外面. 这样,当你想让电脑把股票代码拿来计算,或者什么的时候,只要告诉她g.security的事,她就会知道这是盒子. 她不必一一解释每只股票的名字

问答和扩展:

初始化完成,循环的一部分开始

我们发现,所谓多股策略就是对多只股票逐一实施一只股票策略. 因此,当只选择两只股票时,只需为每只股票重新写下原来的单只股票策略,例如:

股票量化交易入门_股票 量化 交易_股票 量化交易

def initialize(context):
    g.security1 = '002043.XSHE'
    g.security2 = '002582.XSHE'
def handle_data(context, data):
    last_price = data[g.security1].close
    average_price = data[g.security1].mavg(20, 'close')
    cash = context.portfolio.cash
    if last_price > average_price:
        order_value(g.security1, cash)
    elif last_price < average_price:
        order_target(g.security1, 0)
    last_price = data[g.security2].close
    average_price = data[g.security2].mavg(20, 'close')
    cash = context.portfolio.cash
    if last_price > average_price:
        order_value(g.security2, cash)
    elif last_price < average_price:
        order_target(g.security2, 0)

(这不是很重要,代码应该太长,因此注释将被保存. )

基本上,原始的单一股票代码写两次,两个股票写两次. 如果有成千上万的股票,他们没有死

所以我们要用for来告诉计算机对多个股票一个接一个地做相同系列的操作

For的用法如下:

# 把x中的数据依次取出暂时放入i中
for i in x:
    描述操作的代码
# 其中x的数据类型需要是list。

此代码可解释为面试:

(x就像一队等待的面试官. 我是面试的房间,操作就是面试的过程. )

取X中的第一个数据,放入I进行运算

(排在最前面的人进去面试,然后出来)

然后从X取第二个数据,覆盖I中的原始数据进行操作

(第二个人进去面试,出来了)

这一直持续到X中的最后一个数据被获取和操作

(直到最后一次面试结束)

问答和扩展:

在申请我们的多股策略后,我们的策略如下:

def initialize(context):
    # 存入兔宝宝、好想你 的股票代码
    g.security = ['002043.XSHE','002582.XSHE']
def handle_data(context, data):
    # 把g.security中的股票代码依次取出,逐个进行单股票均线策略
    for i in g.security:
        # 获取取得最近日收盘价,命名为last_price
        last_price = data[i].close
        # 获取近二十日股票收盘价的平均价,命名为average_price
        average_price = data[i].mavg(20, 'close')
        # 获取当前现金数量,命名为cash
        cash = context.portfolio.cash
        # 如果昨日收盘价高出二十日平均价, 则买入,否则卖出。
        if last_price > average_price:
            order_value(i, cash)# 用per_cash的资金量买入股票i
        elif last_price < average_price:
            order_target(i, 0)# 将股票仓位调整到0,即全卖出

在这一点上股票量化交易入门,它是一个完整的操作策略

然而,当我们将原来的单只股票策略的买卖方法应用于多只股票时,逻辑上会出现只要其中一只股票符合买入条件,它就会用所有的资金买入,所以就没有资金去购买其他股票了. 即使剩余的股票符合条件,策略也总是最多持有一只股票

当然,这种买卖逻辑无可厚非,但总的来说,多股策略相对于单只股票策略的优势在于,它不仅可以在更大范围内找到机会,而且可以通过同时持有多只股票来帮助我们分散风险

因此,我们有必要继续研究每次花多少钱买股票,这样策略可以同时持有多只股票

每一次交易信号出现,如果成交金额不全,应该买卖多少?这是一个复杂的问题. 每个人对每种策略可能有不同的看法,也没有明确的方法. 在这里我们只做简单的处理,即资金按照个股的数量进行配置和储备,哪个股票发出信号,股票的资金份额就会完全交易

具体说明及代码如下:

将基金分为两部分(一部分是给小兔子的,一部分是给你的),每个基金的金额是每个现金

# cash除以g.security中的股票数,得到per_cash
per_cash = cash/len(g.security)

如果昨天的收盘价高于20天的平均价格,用每股现金的资金购买股票

否则,卖掉所有股份

翻译成代码:

if last_price > average_price:
    order_value(i, per_cash)# 用per_cash的资金量买入股票i
elif last_price < average_price:
    order_target(i, 0)# 将股票i持有量调整到0,即全卖出

编写买卖代码,策略完成股票量化交易入门,如下所示

def initialize(context):
    # 存入兔宝宝、好想你 的股票代码
    g.security = ['002043.XSHE','002582.XSHE']
def handle_data(context, data):
# 把g.security中的股票代码依次取出,逐个进行单股票均线策略
    for i in g.security:
        # 获取取得最近日收盘价,命名为last_price
        last_price = data[i].close
        # 获取近二十日股票收盘价的平均价,命名为average_price
        average_price = data[i].mavg(20, 'close')
        # 获取当前现金数量,命名为cash
        cash = context.portfolio.cash
        # cash除以g.security中的股票数,得到per_cash
        per_cash = cash/len(g.security)
        # 如果昨日收盘价高出二十日平均价, 则买入,否则卖出。
        if last_price > average_price:
            order_value(i, cash)# 用当前所有资金买入股票
        elif last_price < average_price:
            order_target(i, 0)# 将股票仓位调整到0,即全卖出

现在,单击runbacktesting. 如果代码没有问题,回溯测试将顺利进行. 回溯测试结果如下:

至此配资炒股配资网站,您已经完成了一个简单策略的回溯测试

你能理解并学会使用列表数据类型吗. 你能理解并学会使用for语句吗. 尽量调整多只个股的数量,如将选股范围调整为沪深300指数成份股. 如果昨日收盘价的买入价为5%,则昨日收盘价的平均买入价和卖出价将调整为5%. 如果昨日收盘价的平均买入价调整为5%,则买入价将调整为较低的买入价. (注: 乘法代号为“*”,a的5%表示为a*0.05)

关于作者: 股票配资

热门文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注