Tuesday 25 July 2017

คำนวณ เคลื่อนไหว เฉลี่ย หลาม


ก่อนหน้านี้เราได้นำเสนอวิธีสร้างค่าเฉลี่ยเคลื่อนที่โดยใช้ python บทแนะนำนี้จะเป็นหัวข้อต่อเนื่องของหัวข้อนี้ ค่าเฉลี่ยเคลื่อนที่ในบริบทที่เรียกว่าค่าเฉลี่ยของการวนซ้ำ (rollingrunning average) เป็นรูปแบบการตอบสนองต่อแรงกระตุ้นแน่นอน ในกวดวิชาก่อนหน้านี้เราได้วางแผนค่าของอาร์เรย์ x และ y: Let8217s พล็อต x เทียบกับค่าเฉลี่ยเคลื่อนที่ของ y ที่เราจะเรียก yMA: ประการแรก let8217s จะปรับความยาวของทั้งสองอาร์เรย์: และเพื่อแสดงสิ่งนี้ในบริบท: ผลลัพธ์ กราฟ: เพื่อช่วยให้เข้าใจเรื่องนี้พล็อตสองความสัมพันธ์ที่แตกต่างกัน: x vs y และ x vs MAy: ค่าเฉลี่ยเคลื่อนที่ที่นี่เป็นพล็อตสีเขียวที่เริ่มต้นที่ 3: แบ่งปันนี้: เช่นนี้: โพสต์การนำทางฝากความคิดเห็นยกเลิกการตอบ ต้องการอ่านส่วนสุดท้ายในชุดข้อมูลขนาดใหญ่หวังว่ามันจะมาเร็ว ๆ นี้ bloggers8230 เช่นนี้ Im ในขั้นตอนการสร้างอัลกอริทึมการซื้อขายแลกเปลี่ยนและต้องการลองยิงของฉันในการคำนวณ EMA (Exponential Moving Averages) ผลลัพธ์ของฉันดูเหมือนถูกต้อง (เทียบกับการคำนวณที่ฉันทำด้วยมือ) ดังนั้นฉันเชื่อว่าวิธีการต่อไปนี้ทำงานได้ แต่เพียงต้องการได้รับชุดพิเศษของตาเพื่อให้แน่ใจว่า im ไม่ขาดอะไร โปรดทราบว่านี่เป็นเพียงการส่งคืน EMA สำหรับราคาล่าสุด แต่ไม่ได้ส่งคืนอาร์เรย์ของ EMA เนื่องจากไม่ใช่สิ่งที่ฉันต้องการสำหรับแอ็พพลิเคชันของฉัน การทับซ้ำเป็นเครื่องมือที่ดีสำหรับงานที่เหมาะสม แต่ที่นี่ใช้เพื่อทำให้เกิดการวนซ้ำง่าย เช่นรหัส เป็นเรื่องยากที่จะอ่านและอธิบายเหตุผล จะช้าลงเนื่องจากโค้ดใน ema ต้องการเพียงแค่เรียกใช้เพียงครั้งเดียวเท่านั้น จะล้มเหลวด้วยค่าที่มากพอของหน้าต่างเนื่องจากล้นกองเรียก Pythons โปรดระบุอย่างน้อยพารามิเตอร์ของแต่ละฟังก์ชันเช่น หน้าต่างนั้นคือความยาวของหน้าต่างและตำแหน่งดังกล่าวนับถอยหลังจากส่วนท้ายของข้อมูล (ในความเป็นจริงสิ่งต่างๆจะชัดเจนยิ่งขึ้นหากตำแหน่งเป็นดัชนีส่งต่อไปยังข้อมูลปกติ) เพิ่มข้อยกเว้นเมื่อคุณพบว่าพารามิเตอร์มีค่าที่ไม่ถูกต้อง การส่งคืน None จะทำให้เกิดข้อผิดพลาดที่ทำให้เกิดความสับสนขึ้นในภายหลัง ในความเป็นจริงถ้าฉันลองตัวบ่งชี้ () ema (closeprices, 600) ฉันได้รับการเรียกซ้ำอนันต์เนื่องจาก sma ส่งกลับไม่มี ซึ่งทำให้ ema เรียก sma ซ้ำแล้วซ้ำอีก จุดก่อนหน้ายังแสดงให้เห็นว่าถ้า len (data) lt หน้าต่าง 2 ไม่ใช่เช็คที่ถูกต้อง 1 ใน data-window2 1: - window 1 ดูเหมือนจะไม่ถูกต้องกับฉัน ฉันสมมุติว่าคุณต้องการ data-window2: - window คำสั่ง return previousema อยู่ในที่แปลกเนื่องจาก ณ จุดนี้คุณได้คำนวณ currentema ใหม่ นี่เป็นกรณีฐานของการทับทิมและเป็นเรื่องปกติที่จะต้องจัดการกับกรณีฐานก่อน ข้อเสนอของฉันสำหรับ ema: ตอบ 26 พ. ย. ที่ 18:56 บทวิจารณ์ที่น่าตื้น: คุณไม่จำเป็นต้องเขียนชั้นเรียนสำหรับสิ่งที่คุณกำลังทำอยู่ (และขอแนะนำให้คุณดูวิดีโอนี้) ชั้นของคุณไม่ได้ห่อหุ้มข้อมูลใด ๆ ไว้และคุณเพียงแค่ใช้เพื่อทำหน้าที่ของคุณในเอนทิตีเดียวกันเท่านั้น ฉันเดาสิ่งที่จะง่ายต่อการเข้าใจถ้าคุณได้กำหนด classmethod เพื่อให้ชัดเจนว่าคุณเคยชินจริงๆพึ่งพาใด ๆ เช่นใด. อย่างไรก็ตามตัวเลือกที่ดียิ่งขึ้นคือการกำหนดฟังก์ชันในโมดูลตัวบ่งชี้ ผมขอขอบคุณสำหรับคำแนะนำที่ผมได้ทำเป็น classmethods และถกเถียงกันว่าจะไปมาระหว่างการใช้คลาสหรือเพียงแค่กำหนดฟังก์ชันในโมดูลตัวบ่งชี้ (ซึ่งตอนนี้ผมจะทำ) ndash ChrisC พ. ย. 25 14 ตอน 19:12 แค่ดูวิดีโอที่ยอดเยี่ยมมาก ndash ChrisC พ. ย. 25 14 ที่ 19:43 คำตอบของคุณ 2017 Stack Exchange, Inc กล่าวว่าฉันมีรายการ: ฉันต้องการสร้างฟังก์ชันที่คำนวณค่าเฉลี่ย n วันเคลื่อนไหว ดังนั้นถ้า n เป็น 5 ฉันต้องการรหัสของฉันในการคำนวณ 1-5 แรกเพิ่มและหาค่าเฉลี่ยซึ่งจะเป็น 3.0 แล้วไปที่ 2-6 คำนวณค่าเฉลี่ยซึ่งจะ 4.0 แล้ว 3. -7, 4-8, 5-9, 6-10 ฉันไม่ต้องการคำนวณ n-1 วันแรกดังนั้นนับตั้งแต่วันที่ n นับวันนับจากวันที่ผ่านมา นี้ดูเหมือนจะพิมพ์สิ่งที่ฉันต้องการ: แต่ฉันไม่ทราบวิธีการคำนวณตัวเลขภายในรายการเหล่านั้น ความคิดใด ๆ ถาม Feb 14 13 at 21:05 ในขณะที่ฉันชอบคำตอบ Martijns นี้เช่น george ฉันถูกสงสัยว่า wouldnt นี้จะเร็วขึ้นโดยใช้ผลรวมทำงานแทนการใช้ผลรวม () ซ้ำแล้วซ้ำอีกในส่วนใหญ่หมายเลขเดียวกัน . นอกจากนี้แนวคิดในการไม่มีค่าเป็นค่าเริ่มต้นในระหว่างระยะทางขึ้นเป็นที่น่าสนใจ ในความเป็นจริงอาจมีหลายสถานการณ์ที่แตกต่างกันที่เราสามารถนึกถึงค่าเฉลี่ยเคลื่อนที่ได้ ให้แบ่งการคำนวณค่าเฉลี่ยออกเป็นสามระยะ: Ramp Up: การเริ่มต้นการทำซ้ำที่การนับซ้ำในปัจจุบันหน้าต่าง lt ขนาดความคืบหน้าคงที่: เรามีจำนวนขนาดขององค์ประกอบที่พร้อมใช้งานในการคำนวณค่าเฉลี่ยปกติ: sum (xiterationcounter-windowsize: iterationcounter) windowsize Ramp Down: ในตอนท้ายของข้อมูลป้อนข้อมูลเราสามารถแสดงค่าเฉลี่ยของอีก windowsize - 1 ค่าเฉลี่ย นี่คือฟังก์ชันที่ยอมรับการทำซ้ำตามอำเภอใจ (Generator is fine) เป็น input สำหรับข้อมูลขนาดหน้าต่างอิสระ 1 พารามิเตอร์เพื่อสลับการผลิตค่าต่างๆในระหว่างขั้นตอนสำหรับฟังก์ชันการเรียกกลับของ Ramp UpDown สำหรับขั้นตอนดังกล่าวเพื่อควบคุมค่าที่เกิดขึ้น ซึ่งสามารถใช้เพื่อกำหนดค่าเริ่มต้น (เช่นไม่มี) หรือให้ค่าเฉลี่ยบางส่วนดูเหมือนว่าจะเร็วกว่ารุ่น Martijns ซึ่งมีความสง่างามมากขึ้น นี่คือโค้ดทดสอบ: คุณสามารถแก้ปัญหาเดิมได้ด้วยการเรียกฟังก์ชันนี้: ตอบ 18 กุมภาพันธ์ 13 เวลา 18:15 ใช้ฟังก์ชันรวมและแผนที่ ฟังก์ชันแผนที่ใน Python 3 เป็นพื้นขี้เกียจของนี้: Im แน่ใจว่าคุณสามารถคาดเดาสิ่งที่รวมฟังก์ชันไม่ ตอบวิธีการหลีกเลี่ยง recomputing ผลรวมกลาง .. ทำให้ที่ทำงาน (int (v)) แล้วก็ repr (runsumlistk - runsumlistk-5) 5) ถ้าคุณมดที่จะดำเนินการรอบตัวเลขสตริง .. Alt โดยไม่ต้องทั่วโลก: ให้แน่ใจว่าได้ทำคณิตศาสตร์ลอยแม้ว่าคุณจะป้อนค่าเป็นจำนวนเต็มตอบกุมภาพันธ์ 14 13 ที่ 22:04 แท้จริงทำงาน sum algorithm เร็วขึ้น ฉันโพสต์คำตอบเพื่อพิสูจน์จุดของคุณ มีเพียงแค่ไม่มีความจำเป็นสำหรับตัวแปรทั่วโลกที่นี่ ndash cfi 18 กุมภาพันธ์ 18 เวลา 18:16 ใช่คุณกำลังฉันพยายามเกินไปยาก aviod ชัดเจนสำหรับวง. ndash agentp Feb 19 13 at 18:37 มีวิธีอื่นในการขยายสูตร itertools pairwise () คุณสามารถขยาย nwise () นี้ ซึ่งจะทำให้คุณมีหน้าต่างบานเลื่อน (และสามารถทำงานได้หากเครื่องทำซ้ำคือเครื่องกำเนิดไฟฟ้า): แม้ว่าค่าใช้จ่ายในการตั้งค่าที่ค่อนข้างสูงสำหรับการใช้งานสั้น ๆ แต่ค่าใช้จ่ายนี้จะลดผลกระทบลงอีกต่อไป การใช้ค่าบวก () แต่โค้ดมีเหตุผลพอสมควร: ตอบ 26 พ. ย. 16 เวลา 14: 59Backtesting Crossover Moving Average ใน Python กับ pandas ในบทความก่อนหน้านี้เกี่ยวกับ Research Backtesting Environments ใน Python ด้วย Pandas เราได้สร้าง backtesting แบบใช้งานวิจัย สิ่งแวดล้อมและทดสอบกับกลยุทธ์การคาดการณ์แบบสุ่ม ในบทความนี้เราจะใช้ประโยชน์จากเครื่องจักรที่เรานำมาใช้เพื่อทำการวิจัยเกี่ยวกับยุทธวิธีที่แท้จริงนั่นคือ Moving Average Crossover ใน AAPL Moving Average Crossover Strategy เทคนิค Moving Average Crossover เป็นกลยุทธ์โมเมนตัมที่เป็นที่รู้จักอย่างมาก ถือเป็นตัวอย่างของ Hello World สำหรับการซื้อขายเชิงปริมาณ กลยุทธ์ที่ระบุไว้ในที่นี้มีมานานแล้ว มีการสร้างตัวกรองแบบเคลื่อนที่เฉลี่ย 2 ตัวแยกกันโดยมีช่วงเวลามองย้อนกลับที่แตกต่างกันของชุดเวลาหนึ่ง ๆ สัญญาณที่จะซื้อสินทรัพย์เกิดขึ้นเมื่อค่าเฉลี่ยเคลื่อนที่แบบย้อนกลับที่สั้นกว่าค่าเฉลี่ยเคลื่อนที่ที่ยาวนานกว่า หากค่าเฉลี่ยยาวนานเกินกว่าค่าเฉลี่ยที่สั้นลงสินทรัพย์จะถูกขายคืน กลยุทธ์ทำงานได้ดีเมื่อชุดข้อมูลในช่วงเวลาเข้าสู่ช่วงที่มีแนวโน้มที่แข็งแกร่งและจากนั้นจะกลับทิศทางอย่างช้าๆ สำหรับตัวอย่างนี้ฉันได้เลือก Apple, Inc. (AAPL) เป็นชุดข้อมูลระยะเวลาโดยมองย้อนกลับไปในระยะสั้น 100 วันและย้อนกลับยาวนาน 400 วัน นี่คือตัวอย่างที่จัดทำโดยไลบรารีการค้าอัลกอริธึม zipline ดังนั้นถ้าเราต้องการที่จะใช้ backtester ของเราเองเราจำเป็นต้องให้แน่ใจว่ามันตรงกับผลลัพธ์ใน zipline เป็นวิธีพื้นฐานของการตรวจสอบ การติดตั้งอย่าลืมทำตามคำแนะนำก่อนหน้านี้ที่นี่ ซึ่งอธิบายว่าลำดับชั้นของวัตถุเริ่มต้นสำหรับ backtester ถูกสร้างขึ้นมิฉะนั้นโค้ดด้านล่างจะไม่ทำงาน สำหรับการใช้งานนี้ฉันได้ใช้ไลบรารีต่อไปนี้: การใช้งาน macross. py ต้องใช้ backtest. py จากบทแนะนำก่อนหน้านี้ ขั้นตอนแรกคือการนำเข้าโมดูลและออบเจ็กต์ที่จำเป็นเช่นในบทแนะนำก่อนหน้านี้เราจะจัดชั้นเรียนย่อยชั้นกลยุทธ์เพื่อสร้าง MovingAverageCrossStrategy ซึ่งมีรายละเอียดทั้งหมดเกี่ยวกับวิธีสร้างสัญญาณเมื่อค่าเฉลี่ยเคลื่อนที่ของ AAPL ข้ามกันและกัน วัตถุต้องมี shortwindow และ longwindow ที่จะใช้งาน ค่าได้รับการตั้งค่าเป็นค่าเริ่มต้นเป็น 100 วันและ 400 วันตามลำดับซึ่งเป็นพารามิเตอร์เดียวกับที่ใช้ในตัวอย่างหลักของ zipline ค่าเฉลี่ยเคลื่อนที่จะถูกสร้างขึ้นโดยใช้ฟังก์ชัน rollingmean ของแพนด้าบนแท่งปิดราคาปิดของสต็อก AAPL เมื่อสร้างค่าเฉลี่ยเฉพาะแต่ละซีรี่ส์สัญญาณจะถูกสร้างขึ้นโดยการตั้งค่าศูนย์ให้เท่ากับ 1.0 เมื่อค่าเฉลี่ยเคลื่อนที่สั้นมากกว่าค่าเฉลี่ยเคลื่อนที่ที่ยาวหรือ 0.0 มิลลิวินาที จากนี้คำสั่งตำแหน่งสามารถสร้างขึ้นเพื่อแสดงสัญญาณการซื้อขายได้ MarketOnClosePortfolio ถูกแบ่งย่อยจาก Portfolio ซึ่งพบได้ใน backtest. py เกือบจะเหมือนกันกับการดำเนินการที่อธิบายไว้ในกวดวิชาก่อนหน้านี้โดยมีข้อยกเว้นว่าขณะนี้ธุรกิจการค้าดำเนินการบนพื้นฐาน Close-to-Close แทนที่จะเป็นแบบ Open-to-Open สำหรับรายละเอียดเกี่ยวกับวิธีกำหนดเป้าหมาย Portfolio ให้ดูบทแนะนำก่อนหน้านี้ Ive ซ้ายรหัสเพื่อความสมบูรณ์และเพื่อให้กวดวิชานี้มีอยู่ด้วยตนเอง: ตอนนี้ที่มีการกำหนดคลาส MovingAverageCrossStrategy และ MarketOnClosePortfolio แล้วฟังก์ชันหลักจะถูกเรียกให้ผูกฟังก์ชันการทำงานทั้งหมดเข้าด้วยกัน นอกจากนี้ประสิทธิภาพของกลยุทธ์จะถูกตรวจสอบผ่านพล็อตของเส้นโค้งส่วนได้เสีย ออบเจ็กต์ DataReader ของแพนด้าดาวน์โหลดราคา OHLCV ของสต็อก AAPL สำหรับช่วงตั้งแต่วันที่ 1 ม. ค. 1990 ถึง 1 มกราคม 2002 ซึ่งจะสร้างสัญญาณข้อมูล DataFrame เพื่อสร้างสัญญาณแบบยาวเท่านั้น ต่อจากนั้นจะมีการสร้างพอร์ตการลงทุนโดยมีฐานเงินทุนเริ่มแรก 100,000 เหรียญสหรัฐและผลตอบแทนจะคำนวณจากส่วนของส่วนของผู้ถือหุ้น ขั้นตอนสุดท้ายคือการใช้ matplotlib เพื่อวางแผนพล็อตสองตัวเลขของทั้งสองราคา AAPL ซ้อนทับกับค่าเฉลี่ยเคลื่อนที่และสัญญาณ buysell รวมทั้งเส้นโค้งส่วนที่มีสัญญาณ buysell เดียวกัน รหัสวางแผนถูกนำมา (และแก้ไข) จากตัวอย่างการใช้ zipline ผลลัพธ์แบบกราฟิกของโค้ดมีดังนี้ ฉันใช้คำสั่งวาง IPython เพื่อใส่ข้อมูลนี้ลงในคอนโซล IPython โดยตรงใน Ubuntu เพื่อให้เอาต์พุตแบบกราฟิกอยู่ในมุมมอง การปรับขึ้นค่าสีชมพูหมายถึงการซื้อหุ้นในขณะที่ downticks สีดำเป็นตัวแทนขายมันกลับมา: ตามที่สามารถเห็นได้กลยุทธ์สูญเสียเงินในช่วงที่มีห้าธุรกิจการท่องเที่ยวรอบ นี้ไม่น่าแปลกใจที่ได้รับพฤติกรรมของ AAPL ในช่วงเวลาซึ่งอยู่ในแนวโน้มลดลงเล็กน้อยตามด้วยการเริ่มต้นขึ้นอย่างมากจุดเริ่มต้นในปี 1998 ระยะเวลา lookback ของสัญญาณเฉลี่ยเคลื่อนไหวค่อนข้างใหญ่และส่งผลกระทบต่อกำไรของการค้าขั้นสุดท้าย ซึ่งอาจทำให้กลยุทธ์มีกำไร ในบทความต่อ ๆ ไปเราจะสร้างวิธีการวิเคราะห์ประสิทธิภาพที่ซับซ้อนขึ้นและอธิบายถึงวิธีเพิ่มระยะเวลาการมองย้อนกลับของแต่ละค่าเฉลี่ยที่เคลื่อนที่ได้ เพิ่งเริ่มต้นกับการซื้อขายเชิงปริมาณ

No comments:

Post a Comment