#!/usr/bin/env python
# -*- coding: utf-8 -*-
import talib
import cross_order as order
import time

# atr周期
atr_period = 14
# 买卖时高于或低于ATR值的倍数
buy_multi_atr = 2
sell_multi_atr = 2

'''
简单的基于ta-lib的ATR标策略示例
真实波幅(ATR average true range)主要应用于了解股价的震荡幅度和节奏,在窄幅整理行情中用于寻找突破时机。
通常情况下股价的波动幅度会保持在一定常态下,但是如果有主力资金 进出时,股价波幅往往会加剧。另外,在股价 横盘整理、
波幅减少到极点时,也往往会产生变盘行情。真实波幅(ATR)正是基于这种原理而设计的指标。
计算方法:
1.TR= ∣最高价-最低价∣和∣最高价-昨收∣ 和 ∣昨收-最低价∣ 三者中的最大值
2.真实波幅(ATR)= TR的N日简单移动平均
3.参数N设置为14日
使用方法: 如果当前价格比之前的价格高一个ATR的涨幅,买入股票 如果之前的价格比当前价格高一个ATR的涨幅,卖出股票
'''


def main():
    print("任务开始时间:", time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))

    for symbol in order.symbol_pool:
        # 设置杠杆倍数
        order.set_leverage(symbol=symbol, leverage='18')
        df = order.get_candlesticks(symbol=symbol, interval='15m', limit=str(atr_period + 1))
        atr_index = talib.ATR(df['high'], df['low'], df['close'], timeperiod=atr_period)
        if df['close'].values[-1] > df['close'].values[-2] + atr_index.values[-1] * buy_multi_atr:
            order.up_cross_order(symbol=symbol, ordtype='market', message='ATR策略提示做多')
            print('ATR策略提示做多: ' + symbol)
        if df['close'].values[-1] < df['close'].values[-2] - atr_index.values[-1] * sell_multi_atr:
            order.down_cross_order(symbol=symbol, ordtype='market', message='ATR策略提示做空')
            print('ATR策略提示做空: ' + symbol)
        time.sleep(2)

    print("任务结束时间:", time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))


if __name__ == '__main__':
    main()