طراحی و برنامه نویسی پایتون

آموزش ساخت ربات‌ های معامله‌ گر با پایتون (API)

فهرست مطالب

امروزه معاملات در بازارهای مالی به یکی از سرمایه ‎گذاری‌های پر سود تبدیل شده است. در این بازارها سرعت و دقت در تحلیل و انجام معاملات از اهمیت بالایی برخوردار است. از همین رو بسیاری از معامله‎ گران در صدد استفاده از ربات‌های معامله‌گر برای تحلیل و انجام معاملات در بازارهایی مثل بازارهای فارکس بر می‌آیند. در معاملات الگوریتمی استراتژی‌های معاملاتی توسط زبان‌های برنامه‌نویسی مختلفی مثل پایتون، ام کیو ال و… به کدهایی تبدیل می‌شوند که ربات‌های معامله‎ گر هستند. یکی از زبان‌های مهم برنامه‌نویسی ربات‌های معاملاتی، زبان برنامه‌نویسی پایتون است. طراحی و برنامه‌نویسی پایتون برای ربات‌های معامله‌گر api، بستر خوبی برای آموزش، خودکارسازی و سپس پردازش برنامه‌های ربات به معامله‎ گران می‌دهد.

در برنامه‌نویسی ربات‌های معامله گر با زبان پایتون به جای ورود دستی هر عبارت، می‌توان اسکریپتی نوشت که تمامی عملیات را در ربات معامله‌گر محاسبه، ضبط و شبیه‌سازی می‌کند. این کار به معامله گران این امکان را می‌دهد که به سرعت استراتژی خود را تجسم نموده، شبیه‌سازی کرده و تست کنند، همچنین برنامه و منطق آن را اصلاح نمایند.

ربات تجاری پایتون چیست؟

ربات پایتون

ربات معاملاتی نرم افزاری است که به API صرافی مورد نظرمعامله ‎گر متصل می‌شود تا به طور خودکار با آن تعامل داشته باشد و براساس تجزیه و تحلیل داده‌های بازار معاملات را از طرف معامله‌گر انجام می‌دهد. زمانی که شرایط بازار با مجموعه‌ای از معیارهای از پیش تعریف شده مطابقت داشته باشد، ربات دارایی را خرید/فروش می‌کند.

API

واژه (API (Application Programming Interface به معنای «رابط برنامه‌نویسی اپلیکیشن» است. در واقع API رابطی است که برای دریافت و ارسال اطلاعات در یک نرم افزار از آن استفاده می شود. برای اتصال به صرافی مورد نظر فقط باید API صرافی موردنظر به ربات معامله‌گر داده شود. بعد از دادن API به ربات معامله‎ گر، صرافی به ربات معامله‎ گر متصل شده و معاملات خود را آغاز می‌کند.api

در این مقاله به شما نشان داده می‌شود که چگونه با کدهای ساده زبان پایتون، داده‌های بازار را بخوانید، سهام بخرید و بفروشید، و منطق الگوریتم معاملاتی خود را برنامه ریزی کنید. البته به خاطر داشته باشید که این آموزش برای کسب درآمد میلیاردی از ربات‌های معاملاتی ارائه نمی شود.

 

سلب مسئولیت: هیچ یک از مواردی که در این مقاله وجود دارد نباید توصیه سرمایه‌گذاری در نظر گرفته شود. مقاله فوق هیچ نوع توصیه یا پیشنهاد معاملاتی در مورد نحوه سرمایه گذاری، نحوه معامله، نوع دارایی سرمایه‌گذاری یا پیشنهاداتی در مورد نحوه استفاده از ربات‌های معاملاتی یا الگوریتم‌های معاملاتی ارائه نمی‌دهد! همیشه قبل از سرمایه‌گذاری تحقیق خود را انجام دهید و همیشه (!) فقط آنچه را سرمایه‌گذاری کنید که توانایی از دست دادنش را دارید! حتما این را در نظر بگیرید که بک تست‌ها نشان دهنده نتایج آینده نیستند.

قبل از شروع طراحی یک ربات معاملاتی با پایتون ابتدا به تعریف چند اصطلاح مفید می‌پردازیم:

  • تجارت کاغذی: معامله اوراق بهادار با پول مجازی برای اهداف آموزشی یا آزمایشی.
  • بک تست: آزمایش یک الگوریتم معاملاتی در برابر داده‌های بازار گذشته به منظور ارزیابی اثربخشی آن.
  • میانگین متحرک: میانگین مقدار معینی از ورودی‌های اخیر در مجموعه‌ای از داده ها.
  • S&P 500: شاخص بازار سهام متشکل از ۵۰۰ شرکت بزرگ فهرست شده در بازار بورس آمریکا
  • قیمت پایانی: قیمت نهایی اوراق بهادار در طول یک واحد زمان
  • Good ‘Til Cancel (GTC): زمانی که معامله‌ای انجام می‌دهید، ممکن است فوراً انجام نشود. یک کارگزار به تلاش و اجرای یک معامله GTC تا زمانی که آن را لغو نکنید، ادامه خواهد داد.

 

قبل از شروع تجارت با ربات‌های معامله‌گر به یک کلید API نیاز است.

نصب API

پروژه فوق، API معاملاتی که قرار است از آن استفاده کنیم Alpaca نام دارد و یکی از بصری‌ترین API‌های معاملاتی است. از آدرس زیر می‌توانید API آلپاکا را دانلود کنید.

http:// alpaca.markets/

Alpaca در بخش رایگان خود، شامل داده‌های معاملات مجازی و واقعی و داده‌های بازار گذشته و زنده است. همچنین دارای یک رابط کاربری فوق العاده تمیز و کتابخانه پایتون است.

پایتون

اگر قصد دارید اسکریپت پایتون خود را در رایانه خود اجرا کنید، باید ربات تجاری خود را در فضای ابری مستقر کنید. برای این کار از Codesphere استفاده می‌کنیم:

http://codesphere.com/

از آنجایی که بخش ابتدایی- انتهایی Codesphere یک IDE است، می‌توانیم ربات خود را مستقیماً روی پلتفرم توسعه دهیم. با این حال، اگر می‌خواهید برنامه‌نویسی را روی دستگاه خود انجام دهید، می‌توانید GitHub خود را به Codesphere متصل کرده و سپس آن را مستقر کنید.

تنها فضای نصب که واقعاً قبل از شروع کدنویسی به آن نیاز داریم، ایجاد محیط پیپ (pipenv shell) است.

سپس Alpaca API را نصب کنید.

pipenv install alpaca_trade_api

ما همچنین باید یک حساب Alpaca رایگان ایجاد کنیم و سپس وارد حساب تجارت مجازی خود شویم.

حساب تجارت مجازی

به کلید API خود در سمت راست توجه کنید. هنگامی که برای اولین بار حساب خود را باز می‌کنید، از شما خواسته می‌شود یک کلید ایجاد کنید و کلید عمومی و خصوصی به شما نشان داده می‌شود. بعدا به این کلید‌های عمومی و خصوصی نیاز خواهیم داشت.

خرید و فروش سهام با کتابخانه Alpaca Trading در پایتون

سپس می‌توانیم کتابخانه Alpaca Trading خود را راه‌اندازی کنیم و خرید و فروش سهام را در زبان پایتون بدین صورت طراحی کنیم.

 

import alpaca_trade_api as tradeapi
SEC_KEY = ” # Enter Your Secret Key Here
PUB_KEY = ” # Enter Your Public Key Her
BASE_URL = ‘https://paper-api.alpaca.markets’ # This is the base URL for paper trading
api = tradeapi.REST(key_id= PUB_KEY, secret_key=SEC_KEY, base_url=BASE_URL) # For real trading, don’t enter a base_url
# Buy a stock
api.submit_order(
symbol=’SPY’; # Replace with the ticker of the stock you want to buy
qty=1,
side=’buy’,
type=’market’,
time_in_force=’gtc’ # Good ’til cancelled
)
# Sell a stock(Just change side to ‘sell’)
api.submit_order(
symbol=’SPY’,
qty=1,
side=’sell’,
type=’market’,
time_in_force=’gtc’
)

طراحی استراتژی

در این مثال استراتژی ما این است که زمانی که میانگین متحرک ۵ دقیقه از قیمت ما عبور کرد، خرید و فروش کنیم. هرچند این با یک استراتژی معاملاتی خوب فاصله دارد، اما منطقی نسبتاً ساده است و به ما اجازه می‌دهد تا روی ساختار کلی یک ربات معاملاتی تمرکز کنیم.

طراحی استراتژی

در مثال بالا، خط قرمز قیمت سهام و خط آبی میانگین متحرک است. وقتی میانگین متحرک از قیمت عبور کرد، ما قصد داریم سهمی از سهام خود را بخریم. سپس سهام را نگه می‌داریم تا زمانی که میانگین متحرک دوباره عبور کند و از قیمت بالاتر رود. . زمانی که این اتفاق افتاد، سهم خود را می‌فروشیم و سپس منتظر سیگنال خرید بعدی خواهیم بود.

در این مقاله، SPY را معامله می‌کنیم، که شاخصی است که S&P 500 را دنبال می‌کند و هر بار فقط یک سهم را معامله می‌کنیم.

خواندن اطلاعات بازاربا Alpaca API در پایتون

حال به نحوه خواندن داده‌های بازار با استفاده از Alpaca API در پایتون می‌پردازیم:

 

import alpaca_trade_api as tradeapi
import numpy as np
import time
SEC_KEY = ‘bcO995J1nB2W7iWbzIkXv4foX0GKaQJAYT8pX1fN’
PUB_KEY = ‘PKRQE96HW8BM6TO9V13V’
BASE_URL = ‘https://paper-api.alpaca.markets’
api = tradeapi.REST(key_id= PUB_KEY, secret_key=SEC_KEY, base_url=BASE_URL)
symb = “SPY”
symb = “SPY”
    print(“”)
    print(“Checking Price”)
    market_data = api.get_barset(symb, ‘minute’, limit=5) # Get one bar object for each of the past 5 minutes
    close_list = [] # This array will store all the closing prices from the last 5 minutes
    for bar in market_data[symb]:
        close_list.append(bar.c) # bar.c is the closing price of that bar’s time interval
    close_list = np.array(close_list, dtype=np.float64) # Convert to numpy array
    ma = np.mean(close_list)
    last_price = close_list[4] # Most recent closing price
    print(“Moving Average: ” + str(ma))
    print(“Last Price: ” + str(last_price))
   time.sleep(60) # Wait one minute before retreiving more market data

اگر به دنبال اطلاعات عمیق‌تر برای ساختن استراتژی خود هستید، اسناد Alpaca را از آدرس زیر بررسی کنید:

https://alpaca.markets/docs/api-documentation/api-v2/market-data/alpaca-data-api-v2/

 اجرای استراتژی معاملاتی با alpaca trade api در پایتون

برای الگوریتم معاملاتی کامل خود همه موارد را کنار هم قرار می‌دهیم:

import alpaca_trade_api as tradeapi
SEC_KEY = ” # Enter Your Secret Key Here
PUB_KEY = ” # Enter Your Public Key Her
BASE_URL = ‘https://paper-api.alpaca.markets’ # This is the base URL for paper trading
api = tradeapi.REST(key_id= PUB_KEY, secret_key=SEC_KEY, base_url=BASE_URL) # For real trading, don’t enter a base_url
# Buy a stock
api.submit_order(
symbol=’SPY’; # Replace with the ticker of the stock you want to buy
qty=1,
side=’buy’,
type=’market’,
time_in_force=’gtc’ # Good ’til cancelled
)
# Sell a stock(Just change side to ‘sell’)
api.submit_order(
symbol=’SPY’,
qty=1,
side=’sell’,
type=’market’,
time_in_force=’gtc’
)
import alpaca_trade_api as tradeapi
import numpy as np
import time
SEC_KEY = ‘bcO995J1nB2W7iWbzIkXv4foX0GKaQJAYT8pX1fN’
PUB_KEY = ‘PKRQE96HW8BM6TO9V13V’
BASE_URL = ‘https://paper-api.alpaca.markets’
api = tradeapi.REST(key_id= PUB_KEY, secret_key=SEC_KEY, base_url=BASE_URL)
symb = “SPY”
symb = “SPY”
    print(“”)
    print(“Checking Price”)
    market_data = api.get_barset(symb, ‘minute’, limit=5) # Get one bar object for each of the past 5 minutes
    close_list = [] # This array will store all the closing prices from the last 5 minutes
    for bar in market_data[symb]:
        close_list.append(bar.c) # bar.c is the closing price of that bar’s time interval
    close_list = np.array(close_list, dtype=np.float64) # Convert to numpy array
    ma = np.mean(close_list)
    last_price = close_list[4] # Most recent closing price
    print(“Moving Average: ” + str(ma))
    print(“Last Price: ” + str(last_price))
   time.sleep(60) # Wait one minute before retreiving more market data

و این هم ربات معاملاتی است که در ۵۴ خط با استفاده از زبان پایتون نوشته ایم.

چنانچه بخواهیم آن را به صورت روزانه روی Codesphere اجرا کنیم، باید روزانه به‌روزرسانی داشبورد Alpaca خود را ببینیم:

Codesphere

بک تست یک استراتژی در پایتون با API

اگر علاقه‌ای به این ندارید که منتظر بمانید تا عملکرد صحیح الگوریتم خود را ببینید، می‌توانید از API داده‌های بازار Alpaca برای بک تست الگوریتم پایتون خود در برابر داده‌های قدیمی استفاده کنید:

import alpaca_trade_api as tradeapi 1
import numpy as np 2
import time 3
4
SEC_KEY = ” 5
PUB_KEY = ” 6
ASE_URL = ‘https://paper-api.alpaca.markets’ 7
api = tradeapi.REST(key_id= PUB_KEY, secret_key=SEC_KEY, base_url=BASE_URL) 8
9
symb = “SPY” 10
pos_held = False 11
hours_to_test = 2 12
13
print(“Checking Price”) 14
market_data = api.get_barset(symb, ‘minute’, limit=(60 * hours_to_test)) # Pull market data from the past 60x minutes 15
16
close_list = [] 17
for bar in market_data[symb]: 18
    close_list.append(bar.c) 19
20
21
22
print(“Open: ” + str(close_list[0])) 23
print(“Close: ” + str(close_list[60 * hours_to_test – 1])) 24
25
26
close_list = np.array(close_list, dtype=np.float64) 27
startBal = 2000 # Start out with 2000 dollars 28
balance = startBal 29
buys = 0 30
sells = 0 31
32
33
34
for i in range(4, 60 * hours_to_test): # Start four minutes in, so that MA can be calculated 35
    ma = np.mean(close_list[i-4:i+1]) 36
    last_price = close_list[i] 37
38
    print(“Moving Average: ” + str(ma)) 39
    print(“Last Price: ” + str(last_price)) 40
41
    if ma + 0.1 < last_price and not pos_held: 42
        print(“Buy”) 43
        balance -= last_price 44
        pos_held = True 45
        buys += 1 46
    elif ma – 0.1 > last_price and pos_held: 47
        print(“Sell”) 48
        balance += last_price 49
       pos_held = False 50
        sells += 1 51
    print(balance) 52
    time.sleep(0.01) 53
54
print(“”) 55
print(“Buys: ” + str(buys)) 56
print(“Sells: ” + str(sells)) 57
58
if buys > sells: 59
    balance += close_list[60 * hours_to_test – 1] # Add back your equity to your balance 60
61
62
print(“Final Balance: ” + str(balance)) 63
64
print(“Profit if held: ” + str(close_list[60 * hours_to_test – 1] – close_list[0])) 65
print(“Profit from algorithm: ” + str(balance – startBal)) 66
67

 

حال شما یک ربات معاملاتی ابتدایی دارید، که تنها با چند سطر زبان برنامه‌نویسی پایتون ایجاد شده است.

جمع‌بندی

ربات معاملاتی نرم افزاری است که به API صرافی مورد نظرمعامله‎ گر متصل می‌شود تا به طور خودکار با آن تعامل داشته باشد. برای اتصال به صرافی مورد نظر باید API صرافی موردنظر را به ربات معامله‌گر داد.

هر چند استفاده از Alpaca API برای راه اندازی ربات‌های معامله‌گر توصیه می‌شود، اما زمانی که می‌خواهید با پول واقعی معامله کنید، بسیار مراقب باشد، چرا که یک خطا در کدهای نوشته شده می‌تواند خطرات زیادی بر سرمایه شما داشته باشد.

بهترین کار برایتان این است که نوشتن آن را به برنامه نویسان خبره بسپارید و یا اینکه در دوره‌های معتبر  برنامه‌نویسی پایتون شرکت نمایید.

اشتراک گذاری

با نظر سنجی به ما کمک کنید تا بهترین محتوا را برای شما آماده کنیم

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *