Membuat cBot yang menggunakan CRTIndicator untuk mengatur level stop loss dan take profit.
Idenya adalah menggunakan level CRT (tinggi, tengah, rendah) dari candle sebelumnya (ditentukan oleh CandleIndex) untuk mengatur stop loss dan take profit untuk perdagangan baru.
Langkah-langkah:
- Kita akan membuat cBot yang membuka perdagangan (baik beli atau jual) berdasarkan beberapa kondisi (yang akan kita definisikan sebagai parameter untuk pengujian).
- Kita akan menggunakan CRTIndicator untuk mendapatkan level dari candle sebelumnya (indeks candle ditentukan oleh pengguna).
- Untuk perdagangan beli, kita akan mengatur stop loss pada CRT rendah dan take profit pada CRT tinggi dari candle referensi.
- Untuk perdagangan jual, kita akan mengatur stop loss pada CRT tinggi dan take profit pada CRT rendah dari candle referensi.
Namun, perhatikan bahwa CRTIndicator yang kita miliki hanya menghitung level untuk setiap candle dan memplotnya.
Kita perlu mengakses indikator dari cBot dan mendapatkan nilai untuk candle tertentu yang kita minati.
Mari kita desain cBot:
Parameter:
- CandleIndex: candle sebelumnya yang akan digunakan (0 = saat ini, 1 = sebelumnya, dll.)
- TradeType: kita dapat mengatur parameter untuk memilih antara Beli dan Jual untuk pengujian, atau kita dapat menggunakan sinyal (seperti crossover moving average) untuk memutuskan.
Untuk kesederhanaan, mari buat parameter untuk memilih tipe perdagangan.
Tapi perhatikan: Dalam perdagangan langsung, kita akan menggunakan beberapa kondisi untuk masuk. Kita akan membuat cBot sederhana yang membuka perdagangan pada candle saat ini jika tidak ada posisi yang ada.
Kita akan mengasumsikan kita berdagang pada kerangka waktu grafik.
Langkah-langkah dalam cBot:
- Periksa apakah kita memiliki posisi terbuka. Jika tidak, maka pertimbangkan untuk membuka.
- Dapatkan nilai CRTIndicator untuk CandleIndex yang ditentukan (yang merupakan candle masa lalu relatif terhadap saat ini).
- Untuk perdagangan Beli:
Stop Loss = CRT Rendah dari candle referensi
Take Profit = CRT Tinggi dari candle referensi - Untuk perdagangan Jual:
Stop Loss = CRT Tinggi dari candle referensi
Take Profit = CRT Rendah dari candle referensi
Namun, perhatikan bahwa indikator menghitung untuk setiap indeks. Kita memplot nilai yang sama untuk setiap indeks (karena kita menggunakan offset CandleIndex tetap).
Tapi dalam cBot, kita ingin mendapatkan level dari indikator pada waktu saat ini (candle selesai terbaru) untuk CandleIndex yang ditentukan.
Penting: Metode Calculate indikator dipanggil untuk setiap indeks, dan menyimpan nilai untuk candle referensi (indeks - CandleIndex) pada indeks saat ini.
Jadi jika kita ingin mendapatkan level CRT untuk candle historis tertentu, kita cukup membaca seri output indikator pada indeks candle itu?
Tapi perhatikan: output indikator diselaraskan dengan indeks saat ini. Sebenarnya, indikator memplot nilai yang sama untuk setiap bar karena kita mengatur:
CRTHigh[index] = crtHigh; // dimana crtHigh adalah tinggi dari candle (index - CandleIndex)
Jadi jika kita berada di indeks 100 dan CandleIndex=1, maka kita mendapatkan tinggi dari indeks 99 dan memplotnya di indeks 100.
Ini berarti bahwa jika kita ingin level CRT untuk candle yang berjarak CandleIndex bar yang lalu, kita dapat mengambil output indikator pada bar saat ini (indeks) dan itu akan memberi kita level dari CandleIndex bar yang lalu.
Tapi tunggu, dalam cBot, kita akan menjalankan OnBar atau OnTick. Kita tertarik pada bar selesai terbaru (indeks = MarketSeries.Close.Count - 2) dan candle yang kita inginkan adalah (indeks saat ini - CandleIndex).
Alternatifnya, kita bisa mengubah indikator untuk mengeluarkan level pada indeks yang sama dengan candle referensi, tapi kemudian kita harus menggeser plot sebesar CandleIndex.
Namun, indikator saat ini dirancang untuk memplot level pada bar saat ini dari bar sebelumnya. Jadi jika kita mengatur CandleIndex=1, maka pada setiap bar kita memplot level dari bar sebelumnya.
Bagaimana kita dapat menggunakannya dalam cBot:
Kita akan menambahkan indikator ke cBot dan kemudian mendapatkan nilai untuk bar terbaru (indeks = MarketSeries.Close.Count - 1) dan itu akan memberi kita level dari CandleIndex bar yang lalu.
Contoh:
Indeks bar saat ini = bar terakhir (indeks = MarketSeries.Close.Count - 1)
Kemudian output indikator pada indeks ini (CRTHigh[MarketSeries.Close.Count-1]) adalah tinggi dari bar (indeks saat ini - CandleIndex).
Tapi perhatikan: metode Calculate indikator dipanggil untuk setiap bar historis dan kemudian untuk setiap bar baru. Jadi seri output untuk bar terakhir akan memiliki nilai yang kita inginkan.
Mari kita kode cBot:
Kita akan memiliki parameter:
[Parameter("Candle Index", DefaultValue = 1, MinValue = 0)]
public int CandleIndex { get; set; }
[Parameter("Trade Type", DefaultValue = TradeType.Buy)]
public TradeType SelectedTradeType { get; set; }
[Parameter("Volume (Lots)", DefaultValue = 1, MinValue = 0.01, Step = 0.01)]
public double Volume { get; set; }
Kita juga akan membuat instance dari CRTIndicator.
Langkah-langkah di OnBar:
jika tidak ada posisi, maka buka posisi baru dengan stop loss dan take profit yang diatur dari output indikator untuk bar saat ini (yang sesuai dengan level dari CandleIndex bar yang lalu).
Namun, perhatikan: output indikator untuk bar saat ini (bar terakhir) diatur ke level dari (indeks bar saat ini - CandleIndex). Tapi ketika kita berada di awal, kita harus memastikan kita memiliki cukup bar.