Ini adalah strategi mengambil keuntungan berbilang langkah berdasarkan penunjuk Supertrend berganda. Strategi ini menggunakan dua penunjuk Supertrend dengan parameter yang berbeza untuk menentukan trend pasaran dan melaksanakan perdagangan panjang atau pendek dengan sewajarnya. Inti strategi terletak pada mekanisme mengambil keuntungan berbilang langkah, yang menetapkan pelbagai sasaran keuntungan untuk secara beransur-ansur mengunci keuntungan sambil menjaga sebahagian daripada kedudukan terbuka untuk menangkap pergerakan pasaran yang lebih besar. Pendekatan ini bertujuan untuk mengurangkan risiko sambil memaksimumkan potensi keuntungan.
Indikator Supertrend Berganda: Strategi ini menggunakan dua penunjuk Supertrend dengan tetapan parameter yang berbeza untuk mengenal pasti trend. Isyarat panjang dicetuskan apabila kedua-dua penunjuk menunjukkan trend menaik, sementara isyarat pendek dicetuskan apabila kedua-dua menunjukkan trend menurun. Mekanisme pengesahan berganda ini berkesan mengurangkan isyarat palsu.
Multi-Step Trailing Take-Profit: Strategi ini menetapkan 4 sasaran mengambil keuntungan yang boleh disesuaikan. Setiap sasaran mempunyai peratusan keuntungan dan nisbah penutupan kedudukan yang sesuai. Sebagai contoh, sasaran pertama mungkin menutup 12% kedudukan dengan keuntungan 6%, yang kedua mungkin menutup 8% dengan keuntungan 12%, dan sebagainya. Mekanisme ini membolehkan kunci keuntungan secara beransur-ansur sambil menjaga sebahagian kedudukan terbuka untuk mendapat manfaat daripada pergerakan pasaran yang berterusan.
Arahan Perdagangan Fleksibel: Pengguna boleh memilih untuk berdagang hanya panjang, hanya pendek, atau kedua-dua arah, menyesuaikan diri dengan persekitaran pasaran dan keutamaan perdagangan yang berbeza.
Dinamik Stop-Loss: Walaupun tidak ada tetapan stop-loss yang jelas dalam kod, strategi secara automatik menutup kedudukan apabila penunjuk Supertrend berbalik, secara berkesan bertindak sebagai stop-loss dinamik.
Pengurusan Risiko yang Optimum: Mekanisme mengambil keuntungan berbilang langkah sangat meningkatkan nisbah risiko-balasan strategi. Dengan mengunci keuntungan secara beransur-ansur, strategi dapat mengurangkan risiko penarikan sambil mengekalkan potensi menaik.
Pengurangan Isyarat Palsu: Penggunaan penunjuk Supertrend berganda mengurangkan kesan isyarat palsu dengan ketara, meningkatkan ketepatan dan kebolehpercayaan perdagangan.
Kebolehsesuaian yang tinggi: Strategi ini dapat menyesuaikan arah perdagangan dan parameter keuntungan secara fleksibel berdasarkan pilihan pengguna dan keadaan pasaran, menjadikannya sesuai untuk pelbagai instrumen perdagangan dan jangka masa.
Tahap Automasi Tinggi: Strategi sepenuhnya automatik, dari masuk hingga mengambil keuntungan dan keluar, meminimumkan kesan emosi dan kesilapan operasi.
Pengurusan Modal Fleksibel: Dengan menetapkan nisbah mengambil keuntungan yang berbeza, strategi mencapai pengurusan modal yang fleksibel, memastikan pemenuhan keuntungan separa yang cepat sambil membolehkan kedudukan yang tersisa terus mendapat manfaat daripada pergerakan pasaran.
Sensitiviti Parameter: Prestasi strategi sangat bergantung kepada tetapan penunjuk Supertrend dan parameter mengambil keuntungan. Parameter yang tidak sesuai boleh menyebabkan overtrading atau kehilangan peluang penting.
Kebergantungan Tren: Sebagai strategi trend-mengikuti, ia mungkin sering masuk dan keluar di pasaran bergelora, menyebabkan kos perdagangan yang tidak perlu.
Risiko slippage: Dalam pasaran yang bergerak cepat, pelaksanaan keuntungan mengambil pelbagai langkah mungkin dipengaruhi oleh slippage, mengakibatkan harga pelaksanaan sebenar menyimpang dari jangkaan.
Risiko pengoptimuman berlebihan: Dengan pelbagai parameter yang boleh diselaraskan, strategi cenderung untuk pengoptimuman berlebihan, yang berpotensi membawa kepada perbezaan yang ketara antara hasil backtesting dan prestasi perdagangan langsung.
Memperkenalkan Penapis Volatiliti: Pertimbangkan untuk menggabungkan ATR atau penunjuk volatiliti lain untuk mengurangkan kekerapan dagangan semasa tempoh turun naik yang rendah, meningkatkan kemampuan strategi untuk menyesuaikan diri dengan keadaan pasaran yang berbeza.
Penyesuaian Parameter Dinamik: Jelajahi menggunakan algoritma adaptif untuk menyesuaikan parameter Supertrend secara dinamik dan sasaran mengambil keuntungan untuk penyesuaian yang lebih baik kepada perubahan pasaran.
Mempertingkatkan Mekanisme Stop-Loss: Walaupun pembalikan Supertrend menyediakan beberapa fungsi stop-loss, pertimbangkan untuk menambah mekanisme stop-loss yang lebih fleksibel, seperti berhenti yang tertinggal, untuk kawalan risiko yang lebih baik.
Mengintegrasikan Penunjuk Teknikal Tambahan: Pertimbangkan untuk menggabungkan penunjuk teknikal lain seperti RSI atau MACD untuk meningkatkan ketepatan kemasukan dan keluar melalui perpaduan pelbagai penunjuk.
Mengoptimumkan Pengurusan Modal: Meneroka strategi pengurusan modal yang lebih canggih, seperti menyesuaikan saiz kedudukan secara dinamik berdasarkan prestasi akaun, untuk menyeimbangkan risiko dan ganjaran dengan lebih baik.
Pengoptimuman Ujian Belakang: Melakukan ujian balik yang lebih komprehensif, termasuk analisis prestasi dalam jangka masa dan keadaan pasaran yang berbeza, untuk mengenal pasti senario aplikasi dan tetapan parameter yang optimum untuk strategi.
Strategi mengambil keuntungan berbilang langkah ini, berdasarkan penunjuk Supertrend berganda, mencapai keseimbangan antara risiko dan ganjaran melalui mekanisme mengambil keuntungan berbilang langkah yang fleksibel. Kelebihan utama strategi ini terletak pada keupayaan pengurusan risiko yang sangat baik dan kepekaan terhadap trend. Walau bagaimanapun, pengguna perlu memberi perhatian kepada tetapan parameter dan kesan persekitaran pasaran semasa menerapkannya. Melalui pengoptimuman dan penyempurnaan lanjut, strategi ini berpotensi menjadi sistem perdagangan automatik yang kukuh dan boleh dipercayai. Dalam aplikasi praktikal, disyorkan agar peniaga menjalankan pengujian balik dan perdagangan kertas yang menyeluruh, dan membuat penyesuaian parameter yang sesuai berdasarkan instrumen perdagangan tertentu dan keadaan pasaran.
/*backtest start: 2024-05-21 00:00:00 end: 2024-06-20 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Strategic Multi-Step Supertrend Trader - Strategy [presentTrading]", overlay=true ) // this strategy utilizes a double Supertrend indicator to determine entry and exit conditions for both long and short trades, with user-configurable take profit levels and trade direction settings. // The strategy dynamically updates highest and lowest prices during trades and exits positions based on multi-step profit targets or opposing Supertrend signals. // User inputs for take profit settings // Grouping Take Profit settings useTakeProfit = input.bool(true, title="Use Take Profit", group="Take Profit Settings") takeProfitPercent1 = input.float(6.0, title="Take Profit % Step 1", group="Take Profit Settings") takeProfitPercent2 = input.float(12.0, title="Take Profit % Step 2", group="Take Profit Settings") takeProfitPercent3 = input.float(18.0, title="Take Profit % Step 3", group="Take Profit Settings") takeProfitPercent4 = input.float(50.0, title="Take Profit % Step 4", group="Take Profit Settings") takeProfitAmount1 = input.float(12, title="Take Profit Amount % Step 1", group="Take Profit Settings") takeProfitAmount2 = input.float(8, title="Take Profit Amount % Step 2", group="Take Profit Settings") takeProfitAmount3 = input.float(4, title="Take Profit Amount % Step 3", group="Take Profit Settings") takeProfitAmount4 = input.float(0, title="Take Profit Amount % Step 4", group="Take Profit Settings") numberOfSteps = input.int(3, title="Number of Take Profit Steps", minval=1, maxval=4, group="Take Profit Settings") // Grouping Trade Direction tradeDirection = input.string("Both", title="Trade Direction", options=["Long", "Short", "Both"], group="Trade Direction") // Grouping Supertrend settings atrPeriod1 = input(10, title="ATR Length for Supertrend 1", group="Supertrend Settings") factor1 = input.float(3.0, title="Factor for Supertrend 1", step=0.01, group="Supertrend Settings") atrPeriod2 = input(5, title="ATR Length for Supertrend 2", group="Supertrend Settings") factor2 = input.float(4.0, title="Factor for Supertrend 2", step=0.01, group="Supertrend Settings") // Function to calculate Supertrend supertrend(factor, atrPeriod) => [a, direction] = ta.supertrend(factor, atrPeriod) direction // Calculate Double Supertrend supertrend1 = supertrend(factor1, atrPeriod1) supertrend2 = supertrend(factor2, atrPeriod2) // Entry conditions longCondition = (supertrend1 < 0 and supertrend2 < 0) and (tradeDirection == "Long" or tradeDirection == "Both") shortCondition = (supertrend1 > 0 and supertrend2 > 0) and (tradeDirection == "Short" or tradeDirection == "Both") // Exit conditions longExitCondition = (supertrend1 > 0 and supertrend2 > 0) and (tradeDirection == "Long" or tradeDirection == "Both") shortExitCondition = (supertrend1 < 0 and supertrend2 < 0) and (tradeDirection == "Short" or tradeDirection == "Both") // Variables to store the highest and lowest prices during the trade var float highestPrice = na var float lowestPrice = na // Get the entry price from open trades entryPrice = strategy.opentrades.entry_price(strategy.opentrades - 1) // Reset highestPrice or lowestPrice when entering new trades if (longCondition and strategy.position_size <= 0) highestPrice := na // Reset the highest price strategy.entry("My Long Entry Id", strategy.long) // Enter long position strategy.close("My Short Entry Id", "Short Exit") // Close short position if any if (shortCondition and strategy.position_size >= 0) lowestPrice := na // Reset the lowest price strategy.entry("My Short Entry Id", strategy.short) // Enter short position strategy.close("My Long Entry Id", "Long Exit") // Close long position if any // Exit trades based on conditions if (longExitCondition and strategy.position_size > 0) strategy.close("My Long Entry Id", "Long Exit") // Exit long position if (shortExitCondition and strategy.position_size < 0) strategy.close("My Short Entry Id", "Short Exit") // Exit short position if (strategy.position_size > 0) // Update the highest price for long positions highestPrice := na(highestPrice) ? high : math.max(highestPrice, high) // Step 1 if (useTakeProfit and numberOfSteps >= 1) strategy.exit("Take Profit 1", from_entry="My Long Entry Id", qty_percent=takeProfitAmount1, limit=entryPrice * (1 + takeProfitPercent1 / 100)) // Step 2 if (useTakeProfit and numberOfSteps >= 2) strategy.exit("Take Profit 2", from_entry="My Long Entry Id", qty_percent=takeProfitAmount2, limit=entryPrice * (1 + takeProfitPercent2 / 100)) // Step 3 if (useTakeProfit and numberOfSteps >= 3) strategy.exit("Take Profit 3", from_entry="My Long Entry Id", qty_percent=takeProfitAmount3, limit=entryPrice * (1 + takeProfitPercent3 / 100)) // Step 4 if (useTakeProfit and numberOfSteps == 4) strategy.exit("Take Profit 4", from_entry="My Long Entry Id", qty_percent=takeProfitAmount4, limit=entryPrice * (1 + takeProfitPercent4 / 100)) if (strategy.position_size < 0) // Update the lowest price for short positions lowestPrice := na(lowestPrice) ? low : math.min(lowestPrice, low) // Step 1 if (useTakeProfit and numberOfSteps >= 1) strategy.exit("Take Profit 1", from_entry="My Short Entry Id", qty_percent=takeProfitAmount1, limit=entryPrice * (1 - takeProfitPercent1 / 100)) // Step 2 if (useTakeProfit and numberOfSteps >= 2) strategy.exit("Take Profit 2", from_entry="My Short Entry Id", qty_percent=takeProfitAmount2, limit=entryPrice * (1 - takeProfitPercent2 / 100)) // Step 3 if (useTakeProfit and numberOfSteps >= 3) strategy.exit("Take Profit 3", from_entry="My Short Entry Id", qty_percent=takeProfitAmount3, limit=entryPrice * (1 - takeProfitPercent3 / 100)) // Step 4 if (useTakeProfit and numberOfSteps == 4) strategy.exit("Take Profit 4", from_entry="My Short Entry Id", qty_percent=takeProfitAmount4, limit=entryPrice * (1 - takeProfitPercent4 / 100))