Arbitrage cryptocurrencies จากประสบการณ์ตรง เมื่อเร็ว ๆ นี้ มีโพสต์มากมายที่พูดถึงวิธีที่นักเทรดที่ร่ำรวยจากโอกาสในการเก็งกำไรในตลาดคริปโต ฉันได้ลองใช้กลยุทธ์ Arbitrage พวกนั้นมาหลายเดือนแล้ว แต่ฉันไม่เคยได้ใช้กลยุทธ์ที่ทำกำไรได้
อย่างไรก็ตาม ฉันจะบอกคุณเกี่ยวกับปัญหาที่ฉันพบพยายาม นี้จะเป็นประโยชน์สำหรับผู้ที่กำลังเริ่มต้นเพื่อไม่ให้ต้องไปเจอในเส้นทางที่ผิดพลาดเหมือนเดิม กล่าวโดยสรุป นี่คือสิ่งที่ฉันได้รับ
โอกาสในการเก็งกำไรส่วนใหญ่จางหายไปหลังจากพิจารณาอัตราแลกเปลี่ยนและค่าธรรมเนียมการทำธุรกรรม
โอกาสในการเก็งกำไรส่วนใหญ่ปรากฏขึ้นระหว่างการแลกเปลี่ยนที่กระเป๋าสตางค์อยู่ในการบำรุงรักษา ซึ่งทำให้การฝากและถอนเงินเป็นไปไม่ได้
เวลาการทำธุรกรรมระหว่างการแลกเปลี่ยนทำให้การเก็งกำไรกลายเป็นการหักเงินจากลอตเตอรีต่อความผันผวนของตลาด
อ่านต่อเพื่อค้นพบวิธีสร้างตัวตรวจสอบ Arbitrage ด้วย python และรับข้อมูลที่มีค่าตามนั้น
Arbitrage คืออะไร?
Arbitrage (ตามคำจำกัดความ) คือแนวทางปฏิบัติที่ใช้ประโยชน์จากความแตกต่างของราคาระหว่างสองตลาดหรือมากกว่า ตัวอย่างเช่น หากคุณพบว่าหุ้นของบริษัทมีการซื้อขายในราคาที่ต่ำกว่าในตลาดอื่น คุณสามารถซื้อในตลาดนั้นและขายในตลาดอื่นในราคาที่สูงกว่า ซึ่งจะทำให้ได้ผลกำไรจากส่วนต่างของราคา เรียบง่าย. น่าเสียดายที่ง่ายมาก
ความเรียบง่ายนี้ทำให้นักเทรดมีโอกาสใช้ประโยชน์จากสถานการณ์ สิ่งนี้จะเพิ่มความต้องการหุ้นในตลาดที่ราคาต่ำและในขณะเดียวกันก็เพิ่มอุปทานในตลาดที่ราคาสูงขึ้น ดังนั้นพวกเขาจึงรักษาความไม่เท่าเทียมกันของราคาโดยไม่ตั้งใจ นอกจากนี้ ยิ่งตลาดมีเทรดเดอร์มากเท่าใด พวกเขาก็ยิ่งทำงานได้อย่างมีประสิทธิภาพมากขึ้นในการทำให้ราคามีเสถียรภาพ อันที่จริง โมเดลทางการเงินใช้เงื่อนไขที่ปราศจากการเก็งกำไร ซึ่งหมายความว่าตลาดที่ไม่มีประสิทธิภาพไม่ควรมีโอกาสตัดสินชี้ขาด
แต่บอกตามตรงว่าตลาด crypto ที่ใช้งานนั้นค่อนข้างยังไม่บรรลุนิติภาวะ การแลกเปลี่ยนใหม่ปรากฏขึ้นอย่างต่อเนื่องโดยมีปริมาณการซื้อขายต่ำ ตลาดนี้อยู่ไกลจากประสิทธิภาพ
จะหาโอกาสในการเก็งกำไรในตลาด crypto ได้อย่างไร?
มีเครื่องมือมากมายที่สามารถช่วยคุณค้นหาโอกาสใน Arbitrage ได้ เริ่มจากสิ่งที่ง่ายที่สุด: ไซต์ที่ตรวจสอบโอกาสเหล่านี้ (ตัวอย่างเช่น โอกาสนี้) สำหรับ HITBTC คุณสามารถลองอันนี้ได้เช่นกัน ปัญหาของไซต์เหล่านี้คือคุณไม่สามารถควบคุมการแลกเปลี่ยนและสินทรัพย์ใดที่ได้รับการตรวจสอบ และในทางปฏิบัติ นี่เป็นสิ่งที่เราต้องทำอย่างแน่นอน เพราะในการใช้ประโยชน์จากโอกาส เราจำเป็นต้องมีสินทรัพย์ที่ระบุในเวลาที่เหมาะสมในการแลกเปลี่ยนที่ระบุ
มาสร้างจอภาพของเราเองตั้งแต่เริ่มต้นกัน มันจะมองหาโอกาสที่เราสนใจจริงๆ ในการทำเช่นนั้น เราจะใช้ไลบรารี Python ccxt ที่ช่วยให้เราสามารถเชื่อมต่อกับการแลกเปลี่ยนต่างๆ (115 ให้แม่นยำ) และแลกเปลี่ยน crypto ด้วยวิธีที่เป็นมาตรฐาน (สำหรับนักพัฒนา ccxt: พวกเขาทำได้ดีมาก!) เราจะใช้ร้านหนังสือเหล่านี้เพื่อปรึกษาราคาซื้อ/ขายของสินทรัพย์ต่างๆ ในการแลกเปลี่ยนที่แตกต่างกัน เปรียบเทียบแล้วคิดเกี่ยวกับกลยุทธ์การเก็งกำไร
เริ่มกันเลย ก่อนอื่น นำเข้าร้านหนังสือ:
นำเข้า numpy เป็น np นำเข้า ccxt 1 2 นำเข้า numpy เป็น np นำเข้า ccxt
เราจะใช้ numpy ในภายหลังเพื่อทำการคำนวณ ตอนนี้ มากำหนดการแลกเปลี่ยนกัน:
exchanges = [“Allcoin”, “Binance”, “Bitfinex”, “Bittrex”, “Cex”, “Cryptopia”, “Exmo”, “Gatecoin”, “Hitbtc”, “Huobipro”, “Kraken”, “Kucoin” , “Livecoin”, “Okex”, “Poloniex”, “Qryptos”, “Quadrigacx”, “Southxchange”, “Yobit”] 1 2 exchanges = [“Allcoin”, “Binance”, “Bitfinex”, “Bittrex”, “Cex”, “Cryptopia”, “Exmo”, “Gatecoin”, “Hitbtc”, “Huobipro”, “Kraken”, “Kucoin”, “Livecoin”, “Okex”, “Poloniex”, “Qryptos”, “Quadrigacx ” “,” Southxchange “,” Yobit “]
ด้วยการกำหนดการแลกเปลี่ยน ตอนนี้เราสามารถเริ่มต้นไคลเอนต์ที่เกี่ยวข้องเพื่อขอข้อมูลได้ คุณสามารถกำหนดได้ดังนี้:
allcoin = ccxt.allcoin () 1 allcoin = ccxt allcoin ()
หรือดีกว่านั้น พวกเขาสามารถทำได้เพื่อหลีกเลี่ยงการเขียนมาก:
ลูกค้า = [getattr (ccxt, e.lower ()) () สำหรับและในการแลกเปลี่ยน] ลูกค้า 1 ราย = [getattr (ccxt, e. lower ()) () สำหรับและในการแลกเปลี่ยน]
ลูกค้าคือรายการที่มีลูกค้าทั้งหมดที่เราต้องการ ตอนนี้ มากำหนดคู่ดอกเบี้ยกัน:
สัญลักษณ์ = [“ADA / BTC”, “BCH / BTC”, “BTG / BTC”, “BTS / BTC”, “CLAIM / BTC”, “DASH / BTC”, “DOGE / BTC”, “EDO / BTC” , “EOS / BTC”, “ETC / BTC”, “ETH / BTC”, “FCT / BTC”, “ICX / BTC”, “IOTA / BTC”, “LSK / BTC”, “LTC / BTC”, “ แม่บ้าน / BTC “,” NEO / BTC “,” OMG / BTC “,” QTUM / BTC “,” STR / BTC “,” TRX / BTC “,” VEN / BTC “,” XEM / BTC “,” XLM / BTC “,” XMR / BTC “,” XRP / BTC “,” ZEC / BTC “] 1 2 3 สัญลักษณ์ = [“ ADA / BTC “,” BCH / BTC “,” BTG / BTC “,” BTS / BTC “ , “อ้างสิทธิ์ / BTC”, “DASH / BTC”, “DOGE / BTC”, “EDO / BTC”, “EOS / BTC”, “ETC / BTC”, “ETH / BTC”, “FCT / BTC”, “ ICX / BTC “,” IOTA / BTC “,” LSK / BTC “,” LTC / BTC “,” MAID / BTC “,” NEO / BTC “,” OMG / BTC “,” QTUM / BTC “,” STR / BTC “,” TRX / BTC “,” VEN / BTC “,” XEM / BTC “,” XLM / BTC “,” XMR / BTC “,” XRP / BTC “,” ZEC / BTC “]
พวกเขาสามารถแก้ไขตัวแปรก่อนหน้าตามความชอบของพวกเขา จากนั้นเรากำหนดตัวแปรที่มีประโยชน์อื่น ๆ :
ask = np.zeros ((len (symbols), len (clients))) bid = np.zeros ((len (symbols), len (clients))) 1 2 ask = np ศูนย์ ((len (symbols), len (clients))) ราคาเสนอ = np ศูนย์ ((len (symbols), len (clients)))
สุดท้าย เราขอข้อมูลของลูกค้า เราจะใช้ฟังก์ชัน fetch_order_book ในแต่ละลูกค้า ซึ่งจะส่งคืนหนังสือคำสั่งซื้อทั้งหมด แต่เราจะเน้นที่ราคาซื้อ/ขายล่าสุดเท่านั้น (นี่เป็นข้อเสนอแรก เราสามารถสำรวจตัวเลือกที่ดีกว่าได้โดยการคำนวณมูลค่าเฉลี่ยของการซื้อขายของเรา ).
ดำเนินการตรวจสอบการเก็งกำไร
สมมติว่าพวกเขาไม่ได้แก้ไขรายการแลกเปลี่ยน บรรทัดถัดไปอาจใช้เวลาสักครู่ เพื่อเร่งความเร็ว ให้กำหนดรายชื่อลูกค้าอีกครั้ง
สำหรับแถว สัญลักษณ์ในการแจกแจง (สัญลักษณ์): สำหรับ col ลูกค้าในการแจกแจง (ลูกค้า): ลอง: book = client.fetch_order_book (สัญลักษณ์) ask [row, col] = book [‘asks’] [0] [0] bid [row, col] = book [‘bids’] [0] [0] ยกเว้น: ผ่าน 1 2 3 4 5 6 7 8 9 สำหรับแถว สัญลักษณ์ในการแจกแจง (สัญลักษณ์): สำหรับ col ลูกค้าใน enumerate (ลูกค้า): ลอง: หนังสือ = ลูกค้า fetch_order_book (สัญลักษณ์) ask [row, col] = book [‘asks’] [0] [0] bid [row, col] = book [‘bids’] [0] [0] ยกเว้น: ผ่าน
ฉันได้กำหนดคำสั่งภายในบล็อกการลอง เนื่องจากสัญลักษณ์บางตัวไม่มีการแลกเปลี่ยนในการแลกเปลี่ยนทั้งหมด และคำสั่งที่ไม่ถูกต้องทำให้เกิดข้อผิดพลาดที่น่ารำคาญ แหล่งที่มาของข้อผิดพลาดอีกประการหนึ่งอาจเป็นข้อจำกัดของคำขออัตราซึ่งในขณะนี้ เรากำลังละเว้นไว้ เรายังสามารถใช้การหน่วงเวลาเพื่อลดความถี่ของคำสั่งซื้อสำหรับการแลกเปลี่ยนแต่ละครั้ง ควรปรับความล่าช้าของ Esee ขึ้นอยู่กับการแลกเปลี่ยนที่เรากำลังเชื่อมต่อ เนื่องจากแต่ละรายการมีข้อจำกัดของตนเอง คุณสามารถตรวจสอบเอกสารของการแลกเปลี่ยนแต่ละครั้งเพื่อให้ลึกซึ้งยิ่งขึ้น ฉันได้กำหนด ndarray ถามและเสนอราคาในบล็อก try เนื่องจากบางคำสั่งสามารถส่งคืนอาร์เรย์ที่ว่างเปล่าได้ และสำหรับตอนนี้ เรากำลังพยายามหลีกเลี่ยงสิ่งนั้น
ในแนวทางที่มีประสิทธิภาพมากขึ้น เราไม่ต้องการรอจนกว่าการวนรอบทั้งหมดจะเสร็จสิ้นโดยมองหาโอกาสในการเก็งกำไร แต่สำหรับตอนนี้ ปล่อยให้มันเป็นอย่างนั้น แล้วเราจะทำการสำรวจข้อมูลต่อไปเพื่อประเมินว่าตัวเลือกที่ดีที่สุดของเราคืออะไร
เมื่อกำหนดราคาซื้อและราคาขายด้วยมูลค่าขอและการเสนอราคาสำหรับแต่ละสกุลเงินในการแลกเปลี่ยนแต่ละครั้ง ตอนนี้เราสามารถกำหนดกลยุทธ์และคำนวณกำไรและขาดทุนของเราได้ กลยุทธ์ของเราในการแลกเปลี่ยนสกุลเงิน C ระหว่างการแลกเปลี่ยน E1 และ E2 เกี่ยวข้องกับการซื้อ C ใน E1 การโอนสกุลเงิน C ไปยัง E2 และขายที่นั่น เราต้องการดำเนินการตามขั้นตอนเหล่านี้ให้เร็วที่สุดเพราะเราไม่ต้องการให้ใครมานำหน้าเรา ดังนั้น เราจะดำเนินการซื้อขายแต่ละครั้งในทันที ซึ่งหมายถึงการซื้อในราคาต่ำสุดที่มีผู้เต็มใจขายในทันที มากำหนดขั้นตอนกัน:
ใน E1 ฉันทำการสั่งซื้อสำหรับ C.
ฉันโอนสกุลเงิน C เป็น E2
ใน E2 ฉันวางใบสั่งขายสำหรับ C
ฉันคำนวณผลตอบแทนจากการลงทุน (ROI) เป็น BTC:
$ ROI = \ left \ {\ frac {bid_ {E2}} {ask_ {E1}} — 1 \ right } \ cdot 100 \% $
ในทางปฏิบัติพวกเขาควรจ่ายค่าธรรมเนียมที่การแลกเปลี่ยน ดังนั้น ROI จะถูกกำหนดได้ดีกว่าดังนี้:
$ ROI = \ left \ {\ frac {bid_ {E2} \ cdot (1-fee)} {ask_ {E1} \ cdot (1 + ค่าธรรมเนียม)} — 1 \ right } \ cdot 100 \% $
จากนั้นเราจะกำหนดค่าธรรมเนียมผันแปรเพื่อคำนวณ ROI เราสามารถกำหนดอาร์เรย์หรือพจนานุกรมของค่าธรรมเนียมสำหรับการแลกเปลี่ยนแต่ละครั้ง แต่สำหรับตอนนี้ เพื่อลดความซับซ้อน เราจะกำหนดเพียงเปอร์เซ็นต์ทั่วไป (อนุรักษ์นิยม) ของค่าธรรมเนียมเท่านั้น
ค่าธรรมเนียม = 0.25 1 ค่าธรรมเนียม = 0.25
สุดท้าย เราควรลดค่าคอมมิชชั่นต่อธุรกรรมด้วย แต่สำหรับตอนนี้ เรากำลังดำเนินการโดยไม่คำนึงถึงเรื่องนี้ เพราะค่าคอมมิชชั่นขึ้นอยู่กับแต่ละสกุลเงินและภาระของเครือข่ายในขณะนั้น และตอนนี้เราจะกังวลเกี่ยวกับเรื่องนี้
มาคำนวณกันและนับจำนวนโอกาสในการทำกำไรที่เราพบ:
โอกาส = [] สำหรับ i, สัญลักษณ์ในการแจกแจง (สัญลักษณ์): สำหรับ j1, exchange1 ในการแจกแจง (การแลกเปลี่ยน): สำหรับ j2, exchange2 ในการแจกแจง (การแลกเปลี่ยน): roi = 0 ถ้า j1! = j2 และถาม [i, j1]> 0: roi = ((เสนอราคา [i, j2] * (1-fee / 100)) / (ถาม [i, j1] * (1 + ค่าธรรมเนียม / 100)) — 1 ) * 100 ถ้า ROI> 0: โอกาส ผนวก ([สัญลักษณ์, exchange1, ถาม [i, j1], exchange2, bid [i, j2], รอบ (roi, 2)]) พิมพ์ (“จำนวนโอกาสในการทำกำไร:”, len (โอกาส)) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 โอกาส = [] สำหรับ i, สัญลักษณ์ในการแจกแจง (สัญลักษณ์): สำหรับ j1, exchange1 ในการแจกแจง (แลกเปลี่ยน): สำหรับ j2, exchange2 ในการแจกแจง (การแลกเปลี่ยน): roi = 0 ถ้า j1! = j2 และถาม [i, j1]> 0: roi = ((เสนอราคา [i, j2] * (1 — ค่าธรรมเนียม / 100)) / (ถาม [i, j1] * (1 + ค่าธรรมเนียม / 100)) — 1 ) * 100 ถ้า ROI> 0: โอกาส ผนวก ([สัญลักษณ์, exchange1, ถาม [i, j1], exchange2, bid [i, j2], รอบ (roi, 2)]) พิมพ์ (“จำนวนโอกาสในการทำกำไร:”, len (โอกาส))
เราได้พบ 108 โอกาส !. สัญญาใช่มั้ย? เราจะเรียงลำดับตามแหล่งที่มาและสังเกตว่าอันไหนดีที่สุด:
โอกาส = จัดเรียง (โอกาส, ย้อนกลับ = จริง, คีย์ = แลมบ์ดา x: x [5]) พิมพ์ (โอกาส [: 10]) 1 2 โอกาส = จัดเรียง (โอกาส, ย้อนกลับ = จริง, คีย์ = แลมบ์ดา x: x [5]) พิมพ์ (โอกาส [: 10])
ในขณะที่เขียนบทความนี้ ตัวเลือกที่ดีที่สุดคือซื้อ QTUM / BTC ใน Bitfinex และขายใน Qryptos สำหรับแต่ละ QTUM / BTCtradeado เราสามารถรับ ROI ได้ 75.45%
ข้อจำกัดความรับผิด
ข้อมูลทั้งหมดที่มีอยู่บนเว็บไซต์ของเราเผยแพร่ด้วยเจตนาที่ดีและเป็นไปเพื่อวัตถุประสงค์ในการให้ข้อมูลทั่วไปเท่านั้น การกระทำใด ๆ ที่ผู้อ่านดำเนินการตามข้อมูลที่พบบนเว็บไซต์ของเราถือเป็นความเสี่ยงของผู้อ่านโดยเฉพาะ Learn ให้ความสำคัญกับข้อมูลคุณภาพสูง เราอุทิศเวลาให้กับการแยกแยะ ค้นคว้า และสร้างเนื้อหาเพื่อการศึกษาซึ่งเป็นประโยชน์กับผู้อ่าน เพื่อเป็นการรักษามาตรฐานนี้และเพื่อสร้างเนื้อหาคุณภาพได้อย่างต่อเนื่อง พาร์ตเนอร์ของเราอาจตอบแทนเราด้วยค่าคอมมิชชั่นสำหรับการจัดวางตำแหน่งต่าง ๆ ในบทความของเรา อย่างไรก็ดี ค่าคอมมิชชั่นนี้ไม่มีผลต่อกระบวนการของเราในการสร้างเนื้อหาที่ไร้อคติ ตรงไปตรงมา และเป็นประโยชน์