Deploy to Cloud (Digital Ocean) & Run Bot for FX Market

เวิร์กช็อปนี้เป็นการฝึก deploy ชุดไฟล์ของบอท FX ขึ้นไปเก็บ ติดตั้ง และ รัน บนคลาวด์ที่ Digital Ocean (เป็นผู้ให้บริการคลาวด์รายหนึ่ง ที่มีคุณภาพและค่าบริการสมเหตุสมผล) คุณลักษณะและข้อจำกัดหลักของเวิร์กช็อปและโค้ดที่เกี่ยวข้องนี้ได้แก่

  • ต้องใช้บัตรเครดิตหรือบัตรเดบิต ในการสมัครเว็บ Digital Ocean (digitalocean.com) ซึ่งระหว่างใช้บริการคลาวด์ จะมีค่าใช้จ่ายตลอดเวลา โดยจะถูกหักจากบัตรเครดิตในสิ้นเดือนนั้น ผู้ให้บริการคลาวด์ทั่วไปคิดค่าบริการตามปริมาณการใช้งาน หากขยันทำเวิร์กช็อปก็จะจ่ายเยอะหน่อย แต่ไม่ต้องกังวลครับ แค่หลักสิบหรือหลักร้อยบาทเท่านั้น เมื่อทำเวิร์กช็อปเสร็จ หากต้องการหยุดพัก ไม่อยากเปลืองเงิน ก็ลบ VM (virtual machine) และบริการอื่นๆ ที่สร้างไว้ก่อนได้ พอจะทำใหม่ก็สร้างใหม่ ตอนที่ลบหรือปิดบริการจะไม่เสียค่าบริการ หรือเสียน้อยลง
  • เป็นการรันบอทและระบบที่เกี่ยวข้องผ่าน Docker
  • เป็นการเทรดกับโบรกฯ FX ที่ใช้ MT (MetaTrader)
  • บอท FX ทุกตัวที่จะ deploy ในชุดเดียวกัน ต้องเทรดกับโบรกฯ เดียวกันและใช้บัญชีเทรดเดียวกัน
  • ตอนฝึกทำเวิร์กช็อปแนะนำใช้สเป๊ก VM แบบ 2 CPU และ RAM 4 GB จะได้เร็ว ไม่หงุดหงิด ทำคล่องค่อยลบ VM ทิ้งได้ ^_^
  • หากใช้ Windows ต้องเป็นเวอร์ชั่นที่เป็น 64bit เช่น Windows 10 Professional, Windows 11
  • ตอนรันระบบ/เวิร์กช็อป ให้ปิดโปรแกรม Anti-Virus และ Firewall บนเครื่องให้หมดก่อน เพราะอาจรบกวนการ access ไปยังเครื่องบนคลาวด์ได้ ดังนั้นควรจดบันทึกไว้ทุกครั้งก็ดีในการเปิด/ปิด Anti-Virus และ Firewall เพราะหากไม่ระมัดระวังอาจเกิดช่องโหว่ด้านความปลอดภัยได้ ฉะนั้นจึงไม่ควรเก็บข้อมูลสำคัญไว้ในเครื่องนี้

ดาวน์โหลดไฟล์เวิร์กช็อป (click me please)

เมื่อดาวน์โหลดไฟล์ zip มาแล้ว ให้ extract ไฟล์ จะเห็นว่ามีโฟลเดอร์ DeepQuantProjects

  1. สร้างโฟลเดอร์ชื่อ dq_workshop ไว้ใน file path ที่ต้องการ แล้วสร้างโฟลเดอร์ชื่อ deploye ใน dq_workshop
  2. ลากหรือก๊อปปี้โฟลเดอร์นี้ไปเก็บไว้ในโฟลเดอร์ deploy เช่น หากใช้ Windows แนะนำให้เก็บไว้ใน C:/dq_workshop/deploy/DeepQuantProjects

ไฟล์หลักที่ใช้เป็นการรันบน Jupyter Notebook ชื่อ deploy_fx_mt.ipynb อยู่ใน path: DeepQuantProjects/labs/execution ซึ่งแนะนำให้ดูคำอธิบายอย่างละเอียดเพิ่มเติมในไฟล์นี้ได้เลยครับ

คลิปวิดีโอ

  • วิดีโออธิบายขั้นตอนแบบสั้นเน้นให้เห็นภาพรวมไวๆ -> (click me please – จะเปิดแท็บใหม่บนเบราเซอร์)
  • วิดีโออธิบายขั้นตอนแบบละเอียด -> (click me please – จะเปิดแท็บใหม่บนเบราเซอร์)
  • วิดีโออธิบายการ create & destroy Droplet กรณีเพิ่งใช้ DigitalOcean ครั้งแรก -> (click me please – จะเปิดแท็บใหม่บนเบราเซอร์)
  • วิดีโออธิบายการเซ็ตค่าในโปรแกรม MetaTrader (MT) และรันบอทฝั่ง Python กับฝั่ง MT -> (click me please – จะเปิดแท็บใหม่บนเบราเซอร์) *NOTE: ในคลิปนี้ช่วงท้ายอธิบายให้รันบอทฝั่ง Python ด้วยคำสั่ง python หากรันแล้ว error ให้ลองใช้คำสั่ง python3.0 ดูครับ

ทำความรู้จักกับ Action Shortcuts ในไฟล์ deploy_fx_mt.ipynb กันก่อน

ในไฟล์ deploy_fx_mt.ipynb ช่วงบนๆ มีหัวข้อ Action Shortcuts อยู่ ในส่วนนี้เป็นการรวบรวมหัวข้อและลิงค์เอาไว้ เนื่องจากไฟล์นี้มีขนาดยาวมาก หากเลื่อนหน้าจอขึ้นลงบ่อยๆ อาจงงได้ ใน Action Shortcuts จึงมีหัวข้อและลิงค์ให้คลิ้กเข้าไปในโค้ดท่อนนั้นๆ ได้สะดวกขึ้น และเมื่อทำงานอยู่ในโค้ดท่อนไหนแล้วอยากกลับไป Action Shortcuts ก็คลิ้กลิงค์ [Top] ได้ ซึ่งจะมีต่อท้ายในทุกหัวข้อในโค้ดท่อนล่างๆ เลย

Action Shortcuts > Preparation กับ Global Settings

ท่อนนี้ใช้บ่อยสุด

ในส่วน Preparation เป็นการเตรียมสิ่งต่างๆ ก่อนเริ่ม deploy เป็นการทำแค่ครั้งแรกครั้งเดียว ในการ deploy ชุดบอทขึ้นคลาวด์ที่ Digital Ocean ครั้งต่อไป ไม่ต้องทำอีก

ในส่วน Global Setting เป็นการเซ็ตค่าต่างๆ ที่จำเป็นต่อการ deploy เป็นพวกค่าที่เกี่ยวกับ security, path ของไฟล์, username & password, broker id และการระบุค่า True หรือ False ว่าจะรันระบบ ML Serve บนเครื่องเดียวกับชุดบอทเทรดหรือไม่

โค้ดท่อนนี้ยังมีโค้ดคลาส DeployUtilDigitalOcean สำหรับผู้ที่สนใจการเขียนโค้ด Python เพื่อทำ remote access โดยใช้ SSH (Secure Shell) ก็สามารถดูเป็นตัวอย่างได้

รูปตัวอย่างหน้าจอส่วน Action Shortcuts ในส่วน Preparation กับ Global Settings

Action Shortcuts > Resource Info

ท่อนนี้เอาไว้ดูรายละเอียดส่วนต่างๆ หลังจาก deploy ทั้งหมดเสร็จแล้ว

ในส่วน Resource Info เอาไว้ดูรายละเอียดของสิ่งที่เราสร้างและใช้บนคลาวด์อยู่ เช่น firewall, VM, docker service ซึ่งรายละเอียดต่างๆ จะเก็บอยู่ในไฟล์ deployed_info_digitalocean.json หากเพิ่งเปิดไฟล์ deploy_fx_mt.ipynb ครั้งแรกๆ และยังไม่ได้รันโค้ดเพื่อสร้างอะไรบนคลาวด์เลย อาจยังไม่มีไฟล์นี้

Action Shortcuts > VM: DQ-Resource

ท่อนนี้คือการ deploy ระบบ database ได้แก่ Redis กับ InfluxDB

ในส่วน VM: DQ-Resource ประกอบด้วยโค้ดหลาย cell ในการ deploy ระบบ DQ-Resource ซึ่งหลักๆ ประกอบด้วย Redis กับ InfluxDB แนะนำว่าไม่ว่าจะรันบอทผ่าน docker หรือไม่ใช้ docker แต่ในส่วน Redis กับ InfluxDB ควรรันผ่าน docker เพราะจะติดตั้งง่าย โดยเฉพาะการรันบน Windows
ขั้นตอนที่ใช้เวลานานและมักพบข้อผิดพลาดได้บ่อย คือ ขั้นตอนการ download and install Docker อาจเกิดได้จากหลายสาเหตุ ให้สังเกตุง่ายๆ ว่ารันผ่านหรือไม่ผ่าน คือเมื่อรันโค้ด cell นี้เสร็จแล้ว ให้สังเกตข้อความที่ print ออกมาว่า จะมีบรรทัดนึงที่ print เวอร์ชั่นของ docker ออกมา(ลองเลื่อนหน้าจอไล่ดู) หาก print เลขเวอร์ชั่นออกมาแสดงว่าผ่าน แต่หากไม่ print แสดงว่าไม่ผ่าน หากไม่ผ่าน ให้รันโค้ด cell นี้ซ้ำใหม่ได้ แต่หากรันซ้ำ 3-4 รอบแล้วก็ยังไม่ผ่าน แนะนำให้ลบ VM (Droplet) นี้ทิ้ง แล้วเริ่มรันใหม่ตั้งแต่ขั้นตอน Create VM (Droplet)

Action Shortcuts > VM: DQ-Bot

ท่อนนี้คือการ deploy ชุดบอท ซึ่งยุ่งยากสุด ใช้เวลานานสุด

ในส่วน VM: DQ-Bot (normal steps) ประกอบด้วยโค้ดหลาย cell ในการ deploy ระบบ DQ-Bot ที่ประกอบด้วยไฟล์บอทและโมเดล ML/RL ต่างๆ รวมถึงไฟล์อื่นๆ ที่เกี่ยวข้อง
ขั้นตอนที่ใช้เวลานานและมักพบข้อผิดพลาดได้บ่อย ได้แก่

  • ขั้นตอน Install Ubuntu desktop, XRDP and Firefox browser กับขั้นตอน Install Wine มักใช้เวลาค่อนข้างนาน อาจเกิน 10 นาที
  • ขั้นตอนการ download and install Docker วิธีตรวจสอบว่ารันผ่านหรือไม่ให้ดูว่ามีบรรทัดที่ print เวอร์ชั่นของ docker หรือไม่ หากไม่่ print ก็ลองรันซ้ำ 3-4 รอบดูครับ ถ้ายังไม่ผ่านอีก ให้ลบ VM (Droplet) แล้วเริ่มทำใหม่ตั้งแต่ขั้นตอน Create VM

หากเพิ่งเริ่มฝึกทำ แนะนำให้ข้ามขั้นตอน Start Docker Services กับขั้นตอน Create snapshot ไปก่อน

ในส่วน VM: DQ-Bot (utilities) ประกอบด้วยโค้ดหลาย cell สำหรับใช้ upload ไฟล์บางส่วน เพื่อจะได้ไม่ต้อง upload ทั้งหมดใหม่ เช่น

  • หัวข้อ Upload files in directory ‘/web’ to VM จะ upload เฉพาะไฟล์และไฟล์ใน sub-directory ต่างๆ ภายใต้โฟลเดอร์ web เท่านั้น
  • หัวข้อ Upload docker files to VM จะ upload เฉพาะไฟล์ Docker setting เท่านั้น เช่น ไฟล์ docker-compose.yml, Dockerfile-dq_bot
  • หัวข้อ Upload requirements.txt to VM จะ upload เฉพาะไฟล์ requirements.txt เท่านั้น

Action Shortcuts > VM: ML-Serve

ท่อนนี้คือการ deploy ระบบ ML-Serve สำหรับให้บริการโมเดล ML และ RL ง่าย สั้น แป๊บเดียว

Action Shortcuts > Management

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

Workshop

เวิร์กช็อป 1: Deploy ทั้งหมดตั้งแต่แรก

เวิร์กช็อปแรกนี้สำคัญที่สุด ผู้เรียนทุกคนต้องทำให้ผ่าน และทำให้คล่องให้ได้ จะใช้เวลาฝึกทำเท่าไหร่ก็ได้ตามสะดวกครับ เนื่องจากไม่ว่าจะเป็นการเอาบอทที่ผมแชร์ให้ไปรัน หรือเอาบอทที่ตัวเองเป็นคนทำไปรัน ก็ต้องทำตามขั้นตอนเหล่านี้เช่นเดียวกัน

หลักๆ ในเวิร์กช็อปนี้เป็นการรันผ่านไฟล์ deploy_fx_mt.ipynb คำอธิบาย, ข้อแนะนำ, ข้อควรระวัง ให้ดูได้ในแต่ละ cell โค้ดในไฟล์นี้ ซึ่งจะอธิบายละเอียดกว่าในเว็บหน้านี้ครับ

ทำตามขั้นตอนดังนี้

  1. เตรียมตัว
    • เปิดหน้าต่าง Command Prompt หรือ Terminal แล้วเข้า virtual environment ชื่อ ‘deepquant_env’ ที่ได้ install Python package ต่างๆ ตามในไฟล์ requirements.txt และขั้นตอนในหน้า Installation & Preparation ในเว็บ deepquantspace.com เรียบร้อยแล้ว
    • เปิด Jupyter Notebook แล้วเลือก Kernel เป็น ‘deepquant_env’ โดยเข้าไปที่เมนู Kernel แล้วเลือก Change Kernel หากไม่มี ‘deepquant_env’ ให้เลือก ให้เข้าไปหน้า Installation & Preparation เพื่อดูขั้นตอนการเซ็ตให้ Jupyter Notebook รู้จัก virtual environment ที่เราต้องการจะใช้
    • เปิดไฟล์ deploy_fx_mt.ipynb ในหน้า Jupyter Notebook บนเว็บเบราเซอร์ ให้เลือกไปที่ path ที่ได้ extract ไฟล์ zip ของเวิร์กช็อปนี้ที่ได้ดาวน์โหลดเอาไว้ (หากยังไม่ได้ดาวน์โหลด ให้เลื่อนหน้าจอนี้ขึ้นไปด้านบน มีลิงค์ให้ดาวน์โหลดและข้อแนะนำหลังดาวน์โหลด) จากนั้นเข้าไป path ชื่อ DeepQuantProjects/labs/execution แล้วคลิ้กเปิดไฟล์ชื่อ deploy_fx_mt.ipynb
    • เปิดบัญชีกับโบรก XM หรือ Exness หรือ CPT Markets เนื่องจากสนิทกันและในกลุ่ม Deep Quant มีบางคนทำงานให้ XM, บางคนทำให้ Exness บางคนทำให้ CPT Markets หากติดขัดใดๆ จะได้ปรึกษากันได้สะดวก แล้วหลังฝึกทำเวิร์กช็อปคล่อง ตอนจะรันบอทเทรดจริงสามารถใช้โบรกฯ อื่นก็ได้ตามสะดวกครับ ในตอนทำเวิร์กช็อปให้ใช้บัญชี Demo อย่าเพิ่งใช้บัญชีจริงนะครับ หากยังไม่มีบัญชีให้เข้าเว็บ xm.com หรือ exness.com หรือ cptmarkets.com แล้วเปิดบัญชี Demo ตอนสมัครให้ระบุว่าจะใช้ MT4 (MetaTrader4) นะครับ และให้จดชื่อ server หลังยืนยันการสมัครเก็บไว้ด้วยนะครับ เพราะต้องใช้ตอนล็อกอิน MT4
  2. ไปที่หัวข้อ Action Shortcuts เลื่อนหน้าจอในหน้า deploy_fx_mt ลงมาจนเจอหัวข้อ Action Shortcuts
  3. เริ่มทำหัวข้อ Preparation
    • ขั้นตอนนี้ปกติทำแค่ครั้งแรกครั้งเดียว ขั้นตอนนี้ไม่ยาก ค่อยๆ ทำ อย่ารีบครับ หากทำผิด จะผิดยาวจนทำขั้นตอนต่อๆ ไปไม่ได้นะครับ
    • จะมีขั้นตอนเกี่ยวกับสร้าง SSH Key ให้ค่อยๆ ทำ ระวังเรื่อง path ของไฟล์ และ ตอนพิมพ์ passphrase (password) จะมองไม่เห็นตัวอักษร ให้จำหรือจดเก็บไว้ให้ดี เพราะต้องใช้ในท่อนถัดไปครับ
  4. ทำหัวข้อ Global Settings > Global Settings
    • ขั้นตอนนี้มีค่าให้เซ็ตนิดเดียว แต่ๆๆๆๆ หลายคนมักเซ็ตผิด เช่น พิมพ์ / เป็น \ หรือ พิมพ์ path ของไฟล์ผิด หรือ พิมพ์ password หรือจำไม่ได้
    • ตัวแปรที่ต้องเซ็ตค่า ได้แก่
      • cloud_token – ให้ก๊อปปี้ค่าที่ทำในขั้นตอนที่ 1 มาใส่
      • ssh_keys – ให้ก๊อปปี้ค่าที่ทำในขั้นตอนที่ 1 มาใส่
      • bot_root_path – ระวังพิมพ์ path ของไฟล์ผิด
      • private_key_path – คือ path ของไฟล์ id_deepquant ที่ใช้ตอนสร้าง SSH Keys ในขั้นตอนที่ 1 ระวังพิมพ์ path ของไฟล์ผิด และต้องระบุชื่อไฟล์ว่า id_deepquant ต่อท้าย หลายคนมักพิมพ์ผิด หรือลืม path
      • password – คือ ค่า passphrase ที่พิมพ์ตอนสร้าง SSH Keys ครับ ถ้าจำไม่ได้ ให้กลับไปทำขั้นตอนที่ 1 เพื่อสร้าง SSH Keys ใหม่ซ้ำได้ครับ ทับไฟล์เดิมได้เลย หรือลบไฟล์ที่ชื่อขึ้นต้นด้วย id_deepquant ทิ้งก่อนก็ได้
      • broker_id – ใช้ค่าดีฟอลต์ ‘XM1’ ไปก่อนตอนทำเวิร์กช็อป แต่ตอนรันบอทเทรดจริง ตั้งชื่อตามชอบครับ
      • run_mlserve_with_dqbot – เป็นการระบุว่าจะรันระบบ ML-Serve บน VM เดียวกับชุดบอทเทรด หรือ DQ-Bot หรือไม่ เบื้องต้นให้ใช้ค่าเดิมคือ True ไปก่อนครับ เพราะรันเร็วกว่า ประหยัดกว่า แต่หากแยกรันคนละ VM จะยืดหยุ่นกว่า เหมาะกับทำคล่องมากๆ แล้วเท่านั้น
  5. ทำหัวข้อ Global Settings > Create Firewall
    • ขั้นตอนนี้กดปุ่ม Run อย่างเดียวครับ แป๊บเดียวเสร็จ
  6. ทำหัวข้อ VM: DQ-Resource (normal steps)
    • ขั้นตอนนี้กดปุ่ม Run อย่างเดียวครับ
    • ขั้นตอนที่ 3 อาจนานหน่อย ปกติไม่เกิน 10 นาที
    • ให้ทำทั้งหมด 7 ขั้นตอนเลยครับ
  7. ทำหัวข้อ VM: DQ-Bot (normal steps)
    • ขั้นตอนนี้กดปุ่ม Run อย่างเดียวครับ
    • ขั้นตอนที่ 3, 4, 6, 7 อาจนานหน่อย โดยเฉพาะขั้นตอนที่ 3, 4, 6 แต่ละขั้นตอนอาจใช้เวลาราว 5-10 นาที
    • ไม่ต้องทำขั้นตอนที่ 2 กับ 10
  8. ทำหัวข้อ VM: ML-Serve (normal steps)
    • ขั้นตอนนี้กดปุ่ม Run อย่างเดียวครับ
    • ไม่ต้องทำขั้นตอนที่ 1 กับ 3 เนื่องจากเป็นการรันระบบ ML-Serve บน VM เดียวกับ DQ-Bot จึงไม่จำเป็นต้องสร้าง VM ใหม่ และไม่ต้อง download และ install Docker ใหม่

เวิร์กช็อป 2: Upload ไฟล์บางส่วนไปยัง VM: DQ-Bot

เวิร์กช็อปนี้เป็นการฝึก upload ไฟล์บางส่วน ไม่ได้ upload ทุกไฟล์ทุกโฟลเดอร์ที่ใช้ ซึ่งจะรันเร็วกว่า ประหยัดเวลากว่า ฝึกทำไว้ใช้ในกรณีที่สร้าง VM ต่างๆ แล้ว และเริ่มรันบอทและระบบต่างๆ แล้ว (ต้องทำเวิร์กช็อป 1 ให้เสร็จและผ่านหมดก่อน) แล้วอยากอัพเดตบางไฟล์ เช่น มีการแก้ไขลอจิกบอทบางไฟล์, มีการแก้ไขค่าในไฟล์ robot_config, มีการอัพเดตเวอร์ชั่นของ Python package ในไฟล์ requirements.txt, มีการอัพเดตไฟล์โมเดล ML ฯ ก็เลยต้องการ upload บางไฟล์ขึ้นไปบน VM แล้ว replace ไฟล์เดิม เป็นต้น

ทำตามขั้นตอนดังนี้ (ตอนทำงานจริงไม่ต้องทำทุกขั้นตอน แต่ทำบางขั้นตอนได้ และไม่ต้องทำเรียงลำดับกัน)

ก่อนเริ่มให้เลื่อนหน้าจอในไฟล์ deploy_fx_mt.ipynb ที่เปิดอยู่บนเบราเซอร์ไปที่ Action Shortcuts หัวข้อ VM: DQ-Bot (utilities)

  1. ทำหัวข้อ Upload files in directory ‘/web’ to VM
  2. ทำหัวข้อ Upload docker files to VM
  3. ทำหัวข้อ Upload requirements.txt to VM

เวิร์กช็อป 3: Upload ไฟล์บางส่วนไปยัง VM: ML-Serve

เวิร์กช็อปนี้เป็นการฝึก upload ไฟล์บางส่วน ไม่ได้ upload ทุกไฟล์ทุกโฟลเดอร์ที่ใช้ ซึ่งจะรันเร็วกว่า ประหยัดเวลากว่า ฝึกทำไว้ใช้ในกรณีที่สร้าง VM ต่างๆ แล้ว และเริ่มรันบอทและระบบต่างๆ แล้ว (ต้องทำเวิร์กช็อป 1 ให้เสร็จและผ่านหมดก่อน) แล้วอยากอัพเดตบางไฟล์ เช่น มีการแก้ไขลอจิกบอทบางไฟล์, มีการอัพเดตเวอร์ชั่นของ Python package ในไฟล์ requirements.txt, มีการอัพเดตไฟล์โมเดล ML ฯ ก็เลยต้องการ upload บางไฟล์ขึ้นไปบน VM แล้ว replace ไฟล์เดิม เป็นต้น

ทำตามขั้นตอนดังนี้ (ตอนทำงานจริงไม่ต้องทำทุกขั้นตอน แต่ทำบางขั้นตอนได้ และไม่ต้องทำเรียงลำดับกัน)

ก่อนเริ่มให้เลื่อนหน้าจอในไฟล์ deploy_fx_mt.ipynb ที่เปิดอยู่บนเบราเซอร์ไปที่ Action Shortcuts หัวข้อ VM: ML-Serve (utilities)

  1. ทำหัวข้อ Upload ML model files to VM
  2. ทำหัวข้อ Update ML model registry
  3. ทำหัวข้อ Upload docker files to VM
  4. ทำหัวข้อ Upload requirements.txt to VM

Leave a Reply

Discover more from

Subscribe now to keep reading and get access to the full archive.

Continue reading