REST API संकेतक-आधारित ट्रेडिंग बॉट (Python)

अंतिम अपडेट: 2 अप्रैल 2025

हमारे REST API के इच्छित उपयोगों में से एक स्वचालित ट्रेडिंग बॉट बनाना है जो हमारे बाज़ारों और खातों के साथ इंटरैक्ट करते हैं।

जबकि ट्रेडिंग बॉट लगभग अंतहीन प्रकार के होते हैं, वे सभी समान API एकीकरण विशेषताओं को साझा करते हैं, और सभी निम्नलिखित सामान्य कार्य करते हैं:

  • बाज़ार डेटा प्राप्त करना (टिकर, ऑर्डर बुक, आदि)

  • ट्रेडिंग निर्णय लेना (बाज़ार डेटा, या बाज़ार डेटा से प्राप्त संकेतकों के आधार पर)

  • ऑर्डर देना/रद्द करना

हमारा REST API एक पूर्ण विशेषताओं वाले ट्रेडिंग बॉट को लागू करने के लिए आवश्यक सभी कार्यक्षमता प्रदान करता है, लेकिन हमारे API के विभिन्न पहलुओं को संयोजित करना मुश्किल हो सकता है, इसलिए निम्नलिखित ट्रेडिंग बॉट कोड एक उदाहरण के रूप में प्रदान किया गया है।

उदाहरण कोड एक संकेतक-आधारित ट्रेडिंग बॉट (विशेष रूप से 20 SMA, 1 मिनट के ढलान परिवर्तन के आधार पर ट्रेडिंग निर्णयों के साथ) को लागू करता है, और दिखाता है कि ट्रेडिंग बॉट के बाज़ार डेटा, निर्णय लेने और ट्रेडिंग पहलुओं को सफलतापूर्वक कैसे एकीकृत किया जाए।

उदाहरण कोड (Python)

ट्रेडिंग बॉट कोड एक एकल Python फ़ाइल है, और सीधे हमारे API के साथ एकीकृत होता है (कोई तृतीय-पक्ष API लाइब्रेरी नहीं)। सभी कॉन्फ़िगरेशन (API कुंजी, मुद्रा जोड़ी, संकेतक, ऑर्डर प्रकार, लीवरेज, आदि) संदर्भ की आसानी के लिए कोड के भीतर निहित हैं।

उदाहरण कोड नीचे देखा जा सकता है, और इसे .py फ़ाइल के रूप में भी डाउनलोड किया जा सकता है (REST_Indicator_Bot_Example.py)।

python

Python

#!/usr/bin/env python3

# Import required libraries (Python not API)
import time
import sys
import json
import base64
import hashlib
import hmac
import urllib.request

# Configure API key (copy/paste from account management)
api_key_public = 'COPY/PASTE API PUBLIC KEY HERE'
api_key_private = 'COPY/PASTE API PRIVATE KEY HERE'

# Configure market/orders/trades
trade_symbol = 'XXBTZUSD'
trade_interval = 1  # OHLC interval in minutes
trade_size = 0.0001  # Trade volume in base currency
trade_leverage = 2

# Initial indicator/trade variables
trade_direction = 0
sma_values = [0.0, 0.0, 0.0]

# Infinite loop (can be exited via keyboard interrupt)
try:
    while True:
        # Retrieve OHLC data at specified interval
        print('Retrieving OHLC data ... ', end='')
        try:
            api_request = urllib.request.Request(
                'https://api.kraken.com/0/public/OHLC?pair=%(symbol)s&interval=%(interval)d' % {
                    'symbol': trade_symbol, 'interval': trade_interval}
            )
            api_request.add_header('User-Agent', 'Kraken trading bot example')
            api_response = urllib.request.urlopen(api_request).read().decode()
            api_data = json.loads(api_response)
        except Exception as error:
            print('Failed (%s)' % error)
        else:
            print('Done' if len(api_data['error']) == 0 else 'Error (%s)' % api_data['error'])

        # Calculate SMA (20 candles / closing price)
        print('Calculating SMA 20 ... ', end='')
        api_ohlc = api_data['result'][trade_symbol]
        api_ohlc_length = len(api_ohlc) - 1
        sma_temp = 0.0
        for count in range(1, 21):
            sma_temp += float(api_ohlc[api_ohlc_length - count][4])
        sma_temp = sma_temp / 20
        print('Done')

        # Update SMA values
        sma_values[2] = sma_values[1]
        sma_values[1] = sma_values[0]
        sma_values[0] = sma_temp
        if sma_values[2] == 0.0:
            print('Waiting %d seconds ... ' % (trade_interval * 60))
            time.sleep(trade_interval * 60)
            continue
        else:
            print('SMA 20 values ... %(sma2)f / %(sma1)f / %(sma0)f' % {
                'sma2': sma_values[2], 'sma1': sma_values[1], 'sma0': sma_values[0]})

        # Trading decision (change in slope of SMA)
        print('Trading decision ... ', end='')
        if (sma_values[0] > sma_values[1]) and (sma_values[1] < sma_values[2]):
            make_trade = 1
            print('Long')
        elif (sma_values[0] < sma_values[1]) and (sma_values[1] > sma_values[2]):
            make_trade = -1
            print('Short')
        else:
            make_trade = 0
            print('No trade')

        # Place order/trade (if applicable)
        if make_trade != 0:
            print('Placing order/trade ... ', end='')
            try:
                api_path = '/0/private/AddOrder'
                api_nonce = str(int(time.time() * 1000))
                api_post = 'nonce=%(api_nonce)s&pair=%(symbol)s&type=%(direction)s&ordertype=market&volume=%(volume)f&leverage=%(leverage)s' % {
                    'api_nonce': api_nonce,
                    'symbol': trade_symbol,
                    'direction': 'buy' if make_trade == 1 else 'sell',
                    'volume': trade_size if trade_direction == 0 else trade_size * 2,
                    'leverage': str(trade_leverage) if trade_leverage > 0 else 'none'
                }

                api_sha256 = hashlib.sha256(api_nonce.encode('utf8') + api_post.encode('utf8'))
                api_hmac = hmac.new(
                    base64.b64decode(api_key_private),
                    api_path.encode('utf8') + api_sha256.digest(),
                    hashlib.sha512
                )
                api_signature = base64.b64encode(api_hmac.digest())

                api_request = urllib.request.Request(
                    'https://api.kraken.com/0/private/AddOrder', api_post.encode('utf8')
                )
                api_request.add_header('API-Key', api_key_public)
                api_request.add_header('API-Sign', api_signature)
                api_request.add_header('User-Agent', 'Kraken trading bot example')
                api_response = urllib.request.urlopen(api_request).read().decode()
                api_data = json.loads(api_response)
            except Exception as error:
                print('Failed (%s)' % error)
            else:
                trade_direction = make_trade
                print('Done (%s)' % api_response if len(api_data['error']) == 0 else 'Error (%s)' % api_data['error'])

        # Wait until next OHLC interval
        print('Waiting %d seconds ... ' % (trade_interval * 60))
        time.sleep(trade_interval * 60)

except KeyboardInterrupt:
    sys.exit(0)
except Exception as error:
    print('Error (%s)' % error)
    sys.exit(1)

ध्यान दें कि ट्रेडिंग बॉट केवल एक उदाहरण के रूप में अभिप्रेत है, और इसलिए इसमें कुछ वांछनीय सुविधाओं और आवश्यक त्रुटि जाँच की कमी है, इसलिए इसे उत्पादन ट्रेडिंग के लिए उपयोग नहीं किया जाना चाहिए (इस बात की कोई गारंटी नहीं है कि बॉट लाभ कमाएगा)।

क्या आपको और मदद चाहिए?