股票交易用代码怎么写

股票交易用代码怎么写,第1张

股票交易使用的代码为场内代码(也称为股票代码),即每只上市的股票都有一个独立的代码,由6位数组成,比如:

1. 深交所上市的股票,代码为000001至999999;

2. 上交所上市的股票,代码为:600000至699999和900000至999999。

# coding=utf-8

from __future__ import print_function, absolute_import, unicode_literals

from gm.api import *

'''

本策略基于掘金量化平台

本策略通过获取SHSE.000300沪深300的成份股数据并统计其30天内

开盘价大于前收盘价的天数,并在该天数大于阈值10的时候加入股票池

随后对不在股票池的股票平仓并等权配置股票池的标的,每次交易间隔1个月.

回测数据为:SHSE.000300在2015-01-15的成份股

回测时间为:2017-07-01 08:00:00到2017-10-01 16:00:00

'''

def init(context):

# 每月第一个交易日的09:40 定时执行algo任务

schedule(schedule_func=algo, date_rule='1m', time_rule='09:40:00')

# context.count_bench累计天数阙值

context.count_bench = 10

# 用于对比的天数

context.count = 30

# 最大交易资金比例

context.ratio = 0.8

def algo(context):

# 获取当前时间

now = context.now

# 获取上一个交易日

last_day = get_previous_trading_date(exchange='SHSE', date=now)

# 获取沪深300成份股

context.stock300 = get_history_constituents(index='SHSE.000300', start_date=last_day,

end_date=last_day)[0]['constituents'].keys()

# 获取当天有交易的股票

not_suspended_info = get_history_instruments(symbols=context.stock300, start_date=now, end_date=now)

not_suspended_symbols = [item['symbol'] for item in not_suspended_info if not item['is_suspended']]

trade_symbols = []

if not not_suspended_symbols:

print('没有当日交易的待选股票')

return

for stock in not_suspended_symbols:

recent_data = history_n(symbol=stock, frequency='1d', count=context.count, fields='pre_close,open',

fill_missing='Last', adjust=ADJUST_PREV, end_time=now, df=True)

diff = recent_data['open'] - recent_data['pre_close']

# 获取累计天数超过阙值的标的池.并剔除当天没有交易的股票

if len(diff[diff >0]) >= context.count_bench:

trade_symbols.append(stock)

print('本次股票池有股票数目: ', len(trade_symbols))

# 计算权重

percent = 1.0 / len(trade_symbols) * context.ratio

# 获取当前所有仓位

positions = context.account().positions()

# 如标的池有仓位,平不在标的池的仓位

for position in positions:

symbol = position['symbol']

if symbol not in trade_symbols:

order_target_percent(symbol=symbol, percent=0, order_type=OrderType_Market,

position_side=PositionSide_Long)

print('市价单平不在标的池的', symbol)

# 对标的池进行 *** 作

for symbol in trade_symbols:

order_target_percent(symbol=symbol, percent=percent, order_type=OrderType_Market,

position_side=PositionSide_Long)

print(symbol, '以市价单调整至权重', percent)

if __name__ == '__main__':

'''

strategy_id策略ID,由系统生成

filename文件名,请与本文件名保持一致

mode实时模式:MODE_LIVE回测模式:MODE_BACKTEST

token绑定计算机的ID,可在系统设置-密钥管理中生成

backtest_start_time回测开始时间

backtest_end_time回测结束时间

backtest_adjust股票复权方式不复权:ADJUST_NONE前复权:ADJUST_PREV后复权:ADJUST_POST

backtest_initial_cash回测初始资金

backtest_commission_ratio回测佣金比例

backtest_slippage_ratio回测滑点比例

'''

run(strategy_id='strategy_id',

filename='main.py',

mode=MODE_BACKTEST,

token='token_id',

backtest_start_time='2017-07-01 08:00:00',

backtest_end_time='2017-10-01 16:00:00',

backtest_adjust=ADJUST_PREV,

backtest_initial_cash=10000000,

backtest_commission_ratio=0.0001,

backtest_slippage_ratio=0.0001)

在通达信功能菜单,公式系统,程序交易评测系统,这里可以回测系统,系统自带了几个简单的交易系统,均线,MACD,唐奇安,等,你也可以把你自己的技术指标加上交易信号用回测,也可以做参数优化,但通达信做量化交易不适合。下面截几张图

举个例子,以均线策略为例,默认均线参数是5日和20日,回测时间2016年12月21日到2018年12月21日,回策品种上证指数,结果是年化收益-0.72%胜率也只有29.41%,资金曲线也不好看,接下来参数优化,20日与14日均线 胜率能达到78.57%,年化收益6.2%,这只是个简单的例子,不具备实用性,实际回测你要回测的时间更长,品种更多,观测更仔细,使用参数优化要注意有可能会有过度优化,还有策略设计,回测所选交易价格,如何防止偷价,滑价等等等。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11352795.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存