کتابخانه CCXT
پکیج بسیار قدرتمند CCXT ، پل ارتباطی مستحکم برای توسعه دهندگانی که قصد برقراری ارتباط با بازار ارزهای دیجیتال را دارند. با استفاده از این کتابخانه با زبان برنامه نویسی که در آن تخصص دارید می توانید با بسیاری از مارکت های جهانی ارتباط برقرار کنید و عملیات مورد نظر خود را از طریق Api انجام دهید.
CCXT Crypto Api از چه زبان های برنامه نویسی پشتیبانی می کند ؟
همانطور که در داکیومنت این کتابخانه اشاره شده Ccxt قابلیت نصب در زبان های JavaScript ، Python ، Php ، .Net/Csharp را دارد ! همچنین مثال هایی هم برای هر یک از این زبان ها قرار داده شده تا به راحتی بتوانید الگوریتم این پکیج را درک کنید!
CCXT Crypto Api قابلیت ارتباط با چه صرافی هایی را دارد ؟
کتابحانه Ccxt قابلیت ارتباط با بیش از ۱۰۰ صرافی مطرح دنیا را دارد که با خیال آسوده می توانید به امکانات مورد نیاز خود در هر صرافی دسترسی داشته باشید ! برخی از این صرافی ها عبارتند از :
- ارتباط با صرافی کوینکس Coinex
- ارتباط با صرافی بایننس Binance
- ارتباط با صرافی کوکوین Kucoin
- ارتباط با صرافی بای بیت Bybit
- ارتباط با صرافی بینگیکس Bingx
- ارتباط با صرافی پولونیکس Poloniex
- ارتباط با صرافی کوین بیس CoinBase
و ….
کاربرد کتابخانه Ccxt
کتابخانه CCXT (CryptoCurrency eXchange Trading Library) یک ابزار قدرتمند برای معاملهگران و توسعهدهندگان ارزهای دیجیتال است که به منظور تسهیل در دسترسی به APIهای مختلف صرافیهای ارز دیجیتال طراحی شده است. این کتابخانه برای زبانهای برنامهنویسی مختلفی مانند JavaScript، Python و PHP موجود است و امکانات گستردهای را برای تعامل با صرافیها فراهم میکند.
دسترسی به صرافیهای متعدد
CCXT دسترسی به بیش از ۱۲۰ صرافی مختلف را با استفاده از یک رابط یکپارچه فراهم میکند. این امر باعث میشود که معاملهگران بتوانند به سادگی با APIهای مختلف بدون نیاز به یادگیری جزئیات هر کدام، کار کنند.
انجام معاملات
این کتابخانه امکاناتی برای انجام معاملات خرید و فروش، ثبت سفارشات و مدیریت آنها فراهم میکند. معاملهگران میتوانند به راحتی انواع سفارشات مانند limit، market، stop-loss و غیره را ایجاد و مدیریت کنند.
دریافت دادههای بازار
با استفاده از CCXT میتوان دادههای مربوط به قیمتها، حجم معاملات، تاریخچه قیمتها و دیگر اطلاعات مربوط به بازار را از صرافیهای مختلف دریافت کرد. این دادهها برای تحلیلهای تکنیکال و ساخت الگوریتمهای معاملاتی بسیار مفید هستند.
مدیریت حساب کاربری: امکاناتی برای مدیریت حساب کاربری مانند مشاهده موجودی حساب، انتقال داراییها بین حسابها و برداشت و واریز ارزهای دیجیتال نیز در این کتابخانه وجود دارد.
پشتیبانی از انواع ارزهای دیجیتال
این کتابخانه از انواع ارزهای دیجیتال مختلف پشتیبانی میکند و به کاربر امکان میدهد تا با طیف وسیعی از ارزها و توکنها کار کند.
بررسی یک نمونه اتصال با کتابخانه CCXT
بعنوان مثال برای ارتباط با بازار کوینکس (CoinEx)، اتصال به حساب کاربری و ثبت سفارش در بازار اسپات بر اساس استراتژی شاخص قدرت نسبی (RSI) و میانگین متحرک همگرایی-واگرایی (MACD) می توانیم در زبان برنامه نویسی پایتون به شکل زیر اقدام کنیم .
مراحل:
- نصب کتابخانه CCXT
- ایجاد کلیدهای API در کوینکس
- اتصال به API کوینکس با استفاده از CCXT
- دریافت دادههای بازار و محاسبه RSI و MACD
- بررسی شرایط استراتژی و ثبت سفارش
import ccxt
import pandas as pd
import ta
# اتصال به API کوینکس
api_key = 'your_api_key'
secret = 'your_secret'
coinex = ccxt.coinex({
'apiKey': api_key,
'secret': secret,
})
# دریافت دادههای تاریخی (کندلها) از کوینکس
symbol = 'BTC/USDT'
timeframe = '1h' # تایمفریم کندلها
ohlcv = coinex.fetch_ohlcv(symbol, timeframe)
# تبدیل دادهها به DataFrame
df = pd.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
df.set_index('timestamp', inplace=True)
# محاسبه RSI و MACD
df['rsi'] = ta.momentum.RSIIndicator(df['close']).rsi()
df['macd'], df['macd_signal'], df['macd_hist'] = ta.trend.MACD(df['close']).macd(), ta.trend.MACD(df['close']).macd_signal(), ta.trend.MACD(df['close']).macd_diff()
# بررسی شرایط استراتژی و ثبت سفارش
def execute_trade(symbol, side, amount):
order = coinex.create_order(symbol, 'market', side, amount)
print(f"Order placed: {order}")
# پارامترهای استراتژی
rsi_overbought = 70
rsi_oversold = 30
macd_buy_condition = (df['macd'] > df['macd_signal'])
macd_sell_condition = (df['macd'] < df['macd_signal'])
# بررسی آخرین مقدار RSI و MACD
if df['rsi'].iloc[-1] < rsi_oversold and macd_buy_condition.iloc[-1]:
print("Buying signal detected")
execute_trade(symbol, 'buy', 0.001) # مقدار خرید را به دلخواه تنظیم کنید
elif df['rsi'].iloc[-1] > rsi_overbought and macd_sell_condition.iloc[-1]:
print("Selling signal detected")
execute_trade(symbol, 'sell', 0.001) # مقدار فروش را به دلخواه تنظیم کنید
برای تبدیل مثال بالا به زبان برنامه نویسی Php می توانیم به شکل زیر عمل کنیم :
$apiKey,
'secret' => $secret,
));
// دریافت دادههای تاریخی (کندلها) از کوینکس
$symbol = 'BTC/USDT';
$timeframe = '1h'; // تایمفریم کندلها
$ohlcv = $exchange->fetch_ohlcv($symbol, $timeframe);
// تبدیل دادهها به آرایه
$timestamps = array_column($ohlcv, 0);
$opens = array_column($ohlcv, 1);
$highs = array_column($ohlcv, 2);
$lows = array_column($ohlcv, 3);
$closes = array_column($ohlcv, 4);
$volumes = array_column($ohlcv, 5);
// محاسبه RSI
function calculate_rsi($closes, $period = 14) {
$gains = [];
$losses = [];
for ($i = 1; $i < count($closes); $i++) {
$difference = $closes[$i] - $closes[$i - 1];
if ($difference >= 0) {
$gains[] = $difference;
$losses[] = 0;
} else {
$gains[] = 0;
$losses[] = abs($difference);
}
}
$average_gain = array_sum(array_slice($gains, 0, $period)) / $period;
$average_loss = array_sum(array_slice($losses, 0, $period)) / $period;
for ($i = $period; $i < count($gains); $i++) {
$average_gain = (($average_gain * ($period - 1)) + $gains[$i]) / $period;
$average_loss = (($average_loss * ($period - 1)) + $losses[$i]) / $period;
}
$rs = $average_gain / $average_loss;
return 100 - (100 / (1 + $rs));
}
// محاسبه MACD
function calculate_macd($closes, $short_period = 12, $long_period = 26, $signal_period = 9) {
$short_ema = trader_ema($closes, $short_period);
$long_ema = trader_ema($closes, $long_period);
$macd = array_map(function ($short, $long) {
return $short - $long;
}, $short_ema, $long_ema);
$signal = trader_ema($macd, $signal_period);
$histogram = array_map(function ($macd_value, $signal_value) {
return $macd_value - $signal_value;
}, $macd, $signal);
return [$macd, $signal, $histogram];
}
// بررسی شرایط استراتژی و ثبت سفارش
function execute_trade($exchange, $symbol, $side, $amount) {
$order = $exchange->create_order($symbol, 'market', $side, $amount);
echo "Order placed: " . json_encode($order) . "\n";
}
// محاسبه RSI و MACD
$rsi = calculate_rsi($closes);
list($macd, $macd_signal, $macd_hist) = calculate_macd($closes);
// پارامترهای استراتژی
$rsi_overbought = 70;
$rsi_oversold = 30;
$macd_buy_condition = end($macd) > end($macd_signal);
$macd_sell_condition = end($macd) < end($macd_signal);
// بررسی آخرین مقدار RSI و MACD
if ($rsi < $rsi_oversold && $macd_buy_condition) {
echo "Buying signal detected\n";
execute_trade($exchange, $symbol, 'buy', 0.001); // مقدار خرید را به دلخواه تنظیم کنید
} elseif ($rsi > $rsi_overbought && $macd_sell_condition) {
echo "Selling signal detected\n";
execute_trade($exchange, $symbol, 'sell', 0.001); // مقدار فروش را به دلخواه تنظیم کنید
}
?>
اگر بخواهیم از زبان برنامه نویسی javascript برای این استراتژی ساده استفاده کنیم به شکل زیر عمل اقدام میکنیم :
const ccxt = require('ccxt');
const talib = require('talib');
// اتصال به API کوینکس
const apiKey = 'your_api_key';
const secret = 'your_secret';
const exchange = new ccxt.coinex({
apiKey: apiKey,
secret: secret,
});
// دریافت دادههای تاریخی (کندلها) از کوینکس
async function fetchOHLCV(symbol, timeframe) {
return await exchange.fetchOHLCV(symbol, timeframe);
}
// محاسبه RSI
function calculateRSI(closes, period = 14) {
return talib.execute({
name: 'RSI',
inReal: closes,
startIdx: 0,
endIdx: closes.length - 1,
optInTimePeriod: period
}).result.outReal;
}
// محاسبه MACD
function calculateMACD(closes, shortPeriod = 12, longPeriod = 26, signalPeriod = 9) {
const macd = talib.execute({
name: 'MACD',
inReal: closes,
startIdx: 0,
endIdx: closes.length - 1,
optInFastPeriod: shortPeriod,
optInSlowPeriod: longPeriod,
optInSignalPeriod: signalPeriod
}).result;
return [macd.outMACD, macd.outMACDSignal, macd.outMACDHist];
}
// بررسی شرایط استراتژی و ثبت سفارش
async function executeTrade(symbol, side, amount) {
const order = await exchange.createOrder(symbol, 'market', side, amount);
console.log(`Order placed: ${JSON.stringify(order)}`);
}
// پارامترهای استراتژی
const symbol = 'BTC/USDT';
const timeframe = '1h';
const rsiOverbought = 70;
const rsiOversold = 30;
(async () => {
// دریافت دادههای تاریخی
const ohlcv = await fetchOHLCV(symbol, timeframe);
// استخراج قیمتهای بسته شدن
const closes = ohlcv.map(candle => candle[4]);
// محاسبه RSI و MACD
const rsi = calculateRSI(closes);
const [macd, macdSignal, macdHist] = calculateMACD(closes);
// بررسی آخرین مقدار RSI و MACD
const lastRSI = rsi[rsi.length - 1];
const macdBuyCondition = macd[macd.length - 1] > macdSignal[macdSignal.length - 1];
const macdSellCondition = macd[macd.length - 1] < macdSignal[macdSignal.length - 1];
if (lastRSI < rsiOversold && macdBuyCondition) {
console.log('Buying signal detected');
await executeTrade(symbol, 'buy', 0.001); // مقدار خرید را به دلخواه تنظیم کنید
} else if (lastRSI > rsiOverbought && macdSellCondition) {
console.log('Selling signal detected');
await executeTrade(symbol, 'sell', 0.001); // مقدار فروش را به دلخواه تنظیم کنید
}
})();
اگر بخواهیم از زبان برنامه نویسی #C برای این استراتژی ساده استفاده کنیم به شکل زیر عمل اقدام میکنیم :
using System;
using System.Linq;
using System.Threading.Tasks;
using CCXT.NET;
using CCXT.NET.CoinEx;
using Skender.Stock.Indicators;
class Program
{
static async Task Main(string[] args)
{
var apiKey = "your_api_key";
var secret = "your_secret";
var exchange = new CoinExClient(new CCXT.NET.CoinEx.Private.CoinExApiClient(apiKey, secret));
var symbol = "BTC/USDT";
var timeframe = "1h";
// دریافت دادههای تاریخی
var ohlcv = await exchange.publicApi.fetch_ohlcv(symbol, timeframe);
// استخراج قیمتهای بسته شدن
var closes = ohlcv.Data.Select(c => c.close).ToList();
// محاسبه RSI
var rsiPeriod = 14;
var rsiResults = Indicator.GetRsi(closes, rsiPeriod).ToList();
var lastRsi = rsiResults.LastOrDefault();
// محاسبه MACD
var macdResults = Indicator.GetMacd(closes, 12, 26, 9).ToList();
var lastMacd = macdResults.LastOrDefault();
// پارامترهای استراتژی
var rsiOverbought = 70;
var rsiOversold = 30;
// بررسی شرایط استراتژی و ثبت سفارش
if (lastRsi != null && lastMacd != null)
{
if (lastRsi.Rsi < rsiOversold && lastMacd.Macd > lastMacd.Signal)
{
Console.WriteLine("Buying signal detected");
await ExecuteTrade(exchange, symbol, "buy", 0.001m);
}
else if (lastRsi.Rsi > rsiOverbought && lastMacd.Macd < lastMacd.Signal)
{
Console.WriteLine("Selling signal detected");
await ExecuteTrade(exchange, symbol, "sell", 0.001m);
}
}
}
static async Task ExecuteTrade(CoinExClient exchange, string symbol, string side, decimal amount)
{
var order = await exchange.privateApi.CreateOrderAsync(symbol, side, "market", amount);
Console.WriteLine($"Order placed: {order.Data}");
}
}
نتیجه گیری
با بررسی مثال های بالا اکنون قابل اثبات است که با تمامی زبان های گفته شده می توان عملیات لازم را صورت داد. اما اگر بخواهیم به سرعت و سهولت کار اشاره کنیم قطعا قطعه کد زبان python در این مثال توجه شما را جلب کرده ، پس بدون شک اولین زبان توصیه شده برای کار در بازار ارزهای دیجیتال و بازار های مالی زبان برنامه نویسی پایتون خواهد بود .
پیشنهاد میکنم اگر به ترید و معامله در بازار های مالی نیز علاقه مندید بلاگ لست سین رو هم بررسی کنید !