Skip to content

[Belajar] Membuat Machine Learning untuk Memprediksi Harga Saham/Forex/Crypto – Part #2

<<< Part#1

Pada Part#2 ini saya ingin berbagi tentang perihal teknis dari projek Machine Learning. Baik, kita mulai darimana yah. Mau dari depan ke belakang (forward) atau dari belakang ke depan (backward) ? Biar mudah dipahami, maka saya akan menjelaskan dengan metode backward. Alias dari hasil output – prosesInput. Khan biasanya metode forward menjelaskan sistem dengan input – prosesoutput.

OUTPUT

Informasi dari Machine Learning
Pair                :  EURUSD  - TF :  30
Bullish / Bearish   :  Bearish
Prev Close          :  1.10053  at :  2023-04-28 10:00:00
------------------------------------------------------------------------------------
   Model         NextClose  Closest    Action   MinPred   MaxPred    Accuracy(%)
------------------------------------------------------------------------------------
1. RF            1.10457    1.10457     BUY    1.10457    1.10552    99.96
2. LSTM          1.10254    1.10159     BUY    1.10159    1.10254    99.94
3. Fine-LSTM     1.10266    1.10187     BUY    1.10187    1.10266    99.94
4. SARIMAX       1.09671    1.09763     SELL   1.09561    1.64402    99.48
5. Hybrid        1.09904    1.09922     SELL   1.09830    1.42732    NaN
6. Future-LSTM   1.10420    1.10074     BUY    1.10074    1.10420    NaN
-------------------------------------------------------------------------------------
***The Closest Pred       : 1.10074 >>>  BUY
   The Nearest Next Close : 1.09904 >>>  STRONG SELL
   The Lowest Pred        : 1.09561
   The Highest Pred       : 1.64402
   The highest Accuracy   : 99.96 %

Predicting is DONE! -- Pair:  EURUSD  at TF:  30

Itu adalah contoh output dari Machine Learning. Terdapat informasi tentang pair yang digunakan, dalam contoh tersebut adalah EURUSD pada period atau TimeFrame (TF) 30 Menit (M30), lalu ada informasi tentang kondisi market, Bearish/Bullish, harga penutupan pada TF sebelumnya, yaitu Prev Close, lengkap dengan format Datetime. Lalu pada tabel diberikan hasil prediksi dari 6 Model yang mana masing-masing model menampilkan hasil prediksi harga NextClose, Closest (harga terdekat dari Prev Close), Action, Minimum Prediction, Max Prediction, Score, dan Accuracy (%). Sebagai tambahan, dibawah tabel adalah kesimpulan dari hasil ke 6 models. Closest adalah angka terdekat dari sekumpulan hasil prediksi setiap model terhadap angka Prev Close. Sedangkan Nearest Next Close adalah angka terdekat dari prediksi NextClose.

Bagaimana jika ditambah tampilan visual dari Metatrader seperti Gambar 1 di bawah ini ?

Gambar 1. Tampilan dari Metatrader.

Garis (dot) merah adalah hasil prediksi pergerakan harga Next N-bars dari Machine Learning yang diterima oleh Metatrader.

Jadi….bagaimana sekarang? Dengan adanya prediksi dari Machine Learning dan visualisasi, sudah berani ambil posisi trade ? Kalau belum berani, ga masalah…Memang salah satu faktor penting dalam dunia trading adalah Mind Set atau mentalitas.

Nah….bagaimana kalau Anda mendapatkan informasi seperti diatas. Apakah informasi tersebut sangat membantu Anda dalam mengambil keputusan?

OK…itu tadi adalah output. Sekarang saya mau jelaskan proses.

PROSES

Core dari Machine Learning

Untuk lebih mudah dipahami, saya akan berikan semacam pseudocode baik dari sisi Server dan juga Client.

Pseudocode Server Side:

1. Create Socket Server at [IP_Address] and [Port]
2. While True:
      a. Receive JSON_Data from MT4 (client)
3. Parsing JSON_Data
4. Create a new dataframe 
5. Adding Features and Indicators into dataframe
6. Define Target
7. Splitting data into Data_Train, Data_Valid, Data_Test
8. Training Phase
     a. Train with Random Forest
     b. Train with LSTM
     c. Train with Finetuned-LSTM
     d. Train with SARIMAX
     e. Train with Hybrid (LSTM + SARIMAX)
9. Validation Phase
10. Testing Phase
11. Evaluation Phase
11. Predicting Phase
12. Future Prediction
13. Candle Pattern Detection
     a. Detecting Bearish candle
     b. Detecting Bullish candle
14. Analyzing Results
15. Send the results via JSON to MT4 (client)


Pseudocode Client Side:

1. Connect to Server via socket at [IP_Address] and [Port]
2. Create JSON_Data
3. If Socket.Send and Object_Click = 'Connect & Train':
     Sending JSON_Data to Server
4. While Socket.Receive:
     Parsing JSON_Data
5. While Object_Click = 'Predict' 
     Draw objects
6. While Object_Click = 'Place Order'
     Open Trade
7. While Object_Click = 'Re-Train'
     Sending JSON_Data to Server
8. Read JSON_Data:
     Open Trade Automatically (Optional)
      

Bagaimana….sudah mulai bisa memahami konsep projek ini? Jika belum, normal….saya juga ga faham …. hahahaha 😀 😀 😀

INPUT

Raw Data untuk Machine Learning

Bagian berikutnya yang saya akan dibahas adalah input. Seperti saya sudah sampaikan pada Part#1, bahwa input data berupa harga (price) OHLC (Open, High, Low, Close) dari sejumlah candles / bars yang bersumber dari Metatrader (Lihat Gambar 2 di bawah). Untuk keperluan ini, kita perlu membuat sebuah Expert Advisor (EA) dengan menggunakan bahasa MQL4 dan dijalankan pada Metatrader. Adapun pseudocodenya bisa dilihat pada bagian Client Side. Jadi Client side menggunakan bahasa pemrograman MQL4, sedangkan Server side menggunakan Python. Antara MQL4 dan Python bertukar informasi atau data melalui JSON. Metatrader memberi input berupa harga OHLC untuk diproses oleh Machine Learning dan output berupa hasil prediksi dikirim kembali ke Metatrader.

Gambar 2. OHLC Candlestick

Voila…..itu saja penjelasan singkat dari projek ini. Agar lebih jelasnya, insya’Allah saya akan buat videonya. Mohon sabar menunggu yah….. 😀 😀 Saya aja sabar yang bikin projek ini…. 😀 😀

Oh iya, lalu bagaimana hasilnya ? Silahkan baca Part #3 yah…..sedang di ujicoba dulu.

Silahkan tinggalkan komentar, kritik, atau pertanyaan pada kolom di bawah. Saya akan berusaha semampu saya untuk menjawabnya. *Dengan catatan kalau sempat…xixixixi 😛 😀

Colmar, 29/04/2023, Springtime

Sambil istirahat sebelum ke Part #3, nonton dulu video Music Cover amatir ini…. 😛

Leave a Reply

Your email address will not be published. Required fields are marked *