簡體   English   中英

Pine Script v5 錯誤,布爾輸入用常量非布爾值初始化(TradingView 真的關心錯誤嗎?...)

[英]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 的新手程序員,我發現了三個嚴重的錯誤,其中兩個很容易導致數十個編程時間丟失調試,而這甚至不是程序員的錯。

  1. 這個
  2. 我在 timeframe.in_seconds() 中發現了瘋狂的 TradingView 錯誤...該怎么辦?
  3. Pine Script“腳本的本地范圍太多,限制為 500”- 什么是本地 scope?

一旦我被邀請通過支持與他們聯系,但他們不向非付費會員提供答案。 他們甚至關心嗎? 有誰知道如何在不付錢的情況下從他們那里得到答案?...

絕對看起來像一個錯誤。 我將它轉發給了 Pine 團隊。

我被告知已發布此行為的修復程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM