外_匯_邦 WaiHuiBang.com
引言本文涵蓋一種適用於任何外匯、股票、商品市場的交易方法,以及基於此方法的可用於EA的MQL4實例代碼。www.emoneybtc.com
價格行為和確定支撐及阻力位是該系統的關鍵組成部分。是否入市完全取決於這兩部分因素。參照價格及如何高效的選擇將在本文中予以闡述。MQL4實例包括最小化風險參數。這是通過將出場和止損位設置的離入場價格相對接近來實現的。
這樣帶來了一項額外的好處,那就是無論賬戶規模大小都能允許更高的交易量。最後,對確定目標收益的選項進行討論,並附上能夠在各種條件下獲利退出的MQL代碼。
1. 檢測支撐位和阻力位如果你查看任何時間框架下任何市場的價格圖表,你會發現兩個基於永恆市場特性的兩個事實。其中一個事實是在任何時候,市場價格都不會在一個地方呆很久。只要給予足夠的時間,市場價格必將有顯著的變化。圖表上顯示的任何價格都可以作為參考標准。
然而,某一特定的價格與其他價格相比更有參考價值。我們將很快對其進行研究。上述第二項事實就是任何圖表都會在到達某一特定的價格水平後,市場趨勢將完全逆轉。通常來說,市場會反復到達這些價格,之後不久就會轉換方向。這些就是幾乎所有交易者都耳熟能詳的支撐位和阻力位。支撐位是指一旦價格觸及就不會下降的價格水平。阻力位是指一旦價格觸及就無法上升的價格水平。
也被稱為頂和底,這些價格水平傳遞的信息是(至此)一旦市場走到此處那麼價格將會在此附近反轉。支撐位和阻力位是很好的價格參考水平,因為它們意味著高概率的新趨勢開始的價格水平。其他價格,如兩個相關支撐和阻力水平的中間價格也是很好的參考標准。我們將這類價格作為中間點。
價格圖表中的任何一部分都可以用水平線標出,並以相應的支撐位、阻力位和中間價格作為參考。舉一個例子如下圖1所示。
圖1. 支撐位、阻力位和中間點
底部紫色線條表示支撐位在1.09838。最頂部的紅色線條表示阻力位為1.10257。
大約位於兩者之間的中間處有一黑色線條,中間位在1.10048。准確確定處於支撐位或是阻力位主要依靠主觀判斷,會隨著你自身對於出入場時機的判斷不同而不同。你也許想在特定的價格或者特定價格附近開倉。又或者准確的入市價格對你也許並不重要,一個寬泛的價格區間內就已經足夠。這一切都取決於你的個人交易習慣和利潤目標。
因此,支撐位和阻力位參考點之間的舉例可能會有很大的不同。他們只是確定合適交易條件的參照物。
圖 2. 支撐位和阻力位價格范圍區間
圖2 展示了一分鐘圖表下的四種支撐位和阻力位的價格范圍。
某些范圍比較寬而另一些范圍比較窄。綜上所述,價格水平是依靠主觀劃分的,但很明顯他們發生在短期趨勢的頂部和底部(和中間)。
圖3到圖6是1分鐘圖下較長和較短時間周期的支撐位和阻力位實例。
圖3-4 代表牛市,而圖5-6代表熊市。
圖 3長時間的牛市
圖 4. 短時間的熊市
圖 5. 長時間的熊市
圖 6. 短時間的熊市
在這些價格水平區域預示這特定的價格運動類型。當這些類型的價格行為在圖表上出現時,交易時機就會到來。
2. 根據價格行為識別高勝率策略多種雙K線模式預示著高勝率的交易時機。在此介紹三種模式。這些模式的出現在價格接近支撐位和阻力位水平的時候,可以作為入市的參考依據。需要提醒的是,從現在起呈現的每一個例子都是基於1分鐘K線的。用這個時間周期是因為,我們的系統要實現更為精確的入場點以及能將止損放在較小的范圍內。
下面三種模式,每一個都包含兩個1分鐘K線。當其中一種模式在參考價格水平(支撐位、阻力位或中間位)出現時,那麼將在下一個(第三個)1分鐘K線的開盤價精准入場。在介紹完這三種模式後將給出例子。
第一種模式,模式1由一個下引線長於實體的K線和一個收盤價高於第一個K線的兩根K線組成。引線為一根直線,它代表實體之上最高價和開盤/收盤價之間的價格范圍,或者實體之下最低價和開盤/收盤價之間的范圍。“十字星”K線即包含在第一種K線模式中。
圖 7. 牛市模式 1
圖 8. 熊市模式 1
圖7顯示了一種牛市模式,圖8顯示了一種熊市模式。
這些模式類似“錘子”K線模式,但是並不像十字星模式那樣具像,它可以包含任何上升下降的K線組合。
圖 9 顯示了始於這類型模式的牛市趨勢。
圖 9. 牛市趨勢
第二種模式,模式2由兩根K線組成,第二根蠟K線實體的長度幾乎和第一根的相等。
兩根K線的開盤價和收盤價也幾乎一樣。需要注意的是兩根K線的實體長度以及相應的開盤收盤價格不一定要完全相等。這個模式的例子,熊市模式如圖10所示,牛市模式如圖11所示。
這些模式被稱為“鑷子”。圖12顯示了一個始於鑷子模式的熊市趨勢。
圖 10. 熊市模式 2
圖 11. 牛市模式 2
圖 12. 熊市趨勢
最後一種模式,模式3是更為普遍的一種。它可以由幾乎任何一種K線類型開始,而後一根K線收盤價完全超越前一根。
圖13代表牛市模式,圖14代表熊市模式,圖15就是以此類模式開始的牛市。
圖 13. 牛市模式3
圖 14. 熊市模式3
圖 15. 牛市趨勢
當你看到1分鐘圖表上有上述三種模式之一時,在決定此刻入場前你還要考慮另外一個因素。
那就是入場價格和附近支撐或阻力位參考價格之間的距離。如果入場價距離參考價格太遠,就不要輕易開倉,不管價格運動模式是怎樣的。
如前所述,真正的入場點是在下一個1分鐘K線開盤之時。換句話說,2根K線形成一種價格模式,在第三根K線開倉。在開盤價時下市價單。這些會在後面MQL4代碼部分闡述。顯然,因為價格運動模式是這類交易策略的關鍵因素,因此我們總是使用市價單來入場。而不會采用掛單。
3. 識別價格行為模式的MQL4代碼至此此交易系統的原理已經得到闡述,下面介紹實現代碼。
下面的代碼塊能夠被基於價格運動和支撐/阻力水平的EA所使用。首先要定義變量。最近1分鐘K線的開盤價,最高價,最低價以及收盤價。當前和前兩個1分鐘K線的這四個價格都會用到。通過iOpen(),iHigh(),iLow()和iClose()實現。
因為要檢測完整的雙K線模式,那麼早於當前K線2分鐘的將是模式中的首根(例如,圖7左邊的K線)。在此介紹三種模式。1分鐘後形成的下一個K線將被標記為Candle2(圖7右邊的K線)。
當前K線將被標記為Candle3,在Candle2的右側。因為監控實時價格運行情況,因此EA將在當前和前兩根K線上實施運作。
- double O1=NormalizeDouble(iOpen(Symbol(),PERIOD_M1,2),4);
復制代碼上述代碼定義Candle1的開盤價。
因為這個變量不是整數,因此使用double類型。“O1”代表此模式下第一根K線的開盤價。iOpen()中使用Symbol() 作為第一個參數,因此EA能夠在任何貨幣對的圖表上運行。
"PERIOD_M1" 代表1分鐘時間框架,最後一個參數2定義相對當前K線的偏移。偏移0代表當前K線,1代表倒數第一根K線,2代表倒數第二根K線。
相應的,O1, H1, L1和C1分別代表Candle1的開,高,低和收盤價。O2, H2, L2, C2, 和 O3, H3, L3, C3分別代表Candles 2和3的相應價格。
下面的代表是這些變量定義的例子。
- //---- Candle1 OHLC
- double O1=NormalizeDouble(iOpen(Symbol(),PERIOD_M1,2),4);
- double H1=NormalizeDouble(iHigh(Symbol(),PERIOD_M1,2),4);
- double L1=NormalizeDouble(iLow(Symbol(),PERIOD_M1,2),4);
- double C1=NormalizeDouble(iClose(Symbol(),PERIOD_M1,2),4);
- //---- Candle2 OHLC
- double O2=NormalizeDouble(iOpen(Symbol(),PERIOD_M1,1),4);
- double H2=NormalizeDouble(iHigh(Symbol(),PERIOD_M1,1),4);
- double L2=NormalizeDouble(iLow(Symbol(),PERIOD_M1,1),4);
- double C2=NormalizeDouble(iClose(Symbol(),PERIOD_M1,1),4);
- //---- Candle3 OHLC
- double O3=NormalizeDouble(iOpen(Symbol(),PERIOD_M1,0),4);
- double H3=NormalizeDouble(iHigh(Symbol(),PERIOD_M1,0),4);
- double L3=NormalizeDouble(iLow(Symbol(),PERIOD_M1,0),4);
- double C3=NormalizeDouble(iClose(Symbol(),PERIOD_M1,0),4);
復制代碼判斷條件將在下面描述。條件句將定義三種主要的雙K線模式之一的產生。
例如前述和圖7顯示的模式1,將在如下判斷句為真時產生。
- if(C1 >= O1 && L1 < O1 && ((O1-L1)>(C1-O1)) && C2 >= O2 && C2 > H1 && L2 > L1)
復制代碼此模式要求六個條件同時滿足。首先, C1>=O1,意味著Candle1必須是上升K線,或者開盤價等於收盤價。L1<O1意味著Candle1的最低價必須比開盤價低。下一個條件是要Candle1的開盤和最低價之間的距離必須比收盤和開盤價之間的距離大。就是說Candle1的下影線必須比其實體長。
第四相條件和Candle2相關,要求它的收盤價大於等於它的開盤價。C2>H1意味著Candle2收盤價高於Candle1的最高價。最後,Candle2的最低價必須高於Candle1的最低價。
如果模式1產生時所有這些條件滿足,下面的代碼將下一個市價買單。
交易量為0.1手,容許滑點5pips,止損10pips,止盈50pips。
- //---- 模式 1 - 牛市
- if(C1 >= O1 && L1 < O1 && ((O1-L1)>(C1-O1)) && C2 >= O2 && C2 > H1 && L2 > L1)
- {
- OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-10*Point,Bid+50*Point);
- return;
- }
復制代碼同樣的,要做賣單,條件將轉變為熊市模式,類似圖8。同樣,OrderSend()函數的參數也將做相應調整。
這個代碼將下一個類似上述的訂單,只是方向相反。
- //---- 模式 1 - 熊市
- if(C1 <= O1 && H1 > O1 && ((H1-O1)>(O1-C1)) && C2 <= O2 && C2 < L1 && H2 < H1)
- {
- OrderSend(Symbol(),OP_SELL,0.1,Bid,5,Ask+10*Point,Ask-50*Point);
- return;
- }
復制代碼當模式2和模式3產生時,類似的代碼也將被用於下市價單。
牛市模式2(鑷型)形成條件如下:
- //---- 模式 2 - 牛市
- if(C1 < O1 && C2 > O2 && ((O1-C1)>(H1-O1)) && ((O1-C1)>(C1-L1)) && ((C2-O2)>(H2-C2)) && ((C2-O2)>(O2-L2)) && O2 <= C1 && O2 >= L1 && C2 >= O1 && C2 <= H1)
- {
- OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-10*Point,Bid+50*Point);
- return;
- }
復制代碼熊市模式2的代碼如下:
- //---- Pattern 2 - bearish
- if(C1 > O1 && C2 < O2 && ((C1-O1)>(H1-C1)) && ((C1-O1)>(O1-L1)) && ((O2-C2)>(H2-O2)) && ((O2-C2)>(C2-L2)) && O2 >= C1 && O2 <= H1 && C2 <= O1 && C2 >= L1)
- {
- OrderSend(Symbol(),OP_SELL,0.1,Bid,5,Ask+10*Point,Ask-50*Point)
- return;
- }
復制代碼最後,模式3分別有如下牛市和熊市條件:
- //---- 模式 3 - 牛市
- if(C1 > O1 && ((C2-O2)>=(H2-C2)) && C2 > O2 && C2 > C1)
- {
- OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-10*Point,Bid+50*Point);
- return;
- }
-
- //---- 模式 3 - 熊市
- if(C1 < O1 && ((O2-C2)>=(C2-L2)) && C2 < O2 && C2 < C1)
- {
- OrderSend(Symbol(),OP_SELL,0.1,Bid,5,Ask+10*Point,Ask-50*Point)
- return;
- }
復制代碼訂單的某些參數,如止損和止贏,也可以用變量代替,而不是向例子中那樣設置為精確的值。
4. 結合支撐位/阻力位和價格行為現在是時候將價格行為模式和支撐阻力位參考水平檢測代碼結合起來了。
EA將監測市場達到一個特定的價格水平。一旦達到這一水平,將檢測價格行為模式1-3。可能所有這三種模式,牛市或熊市或僅僅一種或者其中的幾個模式。下面的代碼使用兩個額外的變量來檢測市場達到某一個特定的價格,此處為EURUSD 1.09000
在這個例子中,EURUSD在1.09000之下時代碼激活進行交易。
- double ref=1.09000;
- int refhit=0;
-
- if(O2 < ref && C3 >= ref)
- {
- refhit=1;
- return;
- }
復制代碼變量ref代表被監測的參考價格水平(支撐,阻力或者中位)。另一個變量refhit,描述當前市場狀態,是否已經達到參考價格水平或者。Refhit是一個整數,值為0或1。默認值為0,它代表參考價格尚未達到。
下面的條件滿足時,市場觸碰參考水平的情況如果發生,變量將被置1。這兩個變量現在將被添加到前面描述價格行為的代碼中。
以EURUSD的例子來看,價格超過1.09000時牛市模式3將被檢測出來。
下面就是修改後的模式3代碼:
- if(refhit==1 && C1 > O1 && ((C2-O2)>=(H2-C2)) && C2 > O2 && C2 > C1 && C1 > ref && C2 > ref)
- {
- OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-10*Point,Bid+50*Point);
- return;
- }
復制代碼第一個附加條件,refhit==1,代表市場達到或者超過由ref變量設定的價格,在此為1.09000。記住在達到這個水平前,市場在1.09000之下進行交易。最後兩個新的條件是要求兩根模式3的K線的收盤價高於ref變量值1.09000。
最後,圖16顯示了EURUSD分別在短期支撐位1.07660和阻力位1.07841之間范圍內交易的情況。
圖16. EURUSD
在圖的最右側,你可以發現市場幾乎在這兩個水平中間運行。
一個做多信號在支撐位1.07660附近被檢測到。因為市場並不總是精確的達到支撐和阻力位價格,因此通常使用近似價格作為參考水平。
在這裡即為1.07690,支撐位上方3個pips。使用模式1到3來識別牛市行情。
- //----- 變量定義 ------------------
- //---- Candle1 OHLC
- double O1=NormalizeDouble(iOpen(Symbol(),PERIOD_M1,2),4);
- double H1=NormalizeDouble(iHigh(Symbol(),PERIOD_M1,2),4);
- double L1=NormalizeDouble(iLow(Symbol(),PERIOD_M1,2),4);
- double C1=NormalizeDouble(iClose(Symbol(),PERIOD_M1,2),4);
- //---- Candle2 OHLC
- double O2=NormalizeDouble(iOpen(Symbol(),PERIOD_M1,1),4);
- double H2=NormalizeDouble(iHigh(Symbol(),PERIOD_M1,1),4);
- double L2=NormalizeDouble(iLow(Symbol(),PERIOD_M1,1),4);
- double C2=NormalizeDouble(iClose(Symbol(),PERIOD_M1,1),4);
- //---- Candle3 OHLC
- double O3=NormalizeDouble(iOpen(Symbol(),PERIOD_M1,0),4);
- double H3=NormalizeDouble(iHigh(Symbol(),PERIOD_M1,0),4);
- double L3=NormalizeDouble(iLow(Symbol(),PERIOD_M1,0),4);
- double C3=NormalizeDouble(iClose(Symbol(),PERIOD_M1,0),4);
-
- double ref=1.07690;
- int refhit=0;
- //-----------------------------------------
-
- int start()
- {
- //---- 參考價格檢測
- if(O2 < ref && C3>=ref)
- {
- refhit=1;
- return;
- }
- //--- 模式 1 - 牛市
- if(refhit==1 && C1 >= O1 && L1 < O1 && ((O1-L1)>(C1-O1)) && C2 >= O2 && C2 > H1 && L2 > L1 && C1 > ref && C2 > ref)
- {
- OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-10*Point,Bid+100*Point);
- return;
- }
- //--- 模式 2 - 牛市
- if(refhit==1 && C1 < O1 && C2 > O2 && ((O1-C1)>(H1-O1)) && ((O1-C1)>(C1-L1)) && ((C2-O2)>(H2-C2)) && ((C2-O2)>(O2-L2)) && O2 <= C1 && O2 >= L1 && C2 >= O1 && C2 <= H1 && C1 > ref && C2 > ref)
- {
- OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-10*Point,Bid+100*Point);
- return;
- }
- //--- 模式 3 - 牛市
- if(refhit==1 && C1 > O1 && ((C2-O2)>=(H2-C2)) && C2 > O2 && C2 > C1 && C1 > ref && C2 > ref)
- {
- OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-10*Point,Bid+100*Point);
- return;
- }
- //---
- return;
- }
復制代碼圖 17. EURUSD 反轉
圖 18. EURUSD 入場
圖 19. EURUSD 出場
牛市模式的所有代碼模塊要求市場達到1.07690之下且K線1和2的收盤價都高於它。
同時,止贏目標在前例的基礎上翻倍。圖 17 顯示市場確實轉向下行並且直接跌破1.07690,達到1.07670後又反轉向上。這使得refhit的值變為1。
反轉向上後不久,牛市模式3形成了。這裡就是市價買單入場的位置,開倉價格在1.07740,如圖18所示。(Candle 3的開盤價賣價Bid為1.07720。允許存在5pips的滑點,訂單在1.07740成交)從這裡開始,市場啟動了一次強有力的上升趨勢,如圖19。止損價從未觸及,持倉在1.08740止盈出場。
結論從本文介紹的例子中可以看到,組合使用價格行為模式和支撐阻力水平檢測能夠極為有效的確定交易策略。
文章中所包含的和用於說明的MQL4代碼顯然只是部分,不能直接作為EA使用。這些代碼樣例是用於實現完整EA的代碼模塊。文章的主要目的是闡釋交易策略背後的原理。其他價格行為模式也可以用程序來描述,用於入場和出場。祝你的交易生涯一切順利。
外_匯_邦 WaiHuiBang.com