เชื่อมต่อ Binance เข้ากับ Freqtrade พร้อมการใช้งานเบื้องต้น

รู้จัก Freqtrade กันไปแล้ว วันนี้มาเชื่อมต่อ Binance เข้ากับ Freqtrade พร้อมการใช้งานเบื้องต้น จะเป็นอย่างไรนั้น มาดูกัน
Feature Image

สวัสดีครับ วันนี้เราจะทำการเชื่อมต่อ Binance เข้ากับ Freqtrade พร้อมการใช้งานเบื้องต้น จะเป็นอย่างไรนั้น เรามาดูกัน

จากบทความที่แล้ว ที่เราพูดถึง Freqtrade สามารถดูรายละเอียดได้ที่ข้างล่างนี้

เอาล่ะ เรามาเริ่มกันเลย

จากบทความที่แล้ว เรารู้จักกันแล้วว่า Freqtrade ก็คือบอทเทรด ส่วน Binance ก็คือ Exchange หรือกระดานเทรด แต่การที่บอทของเราจะเทรดได้นั้น จะต้องมีกระดานเทรดหรือที่ ๆ ให้บอทนั้นใช้ความสามารถของมัน จริง ๆ แล้วเราสามารถเชื่อมต่อ Exchange อื่นที่ไม่ใช่ Binance ก็ได้ โดยรายละเอียดการเชื่อมต่อกับ Exchange ไหนได้บ้าง สามารถดูได้ที่นี่ แต่วันนี้เราจะมาเชื่อมต่อกับ Binance ซึ่งเป็น Exchange อันดับ 1 ของโลกกัน จะเป็นอย่างไรนั้น เรามาดูกัน

ขั้นแรกก็ต้องสมัคร Binance ก่อน ก็ไปสมัครให้เรียบร้อย เนื่องจาก Binance มีระบบชวนเพื่อน ถ้าใครสนใจก็สามารถคลิกที่นี่ได้เลย หรือสามารถไปสมัครเว็บหลักได้ที่นี่ เอาล่ะ โดยหน้าตาเว็บไซต์ก็จะได้หน้าตาประมาณนี้ (ผู้เขียนใช้ Dark Theme เลยดูมืด ๆ หน่อย)

Binance

ทำการ Login ให้เรียบร้อย จากนั้นคลิกที่ไอคอนรูปคน แล้วก็คลิกที่ API Management

Binance Menu

เมื่อเข้ามาแล้ว จะเห็นรายละเอียดของ API Management เนื่องจากผู้เขียนได้สร้าง API Keys ไว้ 2 อันแล้ว ไว้ใช้สำหรับ Live บนเซิฟเวอร์ กับ Test บน Local แนะนำว่าให้สร้าง API Keys แยกแบบนี้ เพราะว่าเวลาเกิดมีปัญหา จะได้ไม่ไปกระทบกับอีกตัวหนึ่ง ซึ่ง Binance ณ วันที่ผู้เขียนเขียนบทความนี้ขึ้นมา สามารถสร้าง API Keys ได้สูงสุดถึง 30 Keys เพราะฉะนั้นไม่ต้องกลัวว่าจะเต็ม เอาล่ะ เราจะมาสร้าง API Keys สำหรับเทสบน Local กัน เริ่มจากคลิกที่ปุ่ม Create API

Binance Create API

เมื่อคลิกแล้ว จะมี Pop-up ให้เลือก Choose API Key type ซึ่งทั้งสองแบบมีความยากง่ายที่ต่างกัน โดยผู้เขียนจะเลือกเป็นแบบ System generated ก็คือ ให้ทางระบบ Generate Key มาให้เลย แต่ถ้าเป็นแบบที่สอง เราต้อง Generate ตัว RSA Key ออกมาก่อน ซึ่ง RSA Key จะประกอบไปด้วย Private Key กับ Public Key เราจะต้อง Upload ตัว Public Key ขึ้นไป (ส่วนตัวไม่เคยใช้แบบนี้กับ Binance) ซึ่งวิธีที่ 2 นี้ ค่อนข้างจะยุ่งยากพอสมควรสำหรับคนไม่เคยทำ แต่จะมีประโยชน์ในเรื่องของความปลอดภัย แต่เราจะใช้แบบที่ 1 ก่อน คือ System Generated ก่อน เพื่อความง่าย และวิธีลดความเสี่ยงที่จะถูกเอา Key ไปก็คือ IP access restrictions หรือการทำ IP Whitelist, การกำหนดสิทธิ์ กำหนดเท่านี้ก็ถือว่าปลอดภัยพอสมควรแล้ว

เอาล่ะ เราเลือกแบบแรกไป ก็คือ เลือก System generated แล้วคลิกที่ Next

Binance Choose API Key type

ทำการตั้งชื่อ แล้วแต่เราเลย ในที่นี้ขอตั้งว่า Freqtrade ละกัน แล้วคลิก Next

Binance Create API name

เมื่อคลิกไป จะขึ้น Captcha ผู้เขียนขอไม่แสดงนะ เพราะไม่ใช่ Captcha ที่ยากอะไร

พอใส่ Captcha แล้ว จะขึ้นหน้าเกี่ยวกับการป้องกัน

Binance Security verification

ในส่วนนี้ไม่แน่ใจว่าของคนอื่นจะขึ้นแบบไหน เพราะ Account ของผู้เขียนมีการทำ 2FA ไว้ทั้งหมด 2 ทางด้วยกัน คือ ทั้งแบบ Email และ Google Authenticator ก็คือต้องใส่ข้อมูล 2 อย่างนี้ให้ครบถึงจะสร้างได้ ส่วนของใครเป็นแบบไหนก็ลองทำดูนะ

เมื่อใส่ครบแล้วจะได้หน้าตาดังรูป

Binance API Keys

เราจะเห็น API Key กับ Secret Key แล้วก็ API restrictions รวมไปถึง IP access restrictions ซึ่งส่วนนี้เป็นเรื่องของความปลอดภัยกับเรื่องของการเข้าถึงข้อมูล โดยในที่นี้เราจะใช้แบบนี้ก่อน เพราะเรายังไม่ได้ต้องการเทรด แต่เราต้องการดึงข้อมูลจาก Binance มาเฉย ๆ โดยที่ Default เค้าจะติ๊ก Enable Reading มาให้แล้ว แปลว่าเราสามารถอ่านข้อมูลได้

เราต้องเอา Key ไปใส่ เราก็ไปเปิดโปรเจคเราขึ้นมา ไปที่ config.json จากนั้นไปที่ Exchange

Freqtrade config.json

เราจะเห็น key กับ secret เราก็ Copy API Key จาก Binance มาใส่ให้ตรง จากนั้นก็รันใหม่ โดยไปลบ Container ออกก่อน แล้วก็รันใหม่

docker compose -f docker-compose.yml up -d

เราเปิด Docker Desktop ดูว่าเป็นอย่างไร ถ้าเขียว ๆ ก็แสดงว่าไม่มีปัญหา

Docker Desktop Containers

มาถึงตรงนี้แล้ว การใส่ Key ของ Binance ก็จบลงแล้ว แต่การใส่ Key ไว้นั้น ถ้าเรายังไม่ตั้ง dry_run เป็น false ตัว Freqtrade ก็ยังไม่ใช้เงินจริงอยู่ดี เราสามารถใช้ทดสอบได้อยู่ ที่ผู้เขียนเพิ่ม Key ก่อน เพราะบางคำสั่งมันต้องใช้งาน Key แต่ไม่รู้นะว่าคำสั่งอะไรบ้าง หรือมันอาจจะไม่ใช้เลยก็ได้ แต่เวลาเทรดจริง ยังไงก็ต้องใช้ Key เลยคิดว่าทำเลยดีกว่า

เรามาเทสกันก่อนว่าทำงานได้มั้ย ขั้นแรก เราต้องเข้าไปที่ Container เพื่อรันคำสั่งต่าง ๆ

เราคลิกซ้ายที่ Container Freqtrade

Docker Desktop Containers

คลิกที่แท็บ Terminal ในส่วนนี้สามารถพิมพ์คำสั่งจากในนี้ก็ได้ แต่ถ้าใครไม่สะดวกใช้ในนี้ ก็คลิกที่ Open in external terminal

Docker Desktop Terminal

เมื่อคลิกแล้วจะขึ้น Terminal ขึ้นมา ก็สามารถใช้งานได้

Docker Desktop Containers

ส่วนนี้จริง ๆ เราสามารถใช้งานได้แล้วนะ โดยคำสั่งที่ใช้ในการ Remote เข้าไปใน Container ก็คือ

docker exec -it container_id /bin/sh

โดยที่ Container ID สามารถหาได้จาก Docker Desktop ตรงรูปนี้

Docker Desktop Container ID

ถ้าใครไม่มี Desktop Desktop สามารถหาได้จากคำสั่ง

docker ps
Command Line docker ps

แต่สำหรับใครที่หงุดหงิดกับการใช้ /bin/sh หรือ shell เริ่มต้น เราก็เปลี่ยนคำสั่ง สามารถเปลี่ยนจาก /bin/sh มาเป็น /bin/bash โดยเราจะใช้คำสั่ง

docker exec -it d2f9be7f66f0e555f98e19a138fc56723c207bce77b4bcc8a31e2e8c83484fbb /bin/bash

แนะนำว่าให้ใช้ bash แทนเพราะมันสามารถกด Tab เวลาพิมพ์ได้ และยังสามารถรันคำสั่งที่รันไปแล้วได้ ด้วยการกดลูกศรบนล่างได้

Command Line  docker exec

ตอนนี้คิดว่าหลาย ๆ คนน่าจะเข้าได้แล้ว เรามารันคำสั่งเพื่อทดสอบง่าย ๆ กัน

โดยเราจะใช้คำสั่งเริ่มต้นกัน โดยส่วนนี้แล้วแต่ใครจะเริ่มยังไงเลยนะ ส่วนผู้เขียนจะใช้คำสั่งในการดึงคู่เหรียญของ USDT ของ Binance

freqtrade list-pairs --quote USDT --print-json --exchange binance

เมื่อรันแล้ว จะได้

Command Line freqtrade

ต้องบอกว่า ดูไม่รู้เรื่อง แต่เห็นแว๊บ ๆ ว่ามันมี 331 คู่เหรียญ นี่เฉพาะ USDT เท่านั้นนะ โคตรเยอะ เรามาดูคำสั่งกัน

  • freqtrade เป็นการเรียกใช้งาน freqtrade
  • list-pairs เป็นคำสั่งใช้ในการแสดงคู่เหรียญ
  • –quote USDT เป็น Arguments เพื่อต้องการแสดงผลเฉพาะคู่เหรียญที่เราต้องการ ในที่นี้เลือกแสดงเฉพาะที่เป็นคู่เหรียญ USDT (ในส่วนนี้ผู้เขียนเข้าใจว่าคู่เหรียญไหนที่เป็น */USDT จะแสดงผลออกมา มันจะมีคำสั่ง –base ที่จะแสดงผลสลับกันคือ BTC/* อะไรแบบนี้)
  • –print-json เป็น Arguments ให้แสดงผลในรูปแบบ json format
  • –exchange binance เป็น Arguments สำหรับเลือกว่า เราจะแสดงผลข้อมูล Exchange หรือกระดานเทรดอะไร (ต้องเป็นที่ทาง Freqtrade ซัพพอร์ตด้วยนะ)

ต้องบอกว่าคำสั่งข้างต้น ไม่ต้องใส่ Key ก็ใช้ได้นะ 555 แต่ใส่ไว้ก่อน เดี๋ยวมันจะมีบางอย่างที่ทำไม่ได้ แต่ตอนนี้เรามาเรียนรู้คำสั่งพื้นฐานไปก่อน

เนื่องจากข้อมูลข้างต้นนั้นดูยากมาก เราเลยจะมาทำใหม่ รันคำสั่ง

freqtrade list-pairs --quote USDT --print-json --exchange binance > user_data/data/binance/pairs.json

เราจะเพิ่ม > เพื่อจะบอกว่า ให้เอาผลลัพธ์ที่ได้ ไปใส่ไว้ใน user_data/data/binance/pairs.json เอาล่ะ เราจะไปดูกัน

Visual Studio Code pairs.json

เราจะเห็นว่า เราได้ผลลัพธ์มาใส่ไว้ในไฟล์ที่ชื่อว่า pairs.json ละ ทีนี้เราอยากจัดสวย ๆ เพื่อความอ่านง่าย ให้คลุมดำทั้งหมด หรือกด Hotkey คือ Command + a ถ้าเป็นใน Windows น่าจะเป็น Ctrl + a จากนั้น คลิกขวา เลือก Format Selection

Visual Studio Code Format Selection

เมื่อคลิกเสร็จจะได้หน้าตาแบบนี้

Visual Studio Code result json format

นี่เราได้ข้อมูลในรูปแบบ json อย่างสวยมาละ อย่าลืม Save นะ

เราสามารถดูรายละเอียดคำสั่งอื่น ๆ ได้จากที่นี่ ซึ่งเยอะมาก ๆ

เอาล่ะ เรามาดูคำสั่งต่อไปกัน โดยเราจะทำการ Download Data เพื่อใช้สำหรับการทำ Backtesting กัน การทำ Backtesting ของ Freqtrade นั้นจำเป็นจะต้องโหลด Data มาก่อน แล้วเอา Data ที่ได้มาไปทำ Backtesting ส่วน Strategy หรือกลยุทธ์ที่ใช้ เราจะใช้ตามที่เค้ากำหนดนี่แหละ ก็คือ SampleStrategy

โดยเราจะใช้คำสั่งเพื่อโหลดข้อมูลมาก่อน

freqtrade download-data --exchange binance --pairs ETH/USDT XRP/USDT BTC/USDT --timeframes 5m --prepend --timerange 20221101-20221130 --datadir user_data/data/binance/2022-11

ยาวใช่มั้ยล่ะ 555 อธิบายแต่ละส่วน

  • download-data เป็นคำสั่งใช้สำหรับโหลดข้อมูล
  • –exchange binance เราจะใช้กระดานเทรด Binance
  • –pairs ETH/USDT XRP/USDT BTC/USDT เป็นการเลือกคู่เหรียญ (–pairs ใช้ได้หลายแบบมาก สามารถดูได้ที่นี่)
  • timeframes 5m เป็นการเลือก timeframe ของข้อมูล โดยเราจะเลือกเป็น 5m หรือทุก ๆ 5 นาที เพราะตัวอย่าง SampleStrategy ที่เค้าให้มาเค้าใช้แบบ 5m เลยใช้ตามเค้าไป
  • –prepend –timerange 20221101-20221130 เป็นคำสั่งเลือกระยะเวลาที่เราต้องการ Backtesting โดยเราจะเห็น –prepend มันจะมาคู่กับ –timerange เสมอ เวลาเราจะโหลดข้อมูลย้อนหลัง เพราะมันเป็นข้อจำกัดในการโหลดข้อมูล จากที่ผู้เขียนเคยใช้งาน CCXT หรือ Library สำหรับเทรด เวลาเราจะโหลดข้อมูลทีละ timeframe ย้อนหลังเยอะ ๆ เช่น timeframe 5m ย้อนหลังแบบ 1 เดือน ซึ่ง 1 วัน มี 24 ชั่วโมง แปลว่าข้อมูลที่โหลดออกมาใน 1 วัน จะได้ 24*60 นาที = 1440 นาที ใน 1 วันที่ 1440 นาที เอา 1440 นาที ไปหารกับ timeframe จะได้ 288 แท่ง แปลว่า ใน 1 วัน ถ้าเป็น Timeframe 5m ต้องโหลดข้อมูลถึง 288 แท่ง แต่เนื่องจาก เค้าจำกัดว่า ข้อมูลจะโหลดได้สูงสุดอยู่ที่ 1000 แท่ง (ถ้าจำไม่ผิดนะ) แปลว่าข้อมูลมันจะโหลดได้ประมาณ 3 วันกว่านิด ๆ ทีนี้เค้าทำยังไง เค้าใช้วิธีการต่อ Array หรือต่อแท่งเทียนกัน ถามว่าทำยังไง ส่วนนี้ไม่แน่ใจว่า Freqtrade ทำยังไง แต่คิดว่าน่าจะคล้าย ๆ กัน ก็คือ เรียกใช้งานหลาย ๆ ครั้งตาม Range ที่กำหนด เช่น ช่วงแรกอาจจะเป็น 20221101 – 20221101 – 20221103 ก็คือ 3 วันอะไรแบบนี้ ไล่ไปจนถึงวันสุดท้ายก็คือ 20221130 จากนั้นเอาผลลัพธ์ที่ได้ มารวมกัน โดยการรวมกัน เค้าอาจจะรวมทีเดียว หรือรวมแยกไว้ก่อนค่อยรวมอันนี้แล้วแต่คนเขียนโปรแกรม แต่มันเป็นข้อจำกัดของ Exchange เพราะว่า ยิ่ง timeframe ละเอียดเท่าไร ข้อมูลจะยิ่งเยอะ แล้วเวลาเราส่งข้อมูลผ่าน HTTP มันไม่เพียงพอ ไฟล์ที่ส่งจะใหญ่มาก ๆ แล้วมันทำให้ตัวระบบมันช้า อะไรแบบนี้ สามารถอ่านรายละเอียดเพิ่มเติมได้ที่นี่
  • –datadir user_data/data/binance/2022-11 เป็น path ที่เวลาเราโหลดข้อมูลเสร็จแล้ว จะเก็บไว้ที่ไหน

ต้องบอกก่อนว่า ข้อมูลที่โหลดมานั้นมันไม่เป๊ะ 100 % นะ ไม่รู้ว่าตอนนั้นมันบัคหรือว่าอย่างไร แต่ผู้เขียนเคยโหลดข้อมูลมาแบบ 30 วันนี่แหละ ปรากฎว่ามันได้ข้อมูลมา 35 วัน ผู้เขียนเลยไม่รู้ว่าตอนที่มันโหลดข้อมูลมา มันคาบเกี่ยวเรื่องของกราฟ เรื่องของเวลารึเปล่า เพราะมันใส่ได้เฉพาะ วันเดือนปี แต่ใส่เวลาไม่ได้ แต่ผู้เขียนคิดว่าเพียงพอต่อการทำ Backtesting แล้ว

เอาล่ะ ถ้าขึ้นแบบนี้ แสดงว่าโหลดได้แล้ว

Command Line freqtrade

ต่อไป เราจะเริ่มการทำ Backtesting ซึ่งการรัน Backtesting เราต้องแก้ไฟล์ config.json ก่อน

ไปที่ไฟล์ config.json ในส่วนของ pair_whitelist แก้ไขตามนี้เลย

"pair_whitelist": [
            "ETH/USDT",
            "XRP/USDT",
            "BTC/USDT"
        ],

pair_whitelist คือการเลือกเหรียญที่เราต้องการเทรด เนื่องจากตอนเราโหลดข้อมูลมา เราเลือก 3 เหรียญนี้มา ก็ใส่ตามนี้

pair_blacklist คือเหรียญที่เราไม่อยากให้เทรด หรือไม่ต้องการ ส่วนนี้แล้วแต่เลย แต่ผู้เขียนจะเพิ่มประมาณนี้

"pair_blacklist": [
      "ADADOWN/USDT",
      "BNBDOWN/USDT",
      "BTCDOWN/USDT",
      "ETHDOWN/USDT",
      "LINKDOWN/USDT",
      "XRPDOWN/USDT",
      "ADAUP/USDT",
      "BNBUP/USDT",
      "BTCUP/USDT",
      "ETHUP/USDT",
      "LINKUP/USDT",
      "XRPUP/USDT",
      "AUD/USDT",
      "BUSD/USDT",
      "EUR/USDT",
      "GBP/USDT",
      "LUNA/USDT",
      "LUNC/USDT"
    ]

ต้องบอกก่อนว่า ผู้เขียนไม่ได้ชี้นำว่าต้องใส่ตามนี้นะ แต่ผู้เขียนต้องการยกตัวอย่างเฉย ๆ ว่าถ้าสมมติว่าใน pair_whitelist มีเหรียญที่อยู่ใน pair_blacklist ระบบก็จะไม่ทำการเทรดให้ ที่ผู้เขียน blacklist ไว้ ด้วยเงื่อนไขต่าง ๆ เช่น

  • เหรียญที่เป็น UP หรือ DOWN จะเป็นเหรียญแบบ Binance Leveraged Tokens ก็คือเหรียญที่มีการเพิ่ม Leverage หรือความเสี่ยงขึ้น แต่ไม่มีการล้างพอร์ตหรือ liquidation คือ ปกติแล้วการเทรดนั้นจะขึ้นลงตามราคาเหรียญปกติ แต่ถ้ามีเรื่องของ Leverage แปลว่าเหรียญนั้นจะมีความเสี่ยงเพิ่มขึ้นตามค่า Leverage ที่เพิ่มขึ้น เช่น Leverage = 3 แปลว่า สมมติเหรียญ BTC ขึ้น 10 % ถ้าเราซื้อไว้ แปลว่าเราจะได้กำไรถึง 30 % แต่ถ้าเกิดว่าเหรียญลงมา 10 % แปลว่าเราจะขาดทุนถึง 30 % เช่นกัน แล้วถ้าเกิดว่า เหรียญลงมาที่ 35 % ล่ะ แปลว่าเราจะขาดทุนที่ 105% ซึ่งเกินขนาดที่เราขาดทุนแล้ว ก็คือเราจะถูกล้างพอร์ตหรือเรียกว่าการ liquidation แต่พอเป็น Binance Leveraged Tokens ค่า Leverage จะขึ้นอยู่กับ Algorithm ของ Binance ว่าตอนนั้น Leverage อยู่ที่เท่าไร จะไม่คงที่ และยังสามารถเทรดแบบ Spot หรือแบบธรรมดาได้ แปลว่า เราไม่มีโอกาสเลยที่จะถูกล้างพอร์ตเพราะมันเปรียบเสมือนกับการซื้อเหรียญปกติ แต่ไม่มีการล้างพอร์ตก็จริง แต่มีโอกาสขาดทุนมากกว่า 90 % นะ แต่ไม่นับว่าล้างพอร์ต เพราะการล้างพอร์ตคือ เงินเป็น 0 เลย แล้วข้อดีของ Binance Leveraged Tokens ก็คือ บางเหรียญที่ Binance เอามา เราสามารถเทรดขาลงได้ เช่น เราซื้อเหรียญ XRPDOWN ไว้ ถ้าเกิดว่าเหรียญ XRP/USDT ซึ่งเป็นคู่เหรียญปกติลง เหรียญ XRPDOWN มันจะขึ้น แปลว่าเราจะได้กำไรจากการซื้อเหรียญ XRPDOWN นี่แหละคือข้อดี แต่ถามว่าข้อเสียมีมั้ย ก็มี ถ้าเทรดในช่วงที่ตลาดผันผวนจะไม่เหมาะ เพราะ Algorithm ที่เหรียญ Binance Leveraged Tokens มันขึ้นลงตามตลาดที่ปกติ ที่ผู้เขียนเคยเจอมาก็คือ ถ้าช่วงที่ Algorithm ของ Binance Leveraged Tokens ปรับ เราไม่ควรเล่น อธิบายไม่ถูก แต่กราฟมันจะวิ่งสวนทางตาม Algorithm ที่เค้าตั้งไว้ แปลว่าในช่วงผันผวนเรามีโอกาสขาดทุนตอนช่วง Algorithm ปรับ ผู้เขียนเลย blacklist ไว้ อะไรแบบนี้ สามารถอ่านรายละเอียดของ Binance Leveraged Tokens ได้ที่นี่
  • Stablecoin ถ้าเราเทรดคู่เหรียญที่เป็น Stablecoin ราคามันจะไม่ขยับ หรือขยับน้อยมาก ๆ คือ ถ้าเกิดว่า กลยุทธ์ที่เราเขียนนั้นเกิดไปซื้อ Stablecoin ขึ้นมาเป็นเรื่องแน่ ๆ เพราะแปลว่าเราอาจจะเสียโควต้าการเทรดที่เราตั้งไว้ เช่น สมมติเราตั้ง max_open_trades = 3 แปลว่าเราจะเสียโควต้าไปจากการซื้อเหรียญ Stablecoin เพราะฉะนั้นผู้เขียนเลยเอาออกไว้
  • เหรียญที่มีความเสี่ยงมาก ๆ ถ้าเกิดเรามีเหรียญในใจที่มีความเสี่ยง เราก็ควรจะ Blacklist ไว้เพื่อป้องกันความเสี่ยง เพราะเคยมีกรณีที่เหรียญร่วงไม่หยุด ถ้าเราตั้งกลยุทธ์การเทรดไว้ไม่ดีพอ เช่น สมมติเราตั้ง RSI น้อยกว่า 30 ให้ทำการซื้อ แปลว่ามีโอกาสสูงมาก ๆ ที่เวลาเหรียญนั้นร่วงไม่หยุดและบอทเราซื้อรัว ๆ เราต้องระวังส่วนนี้ไว้

ถ้าใครมีเงื่อนไขการ Blacklist ที่อยากแนะนำก็บอกกันได้ เพราะผู้เขียนใช้ประมาณนี้แหละ ส่วนการ Whitelist เหรียญ ในส่วนนี้เราค่อยพูดถึงกัน เพราะมันทำได้หลายวิธีมาก ในนี้ขอยกตัวอย่างเป็น 3 เหรียญนี้ก่อน

เราจะยังรัน Backtesting ไม่ได้ เราต้องไปแก้ไขเรื่องของ pairlists

pairlists คืออะไร pairlists ก็คือ ลิสของเหรียญที่บอทเลือกเทรด ทำได้หลายวิธีมาก เราสามารถดูรายละเอียดได้ที่นี่

ในส่วนนี้ ถ้าเราต้องการทำ Backtesting เราต้องเลือกเป็น StaticPairList เท่านั้นนะ ไม่งั้น Backtesting ไม่ได้ (ส่วนตัวก็งงว่า ทำ Backtesting ทำไมใช้ได้เฉพาะ StaticPairList คิดว่าน่าจะเป็นเรื่องของข้อมูลย้อนหลัง) เอาล่ะ เราต้องไปแก้ไข pairlists โดยเปลี่ยนจากที่มีอยู่เป็น StaticPairList ก็จะได้

"pairlists": [
        {"method": "StaticPairList"}
    ],

เอาล่ะ เรามาเริ่มการรัน Backtesting กัน โดยเราจะใช้คำสั่ง

freqtrade backtesting --strategy SampleStrategy --dry-run-wallet 100 --fee 0.001 --config user_data/config.json --datadir user_data/data/binance/2022-11

อธิบายคำสั่ง

  • backtesting เป็นการทำ backtesting หรือรันข้อมูลย้อนหลังเพื่อเอาไปวิเคราะห์
  • –strategy SampleStrategy เป็นกลยุทธ์ที่เราเลือกใช้ ในที่นี้เราขอเลือกจากตัวอย่างเลย ก็คือ SampleStrategy
  • –dry-run-wallet 100 เป็นการตั้ง Wallet จำลองเงินขึ้นมา ที่ใช้ 100 มันดูง่ายดีเวลาเงินเหลือเท่าไร เอาไปคิดเป็นเปอร์เซนต์ก็ง่าย หน่วยเป็นตามที่เราตั้ง ในที่นี้เป็น USDT ตาม config.json
  • –fee 0.001 เป็นค่าธรรมเนียมที่ใช้เทรด โดยที่ 0.001 จะเท่ากับค่าธรรมเนียม 0.1 % ซึ่งใกล้เคียงหรือเท่ากับของ Binance เลย ถ้าไม่ใช้ BNB ลดค่าธรรมเนียมนะ รายละเอียดค่าธรรมเนียมของ Binance ดูได้ที่นี่
  • –config user_data/config.json เป็นการเลือกว่าเราจะเอาการตั้งค่าของ Bot Trade ที่ไฟล์ไหน ปกติแล้ว Default จะเป็น user_data/config.json อยู่แล้ว แต่ผู้เขียนใช้ให้ดู เผื่อเราอยากลองหลายอย่าง เราก็ Copy config.json ไปเป็นอีกไฟล์หนึ่งแล้วก็ใช้ทดสอบ Backtesting ได้
  • –datadir user_data/data/binance/2022-11 เป็นการเลือกข้อมูลที่จะทำการ Backtest ในที่นี้เราเลือกตามที่เราทำได้เลย

เมื่อรันแล้ว มันจะขึ้นเป็นตาราง เป็นข้อมูลต่าง ๆ ลองไล่ ๆ ดู

แนะนำ ลองศึกษาดูว่า ค่านี้คืออะไร คำนี้แปลว่าอะไร ส่วนตัวแล้วผู้เขียนไม่ได้รู้จักค่าทั้งหมด บางทีก็แอบงงเหมือนกัน ยังไงใครรู้ว่าคำไหนคืออะไรก็บอกได้นะ ส่วนตัวแล้วจะดูเฉพาะ Total profit % ส่วนที่เหลือก็จะดู Backtesting Report เป็นหลัก

Command Line freqtrade

เอาล่ะ ต่อไปเป็นฟีเจอร์สุดท้ายที่ผู้เขียนใช้ ก็คือ Hyperopt ส่วนตัวเจอคำนี้ไป งงเลย คืออะไร แต่ที่ผู้เขียนเคยลองใช้มา Hyperopt คือ การหาค่าที่เหมาะสมที่สุดโดยการสุ่ม สำหรับกลยุทธ์ที่เราใช้ ก็คือ เวลาเราใช้คำสั่งนี้ ระบบก็จะสุ่มค่าตาม Range ที่เราเขียนไปเรื่อย ๆ เพื่อดูว่าค่าไหนที่ดีที่สุดตาม –hyperopt-loss ที่เราเลือก แต่ผู้เขียนยังใช้ไม่เต็มประสิทธิภาพเท่าไร แต่บอกไว้ก่อนนะว่าการทำ Hyperopt ไม่ได้ดีเสมอไป ขึ้นอยู่กับเราเองด้วย เพราะเวลาเราทำ Hyperopt มาแล้ว มันจะให้ค่ามาตามที่เราอยากได้เลย เราก็เอาไปใส่ พอใส่เสร็จเราก็ต้องทำ Backtesting อีกรอบหนึ่งเพื่อดูว่ามันดีขึ้นหรือแย่ลง โดยส่วนตัว Hyperopt มันอยู่ที่เราจริง ๆ กับโค้ดและกลยุทธ์ที่เราเขียน สามารถอ่านรายละเอียดเพิ่มเติมได้ที่นี่ โดยคำสั่งที่ใช้รันง่าย ๆ ก็คือ

freqtrade hyperopt --hyperopt-loss OnlyProfitHyperOptLoss --spaces roi stoploss --strategy SampleStrategy --dry-run-wallet 100 --fee 0.001 --config user_data/config.json --datadir user_data/data/binance/2022-11 -e 100

นี่ขนาดง่าย ยังยาวขนาดนี้ 555 เรามาอธิบายกัน

  • hyperopt เป็นการรันคำสั่ง hyperopt หาค่าที่เหมาะสมที่สุดออกมา
  • –hyperopt-loss OnlyProfitHyperOptLoss เป็นการรันคำสั่งหรือ Class ที่ทาง Freqtrade มีให้ มีเยอะมากเลยนะ สามารถดูได้ที่นี่ ซึ่งแต่ละตัวไม่เหมือนกันด้วย ลองเล่นดู แต่ละตัวมีจุดประสงค์หรือให้ผลลัพธ์ไม่เหมือนกัน
  • –spaces roi stoploss เป็นผลลัพธ์หรือค่าที่เราอยากได้ ในที่นี้บอกว่าอยากได้ค่า roi กับ stoploss
  • –strategy, –dry-run-wallet, –fee, –config, –datadir เหมือนข้างบนเลย ขอยกมา
  • –strategy SampleStrategy เป็นกลยุทธ์ที่เราเลือกใช้ ในที่นี้เราขอเลือกจากตัวอย่างเลย ก็คือ SampleStrategy
  • –dry-run-wallet 100 เป็นการตั้ง Wallet จำลองขึ้นมาเพื่อใช้สำหรับการ Backtest แล้วแต่คนชอบเลยนะ ส่วนตัวเป็นคนเทรดไม่เยอะแล้วก็ที่ใช้ 100 มันดูง่ายดีเวลาเงินเหลือเท่าไร เอาไปคิดเป็นเปอร์เซนต์ก็ง่าย หน่วยเป็นตามที่เราตั้งนะ ในที่นี้เป็น USDT ตาม config.json
  • –fee 0.001 เป็นค่าธรรมเนียมที่ใช้เทรด โดยที่ 0.001 จะเท่ากับค่าธรรมเนียม 0.1 % ซึ่งใกล้เคียงหรือเท่ากับของ Binance เลย ถ้าไม่ใช้ BNB ลดค่าธรรมเนียมนะ รายละเอียดค่าธรรมเนียมของ Binance ดูได้ที่นี่
  • –config user_data/config.json เป็นการเลือกว่าเราจะเอาการตั้งค่าของ Bot Trade ที่ไฟล์ไหน ปกติแล้ว Default จะเป็น user_data/config.json อยู่แล้ว แต่ผู้เขียนใช้ให้ดู เผื่อเราอยากลองหลายอย่าง เราก็ Copy config.json ไปเป็นอีกไฟล์หนึ่งแล้วก็ใช้ทดสอบ Backtesting ได้
  • –datadir user_data/data/binance/2022-11 เป็นการเลือกข้อมูลที่จะทำการ Backtest ในที่นี้เราเลือกตามที่เราทำได้เลย
  • -e 100 เป็นเหมือนการสุ่ม ว่าเราจะทำการหาค่าที่เหมาะสมที่สุด โดยการสุ่มกี่ครั้ง ในที่นี้ขอสุ่ม 100 ครั้ง

คำสั่งนี้ คอมไม่แรง ช้าแน่นอน เพราะมันเอา CPU มารัน ถ้าใครไม่ซีเรียสก็รอไป มันจะมีหน้าตาต่าง ๆ ให้ดู ก็ดู ๆ ไปก็ได้ ไม่ก็ทิ้งไว้เฉย ๆ รอสรุปเสร็จ

Command Line freqtrade

นี่เป็นค่าที่ได้มา

Command Line freqtrade

เราจะได้ไฟล์ json อยู่ไฟล์หนึ่ง อยู่ที่ userdata/strategies/[name].json เราสามารถทำการ Backtest โดยใช้คำสั่งเดิม

freqtrade backtesting --strategy SampleStrategy --dry-run-wallet 100 --fee 0.001 --config user_data/config.json --datadir user_data/data/binance/2022-11

ในส่วนนี้ให้ระวังในเรื่องของไฟล์ json ที่เพิ่มเข้ามา เพราะถ้าเราอยากกลับไปเทสเหมือนเดิมก็คือ ให้เปลี่ยนค่าใน json ที่มาใหม่นี้กับให้ลบไฟล์ json ที่มาใหม่นี้ทิ้ง

เอาล่ะ จบไปแล้วกับการเชื่อมต่อ Binance เข้ากับ Freqtrade พร้อมการใช้งานเบื้องต้น เป็นอย่างไรกันบ้าง รายละเอียดเยอะพอสมควรเลย แต่ต้องบอกว่านี่เป็นเพียงส่วนหนึ่งที่ Freqtrade ที่ทำได้เท่านั้น จริง ๆ ยังมีอีกหลายฟีเจอร์ แต่ส่วนตัวแล้วใช้ประมาณนี้แหละในการรันบอทเทรด คิดว่าน่าจะเป็นประโยชน์สำหรับผู้อ่านไม่มากก็น้อย เดี๋ยวบทความหน้าอาจจะเริ่มอธิบายในส่วนของการเขียน Code สำหรับวันนี้ขอจากกันไปก่อน สวัสดีครับ

ช่องทางการติดต่อ

Email: [email protected]

Website: https://blog.tichaky.com/

Facebook: https://www.facebook.com/tichaky

Youtube: https://www.youtube.com/@tichaky_diary

Post navigation

ทำ Line Message API บน AWS Lambda

เอา Docker Image ขึ้น Docker Hub

ใช้ Portainer จัดการ Container กัน

DigitalOcean มีอะไรให้ใช้บ้าง