量化交易之QT篇 - TQZButton - 自定义按钮
Posted Post-Truth
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了量化交易之QT篇 - TQZButton - 自定义按钮相关的知识,希望对你有一定的参考价值。
// TQZButton.h
#ifndef TQZBUTTON_H
#define TQZBUTTON_H
#include <QPushButton>
enum TQZButtonType
COMMON,
CLOSE
;
class TQZButton : public QPushButton
Q_OBJECT
public:
explicit TQZButton(const QString &text, TQZButtonType buttonType , QWidget *parent = nullptr);
virtual ~TQZButton();
protected:
void enterEvent(QEvent* event);
void leaveEvent(QEvent* event);
private:
void UpdateSelf(const QString &text);
QMap<TQZButtonType, QMap<QString, QString> *>* GetButtonStyleConfig();
private:
QMap<TQZButtonType, QMap<QString, QString> *>* m_buttonStyleConfig;
TQZButtonType m_buttonType;
signals:
;
#endif // TQZBUTTON_H
// TQZButton.cpp
#include "TQZButton.h"
#include <QFont>
#include <QMouseEvent>
#include <QDebug>
TQZButton::TQZButton(const QString &text, TQZButtonType buttonType, QWidget *parent):
QPushButton(parent),
m_buttonStyleConfig(nullptr),
m_buttonType(buttonType)
this->UpdateSelf(text);
void TQZButton::UpdateSelf(const QString &text)
this->setText(text);
this->setStyleSheet(GetButtonStyleConfig()->find(m_buttonType).value()->find("common").value());
void TQZButton::enterEvent(QEvent* event)
this->setStyleSheet(GetButtonStyleConfig()->find(m_buttonType).value()->find("movein").value());
QPushButton::enterEvent(event);
void TQZButton::leaveEvent(QEvent* event)
this->setStyleSheet(GetButtonStyleConfig()->find(m_buttonType).value()->find("common").value());
QPushButton::enterEvent(event);
QMap<TQZButtonType, QMap<QString, QString>*>* TQZButton::GetButtonStyleConfig()
if (this->m_buttonStyleConfig == nullptr)
this->m_buttonStyleConfig = new QMap<TQZButtonType, QMap<QString, QString>*>;
QMap<QString, QString> *commonButtonConfig = new QMap<QString, QString>;
commonButtonConfig->insert("common", "TQZButton border: none; color: white; ");
commonButtonConfig->insert("movein", "TQZButton border-radius: 6px; border: none; background-color: rgb(63, 60, 60); color: white; ");
QMap<QString, QString> *closeButtonConfig = new QMap<QString, QString>;
closeButtonConfig->insert("common", "TQZButton border: none; color: white; ");
closeButtonConfig->insert("movein", "TQZButton border-radius: 6px; border: none; background-color: rgb(228, 64, 50); color: white; ");
this->m_buttonStyleConfig->insert(COMMON, commonButtonConfig);
this->m_buttonStyleConfig->insert(CLOSE, closeButtonConfig);
return this->m_buttonStyleConfig;
TQZButton::~TQZButton()
if (this->m_buttonStyleConfig != nullptr)
foreach (const TQZButtonType &key, this->m_buttonStyleConfig->keys())
delete this->m_buttonStyleConfig->value(key);
this->m_buttonStyleConfig->insert(key, nullptr);
delete this->m_buttonStyleConfig;
this->m_buttonStyleConfig = nullptr;
量化交易之单因子策略
量化交易之单因子策略
单因子策略
你知道剩男剩女是如何剩下的吗?
许多年后,他们都一样,都会发现自己其实可能有过一次以上的机会(虽然不一定吧)。可当初他们为什么没有出手选择呢?你再跟他们聊聊,他们都一样的,都认为自己的要求并不高,不求最有钱最好看…… 他们是这样想的:
- 长相不能太丑吧?
- 个子不能太矮吧?
- 人不能太无趣吧?
- 收入不能太低吧?
- 学历不能太差吧?
- ……
看起来,确实各个都是很一般般的要求,都没要求最好,只要求 1/3 以上,咋就找不着呢?
这是个简单的数学应用题,每个要求都只剩下 1/3 的选择,最终,只剩下差不多 4% 的选择 —— 而事实上,每个人在适龄期间,能够足够深入了解的人数不超过 150 人(包括同性),于是,得活上三辈子才有可能真的碰到。
- 这还没有算上另外一个因素:对方也在挑!
然后,那些没剩下的人,好像在这方面也没花多少心思,就直接没有了另外一些人的烦恼 —— 让人感觉真是“不公平”!
那些没剩下的人如何想的呢?他们在这方面其实都是差不多的,他们的思考模式大抵上是这样的:
- 对方只要满足最重要的一条就足够了……
绝大部分人都不是高富帅/白富美,一般是又懒又馋,工作态度能力都很糟,但身体好,心宽,生的孩子都挺可爱,或者节俭、踏实、忠诚,这些都是适合结婚的因素。
漂亮重要吗?重要,但显然有比它更重要的考虑因素。身材好重要吗?重要,但显然有比它更重要的考虑因素。学历重要吗?重要,但显然有比它更重要的考虑因素…… 经过反复探究“什么更重要”?我终于找到了一个“最重要的因素”:
- 对方是不是一个能讲道理的人?
这可能是唯一最重要的因素 —— 因为这一条满足之后,几乎没有什么问题是不能解决的,不是吗?而后来,一不小心遇到了一个各方面都不错,却竟然还是个“能讲道理”的女生。
比如说,我男人懒得令人发指(懒、没有上进心、还不愿意沟通、生活和工作态度消极),怎么办?
- 想想自己是否对亲近之人有过高期待,如果说期待不高,但他自己的生活一团糟,如果是男朋友,换了比较好
- 如果说,虽然他不上进,但他孩子、家庭照顾的很好,是一个好父亲,那就不要去要求他上进了,温和的沟通、讲道理,相当于发脾气改造他,引导他上进,不如让他支持你这个上进的人,也许效果会更好。
可能你们之间有差异、三观不同,但俩个讲道理的人在一起,也会越来越舒适、舒服。
单因子选取思路:什么更重要?什么更重要?什么更重要?······ 什么最重要?!
小市值选股策略
小市值选股策略是单因子策略的一种,以市值因子与股票收益率的相关性作为依据,选取市值较小的股票。
小市值策略诞生以来,在美股市场经过了大量的数据验证,因为收益高,有部分声音甚至认为它是过去几十年最有效的策略。
在 A 股市场上的表现也同样出色,在 2017 年以前,A 股市场上市值因子的显著性甚至超过了欧美等发达国家市场。
它来源于 1981 年美国经济学家 Banz 对纽交所长达 40 年的数据进行的一次分析统计,他发现小市值股票月均收益率比其他股票高 0.4%。
背后的原因是小市值的公司价格普遍偏低,甚至低于成本价,以及在实际的金融市场中,相较于大市值公司较为平稳的价格,小市值公司的价格波动性更强,更容易出现价格快速增长的情况。
因此投资者们会偏爱小市值的公司,期望在小市值的成长和价格波动中获得收益,从而也导致了小市值有较高的预期收益率。
由此产生了小市值策略,即投资于市值较小的股票。
不过,需要注意的是,由于小市值的核心理念就是投资市值较小的股票。
但是市值规模较小的股票在拥有更高的成长空间的同时,也意味着相较于市值规模较大的股票,有不稳定、抵御风险能力差以及消化风险能力差等缺点。
而对于 A 股市场来说,总市值规模较小的股票,往往伴随着较高的因财务状态而被退市的风险。
此时,一旦我们选中的小市值股票被退市,就会给我们带来较大的损失,策略的表现也会大受影响。
在网站的搜索框里输入:市值最小的 50 只股票,
得到了目前整个 A 股市场总市值从小到大排名的前 50 只股票。
但是仔细看的话,可以发现其中包含了不少 *ST 股票和 ST 股票。
而 *ST 股票表示着该公司的经营处于连续三年亏损的状态,退市预警。
ST 股票表示着该公司的经营处于连续二年亏损的状态,特别处理。
简单来说,这些股票有极高的被退市风险。
当我们使用小市值选股策略筛选买入这类股票时,一旦退市,将对我们的策略表现造成极大的影响。
因此,在筛选小市值股票时,这类股票是需要被我们排除的。
此外,我们不一定在整个 A 股市场挑,因为后面的可能是最不太好的股票,那家公司可以小,但一定得有未来、可增值。
更稳妥的方法是,在上证 50、中证 100、沪深 300、中证 500、中证 1000 里面选。
再选一次,发现中证 1000 最适合这个策略。
我们把中证 1000 指数作为筛选范围,从其中的 1000 只股票筛选市值较小的股票。
可是市值较小的标准究竟是什么呢,是以一个市值数值作为标准,小于标准数值的即为“市值较小”吗?
而在小市值选股策略中,我们是让股票按照总市值的大小进行从小到大排序,选择市值最小的第 i 名至第 j 名。
- 筛选标的:中证 1000
- 筛选标准:选择市值最小的第 i 名至第 j 名
- 筛选数量:在标的(中证 1000)池总数量的 1% ~ 5% 左右
- 筛选方式:一般来说,当我们进行策略研究的时候,选择最小的那部分即可,而当应用到实际市场的时候,就需要考虑风险等因素来决定是否排除市值最小的那几只,比如最后 5 名不要,因为他们随时都会掉出中证 1000
- 买入卖出:根据对公司特性和当下市场环境的研究,可以选择每个月都进行筛选买入,动态更新自己持有的标的,也可以选择只进行一次标的筛选,买入并长期持有筛选好的标的
移动平均线:如何躲过股灾和大跌
移动平均线,是计算股票之前若干天收盘价格的平均值,而后连城一条线,刻画的是价格变换的趋势。
计算均线需要先设置均线周期,将均线周期设置为 15 日(国内长期一般 120 - 240 天,短期 2-4 周),就能进入下面的计算:
- 将第 1-15 个交易日的收盘价求和,除以 15,就能得到第一个均价;
- 向后移动一个交易日,再将第 2-16 个交易日的收盘价求和,除以 15,得到第二个均价;
- 在当前交易日,股票前天 15 日均价大于昨天 15 日均价,昨天 15 日均价小于今日 15 日均价,这时均线会出现「向上的拐点」,则大概率认为股票价格在未来一段时间内上涨;
- 而当该股票前天 15 日均价小于昨天 15 日均价,昨天 15 日均价大于今日 15 日均价,均线出现「向下的拐点」,则大概率在未来一段时间内下跌。
只要投资组合收盘价高于 15 天移动平均线至少 1 个百分点,就买入;若低于 15 天移动平均线至少 1 个百分点,卖出。
这个策略会使得整个投资的波动率大幅降低了,能避开绝大部分的灭顶之灾的日子,大幅降低了股灾的一些,但也会多很多小幅但亏损,把极端风险平摊到平时了。
『布带林线:衡量市场的波动性/趋势』
布带林从统计学的标准差演变而来,由 3 根线构成,分别是上轨、中轨、下轨,形状像一个宽窄不一的“通道”。
中轨将“通道”分成了上下两部分,中轨到上轨为强势区,中轨到下轨为弱势区。
那布带林线怎么计算呢?
- 中轨:周期 N 日的移动平均线
- 上轨:中轨 + 俩倍的标准差
- 下轨:中轨 - 俩倍的标准差
股价基本都是围绕着中轨运动,并且在大部分时间股价都运行在布林带的上轨和下轨之间,小部分时间里,股价会“跑”到布林带外面去。
-
当股价处于中轨以上、上轨以下,说明投资者对其看好,预计还会涨,持有或者买入
-
当股价处于中轨以下、下轨以上,说明投资者对其看坏,预计还会跌,卖出或者不买
布带林的作用:
一、可以指示超买和超卖:
- 超买就意味着买多了,买多了,股民就需要进行卖出。可以观察到,当股价突破上轨的时候表示超买,此时极有可能回调。
- 另一方面,当股价跌落到下轨之下的时候,那么这个时候表示超卖,超卖就是卖多了,此时极有可能出现反转,有原来的下跌转变为上涨。
二、指示趋势
中轨作为一个重要的指标,可以用来指示趋势。当中轨往上运行的时候,表示市场是一个逐渐上涨的趋势。
同样的当中轨是朝下运行的时候,意味着现在是一个下跌趋势。
特别要说明的是,当股价运行在中轨和下轨之间,并且中轨是向下运行的时候,表明市场是一个非常疲软的趋势。在这样的情况下,要特别注意交易当中存在的风险。因为在这样的情况下进行股票的买入有极大的风险,可能导致较大亏损。
三、指示通道作用
当看到股价涨跌幅度加大时,布林带的带状区会变宽,表明新一波行情的到来;当股价涨跌幅度变小的时候,那么带状区域就会逐步变窄,表明现在进入盘整当中。
以上是关于量化交易之QT篇 - TQZButton - 自定义按钮的主要内容,如果未能解决你的问题,请参考以下文章