Skrip ini adalah strategi untuk sistem Ichimoku Cloud untuk trading. Begini cara kerjanya:
Skrip ini memungkinkan Anda untuk menguji berbagai sinyal perdagangan yang ditawarkan oleh sistem awan Ichimoku.
Jika Anda sedang menguji pasangan mata uang yang mencakup Yen Jepang (JPY), pastikan untuk mencentang kotak centang JPYPAIR karena ini menyesuaikan cara skrip menghitung stop-loss dan take-profit.
Anda dapat mengubah rasio untuk nilai take profit (TP) dan stop loss (SL) dalam parameter script. Hasil yang baik ditemukan dengan rasio 1,5:1.
Skrip ini menggunakan perhitungan Ichimoku Cloud untuk input sinyal seperti Tenkan/Kijun, Price/Kijun, dan Price/Tenkan antara lain.
Awan Ichimoku digambarkan menggunakan fungsi donchian, dan sinyal dihasilkan ketika harga melintasi di atas atau di bawah garis konversi, garis dasar, kumo tinggi atau kumo rendah berdasarkan pilihan Anda dari menu input.
Skrip ini juga mencakup kondisi untuk entri perdagangan panjang dan pendek.
Ini menggunakan Average True Range (ATR) untuk manajemen uang, menggunakan pengganda untuk stop loss dan mengambil keuntungan yang dapat disesuaikan.
Selain itu, ada filter untuk waktu pengujian, memungkinkan Anda untuk menentukan berapa tahun di masa lalu Anda ingin menguji strategi.
Akhirnya, strategi diatur untuk memasuki atau keluar dari perdagangan berdasarkan sinyal kelanjutan dan nilai ATR untuk laba rugi.
Skrip ini dapat menjadi alat yang berguna untuk backtest strategi trading Ichimoku Cloud, tetapi seperti biasa, seseorang harus meluangkan waktu untuk memahami logika dan menyesuaikan parameter berdasarkan pengetahuan dan tingkat kenyamanan mereka.
/*backtest start: 2023-01-01 00:00:00 end: 2023-03-21 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © vuagnouxb //@version=4 strategy("BV's ICHIMOKU CLOUD SIGNAL TESTER", overlay=true) // Signal imputs signalChoice = input(title = "SIGNAL - Choose your signal", defval = "Tenkan/Kijun", options = ["Tenkan/Kijun", "Tenkan/Kijun+Kumo", "Price/Tenkan", "Price/Tenkan+Kumo", "Price/Kijun", "Price/Kijun+Kumo", "Price/Kumo", "Kumo Color"]) JPYPair = input(type = input.bool, title = "ATR - Check if JPY Pair ", defval = false) //------------------------------------------------------------------------ //---------- ICHIMOKU CLOUD Calculation ----------- INPUT //------------------------------------------------------------------------ conversionPeriods = input(9, minval=1, title="Conversion Line Periods"), basePeriods = input(26, minval=1, title="Base Line Periods") laggingSpan2Periods = input(52, minval=1, title="Lagging Span 2 Periods"), displacement = input(26, minval=1, title="Displacement") donchian(len) => avg(lowest(len), highest(len)) conversionLine = donchian(conversionPeriods) baseLine = donchian(basePeriods) leadLine1 = avg(conversionLine, baseLine) leadLine2 = donchian(laggingSpan2Periods) plot(conversionLine, color=#0496ff, title="Conversion Line") plot(baseLine, color=#991515, title="Base Line") plot(close, offset = -displacement + 1, color=#459915, title="Lagging Span") p1 = plot(leadLine1, offset = displacement - 1, color=color.green, title="Lead 1") p2 = plot(leadLine2, offset = displacement - 1, color=color.red, title="Lead 2") fill(p1, p2, color = leadLine1 > leadLine2 ? color.green : color.red) kumoHigh = max(leadLine1[displacement-1], leadLine2[displacement-1]) kumoLow = min(leadLine1[displacement-1], leadLine2[displacement-1]) // -- Trade entry signals continuationSignalLong = signalChoice == "Tenkan/Kijun" ? crossover(conversionLine, baseLine) : signalChoice == "Tenkan/Kijun+Kumo" ? crossover(conversionLine, baseLine) and close > kumoHigh : signalChoice == "Price/Tenkan" ? crossover(close, conversionLine) : signalChoice == "Price/Tenkan+Kumo" ? crossover(close, conversionLine) and close > kumoHigh : signalChoice == "Price/Kijun" ? crossover(close, baseLine) : signalChoice == "Price/Kijun+Kumo" ? crossover(close, baseLine) and close > kumoHigh : signalChoice == "Price/Kumo" ? crossover(close, kumoHigh) : signalChoice == "Kumo Color" ? crossover(leadLine1, leadLine2) : false continuationSignalShort = signalChoice == "Tenkan/Kijun" ? crossunder(conversionLine, baseLine) : signalChoice == "Tenkan/Kijun+Kumo" ? crossunder(conversionLine, baseLine) and close < kumoLow : signalChoice == "Price/Tenkan" ? crossunder(close, conversionLine) : signalChoice == "Price/Tenkan+Kumo" ? crossunder(close, conversionLine) and close < kumoLow : signalChoice == "Price/Kijun" ? crossunder(close, baseLine) : signalChoice == "Price/Kijun+Kumo" ? crossunder(close, baseLine) and close < kumoLow : signalChoice == "Price/Kumo" ? crossunder(close, kumoLow) : signalChoice == "Kumo Color" ? crossunder(leadLine1, leadLine2) : false longCondition = continuationSignalLong shortCondition = continuationSignalShort //------------------------------------------------------------------------ //---------- ATR MONEY MANAGEMENT ------------ //------------------------------------------------------------------------ SLmultiplier = input(title = "ATR - Stop Loss Multiplier", type = input.float, defval = 1.5, step = 0.1) TPmultiplier = input(title = "ATR - Take Profit Multiplier", type = input.float, defval = 1.0, step = 0.1) pipAdjuster = JPYPair ? 1000 : 100000 ATR = atr(14) * pipAdjuster // 1000 for jpy pairs : 100000 SL = ATR * SLmultiplier TP = ATR * TPmultiplier //------------------------------------------------------------------------ //---------- TIME FILTER ------------ //------------------------------------------------------------------------ YearOfTesting = input(title = "Time - How many years of testing ?" , type = input.integer, defval = 3) _time = 2020 - YearOfTesting timeFilter = (year > _time) //------------------------------------------------------------------------ //--------- ENTRY FUNCTIONS ----------- INPUT //------------------------------------------------------------------------ if (longCondition and timeFilter) strategy.entry("Long", strategy.long) if (shortCondition and timeFilter) strategy.entry("Short", strategy.short) //------------------------------------------------------------------------ //--------- EXIT FUNCTIONS ----------- //------------------------------------------------------------------------ strategy.exit("ATR", from_entry = "Long", profit = TP, loss = SL) strategy.exit("ATR", from_entry = "Short", profit = TP, loss = SL)