Esempio n. 1
0
def get_prediction_data(klines, n):
    """获取用于随机森林的n个输入数据(n为数据长度): n天中每天的特征参数及其涨跌情况"""
    close_prices = klines.close[- 30 - n:]  # 获取本交易日及以前的收盘价(此时在预定的收盘时间: 认为本交易日已收盘)
    # 计算所需指标
    sma_data = sma(close_prices, 30, 0.02)[-n:]  # SMA指标, 函数默认时间周期参数:30
    wma_data = ema2(close_prices, 30)[-n:]  # WMA指标
    mom_data = trma(close_prices, 30)[-n:]  # MOM指标
    x_all = list(zip(sma_data, wma_data, mom_data))  # 样本特征组
    y_all = list(klines.close.iloc[i] >= klines.close.iloc[i - 1] for i in list(reversed(range(-1, -n - 1, -1))))  # 样本标签组
    # x_all:            大前天指标 前天指标 昨天指标 (今天指标)
    # y_all:   (大前天)    前天     昨天    今天      -明天-
    # 准备算法需要用到的数据
    x_train = x_all[: -1]  # 训练数据: 特征
    x_predict = x_all[-1]  # 预测数据(用本交易日的指标预测下一交易日的涨跌)
    y_train = y_all[1:]  # 训练数据: 标签 (去掉第一个数据后让其与指标隔一位对齐(例如: 昨天的特征 -> 对应预测今天的涨跌标签))

    return x_train, y_train, x_predict
Esempio n. 2
0
                                end_dt=date(2020, 1, 15)),
            web_gui="http://127.0.0.1:61122/")

#接收行情设置持仓目标
klines = api.get_kline_serial(SYMBOL, 60 * 60)  # 1小时K线
klines_long = api.get_kline_serial(SYMBOL, 60 * 60 * 24)  # 日K线
quote = api.get_quote(SYMBOL)
position = api.get_position(SYMBOL)
target_pos = TargetPosTask(api, SYMBOL)

#计算MACD
macd = MACD(klines, 12, 26, 9)
macd_long = MACD(klines_long, 12, 26, 9)

#计算EMA2的值,看看这个值是增长还是降低。来判断趋势的方向
direction = tafunc.ema2(klines.close, EMA2_long)
direction_long = tafunc.ema2(klines_long.close, EMA2_long)


#下面是开仓的条件,都是在小周期上开仓的.
def short_buyopen():  #在小周期上开多仓
    if direction.iloc[-1] > direction.iloc[-2] and macd['bar'].iloc[
            -1] > 0:  #参见下面一条,与其相反.
        return 1
    else:
        return 0


def short_sellopen():  #在小周期上开空仓
    if direction.iloc[-1] < direction.iloc[-2] and macd['bar'].iloc[
            -1] < 0:  #小周期长均线下行macd变绿开空仓.
Esempio n. 3
0
#下面是回测用api,实盘时候记得注释掉。
api = TqApi(TqSim(200000),
            backtest=TqBacktest(start_dt=date(2019, 7, 15),
                                end_dt=date(2020, 1, 15)),
            web_gui="http://127.0.0.1:61000/")

#接收行情设置持仓目标
klines = api.get_kline_serial(SYMBOL, 60 * 60 * 24)  # 1小时K线
klines_long = api.get_kline_serial(SYMBOL, 60 * 60 * 24)  # 日K线
quote = api.get_quote(SYMBOL)
position = api.get_position(SYMBOL)
target_pos = TargetPosTask(api, SYMBOL)

# 使用BOLL指标计算中轨、上轨和下轨,其中26为周期N  ,2为参数p
atr = ATR(klines, 26)
midline = tafunc.ema2(klines.close, MA_FAST)
topline = midline + atr.atr
bottomline = midline - atr.atr

#print("策略运行,中轨:%.2f,上轨为:%.2f,下轨为:%.2f" % (midline, topline, bottomline))

while True:
    api.wait_update()

    # 每次生成新的K线时重新计算BOLL指标
    if api.is_changing(klines.iloc[-1], "datetime") or api.is_changing(
            quote, "last_price"):
        atr.atr = ATR(klines, 26)
        midline = tafunc.ema2(klines.close, MA_FAST)
        topline = midline + atr.atr
        bottomline = midline - atr.atr