چگونه با TensorFlow یک ابزار متعادل سازی مجدد سبد کریپتو بسازیم؟
ابزار متعادل سازی مجدد سبد کریپتو مدیریت سبد ارزهای دیجیتال به دلیل ماهیت بی ثبات بازارهای کریپتو می تواند چالش برانگیز باشد.
ابزارهای مبتنی بر هوش مصنوعی برای کمک به معامله گران و سرمایه گذاران در تصمیم گیری های مبتنی بر داده ها به طور فزاینده ای محبوب می شوند.
در این راهنما، ما به شما نشان خواهیم داد که چگونه با استفاده از TensorFlow و CoinGecko API یک ابزار تعادل مجدد سبد ارزهای دیجیتال بسازید.
در پایان این آموزش، شما یک مدل کاری خواهید داشت که روند قیمت کریپتو را پیشبینی میکند و استراتژیهای تعادل مجدد را بر اساس پیشبینیهای هوش مصنوعی پیادهسازی میکند.
خرید و فروش ارز دیجیتال با حجم بالا
معاملات خرید و فروش تتر، بیت کوین و.....
تمام ارزهای لیست شده در بایننس
از ارزش 1000 دلار تتر تا هر میزان، بدون محدودیت
تعادل مجدد پورتفولیو چیست؟
توازن مجدد پرتفولیو فرآیند تنظیم مجدد وزن دارایی ها در یک سبد سرمایه گذاری است.
در کریپتو، تعادل مجدد به مدیریت ریسک و حفظ تخصیص مورد نظر با وجود نوسانات قیمت کمک می کند.
به عنوان مثال، اگر پورتفولیوی شما 60٪ بیت کوین (BTC) و 40٪ اتریوم (ETH) تقسیم شود، افزایش ناگهانی قیمت بیت کوین می تواند تخصیص شما را منحرف کند.
تعادل مجدد پرتفوی را به تخصیص هدف خود باز می گرداند.
چگونه هوش مصنوعی و یادگیری ماشین تعادل مجدد را افزایش می دهند.
با یادگیری ماشینی، میتوانید روند قیمتها را پیشبینی کنید و تصمیمات هوشمندانهتری در مورد زمان و نحوه متعادل کردن مجدد سبد خود بگیرید.
با استفاده از TensorFlow، مدل LSTM (حافظه کوتاه مدت بلندمدت) را برای پیشبینی حرکت قیمت بر اساس دادههای تاریخی آموزش میدهیم.
پیش نیازها ی ابزار متعادل سازی مجدد سبد کریپتو
قبل از شروع، اطمینان حاصل کنید که دانش کاری اولیه در مورد موارد زیر را دارید:
پایتون
این پروژه به شدت به برنامه نویسی پایتون متکی است و از این رو، درک نحو، کتابخانه ها و نحوه دستکاری داده ها ضروری است. اطمینان حاصل کنید که پایتون (نسخه 3.8 یا بالاتر) روی سیستم شما نصب شده است. مدیر بسته پایتون، پیپ، برای نصب وابستگیهای مورد استفاده در این پروژه مورد نیاز است – مراحل نصب را در زیر شرح میدهیم.
CoinGecko API
ما از طرح آزمایشی رایگان CoinGecko API برای واکشی داده های نمودار بازار برای ارزهای رمزنگاری شده استفاده خواهیم کرد – به ویژه، نقطه پایانی /coins/{id}/market_chart.
💡نکته حرفهای: میتوانید شناسه API سکهها را از طریق نقطه پایانی /coins/list یا از طریق این برگه Google ارجاع دهید.
طرح دمو API برای هر کسی که یک حساب CoinGecko داشته باشد، به طور رایگان قابل دسترسی است، حداکثر 10000 تماس در ماه و محدودیت نرخ 30 تماس در دقیقه. بیش از 60 نقطه پایانی را در اسناد API ما کاوش کنید، یا یک حساب آزمایشی ایجاد کنید تا آن را امتحان کنید!
مبانی یادگیری ماشین و آشنایی با TensorFlow
آشنایی با مفاهیم اصلی یادگیری ماشین، مانند مجموعه دادهها، مدلها، آموزش، آزمایش و ارزیابی، به شما در درک جریان کار کمک میکند.
به طور خاص، ما از چارچوب یادگیری ماشینی TensorFlow که برای ایجاد و آموزش مدلها استفاده میشود، استفاده خواهیم کرد. آشنایی با TensorFlow یا کتابخانه ای مشابه (مانند PyTorch) برای پیاده سازی مدل LSTM مورد استفاده در این پروژه بسیار مهم است.
مبانی تجسم داده ها
ما از Matplotlib برای تجسم دادهها و پیشبینیها استفاده میکنیم – درک نحوه ایجاد نمودارهای خط و سفارشیسازی تجسمها مفید خواهد بود.
آشنایی با NumPy (برای عملیات عددی) و پانداها (برای مدیریت داده های جدولی) ضروری است، زیرا این کتابخانه ها ستون فقرات دستکاری داده ها را در پایتون تشکیل می دهند.
ویرایشگر متن یا IDE
یک ویرایشگر متن قوی یا IDE مانند Visual Studio Code (VSCode) یا PyCharm برای کدنویسی توصیه می شود. این ابزارها ویژگی هایی مانند برجسته سازی نحو، اشکال زدایی و برنامه های افزودنی را برای بهبود تجربه توسعه ارائه می دهند.
خدمت جدید و استثنائی در صرافی بیت گرند
انجام کامل مراحل احراز هویت بایننس ( KYC ) برای تمام کاربران ایرانی ، توسط تیم کارشناسان صرافی بیت گرند، انجام خواهد شد.
تماس در ساعات کاری (10صبح تا 6 بعد از ظهر )
نصب بسته پایتون و پیپ با استفاده از کد ویژوال استودیو
برای نصب پایتون و پیپ با استفاده از VSCode، ابتدا پایتون را از وبسایت رسمی پایتون دانلود و نصب کنید و مطمئن شوید که در حین نصب، کادری که میگوید «افزودن پایتون به مسیر» را علامت بزنید.
پس از نصب، با باز کردن یک ترمینال و اجرای python –version و pip –version بررسی کنید که پایتون و پیپ کار می کنند. اگر از macOS یا Linux استفاده میکنید، دستورالعملهای مخصوص پلتفرم را در وبسایت پایتون دنبال کنید.
سپس کد ویژوال استودیو را از وب سایت VSCode دانلود و نصب کنید و سپس VSCode را باز کنید.
افزونه پایتون را با رفتن به نمای افزونه ها (Ctrl+Shift+X یا Cmd+Shift+X در macOS)، جستجوی «Python» توسط مایکروسافت و کلیک کردن بر روی «Install» نصب کنید. پس از آن، می توانید با اجرای pip –version در ترمینال تأیید کنید که پیپ نصب شده است. اگر نصب نشده است، می توانید python -m surepip –upgrade را برای نصب آن اجرا کنید.
اکنون می توانید هر بسته پایتون مورد نیاز را با استفاده از pip نصب کنید، به عنوان مثال، درخواست نصب pip.
برای جداسازی پروژه، استفاده از محیط مجازی توصیه می شود. برای ایجاد یکی، python -m venv venv را در ترمینال اجرا کنید، سپس آن را با .\\venv\\Scripts\\activate در ویندوز یا منبع venv/bin/activate در macOS/Linux فعال کنید.
با فعال بودن محیط مجازی، هر وابستگی مورد نیاز برای پروژه خود را با استفاده از pip نصب کنید. برای غیرفعال کردن، کافیست تایپ کنید deactivate. می توانید کد پایتون خود را با ایجاد یک .
فایل py در VSCode و اجرای آن از طریق ترمینال یا با کلیک راست روی آن و انتخاب “Run Python File in Terminal”. این تنظیمات تضمین می کند که همه چیز برای شروع کدنویسی با پایتون در VSCode دارید.
توجه: برای نصب TensorFlow در ویندوز، از Python 3.11 استفاده کنید. یک محیط مجازی ایجاد کنید و TensorFlow را با pip install tensorflow pandas numpy requests sci-kit-learn flask نصب کنید. تغییر به پایتون 3.11 مشکل سازگاری را حل کرد.
با وجود این پیش نیازها، شما به خوبی مجهز خواهید شد تا بتوانید ابزار متعادل سازی مجدد سبد ارزهای دیجیتال مبتنی بر هوش مصنوعی خود را شروع کنید. بیایید شیرجه بزنیم!
ساختار فایل Rebalancer پورتفولیو کریپتو
در اینجا ساختار فایل برای پروژه Crypto Portfolio Rebalancer آمده است:
/project-directory
/templates
index.html
/static
script.js
app.py
rebalance.py
مرحله 1. اسکریپت کد متوازن مجدد پورتفولیو کریپتو
در این بخش، به rebalance.py می پردازیم، اسکریپت کلیدی که ابزار تعادل مجدد سبد رمزنگاری مبتنی بر هوش مصنوعی ما را تقویت می کند. ما واردات، توابع و منطق ضروری را که باعث کارکرد این برنامه میشود، بررسی میکنیم.
import requests
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
from sklearn.preprocessing import MinMaxScaler
# Step 1: Fetch Historical Data Using CoinGecko API
def fetch_historical_data(crypto_id, currency='usd', days='90', api_key=None):
url = f"https://api.coingecko.com/api/v3/coins/{crypto_id}/market_chart"
params = {'vs_currency': currency, 'days': days}
headers = {'Authorization': f'Bearer {api_key}'} if api_key else {}
response = requests.get(url, params=params, headers=headers)
data = response.json()
prices = [price[1] for price in data['prices']]
return prices
# Step 2: Preprocess the Data
def preprocess_data(prices, sequence_length=30):
scaler = MinMaxScaler()
prices = np.array(prices).reshape(-1, 1)
scaled_prices = scaler.fit_transform(prices)
sequences = []
targets = []
for i in range(len(scaled_prices) - sequence_length):
sequences.append(scaled_prices[i:i + sequence_length])
targets.append(scaled_prices[i + sequence_length])
return np.array(sequences), np.array(targets), scaler
# Step 3: Build and Train the LSTM Model
def build_lstm_model(input_shape):
model = Sequential([
LSTM(50, return_sequences=True, input_shape=input_shape),
LSTM(50),
Dense(1)
])
model.compile(optimizer='adam', loss='mse')
return model
# Step 4: Predict Future Prices Using LSTM Model
def predict_price(model, sequences, scaler):
# Predict the next price
last_sequence = sequences[-1].reshape(1, -1, 1)
predicted_price_scaled = model.predict(last_sequence)
# Inverse transform to get the actual price
predicted_price = scaler.inverse_transform(predicted_price_scaled)
return float(predicted_price[0][0]) # Convert to standard float
# Step 5: Rebalance the Portfolio
def rebalance_portfolio(current_allocation, predicted_prices, target_allocation):
# Calculate the current total value of the portfolio
current_value = sum(current_allocation)
# Calculate target values based on current total value and target allocation percentages
target_values = [current_value * ta for ta in target_allocation]
# Calculate adjustments required to reach target values
adjustments = []
for current, target, predicted in zip(current_allocation, target_values, predicted_prices):
# Adjust the current allocation based on predicted prices to meet the target allocation
adjusted_value = target / predicted
adjustments.append(adjusted_value - current)
# Round adjustments and predicted prices to 3 decimal places for consistency
adjustments = [round(adj, 3) for adj in adjustments]
predicted_prices = [round(price, 3) for price in predicted_prices]
return adjustments, predicted_prices
به طور خلاصه، rebalance.py برای واکشی دادههای قیمت تاریخی، پیش پردازش آن برای آموزش مدل، ساخت و آموزش یک مدل LSTM برای پیشبینی قیمتهای آتی، و سپس استفاده از این پیشبینیها برای متعادل کردن مجدد سبد ارزهای دیجیتال با توجه به تخصیصهای هدف، طراحی شده است.
هر مرحله برای عملکرد کلی ابزار تعادل مجدد حیاتی است و تضمین می کند که پرتفوی با پیش بینی های بازار آتی هماهنگ است.
این منجر به یک استراتژی مدیریت پورتفولیو پویا و موثر می شود که توسط هوش مصنوعی طراحی شده است.
مرحله 2. رابط کاربری Frontend را بسازید
در اینجا، HTML و CSS را برای رابط کاربری (UI) ایجاد می کنیم که به کاربران اجازه می دهد نمونه کارها و تخصیص هدف خود را وارد کنند.
به طور خلاصه، rebalance.py برای واکشی دادههای قیمت تاریخی، پیش پردازش آن برای آموزش مدل، ساخت و آموزش یک مدل LSTM برای پیشبینی قیمتهای آتی، و سپس استفاده از این پیشبینیها برای متعادل کردن مجدد سبد ارزهای دیجیتال با توجه به تخصیصهای هدف، طراحی شده است.
هر مرحله برای عملکرد کلی ابزار تعادل مجدد حیاتی است و تضمین می کند که پرتفوی با پیش بینی های بازار آتی هماهنگ است.
این منجر به یک استراتژی مدیریت پورتفولیو پویا و موثر می شود که توسط هوش مصنوعی طراحی شده است.
HTML (index.html)
Crypto Portfolio Rebalancer
AI-Powered Crypto Portfolio Rebalancer
Loading BTC price...
Loading ETH price...
Rebalancing, please wait...
مرحله 3. افزودن تعامل با جاوا اسکریپت
برای کاربردی کردن رابط کاربری، ما آن را به پشتیبان پایتون برای پیشبینیها و تعادل مجدد پورتفولیو با استفاده از جاوا اسکریپت متصل میکنیم.
JavaScript File (script.js)
document.addEventListener("DOMContentLoaded", async function() {
const response = await fetch("/current_prices");
const data = await response.json();
document.getElementById("current-btc-price").innerText = `Current BTC Price: $${data.btc_price.toFixed(3)}`;
document.getElementById("current-eth-price").innerText = `Current ETH Price: $${data.eth_price.toFixed(3)}`;
});
document.getElementById("rebalance-form").addEventListener("submit", async function (event) {
event.preventDefault();
// Show the loading message
document.getElementById("loading").style.display = "block";
document.getElementById("results").innerHTML = "";
// Reset the progress bar
const progressBar = document.getElementById("progress-bar");
progressBar.style.width = "0%";
const btcAllocation = parseFloat(document.getElementById("btc-allocation").value);
const ethAllocation = parseFloat(document.getElementById("eth-allocation").value);
const targetBTC = parseFloat(document.getElementById("target-btc").value) / 100;
const targetETH = parseFloat(document.getElementById("target-eth").value) / 100;
const response = await fetch("/rebalance", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
current_allocation: [btcAllocation, ethAllocation],
target_allocation: [targetBTC, targetETH],
}),
});
const result = await response.json();
console.log(result); // Log the result to see if data is returned
displayResults(result.adjustments, result.predicted_prices);
// Hide the loading message
document.getElementById("loading").style.display = "none";
});
function updateProgressBar(progress) {
const progressBar = document.getElementById("progress-bar");
progressBar.style.width = `${progress}%`;
}
function displayResults(adjustments, predicted_prices) {
const resultsDiv = document.getElementById("results");
resultsDiv.innerHTML = `
Rebalancing Suggestions
Adjust BTC by: $${adjustments[0].toFixed(3)}
Adjust ETH by: $${adjustments[1].toFixed(3)}
Predicted Prices
Predicted BTC Price: $${predicted_prices[0].toFixed(3)}
Predicted ETH Price: $${predicted_prices[1].toFixed(3)}
`;
}
// Example of updating the progress bar incrementally
async function simulateProgress() {
for (let i = 0; i <= 100; i += 10) {
updateProgressBar(i);
await new Promise(resolve => setTimeout(resolve, 100)); // Simulate training time
}
}
// Call simulateProgress when the form is submitted
document.getElementById("rebalance-form").addEventListener("submit", async function (event) {
event.preventDefault();
// Show the loading message
document.getElementById("loading").style.display = "block";
document.getElementById("results").innerHTML = "";
// Reset the progress bar
const progressBar = document.getElementById("progress-bar");
progressBar.style.width = "0%";
const btcAllocation = parseFloat(document.getElementById("btc-allocation").value);
const ethAllocation = parseFloat(document.getElementById("eth-allocation").value);
const targetBTC = parseFloat(document.getElementById("target-btc").value) / 100;
const targetETH = parseFloat(document.getElementById("target-eth").value) / 100;
// Start simulating progress
simulateProgress();
const response = await fetch("/rebalance", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
current_allocation: [btcAllocation, ethAllocation],
target_allocation: [targetBTC, targetETH],
}),
});
const result = await response.json();
console.log(result); // Log the result to see if data is returned
displayResults(result.adjustments, result.predicted_prices);
// Hide the loading message
document.getElementById("loading").style.display = "none";
});
مرحله 4. Backend پایتون را ایجاد کنید.
Backend منطق پیشبینی و تعادل مجدد را مدیریت میکند. از Flask برای ایجاد یک API استفاده کنید که فرانتاند جاوا اسکریپت را به منطق پایتون متصل میکند.
Flask Server (app.py)
from flask import Flask, request, jsonify, render_template
from rebalance import fetch_historical_data, preprocess_data, build_lstm_model, predict_price, rebalance_portfolio
from tqdm import tqdm
app = Flask(__name__)
# Serve the index.html file
@app.route('/')
def home():
return render_template('index.html')
@app.route('/current_prices', methods=['GET'])
def current_prices():
api_key = 'CG-api_key '
btc_prices = fetch_historical_data('bitcoin', api_key=api_key)
eth_prices = fetch_historical_data('ethereum', api_key=api_key)
current_btc_price = round(btc_prices[-1], 3) # Latest BTC price
current_eth_price = round(eth_prices[-1], 3) # Latest ETH price
return jsonify({"btc_price": current_btc_price, "eth_price": current_eth_price})
@app.route('/rebalance', methods=['POST'])
def rebalance():
data = request.json
current_allocation = data['current_allocation']
target_allocation = data['target_allocation']
# Fetching data from CoinGecko API
api_key = 'CG-k63f6X3RG6T7MGVf6BdfHWh1'
btc_prices = fetch_historical_data('bitcoin', api_key=api_key)
eth_prices = fetch_historical_data('ethereum', api_key=api_key)
# Preprocessing data
btc_sequences, btc_targets, btc_scaler = preprocess_data(btc_prices)
eth_sequences, eth_targets, eth_scaler = preprocess_data(eth_prices)
# Build and train model
btc_model = build_lstm_model((btc_sequences.shape[1], btc_sequences.shape[2]))
eth_model = build_lstm_model((eth_sequences.shape[1], eth_sequences.shape[2]))
# Training BTC model with progress bar
for epoch in tqdm(range(10), desc="Training BTC Model"):
btc_model.fit(btc_sequences, btc_targets, epochs=1, batch_size=32, verbose=0)
# Training ETH model with progress bar
for epoch in tqdm(range(10), desc="Training ETH Model"):
eth_model.fit(eth_sequences, eth_targets, epochs=1, batch_size=32, verbose=0)
# Predict prices using the trained models
btc_predicted_price = predict_price(btc_model, btc_sequences, btc_scaler)
eth_predicted_price = predict_price(eth_model, eth_sequences, eth_scaler)
# Log the predicted prices to ensure they're being generated
print(f"Predicted BTC Price: {btc_predicted_price}")
print(f"Predicted ETH Price: {eth_predicted_price}")
predicted_prices = [btc_predicted_price, eth_predicted_price]
# Rebalance portfolio
adjustments, rounded_predicted_prices = rebalance_portfolio(current_allocation, predicted_prices, target_allocation)
return jsonify({"adjustments": adjustments, "predicted_prices": rounded_predicted_prices})
if __name__ == '__main__':
app.run(debug=True)
مرحله 5. برنامه را اجرا کنید.
- app.py را اجرا کنید تا باطن سرور Flask راه اندازی شود.
- index.html را در مرورگر خود باز کنید تا قسمت جلو باز شود:
- جزئیات پورتفولیو و درصد تخصیص هدف خود را وارد کنید و روی «تعادل مجدد پورتفولیو» کلیک کنید.
- مشاهده نتایج: رابط کاربری پیشنهادات تعادل مجدد را بر اساس ورودی شما و پیشبینیهای هوش مصنوعی نشان میدهد.
نتیجه گیری ابزار متعادل سازی مجدد سبد کریپتو
- تبریک می گویم! شما یک ابزار متعادلسازی مجدد سبد رمزنگاری مبتنی بر هوش مصنوعی ایجاد کردهاید که API CoinGecko و TensorFlow را ادغام میکند.
این ابزار پویا به ما امکان میدهد دادههای تاریخی را واکشی کنیم، دادههای بلادرنگ را با استفاده از LSTM تجزیه و تحلیل کنیم و قیمتها و روند ارزهای دیجیتال را پیشبینی کنیم.
همچنین با تنظیم تخصیص ها بر اساس درصدهای هدف، تعادل مجدد سبد ارزهای دیجیتال شما را خودکار می کند.
در نهایت، ظاهر سفارشی ما ما را قادر می سازد تا نتایج را به طور موثر تجسم و تجزیه و تحلیل کنیم.
بعد چه می شود؟ گسترش عملکرد
این راهنما به عنوان پایه ای برای ایجاد یک ابزار تعادل مجدد سبد ارزهای دیجیتال عمل می کند، اما راه های مختلفی برای گسترش عملکرد آن وجود دارد. افزودن ارزهای رمزنگاری شده بیشتر، دامنه دارایی ها را در مدیریت پورتفولیوی شما گسترش می دهد. همچنین میتوانید دقت پیشبینی را با آزمایش مدلهای مختلف یادگیری ماشین و فراپارامترهای تنظیم دقیق بهبود بخشید، که میتواند منجر به تصمیمگیریهای دقیقتر برای تعادل مجدد شود. علاوه بر این، ادغام APIهای تبادل ارزهای دیجیتال زنده مانند Binance یا Coinbase Pro می تواند ابزار شما را به سطح بالاتری برساند و تعادل مجدد خودکار را در زمان واقعی بر اساس حرکات بازار ممکن می کند. این پیشرفتها میتوانند ابزار شما را به یک راهحل قدرتمندتر و پویاتر متناسب با استراتژی سرمایهگذاری رمزنگاری منحصربهفرد شما تبدیل کنند.
مشاوران با تجربه بهترین راه حل برای افزایش سود و کاهش ریسک معاملات ارز دیجیتال
خدمتی جدید از صرافی ارز دیجیتال بیت گرند،پکیج های مختلف مشاوره و آموزش برای آفراد مبتدی، متوسط و خبره در این حوزه
منبع ابزار متعادل سازی مجدد سبد کریپتو How to Build a Crypto Portfolio Rebalancing Tool with TensorFlow | CoinGecko API