ทีม ไพน์ ทำงานอย่างหนักเพื่อปรับปรุง ไพน์ อย่างต่อเนื่องตั้งแต่เปิดตัวเวอร์ชัน 5 มาดูคุณสมบัติที่รอคอยมานานที่พวกเขาได้เพิ่มเข้ามาในช่วงสองเดือนที่ผ่านมา
ฟังก์ชั่นโอเวอร์โหลด
การโอเวอร์โหลดของฟังก์ชันคือรูปแบบต่างๆ ของฟังก์ชันที่สามารถกำหนดได้ในไลบรารีหรือรวมไว้ในสคริปต์ โอเวอร์โหลดใช้ชื่อเดียวกับฟังก์ชันดั้งเดิม แต่ใช้พารามิเตอร์ในปริมาณที่แตกต่างกัน หรือพารามิเตอร์ประเภทต่างๆ มีประโยชน์อย่างยิ่งในไลบรารี ซึ่งจำเป็นต้องมีประเภทพารามิเตอร์
ในตัวอินดิเคเตอร์ เรากำหนดโอเวอร์โหลดของฟังก์ชัน mult() ที่ยอมรับสามอาร์กิวเมนต์:
//@version=5 indicator("Function overload") // Two parameters mult(x1, x2) => x1 * x2 // Three parameters mult(x1, x2, x3) => x1 * x2 * x3 plot(mult(7, 4)) plot(mult(7, 4, 2))
ในที่นี้ เรากำหนดโอเวอร์โหลดที่ทำงานแตกต่างกัน ขึ้นอยู่กับประเภทของอาร์กิวเมนต์ที่ใช้ เมื่อโอเวอร์โหลดมีปริมาณพารามิเตอร์เท่ากันกับฟังก์ชันดั้งเดิม พารามิเตอร์จะต้องกำหนดโดยใช้ประเภทที่แตกต่างกันอย่างชัดเจน:
//@version=5 indicator("Function overload") // Accepts both 'int' and 'float' values because any 'int' can be automatically cast to 'float' mult(float x1, float x2) => x1 * x2 // Returns a 'bool' value instead of a number mult(bool x1, bool x2) => x1 and x2 ? true : false mult(string x1, string x2) => str.tonumber(x1) * str.tonumber(x2) // Has three parameters, so explicit types are not required mult(x1, x2, x3) => x1 * x2 * x3 plot(mult(7, 4)) plot(mult(7.5, 4.2)) plot(mult(true, false) ? 1 : 0) plot(mult("5", "6")) plot(mult(7, 4, 2))
for…in
การวนซ้ำบนอาร์เรย์ด้วยโครงสร้าง for ต้องป้องกันการป้อนลูปหากอาร์เรย์ว่างเปล่าและป้องกันดัชนีอาร์เรย์ที่อยู่นอกขอบเขต
โครงสร้างใหม่ for…in ทำให้ชีวิตของคุณง่ายขึ้นโดยวนซ้ำองค์ประกอบทั้งหมดของอาร์เรย์สำหรับคุณ ไวยากรณ์เรียบง่าย: สำหรับ array_element ใน array_id จะวนซ้ำองค์ประกอบ array_id โดยเริ่มจากศูนย์ดัชนี โดยกำหนดค่าขององค์ประกอบของอาร์เรย์ให้กับตัวแปร array_element ในการวนซ้ำแต่ละครั้ง ไม่มีการวนซ้ำหรือข้อผิดพลาดจะเกิดขึ้นหากอาร์เรย์ว่างเปล่า และสามารถเพิ่มหรือลบองค์ประกอบอาร์เรย์ในการวนซ้ำแบบวนซ้ำได้
ในสคริปต์ด้านล่าง เราใช้ for…in เพื่อค้นหาจำนวนสูงสุดในอาร์เรย์ a1
//@version=5 indicator("For...in cycle") var int[] a1 = array.from(1, 3, 6, 3, 8, 0, -9, 5) highest(array) => var int highestNum = na for element in array if na(highestNum) or element > highestNum highestNum := element highestNum plot(highest(a1))
ฟังก์ชั่นการจัดการสตริงใหม่
ฟังก์ชันใหม่เหล่านี้มีวิธีเพิ่มเติมในการประมวลผลสตริง และแนะนำนิพจน์ทั่วไปให้กับ ไพน์ โปรดทราบว่า ตรงกันข้ามกับฟังก์ชันสตริงที่ผู้ใช้กำหนดโดยใช้อาร์เรย์ ฟังก์ชันเหล่านี้สามารถคืนค่าในรูปแบบ “simple” ซึ่งสามารถใช้สร้างอาร์กิวเมนต์สัญลักษณ์สำหรับ request.security() เป็นต้น
str.contains(source, str)
กำหนดว่า source สตริงมีสตริงย่อย str หรือไม่ ตัวอย่างเช่น เราสามารถระบุได้ว่าชาร์ตปัจจุบันเป็นชาร์ตฟิวเจอร์สต่อเนื่องโดยมองหา “!” สตริงย่อยในตัวแปรบิวท์อิน syminfo.tickerid:
var isContinuous = str.contains(syminfo.tickerid, "!") plot(isContinuous ? 1 : 0)
str.pos(source, str)
ส่งกลับตำแหน่งของสตริง str ใน source สตริง
str.substring(source, begin_pos, end_pos)
แยกสตริงย่อยจาก source สตริง ในตัวอย่างนี้ เราใช้ str.substring() และ str.pos() เพื่อดึงสตริงย่อย “AAPL” จากสตริงอินพุต s:
s = input.string("Time to sell some NASDAQ:AAPL") pos = str.pos(s, ":") // Get the position of the ":" character tkr = str.substring(s, pos + 1) // "AAPL"
str.replace(source, target, replacement, occurrence)
ตรงกันข้ามกับฟังก์ชัน str.replace_all() ที่มีอยู่ str.replace() อนุญาตให้เลือกแทนที่สตริงย่อยที่ตรงกันด้วยสตริงการแทนที่ ในตัวอย่างนี้ เราจะแทนที่คำนำหน้า “FTX” ด้วย “BINANCE” สำหรับสัญลักษณ์แรกในสตริงการแพร่กระจาย:
var source = "FTX:BTCUSD / FTX:BTCEUR" // Replace the first occurrence of "FTX" with the "BINANCE" replacement string var newSource = str.replace(source, "FTX", "BINANCE", 0)
str.lower(source) และ str.upper(source)
แปลงตัวอักษรทั้งหมดของ source สตริงต้นทางเป็นตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่:
s = str.lower("Time to Sell Some AAPL") // time to sell some aapl! s = str.upper("Time to Sell Some AAPL!") // TIME TO SELL SOME AAPL!
str.startswith(source, str) และ str.endswith(source, str)
กำหนดว่า source สตริงเริ่มต้นหรือลงท้ายด้วยสตริงย่อย str
str.match(source, regex)
แยกสตริงย่อยที่ตรงกับนิพจน์ทั่วไปที่ระบุ ตัวอย่างเช่น ด้วย regex [\\w]+:[\\w]+ คุณสามารถค้นหาและส่งคืนชื่อสัญลักษณ์จาก It’s time to sell some NASDAQ:AAPL!” source สตริง:
s = "It's time to sell some NASDAQ:AAPL!" var string tickerId = str.match(s, "[\\w]+:[\\w]+") //"NASDAQ:AAPL"
การแปลงสกุลเงิน
ฟังก์ชันส่วนใหญ่ใน request.* เนมสเปซสามารถแปลงค่าที่ส่งคืนเป็นสกุลเงินอื่นได้แล้ว หากมีการระบุอาร์กิวเมนต์ currency ในการเรียกใช้ฟังก์ชัน ค่าราคาที่ส่งคืนโดยฟังก์ชันจะถูกแปลงจากสกุลเงินต้นทางเป็นสกุลเงินเป้าหมาย เพิ่มพารามิเตอร์ currency ในฟังก์ชันต่อไปนี้:
กล่องข้อความ
การวาดกล่องใน ไพน์ รองรับข้อความแล้ว! เพียงเพิ่มอาร์กิวเมนต์ข้อความลงในฟังก์ชัน box.new() ทุกครั้งที่คุณวาดกล่อง และข้อความจะแสดงอยู่ข้างใน คุณสามารถปรับลักษณะการทำงานของข้อความโดยการตั้งค่าสำหรับพารามิเตอร์ text_size, text_color, text_valign และ text_halign เมื่อคุณสร้างกล่อง หรือโดยอ้างอิงถึงกล่องที่มีฟังก์ชันใหม่อย่างใดอย่างหนึ่งต่อไปนี้
ดังตัวอย่างของคุณลักษณะนี้ ต่อไปนี้คืออินดิเคเตอร์ชาร์ตช่วงเวลาหลายช่วงเวลาในตัวที่แก้ไขเพื่อแสดงตัวเลขและจุดสูงสุด/ต่ำสุดของสัปดาห์ที่ไฮไลต์:
หากต้องการรับทราบข้อมูลคุณสมบัติใหม่ ๆ ของ ไพน์ โปรดติดตามพจนานุกรมคู่มือผู้ใช้ ไพน์ PineCoder ของเรายังออกอากาศการอัปเดตในช่อง Telegram Squawk Box, Twitter และจากการแชทสาธารณะของ ไพน์สคริปต์ บน TradingView
เราหวังว่าคุณจะพบว่าคุณลักษณะที่ได้รับการร้องขออย่างสูงเหล่านี้มีประโยชน์ โปรดให้คำแนะนำและข้อเสนอแนะของคุณเพื่อการปรับปรุง เราสร้าง TradingView ให้กับคุณ และเรายินดีรับฟังความคิดเห็นจากคุณเสมอ