Mencipta cBot yang menggunakan CRTIndicator untuk menetapkan tahap stop loss dan ambil untung.
Idenya adalah untuk menggunakan tahap CRT (tinggi, tengah, rendah) dari lilin sebelumnya (ditentukan oleh CandleIndex) untuk menetapkan stop loss dan ambil untung bagi perdagangan baru.
Langkah-langkah:
- Kami akan mencipta cBot yang membuka perdagangan (sama ada beli atau jual) berdasarkan beberapa syarat (yang akan kami tentukan sebagai parameter untuk ujian).
- Kami akan menggunakan CRTIndicator untuk mendapatkan tahap dari lilin sebelumnya (indeks lilin ditetapkan oleh pengguna).
- Untuk perdagangan beli, kami akan menetapkan stop loss pada CRT rendah dan ambil untung pada CRT tinggi lilin rujukan.
- Untuk perdagangan jual, kami akan menetapkan stop loss pada CRT tinggi dan ambil untung pada CRT rendah lilin rujukan.
Walau bagaimanapun, perhatikan bahawa CRTIndicator yang kami ada hanya mengira tahap untuk setiap lilin dan memplotnya.
Kami perlu mengakses indikator dari cBot dan mendapatkan nilai untuk lilin tertentu yang kami minati.
Mari reka bentuk cBot:
Parameter:
- CandleIndex: lilin sebelumnya yang hendak digunakan (0 = semasa, 1 = sebelumnya, dan lain-lain)
- TradeType: kami boleh menetapkan parameter untuk memilih antara Beli dan Jual untuk ujian, atau kami boleh menggunakan isyarat (seperti persilangan purata bergerak) untuk membuat keputusan.
Untuk kesederhanaan, mari buat parameter untuk memilih jenis perdagangan.
Tetapi perhatikan: Dalam perdagangan langsung, kami akan menggunakan beberapa syarat untuk masuk. Kami akan membuat cBot mudah yang membuka perdagangan pada lilin semasa jika tiada posisi sedia ada.
Kami akan menganggap kami berdagang pada rangka masa carta.
Langkah-langkah dalam cBot:
- Periksa jika kami mempunyai posisi terbuka. Jika tidak, pertimbangkan untuk membuka.
- Dapatkan nilai CRTIndicator untuk CandleIndex yang ditetapkan (yang merupakan lilin masa lalu berbanding semasa).
- Untuk perdagangan Beli:
Stop Loss = CRT Rendah lilin rujukan
Ambil Untung = CRT Tinggi lilin rujukan - Untuk perdagangan Jual:
Stop Loss = CRT Tinggi lilin rujukan
Ambil Untung = CRT Rendah lilin rujukan
Walau bagaimanapun, perhatikan bahawa indikator mengira untuk setiap indeks. Kami memplot nilai yang sama untuk setiap indeks (kerana kami menggunakan offset CandleIndex tetap).
Tetapi dalam cBot, kami mahu mendapatkan tahap dari indikator pada masa semasa (lilin yang paling baru selesai) untuk CandleIndex yang ditetapkan.
Penting: Kaedah Calculate indikator dipanggil untuk setiap indeks, dan ia menyimpan nilai untuk lilin rujukan (indeks - CandleIndex) pada indeks semasa.
Jadi jika kami mahu mendapatkan tahap CRT untuk lilin sejarah tertentu, kami boleh sahaja membaca siri output indikator pada indeks lilin itu?
Tetapi perhatikan: output indikator diselaraskan dengan indeks semasa. Sebenarnya, indikator memplot nilai yang sama untuk setiap bar kerana kami menetapkan:
CRTHigh[index] = crtHigh; // di mana crtHigh adalah tinggi lilin (index - CandleIndex)
Jadi jika kami berada pada indeks 100 dan CandleIndex=1, maka kami mendapatkan tinggi indeks 99 dan memplotnya pada indeks 100.
Ini bermakna jika kami mahu tahap CRT untuk lilin yang berjarak CandleIndex bar lalu, kami boleh mendapatkan output indikator pada bar semasa (indeks) dan itu akan memberi kami tahap dari bar CandleIndex lalu.
Tetapi tunggu, dalam cBot, kami akan menjalankan OnBar atau OnTick. Kami berminat pada bar yang paling baru selesai (indeks = MarketSeries.Close.Count - 2) dan lilin yang kami mahu adalah (indeks semasa - CandleIndex).
Sebagai alternatif, kami boleh menukar indikator untuk mengeluarkan tahap pada indeks yang sama dengan lilin rujukan, tetapi kemudian kami perlu menggeser plot mengikut CandleIndex.
Walau bagaimanapun, indikator semasa direka untuk memplot tahap pada bar semasa dari bar sebelumnya. Jadi jika kami menetapkan CandleIndex=1, maka pada setiap bar kami memplot tahap dari bar sebelumnya.
Bagaimana kami boleh menggunakannya dalam cBot:
Kami akan menambah indikator ke cBot dan kemudian mendapatkan nilai untuk bar paling baru (indeks = MarketSeries.Close.Count - 1) dan itu akan memberi kami tahap dari bar CandleIndex lalu.
Contoh:
Indeks bar semasa = bar terakhir (indeks = MarketSeries.Close.Count - 1)
Kemudian output indikator pada indeks ini (CRTHigh[MarketSeries.Close.Count-1]) adalah tinggi bar (indeks semasa - CandleIndex).
Tetapi perhatikan: kaedah Calculate indikator dipanggil untuk setiap bar sejarah dan kemudian untuk setiap bar baru. Jadi siri output untuk bar terakhir akan mempunyai nilai yang kami mahu.
Mari kodkan cBot:
Kami akan ada 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; }
Kami juga akan mencipta satu contoh CRTIndicator.
Langkah-langkah dalam OnBar:
jika tiada posisi, maka buka posisi baru dengan stop loss dan ambil untung yang ditetapkan dari output indikator untuk bar semasa (yang sepadan dengan tahap dari bar CandleIndex lalu).
Walau bagaimanapun, perhatikan: output indikator untuk bar semasa (bar terakhir) ditetapkan kepada tahap bar (indeks bar semasa - CandleIndex). Tetapi apabila kami berada di permulaan, kami mesti memastikan kami mempunyai cukup bar.