import time
import requests
import json
import numpy as np
import pandas as pd
from datetime import datetime
def get_klines(symbol, interval, limit=100):
url = "https://fapi.binance.com/fapi/v1/klines"
params = {'symbol': symbol, 'interval': interval, 'limit': limit}
print(url)
print(json.dumps(params, indent=4))
response = requests.get(url, params=params)
return response.json()
def calculate_ema(prices, period):
return pd.Series(prices).ewm(span=period, adjust=False).mean().tolist()
def calculate_macd(prices, fast_period, slow_period, signal_period):
ema_fast = calculate_ema(prices, fast_period)
ema_slow = calculate_ema(prices, slow_period)
macd = np.subtract(ema_fast[-len(ema_slow):], ema_slow)
signal = calculate_ema(macd, signal_period)
return macd, signal
def find_crossovers(macd, signal, times, prices, ema5, ema30):
crosses = []
valid_crosses = [] # 用于記錄有效的穿透事件
min_length = min(len(macd), len(signal))
last_valid_time = datetime.min # 初始化上一個(gè)有效事件的時(shí)間
for i in range(1, min_length):
closing_price = prices[i]
ema5_price = ema5[i]
ema30_price = ema30[i]
current_time = times[i]
cross_time = datetime.utcfromtimestamp(current_time / 1000 + 8*3600)
time_diff = (cross_time - last_valid_time).total_seconds() / 60 # 計(jì)算時(shí)間差,單位轉(zhuǎn)換為分鐘
confidence_msg = ""
if macd[i-1] < signal[i-1] and macd[i] > signal[i] and closing_price > ema5_price:
if time_diff >= 30 or last_valid_time == datetime.min: # 判斷時(shí)間間隔是否符合要求或者是第一個(gè)事件
if closing_price > ema5_price and closing_price > ema30_price:
confidence_msg = "放心做吧"
crosses.append((i, 'Gold', cross_time.strftime('%Y-%m-%d %H:%M:%S'), '有效', confidence_msg))
last_valid_time = cross_time
else:
crosses.append((i, 'Gold', cross_time.strftime('%Y-%m-%d %H:%M:%S'), '無效', ""))
elif macd[i-1] > signal[i-1] and macd[i] < signal[i] and closing_price < ema5_price:
if time_diff >= 30 or last_valid_time == datetime.min:
if closing_price < ema5_price and closing_price < ema30_price:
confidence_msg = "放心做吧"
crosses.append((i, 'Dead', cross_time.strftime('%Y-%m-%d %H:%M:%S'), '有效', confidence_msg))
last_valid_time = cross_time
else:
crosses.append((i, 'Dead', cross_time.strftime('%Y-%m-%d %H:%M:%S'), '無效', ""))
return crosses
def main():
symbol = 'BTCUSDT'
interval = '5m'
limit = 500
klines = get_klines(symbol, interval, limit)
prices = [float(kline[4]) for kline in klines]
times = [int(kline[0]) for kline in klines]
ema5 = calculate_ema(prices, 5)
ema30 = calculate_ema(prices, 30)
macd, signal = calculate_macd(prices, 6, 7, 4)
crossovers = find_crossovers(macd, signal, times, prices, ema5, ema30)
for index, crossover_type, cross_time, status, confidence_msg in crossovers:
print(f"{crossover_type} Cross at {cross_time}: {status}. {confidence_msg}")
if __name__ == '__main__':
while True:
main()
time.sleep(30)
有效的穿越事件
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 一、有時(shí)候會(huì)碰到這么一個(gè)有趣的現(xiàn)象,上層的ViewGroup把事件傳遞到下層的View,導(dǎo)致一些奇怪的bug。 比...
- 這幾天鬧得沸沸揚(yáng)揚(yáng)的事件當(dāng)屬于關(guān)于未成年犯罪的問題,也正是這幾天惡性的青少年暴力事件而引發(fā)的社會(huì)討論。一方面,我覺...
- 這兩天全網(wǎng)都被4月17日發(fā)生在上海的一則新聞刷屏了,一名17歲少年在學(xué)校與同學(xué)發(fā)生矛盾被媽媽批評(píng),結(jié)果在媽媽駕車行...
- 一談《道德與法治》課上的有效化活動(dòng)教學(xué) 道德教育要回歸生活,怎樣讓《道德與法治》教學(xué)提高實(shí)效性,達(dá)到育人目的...
- 在生活中、工作中,我們常常會(huì)遇到這樣的情況:就是我們?cè)谧鍪虑闀r(shí)非常的努力,但收獲卻很少,成效也不明顯。最終導(dǎo)致對(duì)生...