การทำงานกับ 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 ได้
- ในแอป cTrader บนเดสก์ท็อป ให้เตรียม cBot พร้อมพารามิเตอร์ที่ต้องการ
- คลิกขวาที่อินสแตนซ์ cBot ในเครื่อง แล้วเลือก เริ่มในโปรเซสภายนอก cTrader CLI จะเริ่มทำงานโดยอัตโนมัติและเรียกใช้อินสแตนซ์นั้นอย่างเป็นอิสระ
- ปิดแอปบนเดสก์ท็อปเพื่อลดการใช้ทรัพยากร 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 |