Chiến lược này chủ yếu sử dụng các đường trung bình động và Bollinger Bands để nắm bắt xu hướng và biến động của thị trường. Nó sử dụng ba loại đường trung bình động khác nhau: Đơn giản Đường trung bình động (SMA), Đường trung bình động cân (WMA), và Đường trung bình động nhân (EMA). Đồng thời, nó sử dụng Bollinger Bands để thiết lập các kênh giá, với các dải trên và dưới phục vụ như tín hiệu cho các vị trí mở và đóng. Khi giá vượt qua dải Bollinger trên, nó mở một vị trí ngắn; khi nó vượt qua dải dưới, nó mở một vị trí dài. Nó cũng thiết lập các dải Bollinger rộng hơn như mức dừng lỗ, đóng các vị trí khi giá vi phạm các dải này. Nhìn chung, chiến lược này cố gắng thiết lập các vị trí kịp thời khi xu hướng xuất hiện và cắt giảm rủi ro một cách quyết định khi giảm giá, nhằm mục đích tăng lợi nhuận ổn định.
Marina Parfenova School Project Bot là một chiến lược giao dịch định lượng dựa trên đường trung bình động và Bollinger Bands. Nó cố gắng kiếm lợi nhuận bằng cách nắm bắt xu hướng thị trường trong khi kiểm soát giảm giá thông qua các đường stop-loss Bollinger Band. Logic chiến lược đơn giản và thẳng thắn, với một loạt các ứng dụng, và các tham số có thể được điều chỉnh linh hoạt theo đặc điểm của thị trường. Tuy nhiên, trong ứng dụng thực tế, vẫn cần phải chú ý đến các vấn đề như thị trường bên cạnh, điều kiện cực đoan, tối ưu hóa tham số, v.v., và việc tinh chỉnh thêm các quy tắc quản lý vốn và vị trí là cần thiết. Nhìn chung, chiến lược này có thể phục vụ như một khuôn khổ giao dịch định lượng cơ bản, có thể được tối ưu hóa và cải thiện liên tục để đạt được kết quả giao dịch mạnh mẽ hơn.
/*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")