___ _ _ _ _ _ _____ _ _ ____ _
|_ _|_ __ | |_ ___| | (_) __ _ ___ _ __ | |_ |_ _| __ __ _ __| (_)_ __ __ _ | __ ) ___ | |_
| || '_ | __/ _ | | |/ _` |/ _ '_ | __| | || '__/ _` |/ _` | | '_ / _` | | _ / _ | __|
| || | | | || __/ | | | (_| | __/ | | | |_ | || | | (_| | (_| | | | | | (_| | | |_) | (_) | |_
|___|_| |_|_____|_|_|_|__, |___|_| |_|__| |_||_| __,_|__,_|_|_| |_|__, | |____/ ___/ __|
|___/ |___/
₿ Ξ ₳ ₮ ✕ ◎ ● Ð Ł Ƀ Ⱥ ∞ ξ ◈ ꜩ ɱ ε ɨ Ɓ Μ Đ ⓩ Ο Ӿ Ɍ ȿ
- สัญญาณการซื้อขายอัจฉริยะ ? https://t.me/intelligent_trading_signals
โครงการนี้มีวัตถุประสงค์เพื่อพัฒนาบอทการซื้อขายอัจฉริยะสำหรับการซื้อขายสกุลเงินดิจิตอลอัตโนมัติโดยใช้อัลกอริธึมการเรียนรู้ของเครื่อง (ML) ที่ล้ำสมัยและวิศวกรรมฟีเจอร์ โครงการมีฟังก์ชันหลักดังต่อไปนี้:
บริการส่งสัญญาณกำลังทำงานบนคลาวด์และส่งสัญญาณไปยังช่องทางโทรเลขนี้:
- สัญญาณการซื้อขายอัจฉริยะ ? https://t.me/intelligent_trading_signals
ทุกคนสามารถติดตามช่องเพื่อรับความประทับใจเกี่ยวกับสัญญาณที่บอทนี้สร้างขึ้น
ปัจจุบัน บอทได้รับการกำหนดค่าโดยใช้พารามิเตอร์ต่อไปนี้:
มีช่วงเงียบเมื่อคะแนนต่ำกว่าเกณฑ์และไม่มีการแจ้งเตือนไปยังช่อง หากคะแนนมากกว่าเกณฑ์ จะมีการส่งการแจ้งเตือนทุกนาทีซึ่งมีลักษณะดังนี้
₿ 24.518 ??? คะแนน: -0.26
ตัวเลขแรกคือราคาปิดล่าสุด คะแนน -0.26 หมายความว่ามีแนวโน้มมากที่จะเห็นราคาต่ำกว่าราคาปิดปัจจุบัน
หากคะแนนเกินเกณฑ์ที่กำหนดในโมเดล สัญญาณซื้อหรือขายจะถูกสร้างขึ้น ซึ่งหมายความว่าเป็นเวลาที่ดีที่จะทำการซื้อขาย การแจ้งเตือนดังกล่าวมีลักษณะดังนี้:
- ซื้อ: ₿ 24,033 คะแนน: +0.34
เพื่อให้บริการผู้ส่งสัญญาณทำงานได้ ต้องมีการฝึก ML โมเดลจำนวนหนึ่งและไฟล์โมเดลที่พร้อมใช้งานสำหรับบริการ สคริปต์ทั้งหมดทำงานในโหมดแบตช์โดยการโหลดข้อมูลอินพุตบางส่วนและจัดเก็บไฟล์เอาต์พุตบางไฟล์ สคริปต์ชุดงานจะอยู่ในโมดูล scripts
หากทุกอย่างได้รับการกำหนดค่าแล้ว จะต้องดำเนินการสคริปต์ต่อไปนี้:
python -m scripts.download_binance -c config.json
python -m scripts.merge -c config.json
python -m scripts.features -c config.json
python -m scripts.labels -c config.json
python -m scripts.train -c config.json
python -m scripts.signals -c config.json
python -m scripts.train_signals -c config.json
หากไม่มีไฟล์การกำหนดค่า สคริปต์จะใช้พารามิเตอร์เริ่มต้นซึ่งมีประโยชน์สำหรับการทดสอบและไม่ได้มีไว้สำหรับการแสดงประสิทธิภาพที่ดี ใช้ไฟล์การกำหนดค่าตัวอย่างซึ่งมีให้สำหรับแต่ละรีลีส เช่น config-sample-v0.6.0.jsonc
พารามิเตอร์การกำหนดค่าหลักสำหรับสคริปต์ทั้งสองคือรายการแหล่งที่มาใน data_sources
รายการหนึ่งในรายการนี้ระบุแหล่งข้อมูลและ column_prefix
ที่ใช้ในการแยกคอลัมน์ที่มีชื่อเดียวกันจากแหล่งต่างๆ
ดาวน์โหลดข้อมูลประวัติล่าสุด: python -m scripts.download_binance -c config.json
รวมชุดข้อมูลประวัติหลายชุดเป็นชุดข้อมูลเดียว: python -m scripts.merge -c config.json
สคริปต์นี้มีไว้สำหรับคุณลักษณะที่ได้รับในการคำนวณ:
python -m scripts.features -c config.json
รายการคุณลักษณะที่จะสร้างได้รับการกำหนดค่าผ่านรายการ feature_sets
ในไฟล์การกำหนดค่า วิธีการสร้างคุณสมบัติถูกกำหนดโดย ตัวสร้างคุณสมบัติ แต่ละตัวโดยมีพารามิเตอร์บางตัวระบุไว้ในส่วนการกำหนดค่า
talib
อาศัยไลบรารีการวิเคราะห์ทางเทคนิค TA-lib นี่คือตัวอย่างการกำหนดค่า: "config": {"columns": ["close"], "functions": ["SMA"], "windows": [5, 10, 15]}
itbstats
ใช้ฟังก์ชันที่สามารถพบได้ใน tsfresh เช่น scipy_skew
, scipy_kurtosis
, lsbm
(การโจมตีที่ยาวที่สุดด้านล่างค่าเฉลี่ย), fmax
(ตำแหน่งแรกของค่าสูงสุด), mean
, std
, area
, slope
นี่คือพารามิเตอร์ทั่วไป: "config": {"columns": ["close"], "functions": ["skew", "fmax"], "windows": [5, 10, 15]}
itblib
ใช้งานใน ITB แต่ฟีเจอร์ส่วนใหญ่สามารถสร้างได้ (เร็วกว่ามาก) ผ่านทาง talibtsfresh
สร้างฟังก์ชันจากไลบรารี tsfresh สคริปต์นี้คล้ายกับการสร้างฟีเจอร์เนื่องจากจะเพิ่มคอลัมน์ใหม่ให้กับไฟล์อินพุต อย่างไรก็ตาม คอลัมน์เหล่านี้อธิบายบางสิ่งที่เราต้องการคาดการณ์และสิ่งที่ไม่เป็นที่รู้จักเมื่อดำเนินการในโหมดออนไลน์ ตัวอย่างเช่น มันอาจจะขึ้นราคาในอนาคต:
python -m scripts.labels -c config.json
รายการป้ายกำกับที่จะสร้างได้รับการกำหนดค่าผ่านรายการ label_sets
ในการกำหนดค่า ชุดป้ายกำกับหนึ่งชุดชี้ไปที่ฟังก์ชันซึ่งสร้างคอลัมน์เพิ่มเติม การกำหนดค่าคล้ายกับการกำหนดค่าคุณลักษณะมาก
highlow
จะคืนค่าเป็น True หากราคาสูงกว่าเกณฑ์ที่ระบุภายในขอบเขตในอนาคตhighlow2
คำนวณการเพิ่มขึ้น (ลดลง) ในอนาคตโดยมีเงื่อนไขว่าไม่มีการลดลง (เพิ่มขึ้น) อย่างมีนัยสำคัญก่อนหน้านั้น นี่คือการกำหนดค่าทั่วไป: "config": {"columns": ["close", "high", "low"], "function": "high", "thresholds": [1.0, 1.5, 2.0], "tolerance": 0.2, "horizon": 10080, "names": ["first_high_10", "first_high_15", "first_high_20"]}
topbot
เลิกใช้แล้วtopbot2
คำนวณค่าสูงสุดและต่ำสุด (ระบุว่าเป็น True) ทุกค่าสูงสุด (ขั้นต่ำ) ที่มีป้ายกำกับรับประกันว่าจะล้อมรอบด้วยค่าต่ำสุด (สูงสุด) ที่ต่ำกว่า (สูงกว่า) กว่าระดับที่ระบุ ความแตกต่างขั้นต่ำที่ต้องการระหว่างค่าต่ำสุดและค่าสูงสุดที่อยู่ติดกันจะถูกระบุผ่านพารามิเตอร์ level
พารามิเตอร์พิกัดความเผื่อช่วยให้สามารถรวมจุดที่ใกล้กับสูงสุด/ต่ำสุดได้ด้วย นี่คือการกำหนดค่าทั่วไป "config": {"columns": "close", "function": "bot", "level": 0.02, "tolerances": [0.1, 0.2], "names": ["bot2_1", "bot2_2"]}
สคริปต์นี้ใช้คุณสมบัติอินพุตและป้ายกำกับที่ระบุเพื่อฝึกโมเดล ML หลายตัว:
python -m scripts.train -c config.json
prediction-metrics.txt
พร้อมด้วยคะแนนการคาดการณ์สำหรับทุกรุ่นการกำหนดค่า:
model_store.py
train_features
labels
algorithms
เป้าหมายของขั้นตอนนี้คือการรวบรวมคะแนนการคาดการณ์ที่สร้างโดยอัลกอริทึมที่แตกต่างกันสำหรับป้ายกำกับที่แตกต่างกัน ผลลัพธ์คือหนึ่งคะแนนซึ่งกฎสัญญาณควรจะใช้ในขั้นตอนถัดไป พารามิเตอร์การรวมถูกระบุในส่วน score_aggregation
buy_labels
และ sell_labels
ระบุคะแนนการคาดการณ์อินพุตที่ประมวลผลโดยขั้นตอนการรวมกลุ่ม window
คือจำนวนขั้นตอนก่อนหน้านี้ที่ใช้สำหรับการรวมแบบกลิ้ง และ combine
เป็นวิธีการรวมคะแนนสองประเภท (การซื้อและป้ายกำกับ) ให้เป็นคะแนนเอาต์พุตเดียว
คะแนนที่สร้างโดยขั้นตอนการรวมกลุ่มคือตัวเลขจำนวนหนึ่ง และเป้าหมายของกฎสัญญาณคือการตัดสินใจซื้อขาย: ซื้อ ขาย หรือไม่ทำอะไรเลย พารามิเตอร์ของกฎสัญญาณอธิบายไว้ใน trade_model
สคริปต์นี้จำลองการซื้อขายโดยใช้พารามิเตอร์สัญญาณซื้อ-ขายจำนวนมาก จากนั้นเลือกพารามิเตอร์สัญญาณที่มีประสิทธิภาพดีที่สุด:
python -m scripts.train_signals -c config.json
สคริปต์นี้เริ่มบริการซึ่งดำเนินการงานเดียวกันเป็นระยะๆ: โหลดข้อมูลล่าสุด สร้างคุณสมบัติ คาดการณ์ สร้างสัญญาณ แจ้งสมาชิก:
python -m service.server -c config.json
มีสองปัญหา:
python -m scripts.predict_rolling -c config.json
python -m scripts.train_signals -c config.json
พารามิเตอร์การกำหนดค่าระบุไว้ในสองไฟล์:
service.App.py
ในช่อง config
ของคลาส App
-c config.jsom
สำหรับบริการและสคริปต์ ค่าจากไฟล์กำหนดค่านี้จะเขียนทับค่าใน App.config
เมื่อไฟล์นี้ถูกโหลดลงในสคริปต์หรือบริการ ต่อไปนี้เป็นช่องที่สำคัญที่สุด (ทั้งใน App.py
และ config.json
):
data_folder
- ตำแหน่งของไฟล์ข้อมูลที่จำเป็นสำหรับสคริปต์ออฟไลน์แบบแบตช์เท่านั้นsymbol
เป็นคู่การซื้อขายเช่น BTCUSDT
labels
รายการชื่อคอลัมน์ซึ่งถือเป็นป้ายกำกับ หากคุณกำหนดป้ายกำกับใหม่ที่ใช้สำหรับการฝึกและการคาดคะเน คุณจะต้องระบุชื่อป้ายกำกับที่นี่algorithms
รายการชื่ออัลกอริทึมที่ใช้สำหรับการฝึกอบรมtrain_features
รายการชื่อคอลัมน์ทั้งหมดที่ใช้เป็นคุณลักษณะอินพุตสำหรับการฝึกและการทำนายbuy_labels
และ sell_labels
รายการคอลัมน์ที่คาดการณ์ที่ใช้สำหรับสัญญาณtrade_model
ของผู้ส่งสัญญาณ (ส่วนใหญ่เป็นเกณฑ์บางส่วน)trader
เป็นส่วนสำหรับพารามิเตอร์ของเทรดเดอร์ ขณะนี้ยังไม่ได้ทดสอบอย่างละเอียดcollector
ข้อมูล บริการรวบรวมข้อมูลมีสองประเภท: ซิงโครนัสกับการร้องขอปกติไปยังผู้ให้บริการข้อมูลและบริการสตรีมมิ่งแบบอะซิงโครนัสซึ่งสมัครรับข้อมูลกับผู้ให้บริการข้อมูลและรับการแจ้งเตือนทันทีที่มีข้อมูลใหม่ กำลังทำงานอยู่แต่ไม่ได้ทดสอบอย่างละเอียดและรวมเข้ากับบริการหลัก รูปแบบการใช้งานหลักในปัจจุบันขึ้นอยู่กับการอัปเดตข้อมูลแบทช์ด้วยตนเอง การสร้างฟีเจอร์ และการฝึกโมเดล เหตุผลหนึ่งที่มีบริการรวบรวมข้อมูลเหล่านี้คือ 1) มีการอัปเดตที่เร็วขึ้น 2) มีข้อมูลที่ไม่มีอยู่ใน API ปกติ เช่น หนังสือสั่งซื้อ (มีคุณลักษณะบางอย่างที่ใช้ข้อมูลนี้ แต่ไม่ได้รวมเข้ากับขั้นตอนการทำงานหลัก)ดูไฟล์การกำหนดค่าตัวอย่างและความคิดเห็นใน App.config สำหรับรายละเอียดเพิ่มเติม
ทุกนาที ผู้ส่งสัญญาณจะดำเนินการตามขั้นตอนต่อไปนี้เพื่อคาดการณ์ว่าราคามีแนวโน้มที่จะเพิ่มขึ้นหรือลดลง:
หมายเหตุ:
เริ่มต้นบริการ: python3 -m service.server -c config.json
เทรดเดอร์กำลังทำงานแต่ไม่ได้แก้ไขจุดบกพร่องอย่างละเอียด โดยเฉพาะอย่างยิ่งไม่ได้ทดสอบความเสถียรและความน่าเชื่อถือ ดังนั้นจึงควรถือเป็นต้นแบบที่มีฟังก์ชันพื้นฐาน ขณะนี้มีการผสานรวมเข้ากับ Signaler แต่ในการออกแบบที่ดีกว่าควรเป็นบริการแยกต่างหาก
การทดสอบย้อนกลับ
การบูรณาการภายนอก