ฉันรู้ว่านี่เป็นไปได้ด้วยการเพิ่มตาม: แต่ฉันต้องการหลีกเลี่ยงการเพิ่ม ฉันมี googled และไม่พบตัวอย่างที่เหมาะสมหรืออ่านได้ โดยทั่วไปฉันต้องการติดตามค่าเฉลี่ยเคลื่อนที่ของสตรีมกระแสข้อมูลจำนวนจุดลอยโดยใช้ตัวเลข 1000 ครั้งล่าสุดเป็นตัวอย่างข้อมูล วิธีที่ง่ายที่สุดในการทำแบบทดสอบนี้คือการใช้อาร์เรย์แบบวงกลมค่าเฉลี่ยเคลื่อนที่แบบเสวนาและค่าเฉลี่ยเคลื่อนที่ที่เรียบง่ายกว่าและพบว่าผลลัพธ์จากอาร์เรย์แบบวงกลมเหมาะกับความต้องการของฉันมากที่สุด ถาม 12 มิ.ย. 12 เวลา 4:38 หากความต้องการของคุณเรียบง่ายคุณอาจลองใช้ค่าเฉลี่ยเคลื่อนที่แบบเสวนา ใส่เพียงแค่คุณสร้างตัวแปรสะสมและเมื่อโค้ดของคุณดูที่ตัวอย่างแต่ละโค้ดจะอัปเดตข้อมูลสะสมด้วยค่าใหม่ คุณสามารถเลือกค่า alpha คงที่ระหว่าง 0 ถึง 1 และคำนวณค่านี้: คุณเพียงแค่หาค่า alpha ที่ผลของตัวอย่างที่กำหนดจะใช้เวลาประมาณ 1000 ตัวอย่างเท่านั้น อืมฉันไม่แน่ใจว่านี่เหมาะกับคุณแล้วตอนนี้ฉันวางมันไว้ที่นี่แล้ว ปัญหาคือ 1000 เป็นหน้าต่างยาวสวยสำหรับค่าเฉลี่ยเคลื่อนที่ที่อธิบายไม่แน่ใจว่ามีอัลฟาที่จะกระจายค่าเฉลี่ยมากกว่า 1000 หมายเลขล่าสุดโดยไม่ต้อง underflow ในการคำนวณจุดลอย แต่ถ้าคุณต้องการค่าเฉลี่ยที่เล็กลงเช่น 30 ตัวเลขหรือมากกว่านี่เป็นวิธีที่ง่ายและรวดเร็วในการดำเนินการ ตอบ 12 มิ.ย. 12 เวลา 4:44 1 ในโพสต์ของคุณ ค่าเฉลี่ยเคลื่อนที่ที่อธิบายได้จะทำให้ตัวแปรอัลฟ่าเป็นตัวแปรได้ ดังนั้นจึงช่วยให้สามารถใช้คำนวณค่าเฉลี่ยของฐานเวลา (เช่นไบต์ต่อวินาที) ถ้าเวลานับตั้งแต่การอัปเดตสะสมครั้งล่าสุดเป็นเวลามากกว่า 1 วินาทีคุณจะยอมให้ alpha เป็น 1.0 มิเช่นนั้นคุณสามารถปล่อยให้ alpha เป็น (usecs ตั้งแต่ update1000000 ครั้งล่าสุด) ndash jxh Jun 12 12 at 6:21 โดยทั่วไปฉันต้องการติดตามค่าเฉลี่ยเคลื่อนที่ของกระแสอย่างต่อเนื่องของกระแสตัวเลขจุดลอยใช้ล่าสุด 1000 หมายเลขเป็นตัวอย่างข้อมูล โปรดทราบว่าด้านล่างปรับปรุงชุดค่าผสมทั้งหมดเป็นองค์ประกอบที่เพิ่มขึ้นโดยไม่ต้องเสียค่าใช้จ่ายในการคำนวณ O (N) traversal เพื่อคำนวณผลรวม - จำเป็นสำหรับค่าเฉลี่ย - ตามความต้องการ ทั้งหมดถูกกำหนดเป็นพารามิเตอร์อื่นจาก T เพื่อสนับสนุนเช่น ใช้ยาวนานเมื่อรวม 1000 ยาว s, int สำหรับ char s หรือ double เพื่อรวม float s นี่เป็นบิตที่มีข้อบกพร่องในการที่ numsamples อาจผ่าน INTMAX - ถ้าคุณสนใจคุณสามารถใช้ unsigned long long หรือใช้สมาชิกข้อมูล bool พิเศษเพื่อบันทึกเมื่อเติมคอนเทนเนอร์เป็นครั้งแรกในขณะที่วนรอบ numsamples รอบ (ดีที่สุดแล้วเปลี่ยนชื่อบางอย่างที่ไม่เป็นอันตรายเช่น pos) ตอบ 12 มิ.ย. 12 at 5:19 สมมติว่าตัวดำเนินการ quotvoid (T sample) quot ก็คือ quotvoid operatorltlt (T sample) quot ndash o วันที่ 8 มิ.ย. 14 เวลา 11:52 น. oPhút ahhh เห็นดี จริงฉันตั้งใจจะให้โมฆะดำเนิน () (T ตัวอย่าง) แต่แน่นอนคุณสามารถใช้สิ่งที่คุณต้องการสัญกรณ์. จะแก้ไขขอบคุณ ndash Tony D Jun 8 14 at 14: 27Is เป็นไปได้ที่จะใช้ค่าเฉลี่ยเคลื่อนที่ใน C โดยไม่ต้องใช้หน้าต่างของตัวอย่าง Ive พบว่าฉันสามารถเพิ่มประสิทธิภาพบิตโดยเลือกขนาดหน้าต่าง thats อำนาจของสองเพื่อให้บิต - เปลี่ยนแทนการหาร แต่ไม่จำเป็นต้องบัฟเฟอร์จะดี มีวิธีแสดงผลลัพธ์เฉลี่ยเคลื่อนที่ใหม่ตามผลการค้นหาเดิมและตัวอย่างใหม่กำหนดค่าเฉลี่ยเคลื่อนที่ตัวอย่างเช่นข้ามหน้าต่างตัวอย่าง 4 ตัวอย่าง: เพิ่มตัวอย่างใหม่ e: ค่าเฉลี่ยเคลื่อนที่สามารถใช้งานได้แบบ recursively , แต่สำหรับการคำนวณที่แน่นอนของค่าเฉลี่ยเคลื่อนที่คุณต้องจำตัวอย่างการป้อนข้อมูลที่เก่าแก่ที่สุดในผลรวม (เช่นในตัวอย่างของคุณ) สำหรับค่าเฉลี่ยเคลื่อนที่ N ที่คุณคำนวณ: โดยที่ yn คือสัญญาณขาออกและ xn เป็นสัญญาณขาเข้า อีคิว (1) สามารถเขียน recursively เป็นดังนั้นคุณจำเป็นต้องจำตัวอย่าง xn-N เพื่อคำนวณ (2) ที่ระบุโดย Conrad Turner คุณสามารถใช้หน้าต่างแทนยาวได้ (ไม่ จำกัด ) แทนซึ่งจะช่วยให้คุณสามารถคำนวณเอาท์พุทได้เฉพาะจากผลลัพธ์ที่ผ่านมาและอินพุทปัจจุบัน: แต่นี่ไม่ใช่ค่าเฉลี่ยเคลื่อนที่ (unweighted) แต่เป็นค่าชี้แจง (อย่างน้อยที่สุดในทางทฤษฎี) คุณไม่เคยลืมอะไรเลย (น้ำหนักเพียงเล็กน้อยและเล็กลงสำหรับตัวอย่างที่ไกลในอดีต) ฉันใช้ค่าเฉลี่ยเคลื่อนที่โดยไม่มีหน่วยความจำรายการสำหรับโปรแกรมติดตาม GPS ที่ฉันเขียน ฉันเริ่มต้นด้วย 1 ตัวอย่างและหารด้วย 1 เพื่อให้ได้ค่าเฉลี่ยปัจจุบัน จากนั้นผมจะเพิ่มตัวอย่าง anothe และหารด้วย 2 เป็นค่าเฉลี่ยปัจจุบัน นี้ยังคงจนกว่าฉันจะได้รับความยาวเฉลี่ย ทุกครั้งหลังจากนั้นฉันเพิ่มในตัวอย่างใหม่ให้ได้ค่าเฉลี่ยและลบค่าเฉลี่ยดังกล่าวออกจากยอดรวม ฉันไม่ใช่นักคณิตศาสตร์ แต่ดูเหมือนจะเป็นวิธีที่ดีที่จะทำ ฉันคิดว่ามันจะเปิดท้องของคนที่แต่งตัวประหลาดคณิตศาสตร์จริง แต่ก็จะเปิดออกเป็นหนึ่งในวิธีที่ได้รับการยอมรับในการทำมัน และทำงานได้ดี เพียงแค่จำไว้ว่ายิ่งความยาวของคุณยิ่งใหญ่เท่าไรก็ยิ่งช้าลงตามสิ่งที่คุณต้องการทำ นั่นอาจไม่สำคัญตลอดเวลา แต่เมื่อไปตามดาวเทียมถ้าคุณช้าเส้นทางอาจอยู่ไกลจากตำแหน่งจริงและจะดูไม่ดี คุณอาจมีช่องว่างระหว่างจุดเริ่มต้นและจุดต่อท้าย ฉันเลือกความยาวของ 15 ปรับปรุง 6 ครั้งต่อนาทีเพื่อให้ได้อย่างราบรื่นเพียงพอและไม่ได้รับไกลจากตำแหน่งนั่งจริงกับจุดเส้นทางที่ราบรื่น ตอบ 16 พค. 16 ที่ 23:03 เริ่มต้นทั้งหมด 0, นับ 0 (ทุกครั้งที่เห็นค่าใหม่จากนั้นหนึ่งอินพุท (scanf) หนึ่งเพิ่ม totalnewValue, หนึ่งที่เพิ่มขึ้น (นับ) หนึ่งหารเฉลี่ย (totalcount) นี่จะเป็นค่าเฉลี่ยเคลื่อนที่มากกว่า input ทั้งหมดในการคํานวณคาเฉลี่ยโดยใชเพียง 4 อินพุทตอไปเทานั้นจะตองใช4 inputvariables อาจคัดลอก input แตละ input ไปยัง inputvariable ที่สูงกวาจากนั้นคา new moving average เปน sum ของ inputvariables 4 หารดวย 4 (right shift 2) ดีถ้าทุกปัจจัยการผลิตเป็นบวกเพื่อให้การคำนวณเฉลี่ยตอบกุมภาพันธ์ 3 15 ที่ 4:06 ที่จริงจะคำนวณค่าเฉลี่ยรวมและไม่เฉลี่ยเคลื่อนไหวตามนับได้รับผลกระทบขนาดใหญ่ของตัวอย่างการป้อนข้อมูลใหม่ ๆ กลายเป็น vanishingly ขนาดเล็ก ndash Hilmar Feb ฉันต้องการใช้ตัดความถี่ต่ำใน c ซึ่งเป็นหลักจะใช้กระแสของตัวเลขและ smoo. (การกรองการเคลื่อนย้ายผู้ที่มีความถี่สูง) แต่เป็นเรื่องสำคัญที่ตัวเลขที่ถ่วงน้ำหนักด้านหน้าถือว่าเป็นข้อมูลที่มีความสำคัญในเวลาเดียวกัน (เป็นการควบคุมฐานการจำลองการเคลื่อนไหวโดยใช้เอาท์พุทจากซอฟต์แวร์เกม) Ive ได้ algoithm algoithm เฉลี่ยถ่วงน้ำหนักทำงาน แต่สามารถทำอะไรบางอย่างตอบสนองต่อเล็กน้อยที่ปลายด้านหน้าและฉันพบนี้: - หลอกรหัสมีดังนี้ Inputs: Price (NumericSeries), Period (NumericSimple) ตัวแปร: (0), lag (0) ถ้า CurrentBar lt 1 แล้วเริ่มต้น ZLEMA Price factor 2 (Period1) lag (Period-1) 2 end else เริ่มต้น ZLEMA factor (2Price-Pricelag) (1-factor) ZLEMA1 end Ive แปลเป็น ถึง C และรหัสของฉันจะเป็นดังนี้: แต่ก็ does not ดูเหมือนจะทำงานค่อนข้างเป็น Id คาดหวัง ดูเหมือนว่าจะเกือบจะมี แต่บางครั้งฉันจะได้รับค่าต่ำกว่ารายการทั้งหมดในคิว (เมื่อทั้งหมดสูงกว่า) คิวและจำนวนของไอเท็มที่อยู่ในนั้นจะถูกส่งผ่านไปเป็นพารามิเตอร์โดยมีค่าล่าสุดอยู่ที่ด้านหน้าตลอดเวลานอกจากนี้ฉันยังเพิ่มตัวนับที่เพิ่มขึ้นเริ่มต้นที่ 0 ตามต้องการ อิ่มไม่แน่ใจ Ive แปลความหมายของ ZLEMA1 อย่างถูกต้องเนื่องจากไม่ชัดเจนใน pseudocode ของเขาดังนั้น Ive สันนิษฐานว่านี่จะเป็นสายสุดท้าย zlema และฉันสมมติว่าราคาจริงหมายถึงราคา 0 บางที Ive ได้ผิดนี้ฉันควรจะคัดลอกค่าที่คำนวณจริง zlema กลับไปที่คิวเดิมของฉันก่อนที่จะโทรต่อไป I dont เปลี่ยนคิวเดิมที่อื่น ๆ กว่าเพียงแค่ขยับค่าทั้งหมดที่หนึ่งไปยังจุดสิ้นสุดและแทรกล่าสุดที่จุดเริ่มต้น . รหัสฉันใช้ในการทำเช่นนี้คือ: จะขอบคุณมากถ้าคนที่มีความเข้าใจที่ดีขึ้นของคณิตศาสตร์ได้กรุณา sanity ตรวจสอบนี้สำหรับฉันเพื่อดูว่า Ive มีอะไรผิดพลาดเล็กน้อยขอบคุณมากล่วงหน้าถ้าคุณสามารถช่วยประการแรกขอบคุณสำหรับทุก ใส่ข้อมูลของคุณชื่นชมมากที่ทำให้รู้สึกฉันเดาดังนั้นฉันคิดว่าแล้วที่ดีที่สุดที่ฉันสามารถหวังเป็นเพียงค่าเฉลี่ยเคลื่อนที่ชี้แจงยอมรับจะมีความล่าช้าเล็กน้อย แต่จะลดลงโดยน้ำหนักหน้าหนักกว่าให้ใน typised ถ่วงน้ำหนัก ค่าเฉลี่ยเคลื่อนที่ฉันมีอัลกอริทึมนี้มากเกินไป แต่เป็นปัญหาที่คล้ายกันในที่ค่า dont ดูเหมือนค่อนข้างถูกต้อง (เว้นแต่เป็นลักษณะของสูตร) เช่นกล่าวว่าอาร์เรย์ของฉันประกอบด้วย 16 ค่าทั้งหมด 0.4775 - ผลลัพธ์คือ 0.4983 แต่ Id คาดว่าจะเป็น 0.4775 ลักษณะนี้เหมาะกับคุณหรือไม่ ค่าเฉลี่ยเคลื่อนที่แบบเสวนา float ema (currentSample lt 1) ema vals0 factor 2.0 (numVals (float)) 1.0) อื่น ema (factor vals0) ((1.0 - factor) lastema) lastema ema return ema ตรงกันข้ามบางครั้งผลลัพธ์จะต่ำกว่าแต่ละอินพุทแม้ว่าทั้งหมดจะสูงกว่าก็ตาม เรียกว่าในลักษณะเดียวกับ zlema (.) ข้างต้นโดยมีตัวนับเพิ่มขึ้น สูตรและ pseudocode สำหรับนี้อยู่ที่นี่: - autotradingstrategy. wordpress20091130exponential-moving-average ขอบคุณอีกครั้งขอโทษสำหรับความเข้าใจผิดของฉันบางส่วนของพื้นฐาน: (Kind regards, Chris J สำหรับรหัสที่ฉันโพสต์ youre ขวาเกี่ยวกับขนาดอาร์เรย์ สถานการณ์ที่ควรได้รับการแก้ไขได้อย่างง่ายดายสำหรับคำถามของคุณ: 1) ค่าคงที่ตัวกรองหมายถึงการตัดทอนความถี่ ฉันใช้ Digital Signal Processing (DSP) สำหรับเทคนิคนี้ en. wikipedia. orgwi kiLow-pas sfilter เป็นคำอธิบายง่ายๆ คุณต้องการส่วน Discrete-Time Realization ในกรณีของฉัน A คือ RC-Constant ที่พวกเขาพูดถึง ดังนั้นความถี่ที่ตัดออกอยู่เหนือ 1 (2piA) หากคุณไม่เข้าใจเกี่ยวกับทฤษฎีเกี่ยวกับความถี่ - โดเมนอาจทำให้เกิดความยุ่งยากได้ ในกรณีของคุณสูงกว่าที่คุณทำ A, ความถี่ต่ำที่ตัวกรองนี้จะช่วยให้ความหมายมันจะเรียบเส้นโค้งออกมากขึ้น ที่ต่ำกว่าที่คุณทำมันเสียงมากขึ้นที่ได้รับอนุญาตในระบบ จำ A ต้องมากกว่าหรือเท่ากับ 1 เพื่อให้มีประสิทธิภาพ ฉันได้ติดตั้ง XLS ใหม่อีกครั้งโดยไม่ต้องเปลี่ยนตัวเลข rand () ปรับค่าคงที่ A และดูว่ามีการเปลี่ยนแปลงรูปแบบความถี่สูงมากเพียงใด (หรือกรอง) 2) จุดสุดท้ายของอาร์เรย์อินพุตมีค่าล่าสุด 3) เช่นเดียวกับอาร์เรย์ผลลัพธ์ ค่าล่าสุดเป็นค่าล่าสุด 5) NUMVALS โดยพลการ คุณสามารถเพิ่มอาร์เรย์ของอินพุตและเอาต์พุตได้มากเท่าที่คุณต้องการและจะไม่ส่งผลต่อตัวกรอง โดยเฉพาะอย่างยิ่งผมใช้ 49 คะแนน แต่ฉันสามารถลบ 20 ครั้งล่าสุดและผลลัพธ์ 29 รายการแรกจะยังคงเหมือนเดิม ฟังก์ชั่นไม่ได้ขึ้นอยู่กับจำนวนจุดที่ใช้ ฉันอยากจะพูดถึงว่าฉันได้พัฒนาฟังก์ชันนี้สำหรับการแปลงเพียงครั้งเดียว หากคุณต้องการทำ Conversion สำหรับมูลค่าถัดไปในทันทีคุณสามารถลองทำสิ่งที่ง่ายขึ้น (ตามที่แนบมา) อีกครั้งฉันสนิมบน c. ฉันหวังว่านี้ถูกต้อง สิ่งเดียวที่คุณจะต้องจัดหาคือค่าคงที่ของอินพุตและตัวกรอง แจ้งให้เราทราบหากวิธีนี้ช่วยได้
No comments:
Post a Comment