[英]Simplification of large function IF in Pine Script v4
我正在嘗試編寫一個腳本,該腳本將幫助自動更改“MASignalPeriod”的輸入,具體取決於在指標操作期間查看的加密貨幣。 我還希望能夠通過菜單手動進行更改,所以我依賴復選框“設置模式”。 一切正常,但指標開始運行很長時間。 為了讓它工作,每 20 種加密貨幣我需要 4 段這樣的代碼(在代碼中選擇了隨機的),這意味着加載需要更長的時間。
我的代碼如下 -
//------------- MASignalPeriod input -------------//
MASignalPeriod = if Settingmode == false and syminfo.ticker == "DYDXUSDTPERP" // 1
MASignalPeriod = 15
else
if Settingmode == false and syminfo.ticker == "GALAUSDTPERP" // 2
MASignalPeriod = 15
else
if Settingmode == false and syminfo.ticker == "DOTUSDTPERP" // 3
MASignalPeriod = 15
else
if Settingmode == false and syminfo.ticker == "ATOMUSDTPERP" // 4
MASignalPeriod = 15
else
if Settingmode == false and syminfo.ticker == "GALAUSDTPERP" // 5
MASignalPeriod = 15
else
if Settingmode == false and syminfo.ticker == "DOTUSDTPERP" // 6
MASignalPeriod = 15
else
if Settingmode == false and syminfo.ticker == "ATOMUSDTPERP" // 7
MASignalPeriod = 15
else
if Settingmode == false and syminfo.ticker == "GALAUSDTPERP" // 8
MASignalPeriod = 15
else
if Settingmode == false and syminfo.ticker == "DOTUSDTPERP" // 9
MASignalPeriod = 15
else
if Settingmode == false and syminfo.ticker == "ATOMUSDTPERP" // 10
MASignalPeriod = 15
else
if Settingmode == false and syminfo.ticker == "GALAUSDTPERP" // 11
MASignalPeriod = 15
else
if Settingmode == false and syminfo.ticker == "DOTUSDTPERP" // 12
MASignalPeriod = 15
else
if Settingmode == false and syminfo.ticker == "ATOMUSDTPERP" // 13
MASignalPeriod = 15
else
if Settingmode == false and syminfo.ticker == "GALAUSDTPERP" // 14
MASignalPeriod = 15
else
if Settingmode == false and syminfo.ticker == "DOTUSDTPERP" // 15
MASignalPeriod = 15
else
if Settingmode == false and syminfo.ticker == "ATOMUSDTPERP" // 16
MASignalPeriod = 15
else
if Settingmode == false and syminfo.ticker == "GALAUSDTPERP" // 17
MASignalPeriod = 15
else
if Settingmode == false and syminfo.ticker == "DOTUSDTPERP" // 18
MASignalPeriod = 15
else
if Settingmode == false and syminfo.ticker == "DOTUSDTPERP" // 19
MASignalPeriod = 15
else
if Settingmode == false and syminfo.ticker == "DOTUSDTPERP" // 20
MASignalPeriod = 15
else
MASignalPeriod = input(15, title="MA Signal Period", group="Signals settings")
請幫助我簡化此功能。
感謝和問候。
您可以提取Settingmode
以簡化結構:
MASignalPeriod = 0
if not Settingmode
MASignalPeriod := syminfo.ticker == "DYDXUSDTPERP" ? 15 : 0
MASignalPeriod := syminfo.ticker == "GALAUSDTPERP" ? 15 : 0
MASignalPeriod := syminfo.ticker == "DOTUSDTPERP" ? 15 : 0
MASignalPeriod := syminfo.ticker == "ATOMUSDTPERP" ? 15 : 0
MASignalPeriod := syminfo.ticker == "GALAUSDTPERP" ? 15 : 0
MASignalPeriod := syminfo.ticker == "DOTUSDTPERP" ? 15 : 0
MASignalPeriod := syminfo.ticker == "ATOMUSDTPERP" ? 15 : 0
MASignalPeriod := syminfo.ticker == "GALAUSDTPERP" ? 15 : 0
MASignalPeriod := syminfo.ticker == "DOTUSDTPERP" ? 15 : 0
MASignalPeriod := syminfo.ticker == "ATOMUSDTPERP" ? 15 : 0
MASignalPeriod := syminfo.ticker == "GALAUSDTPERP" ? 15 : 0
MASignalPeriod := syminfo.ticker == "DOTUSDTPERP" ? 15 : 0
MASignalPeriod := syminfo.ticker == "ATOMUSDTPERP" ? 15 : 0
MASignalPeriod := syminfo.ticker == "GALAUSDTPERP" ? 15 : 0
MASignalPeriod := syminfo.ticker == "DOTUSDTPERP" ? 15 : 0
MASignalPeriod := syminfo.ticker == "ATOMUSDTPERP" ? 15 : 0
MASignalPeriod := syminfo.ticker == "GALAUSDTPERP" ? 15 : 0
MASignalPeriod := syminfo.ticker == "DOTUSDTPERP" ? 15 : 0
MASignalPeriod := syminfo.ticker == "DOTUSDTPERP" ? 15 : 0
MASignalPeriod := syminfo.ticker == "DOTUSDTPERP" ? 15 : 0
這幾乎看起來像 Pine 5 引入的 switch-case,你可以看看: https://www.tradingview.com/blog/en/say-hello-to-pine-script-v5-26900/
我稍微修改了@karatedog 推薦的代碼並得到了結果,但它有一個錯誤 - 如果你 select 在設置模式中的值“false”,那么硬幣的選定值只考慮最后一個硬幣,在以前的硬幣采用默認值,而不是選定的硬幣。 例如,在 DYDXUSDTPERP 中,我們收到值 15,並且有必要收到 100。雖然如果選擇 DOTUSDTPERP,我們收到理想值 300:
MASignalPeriod = input(15, title="MA Signal Period", group="Signals settings")
if not Settingmode
MASignalPeriod := syminfo.ticker == "DYDXUSDTPERP" ? 100 : 0
MASignalPeriod := syminfo.ticker == "GALAUSDTPERP" ? 200 : 0
MASignalPeriod := syminfo.ticker == "DOTUSDTPERP" ? 300 : 15
SMA = sma(open,MASignalPeriod)
plot(SMA)
修復了代碼中的一個錯誤,也許這個功能會派上用場
MASignalPeriod = input(15, title="MA Signal Period", group="Signals settings")
MASignalPeriod_defval = MASignalPeriod
if not Settingmode
MASignalPeriod :=
syminfo.ticker == "DYDXUSDTPERP" ? 100 :
syminfo.ticker == "GALAUSDTPERP" ? 200 :
syminfo.ticker == "DOTUSDTPERP" ? 300 :
MASignalPeriod_defval
SMA = sma(open,MASignalPeriod)
plot(SMA)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.