ربات بازرگانی Python Binance *** Github ***

ساخت وبلاگ

این آموزش به خواننده نشان می دهد که چگونه یک ربات بازرگانی Binance را تنظیم کند. این روبات در پایتون نوشته شده است و از API Binance REST برای برقراری ارتباط با پلت فرم تجارت Binance استفاده می کند. Re Ransfer (REST) یک معماری استاندارد برای سیستم های برقراری ارتباط با یکدیگر است. رابط برنامه نویسی برنامه (API) روشی برای برقراری ارتباط با یکدیگر است. بنابراین ، یک API REST یک API است که به معماری استراحت پایبند است. ما از درخواست های کتابخانه Python برای برقراری ارتباط با API Binance REST استفاده خواهیم کرد. این به ما (مشتری) اجازه می دهد تا درخواست های "دریافت" و "ارسال" را به Binance (سرورها) ارسال کنیم که پاسخ های حاوی اطلاعات حساب و تأیید تجارت را بازگرداند.

این ربات بازرگانی Binance به طور مداوم در مدتی درست اجرا می شود: حلقه. ربات بازرگانی دارای چهار عملکرد است که در حلقه در حالی که از آنها خواسته می شود: current_price () (قیمت فعلی را برای جفت نماد انتخاب شده بررسی می کند) ، acciv_balance () (مانده حساب را برای جفت نماد انتخاب شده بررسی می کند) ، آخرین_ transaction () (آخرین معامله را برای انتخاب شده بررسی می کندجفت نماد) ، و submit_order () (سفارش را برای جفت نماد انتخاب شده ارسال می کند). این ربات سفارشات بازار را ارسال می کند و منطق آن را می توان در زیر مشاهده کرد.

  1. حساب حساب تراز حساب را بررسی می کند () برای دیدن اینکه چه مقدار از جفت نماد برای تجارت رایگان است
  2. آخرین تراکنش آخرین_ transaction () را برای دیدن جفت نماد برای دیدن قیمتی که در آن معامله شده است ، بررسی می کند
  3. قیمت خرید/فروش را برای تجارت بعدی بر اساس آخرین قیمت معامله محاسبه می کند
  4. ارسال سفارش ارسال شده () برای تجارت کلیه دارایی های رایگان موجود در صورتی که قیمت خرید/فروش بر اساس قیمت فعلی جفت نمادین برآورده شود
  5. منتظر مدت زمان مشخصی باشید و به مرحله 1 برگردید.

وارد کردن کتابخانه ها و کلیدها

اولین کاری که باید انجام شود واردات کتابخانه های لازم است. کتابخانه های NUMPY ، TIME و DATETIME برای ریاضیات وارد می شوند و برخی از زمان های تأیید را برای API Binance REST ایجاد می کنند. از کتابخانه درخواست ها برای برقراری ارتباط با API Binance REST استفاده می شود در حالی که از کتابخانه های HMAC و Hashlib برای هش دادن کلیدهای احراز هویت با API Binance REST استفاده می شود. کتابخانه YAML با خیال راحت پیکربندی پرونده پیکربندی را وارد می کند. فایل. کتابخانه JSON داده های پاسخ را از درخواست API Binance REST در قالب قابل خواندن انسانی تر چاپ می کند تا بتواند فرمت داده های برگشتی را بهتر بشناسد. پیوندی به API Binance REST به همراه استفاده در سلب مسئولیت خطر خود شما که در بخش مقدمه نیز قرار دارد ، گنجانده شده است.

سپس کلیدهای API و مخفی از پرونده Config. yml بارگیری می شوند. اینها را با کسی به اشتراک نگذارید. اینگونه دسترسی به حساب اعطا می شود. آموزش Binance در مورد نحوه ایجاد یک جفت کلید API Binance REST را می توان در اینجا مشاهده کرد. پرونده config. yml باید اطلاعات و قالب زیر را داشته باشد. Symbol_pair مورد نظر را برای تجارت انتخاب کنید و مطمئن شوید که Symbol_First و Symbol_Second بر این اساس مطابقت دارند.

پرونده config. yml:

apikey: 'api_key_here' rederkey: 'secret_key_here'

پرونده binance_bot. py:

واردات numpy به عنوان زمان واردات NP از DateTime واردات DateTime ، منطقه زمانی ، درخواست واردات Timedelta واردات HMAC Import Hashlib Import yaml Import # Binance REST مستندات API # https://github. com/binance-us/binance-finance-apapi-docs/Blob/Master/Api. MD # هر URL اطلاعات کمی متفاوت به شما می دهد و دارای پارامترهای ورودی کمی متفاوت # API/V3/ExchangeInfo ، API/V3/Deep ، API/V3/Trades و غیره است. مشاوره سرمایه گذاری شخصی ارائه نمی دهم و من یک مشاور سرمایه گذاری مجوز واجد شرایط نیستم.# اطلاعات ارائه شده ممکن است شامل خطاها یا عدم دقت باشد. قبل از اتخاذ تصمیمات سرمایه گذاری ، با احتیاط خود را انجام دهید ، یا با یک مشاور مالی یا کارگزار دارای مجوز مشورت کنید. هرگونه سرمایه گذاری ، # معاملات ، گمانه زنی ها یا تصمیماتی که بر اساس هرگونه اطلاعاتی که در این سایت یافت می شود و/یا اسکریپت ، # بیان شده یا ضمنی در اینجا ، در ریسک خود ، مالی یا موارد دیگر انجام می شود. هیچ نمایندگی # یا ضمانتی با توجه به صحت یا کامل بودن محتوای این کل سایت # و/یا اسکریپت ، از جمله هرگونه پیوندی به سایت های دیگر و/یا اسکریپت ها انجام نمی شود. محتوای این سایت و/یا اسکریپت # فقط برای اهداف اطلاع رسانی است و از ماهیت عمومی برخوردار است. شما تمام خطرات مرتبط با استفاده از # سایت و/یا اسکریپت و محتوا ، از جمله بدون محدودیت ، هرگونه اعتماد به صحت ، # کامل بودن یا سودمندی هر محتوای موجود در سایت و/یا اسکریپت را تحمل می کنید. در معرض خطر خود استفاده کنید. پیکربندی = yaml. safe_load (باز ('config. yml')) # بارگیری فایل yaml که دارای API و کلید مخفی Apikey = پیکربندی است ['apikey'] # کلید API از پرونده yaml referkey = پیکربندی ['SecretKey'] # کلید مخفیاز پرونده yaml symbol_pair = 'bnbbusd' # جفت به تجارت نماد_First = 'bnb' # اطمینان حاصل کنید که این مطابق با symbol_second = 'busd' # اطمینان حاصل کنید که این در بالا مطابقت دارد

قیمت فعلی

اولین از چهار عملکرد مورد بحث در بخش مقدمه ، عملکرد فعلی_Price () است. این تابع با عبور از urlcp url url و پارامترهای PARAMSCP به عملکرد درخواست (که از کتابخانه درخواست ها است) برای "دریافت" قیمت تیک ، به urlcp indpoint url url و پارامترهای paramscp می پردازد. پاسخ از یک درخواست موفق است. ما پاسخ را از API Binance REST به فرمت JSON تبدیل می کنیم تا داده های لازم را به عنوان یک فرهنگ لغت پایتون استخراج کنیم. عملکرد فعلی_Price () CP قیمت فعلی Symbol_pair را که برای محاسبه قیمت خرید/فروش استفاده می شود ، باز می گرداند تا تصمیم بگیرد که آیا آیا تصمیم می گیردتجارت باید اجرا شود. نسخه چاپی زیبا از پاسخ در قالب JSON را می توان در زیر مشاهده کرد. این مفید است زیرا به کاربر اجازه می دهد تا قالب داده ها را به منظور استخراج اطلاعات لازم درک کند.

def current_price (): ##################################################### چاپ قیمت انتهای امتیاز #####/Ticker/Price 'PARAMSCP = # Ticker Wanted پاسخ_cp = درخواست ها. get (urlcp ، params = paramscp) # ارسال درخواست دریافت اطلاعات تیک # چاپ (پاسخ_cp) # وضعیت HTTP را برمی گرداند ، مقدار 200 (خوب) به معنای عدم خطا نیست= پاسخ_cp. json () # پاسخ به شیء JSON برای استخراج داده # چاپ (json. dumps (pair_info ، indent = 4)) # چاپ زیبا برای درک ساختار داده cp = pair_info ['price'] # قیمت فعلی نمادچاپ ('-------------------- قیمت فعلی ----------------------') چاپ (f'قیمت فعلی:') چاپ (' n') CP Retu

>>> print(response_cp)>>>چاپ (json. dumps (pair_info ، indent = 4))

موجودی حساب

تابع بعدی تابع Account_Balance () است که برای دستیابی به مانده حساب API API Binance REST API برای به دست آوردن مانده حساب SYMBOL_PAIR تماس می گیرد. URLCP URL Endpoint urlcp و پارامترهای PARAMSCP به عملکرد درخواست می شوند. باز هم: اینها را با کسی به اشتراک نگذارید. اینگونه دسترسی به حساب اعطا می شود.

یک جدول زمانی در میلی ثانیه برای این درخواست ایجاد می شود زیرا API Binance REST دارای امنیت زمان بندی برای اطمینان از برقراری ارتباط فقط در یک پنجره کوچک از زمان است. کتابخانه HMAC (Hashing for احراز هویت پیام) کلید مخفی کلید را با الگوریتم هش امن 256 بیتی (SHA-256) با استفاده از کتابخانه هش برای ایجاد امضای احراز هویت برای API نشان می دهد. URL ، پرس و جو (که شامل پارامترها است) ، امضا و API APIKEY همه به عملکرد درخواست می شوند.

اگر نگاهی به نسخه چاپی زیبا از پاسخ در قالب JSON در زیر بیندازیم ، می توانیم اکنون که می دانیم داده های پاسخ چگونه به نظر می رسد ، استخراج برخی از اطلاعات کلیدی را شروع کنیم. ما می خواهیم چقدر از هر دارایی را در نماد_Pair که آزادانه تجارت می کنیم استخراج کنیم. کلید تعادل در فرهنگ لغت پاسخ ، لیستی از دارایی ها را دارد و چه مقدار از هر یک از آنها در تجارت یا قفل شدن آزاد هستند. ما می خواهیم اطلاعات Symbol_Pair را استخراج کنیم اما با استفاده از روش کلید نمی توانیم مقدار دارایی مورد نظر را بدست آوریم: از آنجا که مقدار مانده های کلیدی لیستی از فرهنگ لغت ها است و نه یک فرهنگ لغت ، بنابراین ما تا زمانی که ما از طریق لیست چرخه می گیریمشاخص دارایی های مورد نظر را دریافت کنید. ما برخی از اطلاعات را در مورد مانده حساب برای Symbol_Pair چاپ می کنیم و متغیرهای AssetFree و AssetFree2 را برمی گردانیم. این متغیرها حاوی مقدار کل دارایی های رایگان در Symbol_Pair است که می توانیم از آن برای تجارت بعداً در فیلمنامه استفاده کنیم.

#####################') چاپ('####################################################################') چاپ('"https://api. binance. us/api/v3/account" # ایجاد متغیر dateTime مورد نیاز برای اتصال حساب اکنون = dateTime. now (timezone. utc) # تاریخ فعلی EPOCH = DateTime (1970 ، 1 ، 1 ، tzinfo =timezone. utc) # استفاده از EPOCH POSIX POSIX_TIMESTAMP_MICROS = (اکنون - EPOCH) // timedelta (microseconds = 1) posix_timestamp_millis = posix_timestamp_micros // 1000 # یا `/ 1e3` برای شناور # متغیرهای ورودی متغیرهای ورودی querybles = querystamp =" timestation = "timest:) # ایجاد هش برای امضای احراز هویت = hmac. new (secretkey. encode () ، querystring. encode () ، hashlib. sha256) . HexDigest () # ترکیب اطلاعات انتهایی حساب با متغیرهای ورودی و url هشدهی تأیید اعتبار = url + f "؟ & signature = " # ارسال درخواست برای اطلاعات حساب پاسخ_ی = درخواست. get (url ، headers =) # پاسخ به شیء JSON برای استخراج داده ها برای حساب استخراج داده = پاسخ_ی . json () # print (json. dumps (حساب_info ، indent = 4) # چاپ زیبا برای درک ساختار داده ها # نمی تواند نمادها را مستقیماً صدا کند زیرا "مانده" لیستی از فرهنگ لغت است و نه یک چرخه # فرهنگ لغت از طریق لیست فرهنگ لغت های حاوی دارایی های مختلف برای من ،
>>>تعادل در شمارش (حساب_info ['تعادل']): اگر تعادل ['Asset'] == Symbol_First: # یافتن نماد اول در جفت نماد ifirst = i اگر تعادل ['Asset'] == Symbol_Second: # پیدا کردن نماد دوم در نمادجفت isecond = i # اولین دارایی دارایی دارایی = حساب_info ['تعادل'] ['asset'] # نام دارایی AssetFree = حساب_info ['تعادل'] ['ifirst] [' رایگان '] # مبلغ دارایی که رایگان استTrade Assetlocked = Account_info ['Balances'] ['locked'] # مقدار دارایی که قفل شده است و نمی توان آن را معامله کرد AssetFreeCP = float (AssetFree)*Float (CP) # قیمت فعلی دارایی که AssetlockedCp = رایگان استfloat (assetlocked)*float (cp) # قیمت فعلی دارایی که قفل شده است # چاپ اطلاعات چاپ (f'asset: ') چاپ (f'free: at = $') چاپ (f'locked: at = $ ')چاپ (f'subtotal: $ ') print (f'subtotal: $') چاپ (' n') چاپ ('+') چاپ (' n') # Asset Assotion Asset2 = حساب_info ['تعادل'][ISECOND] ['ASSET'] # ASSET NAME ASSETFREE2 = ACCOUNT_INFO ['Balances'] [isecond] ['Free'] # مبلغ دارایی که برای تجارت Assetlocked2 رایگان است = Account_info ['Balances] [isecond] [' Locked '] # مقدار دارایی که قفل شده است و قابل معامله نیست # چاپ اطلاعات چاپ (f'asset: ') چاپ (f'free:') چاپ (f'locked: ') چاپ (f'subtotal:') چاپ ()' n') # ارزش خالص کل در چاپ حساب ('---------- کل ----------') چاپ ('$' ، AssetFreeCP+AssetlockedCp+float (AssetFree2################################') چاپ('#################################################################################################################################################################################################################### حاصل##### ') چاپ ('  n ') Retu AssetFree ، AssetFree2<"makerCommission": 10, "takerCommission": 10, "buyerCommission": 0, "sellerCommission": 0, "canTrade": true, "canWithdraw": true, "canDeposit": true, "updateTime": ############, "accountType": "SPOT", "balances": [ <"asset": "BTC", "free": "0.00000000", "locked": "0.00000000">, <"asset": "ETH", "free": "0.00000000", "locked": "0.00000000">, . <"asset": "BNB", "free": "0.00000000", "locked": "0.00000000">, . <"asset": "POLY", "free": "0.00000000", "locked": "0.00000000">], "permissions": [ "SPOT" ]>

چاپ (json. dumps (حساب_info ، indent = 4))

آخرین معامله

سومین عملکردی که ما داریم آخرین عملکرد_ transaction () است که برای دیدن آخرین معاملات کاربر ، نقطه انتهایی MyTrades را فراخوانی می کند. درست مانند نقطه پایان اطلاعات حساب در بخش آخر ، ما برای دسترسی به تاریخچه تجارت کاربر ، تمام پارامترهای مربوطه و اطلاعات کلیدی را منتقل می کنیم. پاسخ درخواست "دریافت" لیستی از فرهنگ لغت ها را شامل می شود که شامل آخرین 500 معاملات Symbol_Pair است. با این حال ، ما فقط آخرین تجارت را می خواهیم آخرین_ transaction = معاملات [-1] زیرا این همان چیزی است که ما معیارهای معاملاتی خود را پایه گذاری می کنیم. این عملکرد قیمت TP_Price را که در آن آخرین معامله اتفاق افتاده است و آیا این یک سفارش خرید یا فروش است ، باز می گرداند. مقدار Isbuyer به اولین دارایی در Symbol_Pair اشاره دارد.
>>>def near_transaction (): ######################################################## شماره حساب معاملات پایان ##/api/v3/mytrades " # ایجاد متغیر dateTime مورد نیاز برای اتصال حساب اکنون = dateTime. Now (timezone. utc) EPOCH = DATETIME (1970 ، 1 ، 1 ، TZINFO = TIMEZONE. UTC) # استفاده از EPOCH POSIX_TIMESTAMP_MICROS = (اکنون - اکنو ن-EPOCH) // timedelta (microseconds = 1) POSIX_TIMESTAMP_MILLIS = POSIX_TIMESTAMP_MICROS // 1000 # یا `/ 1E3` برای شناور # متغیرهای ورودی queryString =" نماد = " + نماد_پیر +" و timestamp = " + struder (posix_timestamp)امضا = hmac. new (redrykey. encode () ، querystring. encode () ، hashlib. sha256) . HexDigest () # ترکیب اطلاعات انتهای اطلاعات حساب با متغیرهای ورودی و تأیید هویت url = url + f "؟ & signature =" # ارسالدرخواست برای معاملات حساب پاسخ_ trades = درخواست. get (url ، headers =) # تبدیل پاسخ به شیء JSON برای معاملات استخراج داده = پاسخ_ trades. json () # print (json. dumps (معاملات ، indent = 4)) # چاپ زیباساختار داده های جدید را درک کنید_ transaction = معاملات [-1] # آخرین چاپ معامله ('-------------------- آخرین معامله -------------------- ') چاپ ('  n ') tp = آخرین_ transaction [' نماد '] # معاملات جفت tp_price = آخرین_ transaction [' price '] # معاملات جفت قیمت # چاپ اطلاعات چاپ (جفت f'trading: ') چاپ (f'price:') چاپ (' n') # خرید و فروش برای اولین نماد جفت تجارت است # واقعی خرید نماد اول است # false symal symbol isbuyer = آخرین_ transaction ['isBuyer'] symbol_first_qty = آخرین_ transaction ['qty'] # اولین نماد نماد symbol_second_qty = آخرین_ transaction ['quoteqty'] # مقدار نماد دوم # نماد اول اگر isBuyer == درست: چاپ ("خرید" (f "خریداری شده:") چاپ.<"symbol": "BNBBUSD", "id": ######, "orderId": ######, "orderListId": -1, "price": "######", "qty": "######", "quoteQty": "######", "commission": "######", "commissionAsset": "BUSD", "time": ######, "isBuyer": false, "isMaker": false, "isBestMatch": true>, . <"symbol": "BNBBUSD", "id": ######, "orderId": ######, "orderListId": -1, "price": "######", "qty": "######", "quoteQty": "######", "commission": "######", "commissionAsset": "BNB", "time": ######, "isBuyer": true, "isMaker": false, "isBestMatch": true>]

چاپ (json. dumps (معاملات ، indent = 4)) [

ثبت درخواست

عملکرد نهایی submit_order () از نقطه پایانی سفارش برای ارسال سفارش خرید یا فروش بر اساس متغیر ISBuyer استفاده می کند. این متغیر همچنین پارامترهایی را که ما به پرس و جو منتقل می کنیم تعیین می کند. توجه داشته باشید که Binance همچنین دارای نقطه پایانی سفارش ساختگی برای تمرین ارسال سفارش است که در صورت موفقیت پاسخ می دهد. متغیر نوع روی "بازار" تنظیم شده است زیرا این اسکریپت سفارش بازار را ارسال می کند اما گزینه های دیگر در دسترس است. عملکرد Submit_order () حداکثر مقدار دارایی رایگان موجود (AssetFree و AssetFree2) را که از عملکرد Account_Balance () به دست آمده خریداری یا به فروش می رساند. توجه داشته باشید که این بار ما از درخواست ها استفاده می کنیم. post () به جای درخواست. get () (مانند همه کارکردهای قبلی) زیرا می خواهیم برخی از داده ها را به API Binance REST ارسال کنیم تا بتوانیم سفارش را ارسال کنیم. کارکردهای دیگر فقط "دریافت" داده هایی بود که قبلاً برای ارسال فرآیند در آنجا بودند اما این بار می خواهیم برخی از داده ها را ارسال کنیم. نمونه ای از پاسخ چاپی زیبا پس از ارسال یک سفارش موفق را می توان در مستندات نقطه پایانی سفارش که در ابتدای این بخش مرتبط است ، مشاهده کرد.

تابع submit_order () را می توان در حلقه در حالی که از ارسال سفارش برای درک منطق ربات جلوگیری کرد ، اظهار نظر کرد.#BOUGHT!################################# url = "https://api. binance. us/api/v3/order"#url = "https: //api. binance. US/API/V3/Order/Test " # URL آزمون برای معاملات ساختگی # ایجاد متغیر DateTime مورد نیاز برای اتصال حساب اکنون = DateTime. Now (TimeZone. utc) EPOCH = DATETIME (1970 ، 1 ، 1 ، TZINFO = TimeZone. utc)# استفاده از EPOCH POSIX_TIMESTAMP_MICROS = (اکنون - EPOCH) // timedelta (میکرو ثانیه = 1) POSIX_TIMESTAMP_MILLIS = POSIX_TIMESTAMP_MICROS // 1000 # یا `/ 1E3` برای شناور # متغیرهای ورودی نوع = 'بازار' # سفارش اگر نوع isbuyer == falseside = 'buy' # می خواهید به نقل از نقل قول = str (symbol_second_avail) # چقدر نماد دوم می خواهید برای خرید اولین نماد queryString = "symbol =" + symbol_pair + "& side =" + side + "& type =" + نوع نوع استفاده کنید.+ "و QUOTEORDERQTY =" + QUOTEORDERQTY + "& TIMESTAMP =" + STR (POSIX_TIMESTAMP_MILLIS) ELIF ISBUYER == True: Side = 'Sell' # می خواهید مقدار = str (symb_first_avail) را بفروشید (نماد اول می خواهید برای خرید دوم بفروشیدنماد queryString = "symbol =" + symbol_pair + "& side =" + side + "& type =" + type + "& questity =" + مقدار + "& timestamp =" + str (posix_timestamp_millis) # ایجاد هش برای امضای احراز هویت = hmac. new.= درخواست ها. post (url ، headers =) # تبدیل پاسخ به شیء JSON برای ترتیب استخراج داده = require_order. json () # print (json. dumps (ترتیب ، indent = 4)) # چاپ زیبا برای درک ساختار symbol_first_transaction =سفارش ['اعدام شده'] # چه مقدار از نماد اول خریداری شده است/Symbol_Second_Transaction = سفارش ['cummulativeQuoteQty'] # چقدر از نماد دوم فروخته شده/خریداری شده است = سفارش ['FILLS'] # سفارش # اطلاعات چاپ # اطلاعات چاپ#BOUGHT!################################################## ".#SOLD!##########SOLD!################################################## ") چاپ (f 'فروخته شده:') چاپ (f 'خریداری شده:') چاپ (f'fills: ') چاپ.

#############################################################################################################################################################################################################################################################################################)

  1. حلقه تجارت
  2. ما ابتدا برای دستیابی به CP قیمت فعلی Symbol_Pair ، با عملکرد فعلی_Price () تماس می گیریم.
  3. سپس ما با تابع حساب_balance () تماس می گیریم تا با استفاده از CP ، مانده حساب accip_pair کاربر را محاسبه کنیم و بازگردید که میزان هر دارایی رایگان است (AssetFree و AssetFree2) برای تعیین اینکه چقدر می توانیم بعداً تجارت کنیم.
  4. آخرین عملکرد_ transaction () برای گرفتن آخرین قیمت معامله tp_price که در آن نماد_Pair در آن معامله شد و تعیین می شود که آیا نماد اول خریداری شده یا به فروش می رسد ، فراخوانده شده است.
  5. بخش بعدی کد مشخص می کند که معیارهای خرید/فروش درصد BSP برای ارسال سفارش به API Binance REST چیست. از متغیر BSP برای محاسبه قیمت خرید/فروش دلتا مورد نیاز برای ارسال سفارش بر اساس آخرین قیمت معامله tp_price استفاده می شود.
    1. در صورت بسته به مقدار Isbuyer ، اسکریپت به مختلف می رود. buyprice: print('NO! PRICE IS HIGH!') print(f'Current Price:> BUY Price: ') ################## ##### No Buy ##### ################## elif float(cp) == buyprice: print('NO! PRICE IS SAME!') print(f'Current Price: = BUY Price: ') ################### ##### Selling ##### ################### elif isBuyer == True: # If latest transaction was a BUY sellprice=float(tp_price) + delta # Price to sell at print('--------------------Checking to see if time to SELL--------------------') print(f'Needed Price to Sell (Previous Price + Delta): $') print(' ') #################### ##### Yes Sell ##### #################### if float(cp)> sellprice: print('YES!') print(f'Current Price:>در حالی که درست است: # به طور مداوم چاپ را اجرا کنید ('---------------------------------------------------- چک جدید -----------------------------------------------------') چاپ('---------------------------------------- '، dateTime. Now () ،' --------------------------------------چاپ ('-------------------- معیارهای خرید/فروش ----------------------') چاپ(' n') # هزینه معاملاتی در صورت استفاده از BNB برای هزینه های https://www. binance. com/en/fee/schedule # خرید درصد فروش BSP زیر باید از هزینه معاملات # بیشتر باشد ، اما همچنین نیاز دارد. کمی حاشیه بیشتر برای حساب کردن لغزش را شامل می شود زیرا این اسکریپت سفارشات بازار BSP = 0. 5 #خرید/فروش درصد درصد در ٪ چاپ ("خرید/فروش درصد درصد معیارهای:" ، BSP ، "٪") DELTA = BSP/100*شناور را شامل می شود..## اگر ISBuyer == false: # اگر آخرین معامله یک فروش فروش بود = float (tp_price)-دلتا # قیمت خرید در چاپ ('----------------------بررسی برای دیدن اینکه آیا زمان خرید -------------------- ') چاپ (قیمت F'Needed برای خرید (قیمت قبلی-دلتا): $') چاپ (##### اگر شناور (CP)

      The b_rerun.sh bash script below can be used on a server/Raspberry Pi/etc. to run the binance_bot.py script and continuously check if it needs to be ran again just in case binance_bot.py crashes. The command ps aux | grep '[p]ython binance_bot.py' looks for a process ruing with the text '[p]ython binance_bot.py' to see if the binance_bot.py script is ruing. If it finds a matching process, it continues, does nothing, and then waits for 30 minutes before continuing to the next loop in the continuous while loop. If it doesn't find a matching process, it calls on python to run the script, outputs the script's print to b_output.txt, and then waits for 30 minutes before continuing to the next loop in the continuous while loop. The b_rerun.sh bash script can be ran with sh b_rerun.sh &>اسکریپت

      b_rerunoutput. txt و جایی که اکو (چاپ) به b_rerunoutput. txt منتقل می شود.

      >>> ps aux | grep '[b]_rerun.sh' pi 618 0.0 0.0 1940 420 pts/1 S 22:53 0:00 sh b_rerun.sh>>> ps aux | grep 'b_rerun.sh' pi 618 0.0 0.0 1940 420 pts/1 S 22:53 0:00 sh b_rerun.sh pi 769 0.0 0.0 7348 492 pts/1 S+ 23:00 0:00 grep --color=auto b_rerun.sh>>>اگر شناسه فرآیند (PID) برای اسکریپت b_rerun. sh یا binance_bot. py برای خاتمه دادن به این فرآیند پیدا شود ، می توانید از PS aux |grep '[b] _rerun. sh' و ps aux |به ترتیب grep '[b] inance_bot. py'. پس از یافتن PID ها ، می توان اسکریپت ها را با استفاده از PID Kill خاتمه داد. توجه داشته باشید که b_rerun. sh نیز باید کشته شود وگرنه بعد از 30 دقیقه دوباره binance_bot. py شروع می شود. اگر براکت های مربعی [] در این دستورات گنجانده نشده باشد ، خود جستجو نیز بازگردانده می شود. به همین دلیل از براکت های مربع [] در اسکریپت b_rerun. sh استفاده می شود زیرا این خود جستجو را مشاهده می کند و فکر می کند که اسکریپت binance_bot. py هنوز هم در حال اجرا است.
      کشتن 618
      while : do if ps aux | grep '[p]ython binance_bot.py'; then echo $(date) echo "Script is still ruing" else echo $(date) echo "Script stopped ruing, time to rerun" python binance_bot.py &>پرونده b_rerun. sh:
فارکس به زبان ساده...
ما را در سایت فارکس به زبان ساده دنبال می کنید

برچسب : نویسنده : طاهره ایرانی بازدید : <-PostHit-> تاريخ : يکشنبه 22 مرداد 1402 ساعت: 1:47