快慢均線策略(MC版)_第1頁
快慢均線策略(MC版)_第2頁
快慢均線策略(MC版)_第3頁
快慢均線策略(MC版)_第4頁
快慢均線策略(MC版)_第5頁
已閱讀5頁,還剩8頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

快慢均線策略本策略一個基于移動平均線交叉(MovingAverageCrossOver,簡稱MACO)的交易策略,并對其進行了優化。交易邏輯思路1.

均線交叉識別趨勢:使用快速均線和慢速均線的交叉來識別潛在的趨勢。當快速均線上穿慢速均線時,視為可能的上升趨勢開始;當快速均線下穿慢速均線時,視為可能的下降趨勢開始。2.

延遲進場:識別趨勢后并不立即進場,而是等待進一步確認趨勢的開始。通過設置在一定數目的K線內有效的買入或賣出條件單來確定趨勢。3.

買入與賣出條件:買入:快速均線上穿慢速均線后,將最近12根K線的高點加上3%的位置設為“買入突破線”,價格突破該線時發出買入指令,指令在12根K線內有效。賣出:快速均線下穿慢速均線后,將最近12根K線的低點減少3%的位置設為“賣出突破線”,價格跌破該線時發出賣出指令,指令在12根K線內有效。4.

反手出場:如果持有多頭頭寸觸發了賣出指令,先平掉多頭頭寸然后開立空頭頭寸;反之亦然。5.

周期出場:持有多頭時,價格跌破最近8根K線的低點則平倉;持有空頭時,價格突破最近8根K線的高點則平倉。6.

再進場策略:多頭出場后,記下出場時最近10根K線的高點,如果在出場后15根K線內價格達到該高點則重新做多。空頭出場后,記下出場時最近10根K線的低點,如果在出場后15根K線內價格達到該低點則重新做空。策略特點1.

減少假信號:通過延遲進場和設置有效條件單,減少市場橫向整理或起伏不定時產生的假信號。2.

靈活性:允許用戶通過調整K線數量和百分比來優化策略參數,增加策略的適應性和靈活性。3.

參數優化:將原策略的9個變量參數縮減至3個,減少過度擬合的風險。4.

再進場邏輯:盡管再進場邏輯在回測中表現不明顯,但策略仍提供了再進場的選項,以捕捉趨勢繼續時的機會。5.

代碼實現:策略代碼詳細注釋,易于理解和修改,方便用戶根據實際情況進行調整。6.

策略因子:使用均線和最高/最低點作為策略因子,這些因子在交易中被證明是有效的。通過這些邏輯和特點,該策略旨在在捕捉市場趨勢的同時,盡量減少虧損和假信號,提高交易的成功率。策略說明:傳統的移動平均線交叉系統尋找快速均線和慢速均線的交叉來捕捉趨勢。在快速均線上穿慢速均線時買入,期待市場趨勢上漲,反之則賣出,期待市場趨勢下跌。這種技術在有趨勢的市場很有效果,但當市場橫向整理或是起伏不定時,均線將反復交叉從而產生許多導致虧損的假信號。MovingAverageCrossOver(MACO)系統充分利用趨勢的同時盡量避免或減少假信號的產生,方法是識別趨勢后并不立即進場,而是確定這是一波行情的開始之后再作為。系統使用快速均線和慢速均線的交叉來識別一波潛在的趨勢,直到上升趨勢或下降趨勢確定后才發出買入或賣出信號。系統通過設置在一定數目的K線內有效的買入或賣出條件單來確定趨勢。原策略進場:買入:一旦快速均線上穿慢速均線,系統把最近12根K線的高點加上3%的位置設為“買入突破線”,如果價格突破“買入突破線”時則發出買入指令,突破指令在12根K線內有效,即如果12根K線內未突破則取消本次交易。賣出:一旦快速均線下穿慢速均線,系統把最近12根K線的低點減少3%的位置設為“賣出突破線”,如果價格跌破“賣出突破線”時則發出賣出指令,突破指令在12根K線內有效。最近多少根K線的高點以及超過多少百分比作為策略參數輸入,允許使用者靈活測試和優化。原策略出場:反手出場:上述的買入或賣出指令也是反手指令,即:如果持有多頭而觸發了賣出指令,我們將先平掉多頭頭寸然后開立空頭頭寸,反之亦然。周期出場:持有多頭時,價格跌破最近8根K線的低點,多頭平倉;持有空頭時,價格突破最近8根K線的高點,空頭平倉。原策略再進場:上述的出場策略有時會導致提前出場并導致系統錯失大的利潤,再進場策略可以在趨勢繼續時重建原來的頭寸。多頭出場后,記下出場時最近10根K線的高點,如果在出場后15根K線內價格達到最近10根K線的高點重新做多;空頭出場后,記下出場時最近10根K線的低點,如果在出場后15根K線內價格達到最近10根K線的低點重新做空。策略點評及改進原策略代碼邏輯非常嚴謹。策略使用了均線與highest/lowest這兩個有效策略因子,能獲得正向的交易效果也是意料之中。第一步:在原進場邏輯中,價格突破相對高低點后加百分比點數作為進場信號。這點其實很大限度影響了策略普適性。因此將百分比點數改成了N倍真實波幅。第二步:原策略源碼有9個變量參數,方便擬合不同品種,不同周期。但這也同時增加了過度擬合的風險,因此我們將參數縮減至3個。第三步:在回測數據時發現原策略中再進場邏輯表現效果并不明顯,因此將原策略的再進場策略部分進行了刪減處理。第四步:重新測試優化參數。策略完整版代碼:inputs:sb1(50),sb2(54),zq(30);//定義輸入參數variables:varx(0),var0(0),var1(0),//真實波動范圍和兩個周期內的收盤價平均值var3(0),var4(0),var13(0),var14(0),//買入突破線和賣出突破線,以及記錄位置的變量var15(0),var16(0),var17(0);//其他可能需要的變量//計算平均真實波動范圍varx=AvgTrueRange(sb2);//計算兩個周期內的收盤價平均值var0=Average(close,sb1);var1=Average(close,sb2);//定義條件1:快速均線上穿慢速均線且當前K線大于zq-1condition1=var0crossabovevar1;ifcondition1andcurrentbar>zq-1thenbeginvar3=highest(high,zq)+0.03*varx;//計算買入突破線var4=currentbar;//記錄當前K線位置end;//如果當前K線大于var4且小于等于var4+zq,則買入ifcurrentbar>var4andcurrentbar<=var4+zqthenbuy("b1")nextbaratvar3stop;//定義條件2:快速均線下穿慢速均線且當前K線大于zq-1condition2=var0crossundervar1;ifcondition2andcurrentbar>zq-1thenbeginvar13=lowest(low,zq)-0.03*varx;//計算賣出突破線var14=currentbar;//記錄當前K線位置end;//如果當前K線大于var14且小于var14+zq,則賣出ifcurrentbar>var14andcurrentbar<var14+zqthensellshort("s1")nextbaratvar13stop;//多頭出場邏輯ifmarketposition=1thenbeginsellnextbaratlowest(low[1],15)stop;//價格跌破最近8根K線的低點則平倉var4=highest(high,zq)+20*varx;//更新買入突破線end;//空頭出場邏輯ifmarketposition=-1thenbeginbuytocovernextbarathighest(high[1],15)stop;//價格突破最近8根K線的高點則平倉var14=lowest(low,zq)-20*varx;//更新賣出突破線end;缺失版策略代碼:inputs:sb1(50),sb2(54),zq(30);variables:varx(0),var0(0),var1(0),var2(0),var3(0),var4(0),var5(0),var6(0),var7(0),var12(0),var13(0),var14(0),var15(0),var16(0),var17(0);varx=AvgTrueRange(sb2);var0=Average(close,sb1);var1=Average(close,sb2);condition1=var0crossabovevar1;ifcondition1andcurrentbar>zq-1thenbeginvar3=highest(high,zq)+0.03*varx;var4=currentbar;end;ifcurrentbar>var4andcurrentbar<=var4+zqthenbuy("b1")nextbaratvar3stop;condition2=var0crossundervar1;ifcondition2andcurrentbar>zq-1thenbeginvar13=lowest(low,zq)-0.03*varx;var14=currentbar;end;ifcurrentbar>var14andcurrentbar<var14+zqthensellshort("s1")nextbaratvar13stop;ifmarketposition=1thenbeginsellnextbaratlowest(low[1],15)stop;var4=highest(high,zq)+20*varx;end;ifmarketposition=-1thenbeginbuytocovernextbarathighest(high[1],15)stop;var14=lowest(low,zq)-20*varx;end;缺失版代碼注解輸入參數sb1=50#表示某種周期或參數值sb2=54#表示某種周期或參數值zq=30#表示某種時間周期或數量定義變量varx=0#用于存儲平均真實波動范圍var0=0#用于存儲特定周期內收盤價的平均值var1=0#用于存儲另一個特定周期內收盤價的平均值var2=0var3=0var4=0var5=0var6=0var7=0var12=0var13=0var14=0var15=0var16=0var17=0計算varx為sb2的平均真實波動范圍varx=AvgTrueRange(sb2)計算var0為sb1周期內收盤價的平均值var0=Average(close,sb1)計算var1為sb2周期內收盤價的平均值var1=Average(close,sb2)定義條件1:var0上穿var1且當前柱線大于zq-1condition1=var0crossabovevar1ifcondition1andcurrentbar>zq-1:#如果條件1成立,計算var3為zq周期內最高價的最高值加上0.03倍的varxvar3=highest(high,zq)+0.03*varx#記錄當前柱線位置到var4var4=currentbar#如果當前柱線大于var4且小于等于var4+zq,則在下一根柱線以var3的價格買入ifcurrentbar>var4andcurrentbar<=var4+zq:buy("b1")nextbaratvar3stop定義條件2:var0下穿var1且當前柱線大于zq-1condition2=var0crossundervar1ifcondition2andcurrentbar>zq-1:#如果條件2成立,計算var13為zq周期內最低價的最低值減去0.03倍的varxvar13=lowest(low,zq)-0.03*varx#記錄當前柱線位置到var14var14=currentbar#如果當前柱線大于var14且小于var14+zq,則在下一根柱線以var13的價格賣空ifcurrentbar>var14andcurrentbar<var14+zq:sellshort("s1")nextbaratvar13stop#如果當前市場頭寸為多頭ifmarketposition==1:#在下一根柱線以過去15根柱線內最低價賣出sellnextbaratlowest(low[1],15)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論