[英]Pine Script v5 bug with bool inputs initialized with constant non-bool values (does TradingView actually care about bugs?...)
到目前為止,我在 Pine Script v5 中發現了兩個非常嚴重的錯誤。 這是另一個。
這不是一個真正的問題,相反,我認為如果人們也遇到這種行為,他們可以從中受益,希望我能為他們節省一些時間。
所以。 Pine Script 應該接受 float 和 int 來代替 bool,根據通用編程語言邏輯將它們轉換為 bool(0 = false,其他任何東西 = true)。 任何理智的編程語言也應該將轉換后的變量存儲為它們的最終產品。 比如,如果我將 2 分配給一個 bool 變量,它應該存儲“true”,而不是“2”。
在 Pine Script 中不是這樣......這是一個例子:
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © AVAndronov
// CONSTS
OVERLAY = false
BUG_CONST = 2.5
//@version=5
indicator("My script", overlay = OVERLAY)
bool bug_input = input.bool(BUG_CONST, "Display Close 1")
bool bug_free_input = input.bool(BUG_CONST ? true : false, "Display Close 2")
bool bug_var = BUG_CONST
//this one will bug out
plot(bug_input ? close : 0, color = color.red)
//these two will work
plot(bug_free_input ? -close : 0, color = color.green)
plot(BUG_CONST ? close : 0, color = color.purple)
if barstate.islast
label.new(bar_index, 0,
str.tostring(bug_input)
+"\n"+str.tostring(bug_input == true ? "true" : "not == true")
+"\n"+str.tostring(bug_input == false ? "== false" : "not == false")
+"\n"+str.tostring(bug_input ? "? true" : ": false")
+"\n"+str.tostring(bug_var)
+"\n"+str.tostring(bug_var == true ? "true" : "not == true")
+"\n"+str.tostring(bug_var == false ? "false" : "not == false")
+"\n"+str.tostring(bug_var ? "? true" : ": false")
+"\n"+str.tostring(bug_free_input) )
產生的結果將是:
1. In script inputs window, both checks will be checked.
2. Flat red line, price displayed on green and purple lines.
3. Label:
false
not == true
== false
: false
2.5
not == true
not == false
? true
true
我們在這里可以觀察到的是:
1.當你將non-bool賦值給一個bool時,它實際上並沒有存儲一個bool。 相反,它存儲您分配的任何內容!
您可以看到我在“bug_var”上使用了“str.tostring”,這是一個類型為 const bool 的 bool 變量(可以通過在編輯器中將鼠標懸停在它上面來驗證)。 但它顯示2.5。 所以它實際上將浮點數存儲在里面。 不是布爾。
2.當你將非布爾值賦給一個布爾值時,它有時表現得像那個值,有時又不像
你可以看到我調用了“bug_var == true”,結果是 false,因為 bug_var 不等於 true,它實際上等於 2.5。 == false 也導致 false,它也不等於 false,但是? 當我稍后執行 bug_var: , 時,結果為 true。 因為當 bug_var 代替 bool 時計算結果為 true。
所以它是一個不等於 true 的 bool,不等於 false,但計算結果為 true。 多么獨特的布爾....
3. 當您將非布爾值分配給輸入布爾值時,它會以不同的方式表現不佳。
tradingview網站的輸入界面認為是真的,但是代碼卻認為是假的。 所以當你檢查這個輸入時,它的所有意圖和目的都是假的,它將是 == false,它會在?:條件中評估為 false。
4. 至少如果你執行“FLOAT?true:false”或“bool(FLOAT)”它會正常工作
但是請注意,如果您執行 FLOAT,它將不起作用? 1: 0,因為這將產生與上面相同的結果(如果將其分配給輸入 bool,則在任何地方都將被視為 false,如果將其分配給變量 bool,則在檢查中將為 true,否則為 false)。
結束語。
希望我能為其他人節省一些時間,因為我花了一個小時的時間思考我的代碼 WTF 是錯誤的,直到我發現它是一個語言錯誤。 問題是,我不明白,TradingView 會關心嗎?
到目前為止,作為 Pine Script 的新手程序員,我發現了三個嚴重的錯誤,其中兩個很容易導致數十個編程時間丟失調試,而這甚至不是程序員的錯。
一旦我被邀請通過支持與他們聯系,但他們不向非付費會員提供答案。 他們甚至關心嗎? 有誰知道如何在不付錢的情況下從他們那里得到答案?...
絕對看起來像一個錯誤。 我將它轉發給了 Pine 團隊。
我被告知已發布此行為的修復程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.