K线上穿/下穿10日均线,如图所示:

类似于,之前写的基于聚宽平台写的一个典型的双均线策略思想类似,当K线上穿10日均线时,发出买入信号,当K先下穿10日均线时,发出卖出信号。

比较当前的收盘价和MA10之间的关系,为判断是否满足K线上穿/下穿10日均线做准备:

def compare_close_2_ma_10(code,dailies):
"""
比较当前的收盘价和MA10的关系
:param dailies:日线列表,10个元素,最后一个为当前交易日
:return 0 相等,1 大于,-1小于,None 结果未知
"""
current_daily = dailies[9]
close_sum = 0
for daily in dailies:
#10天中只要有一天停盘就返回False
if 'is_trading' not in daily or daily['is_trading'] is False:
return None
#用后复权累计
close_sum += daily['close']
#计算MA10
ma_10 = close_sum/10 #判断收盘价和MA10 的大小
post_adjusted_close = current_daily['close']
differ = post_adjusted_close - ma_10 print('计算信号,股票:%s ,收盘价:%7.2f,MA10:%7.2f,差值:%7.2f' %(code,post_adjusted_close,ma_10,differ),flush=True)
if differ>0:
return 1
elif differ<0:
return -1
else:
return 0

判断某只股票是否满足K线上穿10日均线

def is_k_up_break_ma10(code,_date):
"""
判断某支股票在某日是否满足K线上穿10日均线
:param code:股票代码
:param _date:日期
:return True/False
"""
#从后复权的日行情数据集中根据股票代码、日期和是否正常交易为条件查询一条数据
#如果能够找到数据,则认为当日股票为正常交易状态,否则为停牌
current_daily = DB_CONN['daily_hfq'].find_one(
{'code':code,'date':_date,'is_trading':True})
#没有找到股票的日行情数据,则认为不符合日线收盘价上穿10均线的条件
if current_daily is None:
print('计算信号,K线上穿MA10,当日没有K线,股票:%s,日期:%s'%(code,_date),flush=True)
return False
#从后复权的日行情数据集中查询11条数据,因为要连接着两个交易日的10均线价格,所以需要11条数据才能保证提取到临近的10交易日的数据
daily_cursor = DB_CONN['daily_hfq'].find(
{'code':code,'date':{'$lte':_date}},
limit=11,
#10日均线计算的时候是包含当日在内的向前连续10个交易日的收盘价的平均值,所以要按时间倒序排列
sort=[('date',DESCENDING)],
#计算价格均线时,只需要用到价格,并且如果连续10个交易日内都有停牌情况,则不进行计算
projection={'code':True,'close':True,'is_trading':True}
)
#从游标中取出日行情数据放进列表中
dailies = [x for x in daily_cursor]
#如果数据不满足11个,也就是说无法进行计算两个交易日的MA10,则认为不符合上穿的条件
if len(dailies)<11:
print('计算信号,K线上穿MA10,当日K线不足,股票:%s,日期:%s'%(code,_date),flush=True)
return False
#查询时是倒序排列的,而计算MA10时是向前10根,所以要将顺序反转
dailies.reverse()
#计算前一个交易日收盘价和MA10的关系
last_close_2_last_ma10 = compare_close_2_ma_10(code,dailies[:10])
#计算当前交易日收盘价和MA10的关系
current_close_2_current_ma10 = compare_close_2_ma_10(code,dailies[1:]) #将关键数据打印出来,便于对比
print('计算信号,K线上穿MA10,股票:%s,日期:%s,前一日:%s,当日:%s' %(code,_date,str(last_close_2_last_ma10),str(current_close_2_current_ma10)),flush=True)
#前一日或当日任意一天的收盘价和MA10的关系不存在,则都认为不符合上穿条件
if last_close_2_last_ma10 is None or current_close_2_current_ma10 is None:
return False #只有前一日收盘价小于等于MA10,且当前交易日的收盘价大于MA10,则认为当日收盘价上穿MA10
is_break = (last_close_2_last_ma10 <= 0) & (current_close_2_current_ma10 ==1)
print('计算信号,K线上穿MA10,股票:%s,日期:%s,前一日:%s,当日:%s,突破:%s'%(code,_date,str(last_close_2_last_ma10),str(current_close_2_current_ma10),str(is_break)),flush=True)
#返回判断结果
return True

判断某只股票是否满足K线上穿10日均线

def is_k_down_break_ma10(code,_date):
"""
判断某只股票在某日是否满足K线下穿10日均线
:param code:股票代码
:param _date:日期
:return True/False
"""
#从后复权的日行情数据集中根据股票代码、日期和是否正常交易为条件查询一条数据
#如果能够找到数据,则认为当日股票为正常交易状态,否则为停牌
current_daily = DB_CONN['daily_hfq'].find_one(
{'code':code,'date':_date,'is_trading':True})
#没有找到股票的日行情数据,则认为不符合日线收盘价上下穿10均线的条件
if current_daily is None:
print('计算信号,K线下穿MA10,当日没有K线,股票:%s,日期:%s'%(code,_date),flush=True)
return False
#从后复权的日行情数据集中查询11条数据,因为要连接着两个交易日的10均线价格,所以需要11条数据才能保证提取到临近的10交易日的数据
daily_cursor = DB_CONN['daily_hfq'].find(
{'code':code,'date':{'$lte':_date}},
limit=11,
#10日均线计算的时候是包含当日在内的向前连续10个交易日的收盘价的平均值,所以要按时间倒序排列
sort=[('date',DESCENDING)],
#计算价格均线时,只需要用到价格,并且如果连续10个交易日内都有停牌情况,则不进行计算
projection={'code':True,'close':True,'is_trading':True}
)
#从游标中取出日行情数据放进列表中
dailies = [x for x in daily_cursor]
#如果数据不满足11个,也就是说无法进行计算两个交易日的MA10,则认为不符合下穿的条件
if len(dailies)<11:
print('计算信号,K线下穿MA10,当日K线不足,股票:%s,日期:%s'%(code,_date),flush=True)
return False
#查询时是倒序排列的,而计算MA10时是向前10根,所以要将顺序反转
dailies.reverse()
#计算前一个交易日收盘价和MA10的关系
last_close_2_last_ma10 = compare_close_2_ma_10(code,dailies[:10])
#计算当前交易日收盘价和MA10的关系
current_close_2_current_ma10 = compare_close_2_ma_10(code,dailies[1:]) #将关键数据打印出来,便于对比
print('计算信号,K线下穿MA10,股票:%s,日期:%s,前一日:%s,当日:%s' %(code,_date,str(last_close_2_last_ma10),str(current_close_2_current_ma10)),flush=True)
#前一日或当日任意一天的收盘价和MA10的关系不存在,则都认为不符合下穿条件
if last_close_2_last_ma10 is None or current_close_2_current_ma10 is None:
return False #只有前一日收盘价大于等于MA10,且当前交易日的收盘价小于MA10,则认为当日收盘价下穿MA10
is_break = (last_close_2_last_ma10 >= 0) & (current_close_2_current_ma10 ==-1)
print('计算信号,K线下穿MA10,股票:%s,日期:%s,前一日:%s,当日:%s,突破:%s'%(code,_date,str(last_close_2_last_ma10),str(current_close_2_current_ma10),str(is_break)),flush=True)
#返回判断结果
return True

开发一组交易信号--K线与10均线的关系的更多相关文章

  1. 用python的matplotlib和numpy库绘制股票K线均线和成交量的整合效果(含量化验证交易策略代码)

    在用python的matplotlib和numpy库绘制股票K线均线的整合效果(含从网络接口爬取数据和验证交易策略代码)一文里,我讲述了通过爬虫接口得到股票数据并绘制出K线均线图形的方式,在本文里,将 ...

  2. K线指标线计算方法

    指标线计算方法 l   dataDR = Kdata(原始数据)/dr(除权)  //除权数据等于原始数据除以DR(除权) 其中,日K数据 需要本地进行除权处理.周K和月K的旧数据部分由服务器进行处理 ...

  3. 用python的matplotlib和numpy库绘制股票K线均线的整合效果(含从网络接口爬取数据和验证交易策略代码)

    本人最近在尝试着发表“以股票案例入门Python编程语言”系列的文章,在这些文章里,将用Python工具绘制各种股票指标,在讲述各股票指标的含义以及计算方式的同时,验证基于各种指标的交易策略,本文是第 ...

  4. vue使用tradingview开发K线图相关问题

    vue使用tradingview开发K线图相关问题 1.TradingView中文开发文档https://b.aitrade.ga/books/tradingview/CHANGE-LOG.html2 ...

  5. h5行情k线开发

    前言         由于公司项目需要,要做港股行情的H5版本,经过分析需求,大致有两块难点: 一是行情的推送接收,二是行情K线的生成及相关操作.本文章主要分析行情K线的相关实现,由于我们前端团队之前 ...

  6. BotVS开发基础—2.1 账户、行情、K线、深度

    代码 import json def main(): Log("账号信息:", exchange.GetAccount()); # Log("K 线数据:", ...

  7. 看K线学炒股(8.10)

    今天大盘看起来疲软但强势的一天,收涨1.01%. 广东骏亚,现价21.39,看尾盘,这只票现在看还有下跌空间,但也有反弹可能,跌到21元以下均价上可加仓,博止跌反弹.现在60分钟线看有点阴雨绵绵的意思 ...

  8. Python交互K线工具 K线核心功能+指标切换

    Python交互K线工具 K线核心功能+指标切换 aiqtt团队量化研究,用vn.py回测和研究策略.基于vnpy开源代码,刚开始接触pyqt,开发界面还是很痛苦,找了很多案例参考,但并不能完全满足我 ...

  9. 异动K线--庄家破绽

    <异动K线--庄家破绽(连载)> http://bbs.tianya.cn/post-stocks-612892-1.shtml ————马后炮分析,没有什么前瞻性.纯技术是害死许多钻牛角 ...

  10. 1. K线基础知识一

    1. 什么是K线: K线起源于日本米市交易,它的基本用途就是为了寻找"买卖点". 2. K线按照计算周期可分为日K线,周K线,月K线,年K线. 周K线:周一的开盘价,周五的收盘价, ...

随机推荐

  1. 微信小程序如何访问带有Token安全认证的API

    展开微信小程序访问Token安全验证的API接口API//添加一个自定义过滤器using Newtonsoft.Json;using System;using System.Collections.G ...

  2. .NET 10 首个预览版发布,跨平台开发与性能全面提升

    前言 2024年2月25日,微软正式推出 .NET 10 预览版 1,标志着这一跨平台开发框架迈入新里程碑. 本次更新聚焦 JIT 编译器优化.运行时性能提升和跨平台开发体验增强,同时引入多项开发者期 ...

  3. 『Plotly实战指南』--折线图绘制基础篇

    在数据分析的世界中,折线图是一种不可或缺的可视化工具. 它能够清晰地展示数据随时间或其他变量的变化趋势,帮助我们快速发现数据中的模式.趋势和异常. 无论是金融市场分析.气象数据监测,还是业务增长趋势预 ...

  4. js 时间转时间戳

    前言 有时候我们用时间插件,选择好时间后,需要把日期格式转化为时间戳,再传到后台 时间转时间戳 let time = Math.floor(new Date("2014-04-23 18:5 ...

  5. Windows核心编程 进程与线程

    进程 Windows作为多任务操作系统,允许多个程序同时在系统中运行.这些程序被称为进程,进程运行在一片独立的空间中,受到操作系统保护,操作系统的很多资源都是围绕着进程来进行分配,可以理解为操作系统维 ...

  6. jupyterhub nginx proxy pass----ipv6转ipv4实现内网穿透

    jupyterhub 很多人应该已经对jupyter和notebook已经有所了解了.如果是多人共享服务器的话,就需要用到jupyter的多用户版本jupyterhub.jupyterhub架构如图所 ...

  7. 探秘Transformer系列之(19)----FlashAttention V2 及升级版本

    探秘Transformer系列之(19)----FlashAttention V2 及升级版本 目录 探秘Transformer系列之(19)----FlashAttention V2 及升级版本 0 ...

  8. TidHTTP的post编码,老掉牙的问题

    TidHTTP使用post时,需要提交json字符串. 那么采用什么编码,这个问题就头大了.目前xe已经不要考虑编码转换问题.但是.... 我们使用ISuperObject操控json.那么最后提交到 ...

  9. 高格发票勾稽之BUG

    select (INVNO) AS INVCODE, SDATE ,* FROM STKSALE1 WHERE LEN(INVSCODE) > 0 AND INVSCODE = '3100000 ...

  10. java学习-6-核心类:字符串StringJoiner 和数组一起玩

    public class Main { public static void main(String[] args) { String[] names = {"Bob", &quo ...