Strategi ini terutamanya menggunakan purata bergerak dan Bollinger Bands untuk menangkap trend dan turun naik pasaran. Ia menggunakan tiga jenis purata bergerak yang berbeza: Purata Bergerak Sederhana (SMA), Purata Bergerak Berimbang (WMA), dan Purata Bergerak Eksponensial (EMA). Pada masa yang sama, ia menggunakan Bollinger Bands untuk menetapkan saluran harga, dengan jalur atas dan bawah berfungsi sebagai isyarat untuk membuka dan menutup kedudukan. Apabila harga menembusi Bollinger Band atas, ia membuka kedudukan pendek; apabila ia menembusi band bawah, ia membuka kedudukan panjang. Ia juga menetapkan Bollinger Bands yang lebih luas sebagai tahap stop-loss, menutup kedudukan apabila harga melanggar jalur ini.
Marina Parfenova School Project Bot adalah strategi perdagangan kuantitatif berdasarkan purata bergerak dan Bollinger Bands. Ia cuba untuk mendapat keuntungan dengan menangkap trend pasaran sambil mengawal penarikan melalui garis stop-loss Bollinger Band. Logik strategi adalah mudah dan mudah, dengan pelbagai aplikasi, dan parameter boleh diselaraskan dengan fleksibel mengikut ciri pasaran. Walau bagaimanapun, dalam aplikasi praktikal, perhatian masih perlu dibayar kepada isu-isu seperti pasaran sampingan, keadaan ekstrem, pengoptimuman parameter, dan lain-lain, dan penyempurnaan lanjut peraturan pengurusan modal dan kedudukan diperlukan. Secara keseluruhan, strategi ini boleh berfungsi sebagai kerangka kerja perdagangan kuantitatif asas, yang dapat terus dioptimumkan dan dipertingkatkan untuk mencapai hasil perdagangan yang lebih mantap.
/*backtest start: 2024-03-01 00:00:00 end: 2024-03-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy ("Marina Parfenova School Project Bot", overlay = true) sma(price, n) => result = 0.0 for i = 0 to n - 1 result := result + price [i] / n result wma(price, n) => result = 0.0 sum_weight = 0.0 weight = 0.0 for i = 0 to n - 1 weight := n - 1 result := result + price [i]*weight sum_weight := sum_weight + weight result/sum_weight ema(price, n) => result = 0.0 alpha = 2/(n + 1) prevResult = price if (na(result[1]) == false) prevResult := result[1] result := alpha * price + (1 - alpha) * prevResult /// Настройки n_slow = input.int(50, "Период медленной скользящей средней", step=5) n_fast = input.int(4, "Период быстрой скользящей средней") n_deviation = input.int(30, "Период среднеквадратического отклонения", step=5) k_deviation_open = input.float(1.2, "Коэффициент ширины коридора покупки", step=0.1) k_deviation_close = input.float(1.6, "Коэффициент ширины коридора продажи", step=0.1) // ----- Линии индикаторов ----- // Медленная скользящая sma = sma(close, n_slow) plot(sma, color=#d3d3d3) // Линии Боллинджера, обозначающие коридор цены bollinger_open = k_deviation_open * ta.stdev(close, n_deviation) open_short_line = sma + bollinger_open plot(open_short_line, color=#ec8383) open_long_line = sma - bollinger_open plot(open_long_line, color=#6dd86d) bollinger_close = k_deviation_close * ta.stdev(close, n_deviation) close_short_line = sma + bollinger_close plot(close_short_line, color=#e3e3e3) close_long_line = sma - bollinger_close plot(close_long_line, color=#e3e3e3) // Быстрая скользящая ema = ema(close, n_fast) plot(ema, color = color.aqua, linewidth = 2) // ----- Сигналы для запуска стратегии ----- // если ema пересекает линию open_short сверху вниз - сигнал на создание ордера в short if(ema[1] >= open_short_line[1] and ema < open_short_line) strategy.entry("short", strategy.short) // если ema пересекает линию open_long снизу вверх - сигнал на создание ордера в long if(ema[1] <= open_long_line[1] and ema > open_long_line) strategy.entry("long", strategy.long) // если свеча пересекает верхнюю линию коридора продажи - закрываем все long-ордера if (high >= close_short_line) strategy.close("long") // если свеча пересекает нижнюю линию коридора продажи - закрываем все short-ордера if (low <= close_long_line) strategy.close("short")