金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 2767|回复: 5

请问如何调用涨跌幅排行数据

[复制链接]

9

主题

23

帖子

33

积分

Rank: 2

等级: 标准版

注册:
2021-5-20
曾用名:
发表于 2021-7-13 09:26 | 显示全部楼层 |阅读模式
现可通过自定义指标方式获得了主力合约的涨幅排名。 请问如何在策略中调用该排名及对应品种,实现做多涨幅排行前5,做空跌幅排行前5的操作?
回复

使用道具 举报

20

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2021-7-13 09:27 | 显示全部楼层
不行。只能是我知道这个品种了,获取它在某个板块的排名。但是我根据排名获取品种,这样反过来就不行了。

金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

1

主题

861

帖子

871

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2021-7-13 09:42 | 显示全部楼层
pel 做这些比较麻烦,如果你用金字塔的python做的话就较为简单了
回复

使用道具 举报

9

主题

23

帖子

33

积分

Rank: 2

等级: 标准版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2021-7-13 11:33 | 显示全部楼层
请问我下面的代码是否可以实现:涨幅前5,且连续两根1分钟线收阳开多;跌幅前5,且连续两根1分钟线收阴开空。

import time
import os
import csv
import numpy as np
import talib as ta

# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
def init(context):
    #品种数
    context.num = 5
    context.code = []
   
# before_trading此函数会在每天策略交易开始前被调用,当天只会被调用一次
def before_trading(context):
    pass

# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context):
    # 开始编写你的主要的算法逻辑
    try:
        context.code = get_blocks("主力合约板块",1)
        zf = []
        code = []
        #筛选主力合约
        for i in context.code:
            code.append(i)
        #获得实时涨幅
        for j in code:
            zf = get_dynainf(j, 14)
            zf.append(zf)
        zf_ra = np.array(zf)
        #对涨幅进行排序,buy_list是排名前几的品种列表,sell_list是排名后几的品种列表
        sort = np.argsort(zf_ra)
        code = np.array(code)
        buy_list = code[[sort[:context.num]]]
        sell_list = code[[sort[-context.num:]]]
        
        #获得持仓品种信息
        ho =get_portfolio_book(0)
        if len(ho)>0:
            for k in ho:
                if not(k in buy_list):
                        sell_close(k, 'Market', 0, 10, 0,serial_id = 1)
            for l in ho:
                if not(l in sell_list):
                        buy_close(k, 'Market', 0, 10, 0,serial_id = 2)
                        
        for kk in buy_list:
            close1=history_bars(kk,3,'1m','CLOSE')
            open1=history_bars(kk,3,'1m','open')
            if not(kk in ho) and close1[-3]>open1[-3] and close1[-2]>open1[-2] :
                buy_open(kk, 'Market', 0, 10, 0,serial_id = 3)
        for ll in sell_list:
            close2=history_bars(ll,3,'1m','CLOSE')
            open2=history_bars(ll,3,'1m','open')
            if not(ll in ho) and close1[-3]<open1[-3] and close1[-2]<open1[-2]:
                sell_open(ll, 'Market', 0, 10, 0,serial_id = 4)
    except:
        pass

# after_trading函数会在每天交易结束后被调用,当天只会被调用一次
def after_trading(context):
    pass
回复

使用道具 举报

9

主题

23

帖子

33

积分

Rank: 2

等级: 标准版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2021-7-13 11:40 | 显示全部楼层
技术015 发表于 2021-7-13 09:42
pel 做这些比较麻烦,如果你用金字塔的python做的话就较为简单了

请问我下面的代码是否可以实现:涨幅前5,且连续两根1分钟线收阳开多;跌幅前5,且连续两根1分钟线收阴开空。

import time
import os
import csv
import numpy as np
import talib as ta

# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
def init(context):
    #品种数
    context.num = 5
    context.code = []
   
# before_trading此函数会在每天策略交易开始前被调用,当天只会被调用一次
def before_trading(context):
    pass

# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context):
    # 开始编写你的主要的算法逻辑
    try:
        context.code = get_blocks("主力合约板块",1)
        zf = []
        code = []
        #筛选主力合约
        for i in context.code:
            code.append(i)
        #获得实时涨幅
        for j in code:
            zf = get_dynainf(j, 14)
            zf.append(zf)
        zf_ra = np.array(zf)
        #对涨幅进行排序,buy_list是排名前几的品种列表,sell_list是排名后几的品种列表
        sort = np.argsort(zf_ra)
        code = np.array(code)
        buy_list = code[[sort[:context.num]]]
        sell_list = code[[sort[-context.num:]]]
        
        #获得持仓品种信息
        ho =get_portfolio_book(0)
        if len(ho)>0:
            for k in ho:
                if not(k in buy_list):
                        sell_close(k, 'Market', 0, 10, 0,serial_id = 1)
            for l in ho:
                if not(l in sell_list):
                        buy_close(k, 'Market', 0, 10, 0,serial_id = 2)
                        
        for kk in buy_list:
            close1=history_bars(kk,3,'1m','CLOSE')
            open1=history_bars(kk,3,'1m','open')
            if not(kk in ho) and close1[-3]>open1[-3] and close1[-2]>open1[-2] :
                buy_open(kk, 'Market', 0, 10, 0,serial_id = 3)
        for ll in sell_list:
            close2=history_bars(ll,3,'1m','CLOSE')
            open2=history_bars(ll,3,'1m','open')
            if not(ll in ho) and close1[-3]<open1[-3] and close1[-2]<open1[-2]:
                sell_open(ll, 'Market', 0, 10, 0,serial_id = 4)
    except:
        pass

# after_trading函数会在每天交易结束后被调用,当天只会被调用一次
def after_trading(context):
    pass
回复

使用道具 举报

31

主题

7737

帖子

7747

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2021-7-13 13:19 | 显示全部楼层
可以把,你自己print输出些排序品种自己看下就好
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2024-12-23 04:10 , Processed in 0.187883 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表