获取3分钟金叉和死叉

import time
import hmac
import hashlib
import base64
import urllib.parse
import json
import requests
import pandas as pd


def get_klines(symbol, interval, limit=500):
    """获取K线数据"""
    url = "https://fapi.binance.com/fapi/v1/klines"
    params = {
        'symbol': symbol,
        'interval': interval,
        'limit': limit,
    }
    response = requests.get(url, params=params)
    return response.json()


def calculate_macd(data, short_period=6, long_period=7, signal_period=4):
    """计算MACD指标"""
    # 将获取的数据转换为DataFrame
    df = pd.DataFrame(data, columns=['OpenTime', 'Open', 'High', 'Low', 'Close', 'Volume', 'CloseTime',
                                     'QuoteAssetVolume', 'NumberOfTrades', 'TakerBuyBaseAssetVolume',
                                     'TakerBuyQuoteAssetVolume', 'Ignore'])

    # 将收盘价转换为数值类型
    df['Close'] = pd.to_numeric(df['Close'])

    # 计算快速EMA和慢速EMA
    df['EMA_fast'] = df['Close'].ewm(span=short_period, adjust=False).mean()
    df['EMA_slow'] = df['Close'].ewm(span=long_period, adjust=False).mean()

    # 计算DIF
    df['DIF'] = df['EMA_fast'] - df['EMA_slow']

    # 计算DEA
    df['DEA'] = df['DIF'].ewm(span=signal_period, adjust=False).mean()

    # 计算MACD
    df['MACD'] = (df['DIF'] - df['DEA']) * 2
    return df


def find_macd_crossovers(df):
    """找到MACD的金叉和死叉"""
    crossover_points = {'上穿': [], '下穿': []}
    for i in range(1, len(df)):
        if df['DIF'].iloc[i] > 0 and df['DIF'].iloc[i - 1] <= 0:
            crossover_points['上穿'].append(df['OpenTime'].iloc[i])
        elif df['DIF'].iloc[i] < 0 and df['DIF'].iloc[i - 1] >= 0:
            crossover_points['下穿'].append(df['OpenTime'].iloc[i])
    return crossover_points


def send_dingtalk_message(webhook, secret, message):
    # 获取时间戳
    timestamp = str(round(time.time() * 1000))
    # 构造签名
    secret_enc = secret.encode('utf-8')
    string_to_sign = '{}\n{}'.format(timestamp, secret)
    string_to_sign_enc = string_to_sign.encode('utf-8')
    hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
    sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
    # 构造请求URL
    webhook = '{}&timestamp={}&sign={}'.format(webhook, timestamp, sign)

    # 构造消息体
    headers = {'Content-Type': 'application/json'}
    data = {
        "msgtype": "text",
        "text": {
            "content": message
        }
    }

    # 发送请求
    response = requests.post(url=webhook, headers=headers, data=json.dumps(data))
    return response.text


# 初始化最后已知的金叉和死叉时间点
last_golden_cross = pd.Timestamp('2024-08-26 17:05:00+08:00')
last_death_cross = pd.Timestamp('2024-08-26 18:08:00+08:00')

webhook_url = "https://oapi.dingtalk.com/robot/send?access_token=8a6ddcf98d3b47c63333580bfe9d0bad55b17272eea05cc9c0af7f7be4de070d"
secret_key = "你的加签密钥"  # 如果没有设置加签,则这部分可以忽略
while True:  # 开始一个死循环
    try:
        # 获取K线数据
        symbol = 'BTCUSDT'  # 示例: BTC/USDT
        interval = '5m'  # 示例: 3分钟
        data = get_klines(symbol, interval)

        # 计算MACD
        df_macd = calculate_macd(data)

        # 找到金叉和死叉
        crossovers = find_macd_crossovers(df_macd)

        # 检查并打印新的金叉和死叉的时间点
        new_crossovers = False
        for cross_type, times in crossovers.items():
            for time_point in times:
                time_utc8 = pd.to_datetime(time_point, unit='ms').tz_localize('UTC').tz_convert('Asia/Shanghai')

                # 检查时间点是否新
                if cross_type == '上穿' and time_utc8 > last_golden_cross:
                    message = f"{interval}穿越,新的{cross_type} at: {time_utc8}"
                    print(message)
                    result = send_dingtalk_message(webhook_url, secret_key, message)
                    print(result)
                    last_golden_cross = time_utc8
                    new_crossovers = True
                elif cross_type == '下穿' and time_utc8 > last_death_cross:
                    message = f"{interval}穿越,新的{cross_type} at: {time_utc8}"
                    print(message)
                    result = send_dingtalk_message(webhook_url, secret_key, message)
                    last_death_cross = time_utc8
                    new_crossovers = True

        if not new_crossovers:
            print("没有新的金叉或死叉。")

        print("Waiting for the next update...")
        time.sleep(2)  # 每10秒查询一次,可以根据需要调整

    except KeyboardInterrupt:
        print("Program terminated by user.")
        break  # 当用户中断程序(通常是通过Ctrl+C)时,退出循环
    except Exception as e:
        print(f"An error occurred: {e}")
        # 出现错误时等待一段时间再重试,避免因临时的网络API限制导致程序终止
        time.sleep(300)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容