ข้ามไปที่เนื้อหา

การทำงานกับ cBot

บทความนี้อธิบายวงจรการทำงานของ cBot ใน cTrader CLI เรียนรู้วิธีเรียกใช้ cBot จากเทอร์มินัล แสดงรายการและหยุดอินสแตนซ์ที่กำลังทำงาน โฮสต์ cBot บน VPS หรือเซิร์ฟเวอร์คลาวด์ด้วย Docker และทำ backtesting กับข้อมูลย้อนหลัง

ข้อกำหนดเบื้องต้น

  • ได้ติดตั้ง cTrader CLI แล้ว
  • เตรียม cTrader ID ไฟล์ข้อมูลประจำตัว และหมายเลขบัญชีของคุณให้พร้อม
  • ส่งออก cBot เป็นไฟล์ .algo ที่คอมไพล์สำหรับ .NET 8 แล้ว

อ่านข้อมูลเมตาของ cBot

ก่อนเรียกใช้ cBot ให้ใช้ metadata เพื่อแสดงรายการพารามิเตอร์ที่ cBot รองรับ ผลลัพธ์จะแสดงชื่อและชนิดของแต่ละพร็อพเพอร์ตีของ cBot

ctrader-cli metadata <path-to-algo-file>

ใช้ชื่อพารามิเตอร์ที่แสดงในผลลัพธ์ข้อมูลเมตาเมื่อส่งพารามิเตอร์ผ่านบรรทัดคำสั่งหรือไฟล์ .cbotset

เรียกใช้ cBot

เริ่ม cBot ด้วย run พาธไปยังไฟล์ .algo เป็นอาร์กิวเมนต์แรก ต้องระบุ --account, --symbol และ --period

ctrader-cli run <path-to-algo-file> --account=<account-id> --symbol=<symbol> --period=<period>

ส่งพารามิเตอร์ได้สามวิธี

แหล่งที่มา ควรใช้เมื่อใด ตัวอย่าง
ค่าเริ่มต้น เมื่อพารามิเตอร์เริ่มต้นของ cBot เหมาะสมกับการใช้งานอยู่แล้ว ctrader-cli run /opt/mycbot.algo --account=1234567 --symbol=EURUSD --period=h1
จากบรรทัดคำสั่ง เมื่อต้องการเปลี่ยนค่าหนึ่งหรือสองค่าโดยไม่ต้องสร้างไฟล์ ctrader-cli run /opt/mycbot.algo --account=1234567 --symbol=EURUSD --period=h1 --Periods=15 --ConsolidationPeriods=3
ไฟล์ .cbotset เมื่อต้องการใช้ชุดค่าเดิมในการเรียกใช้หลายครั้ง โดยส่งออกไฟล์จากแอป cTrader บนเดสก์ท็อป ctrader-cli run /opt/mycbot.algo /opt/mysettings.cbotset --account=1234567 --symbol=EURUSD --period=h1

มีตัวเลือกเสริมสองรายการที่สำคัญสำหรับการเรียกใช้แบบไม่มีผู้ดูแล

ตัวเลือก วัตถุประสงค์
--full-access เรียกใช้ cBot โดยไม่จำกัดสิทธิ์เข้าถึง เมื่อจำเป็นต้องอ่านหรือเขียนไฟล์ในเครื่อง หรือเข้าถึงเครือข่าย
--exit-on-stop ออกจากโปรเซส cTrader CLI เมื่อ cBot หยุดทำงานเอง ซึ่งมีประโยชน์ในสคริปต์และคอนเทนเนอร์

เรียกใช้ cBot บน VPS หรือเซิร์ฟเวอร์คลาวด์

เครื่องมือที่ทำงานผ่านเทอร์มินัลอย่างเดียวสามารถทำงานบนเครื่อง Linux ขนาดเล็กได้อย่างมีประสิทธิภาพ จึงสามารถเรียกใช้ cBot อย่างต่อเนื่องด้วยต้นทุนที่ต่ำกว่าการใช้คอมพิวเตอร์เดสก์ท็อป การใช้ Docker image ของ cTrader CLI เป็นวิธีที่ย้ายไปใช้งานในสภาพแวดล้อมอื่นได้สะดวกที่สุด

ดาวน์โหลด image ล่าสุด:

docker pull ghcr.io/spotware/ctrader-console:latest

เรียกใช้ cBot ในคอนเทนเนอร์ ตัวเลือก --mount เชื่อมโยงโฟลเดอร์บนเครื่องโฮสต์กับตำแหน่งภายในคอนเทนเนอร์ ส่วนตัวเลือก -e ใช้ส่งการตั้งค่าผ่านตัวแปรสภาพแวดล้อม:

docker run -d -it \
  --name ctrader.console.run.mybot \
  --mount type=bind,src=/cAlgo/Robots,dst=/mnt/Robots \
  -e CTID='mycid' \
  -e PWD-FILE='/mnt/Robots/ctrader-cli.pwd' \
  -e ACCOUNT='9102302' \
  -e SYMBOL='EURUSD' \
  -e PERIOD='H1' \
  ghcr.io/spotware/ctrader-console:latest run "/mnt/Robots/My bot.algo" --environment-variables
ส่วนประกอบ ความหมาย
--name ctrader.console.run.mybot กำหนดชื่อคอนเทนเนอร์
--mount type=bind,src=...,dst=... เชื่อมโยงโฟลเดอร์บนเครื่องโฮสต์เข้ากับพาธ /mnt/Robots ในคอนเทนเนอร์
-e CTID='mycid' กำหนด cTrader ID เป็นตัวแปรสภาพแวดล้อม
-e PWD-FILE='/mnt/Robots/ctrader-cli.pwd' กำหนดพาธไปยังไฟล์รหัสผ่านภายในคอนเทนเนอร์
-e ACCOUNT='9102302' กำหนดหมายเลขบัญชีเทรด
-e SYMBOL='EURUSD' กำหนดสัญลักษณ์
-e PERIOD='H1' กำหนดกรอบเวลา
"<path>" พาธไปยังไฟล์ cBot ภายในคอนเทนเนอร์
--environment-variables สั่งให้ cTrader CLI อ่านการตั้งค่าจากตัวแปรสภาพแวดล้อม

หมายเหตุ

Docker image รองรับฟังก์ชันทั้งหมดของ cTrader CLI รวมถึง backtesting และการเพิ่มประสิทธิภาพ

เริ่มจากแอป cTrader บนเดสก์ท็อป

คุณไม่จำเป็นต้องเชี่ยวชาญการใช้บรรทัดคำสั่งก็สามารถใช้ประโยชน์จาก cTrader CLI ได้

  1. ในแอป cTrader บนเดสก์ท็อป ให้เตรียม cBot พร้อมพารามิเตอร์ที่ต้องการ
  2. คลิกขวาที่อินสแตนซ์ cBot ในเครื่อง แล้วเลือก เริ่มในโปรเซสภายนอก cTrader CLI จะเริ่มทำงานโดยอัตโนมัติและเรียกใช้อินสแตนซ์นั้นอย่างเป็นอิสระ
  3. ปิดแอปบนเดสก์ท็อปเพื่อลดการใช้ทรัพยากร CPU และ RAM cBot จะยังคงทำงานอยู่ในโปรเซส cTrader CLI

แสดงรายการและหยุด cBot

แสดงอินสแตนซ์ cBot ที่กำลังทำงานอยู่ในบัญชี:

ctrader-cli cbots --ctid=letstrade --password=secret --account=1234567 -q

หยุดอินสแตนซ์ที่กำลังทำงานโดยใช้ตัวระบุที่แสดงในผลลัพธ์ของ run:

ctrader-cli stop --ctid=letstrade --password=secret --account=1234567 -q --instance=<instance-id>

หากต้องการหยุด cBot ที่กำลังทำงานทั้งหมดพร้อมกัน ให้เปิดเชลล์แบบโต้ตอบแล้วเรียกใช้ stop all yes โปรเซส cTrader CLI จะสิ้นสุดเมื่ออินสแตนซ์สุดท้ายหยุดทำงาน

ทำ backtesting ของ cBot

ทดสอบ cBot ด้วยข้อมูลย้อนหลังโดยใช้ backtest พาธไปยังไฟล์ .algo เป็นอาร์กิวเมนต์แรก และอาจตามด้วยไฟล์ .cbotset ซึ่งไม่บังคับ การทดสอบยังต้องระบุสัญลักษณ์ กรอบเวลา และช่วงวันที่:

ctrader-cli backtest <path-to-algo-file> [<path-to-cbotset-file>] --account=<account-id> --symbol=<symbol> --period=<period> --start=<start-date> --end=<end-date> --data-mode=<data-mode>

ตัวเลือกสภาพแวดล้อมการทดสอบ

ตัวเลือกสภาพแวดล้อมการทดสอบอยู่หลังรายการ backtest ในเอกสารอ้างอิง CLI ต้องระบุเพียง --start, --end และ --data-mode ตัวเลือกเสริมใช้กำหนดยอดคงเหลือเริ่มต้น ค่าคอมมิชชัน สเปรด แหล่งข้อมูล และไฟล์รายงาน

โหมดข้อมูล

ค่า คำอธิบาย
open ใช้ราคาเปิดของกรอบเวลาพื้นฐาน วิธีนี้รวดเร็วแต่มีความแม่นยำต่ำกว่าในการจำลองการเคลื่อนไหวของราคาภายในแต่ละแท่ง
m1 ใช้ข้อมูลหนึ่งนาทีที่ดาวน์โหลดจากเซิร์ฟเวอร์
m1-csv ใช้ข้อมูลหนึ่งนาทีที่ระบุผ่าน --data-file
tick-csv ใช้ข้อมูล tick ที่ระบุผ่าน --data-file
ticks ใช้ข้อมูล tick ที่ดาวน์โหลดจากเซิร์ฟเวอร์ เป็นโหมดที่แม่นยำที่สุดแต่ช้าที่สุด และจำเป็นสำหรับกรอบเวลาแบบ tick แท่งช่วงราคา และ Renko

เคล็ดลับ

ตั้งค่า --data-dir เป็นโฟลเดอร์ที่เก็บข้อมูลไว้ระหว่างการเรียกใช้ เพื่อให้ cTrader CLI นำข้อมูลราคาที่ดาวน์โหลดไว้กลับมาใช้ได้โดยไม่ต้องดาวน์โหลดใหม่ทุกครั้งที่ทำ backtesting ใน Docker ให้เชื่อมโยงโฟลเดอร์นี้กับไดเรกทอรีบนเครื่องโฮสต์เพื่อเก็บข้อมูลไว้หลังจากหยุดคอนเทนเนอร์

ตัวอย่างการใช้งาน

ทำ backtesting ของ cBot ตัวอย่างโดยใช้ไฟล์พารามิเตอร์ .cbotset เพียงไฟล์เดียว:

ctrader-cli backtest "C:/test/sample martingale.algo" C:/test/special-parameters.cbotset \
  --ctid=letstrade --pwd-file=C:/test/password.pwd --account=1234567 --symbol=EURUSD --period=h1 \
  --start="01/01/2025 12:34" --end="31/01/2025 20:56" \
  --balance=10000 --commission=30 --commission-type=UsdPerMillionUsdVolume --spread=1 --data-mode=m1

ผลลัพธ์ backtesting

cTrader CLI จะแสดงความคืบหน้าในเทอร์มินัลอย่างต่อเนื่อง และแสดงสรุปเมื่อเสร็จสิ้น ผลลัพธ์ทั้งหมดอยู่ในโฟลเดอร์ Backtesting ข้างไฟล์ .algo โดยมีโฟลเดอร์ย่อยแยกสำหรับการเรียกใช้แต่ละครั้ง:

…/data/{cBotName}/{BacktestingInstanceID}/Backtesting
ไฟล์ เนื้อหา
เหตุการณ์ (JSON) เหตุการณ์สำคัญในการเทรด เช่น การเปิดและปิดโพสิชัน
บันทึก (TXT) การเริ่มและหยุด cBot การดำเนินการเทรด และผลลัพธ์
พารามิเตอร์ (.cbotset) พารามิเตอร์และค่าที่ใช้ในการทำ backtesting
รายงาน (HTML) รายงานแบบภาพที่แสดงสถิติการเทรดและประวัติคำสั่งซื้อขาย ซึ่งเปิดดูได้ในเว็บเบราว์เซอร์

--report และ --report-json จะบันทึกรายงานไว้ในพาธที่ระบุเพิ่มเติมจากโฟลเดอร์ข้างต้น

พฤติกรรมของ Algo API ใน cTrader CLI

สมาชิกบางส่วนของ cTrader Algo API มีพฤติกรรมแตกต่างออกไปเมื่อ cBot ทำงานใน cTrader CLI เพราะไม่มีส่วนติดต่อแบบกราฟิก

สมาชิก API พฤติกรรมใน cTrader CLI
MessageBox ส่งคืน MessageBoxResult.None
Window เมธอดทั้งหมดจะถูกละเว้นและไม่มีหน้าต่างปรากฏขึ้น
Notifications.PlaySound Ignored.
Chart.TakeChartshot ส่งคืน null