私たちのファンページに参加してください
MQL5 Wizard - 足の転換によるシグナル - MetaTrader 5のためのライブラリ
- ビュー:
- 1712
- 評価:
- パブリッシュ済み:
- 2015.10.29 13:43
- アップデート済み:
- 2016.12.26 15:22
- このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動
MQL5 Wizardを使えば、クライアントターミナルにあるStandard libraryのエキスパートアドバイザーを自動生成することができます。トレードシグナルのクラスを生成しさせすれば、トレードアイディアをすぐに確認することができますこのクラスの構造とサンプルは、MQL5 Wizard: How to Create a Module of Trading Signalsを参照してください。.
一般的な考え方は下記の通りです。:CExpertSignalがシグナルのクラスです。そして、LongCondition() と ShortCondition() を上書きする必要があります。
"Strategies of best traders" (ロシア)という著書があります。 そこには数多くの手法と方法が記述されており、転換足パターンを Stochastic、 CCI、 MFI、 RSIの条件のもと、焦点を当てていきます。
最も良い方法は、ロウソク足のパターンの確認に、CExpertSignalから導かれるクラスを切り分けて生成することです。ロウソク足のパターンによるトレードシグナルの確認には、CCandlePatternのクラスを書いて、必要な条件例えば、オシレーターの確認など)を追加すれば十分です。
CCandlePattern classの場合を考えてみましょう。このクラスは、MQL5 Wizard でロウソク足によるトレードシグナルの生成をする際、単純化します。
CCandlePattern class
CCandlePattern class は、 CExpertSignal (シグナルの基本クラス)にあります。
class CCandlePattern : public CExpertSignal { protected: //--- indicators CiMA m_MA; //--- time series CiOpen m_open; CiHigh m_high; CiLow m_low; CiClose m_close; //--- input parameters int m_ma_period; public: //--- constructor CCandlePattern(); //--- method of input parameter setting void MAPeriod(int period) { m_ma_period=period; } //--- initialization methods virtual bool ValidationSettings(); virtual bool InitIndicators(CIndicators *indicators); //--- check formation of a certain candlestick pattern bool CheckCandlestickPattern(ENUM_CANDLE_PATTERNS CandlePattern); //--- check formation of bullish/bearish candlestick pattern bool CheckPatternAllBullish(); bool CheckPatternAllBearish(); protected: //--- initialization of indicators and time series bool InitMA(CIndicators *indicators); bool InitOpen(CIndicators *indicators); bool InitHigh(CIndicators *indicators); bool InitLow(CIndicators *indicators); bool InitClose(CIndicators *indicators); //--- methods, used for candlestick checking double AvgBodySize(int ind); double MA(int ind) const { return(m_MA.Main(ind)); } double Open(int ind) const { return(m_open.GetData(ind)); } double High(int ind) const { return(m_high.GetData(ind)); } double Low(int ind) const { return(m_low.GetData(ind)); } double Close(int ind) const { return(m_close.GetData(ind)); } double CloseAvg(int ind) const { return(MA(ind)); } double MidPoint(int ind) const { return(0.5*(High(ind)+Low(ind))); } double MidOpenClose(int ind) const { return(0.5*(Open(ind)+Close(ind))); } //--- methods for checking of a certain candlestick model bool CheckPatternThreeBlackCrows(); bool CheckPatternThreeWhiteSoldiers(); bool CheckPatternDarkCloudCover(); bool CheckPatternPiercingLine(); bool CheckPatternMorningDoji(); bool CheckPatternEveningDoji(); bool CheckPatternBearishEngulfing(); bool CheckPatternBullishEngulfing(); bool CheckPatternEveningStar(); bool CheckPatternMorningStar(); bool CheckPatternHammer(); bool CheckPatternHangingMan(); bool CheckPatternBearishHarami(); bool CheckPatternBullishHarami(); bool CheckPatternBearishMeetingLines(); bool CheckPatternBullishMeetingLines(); };
MQL5 Wizard で、シグナルに CCandlePattern を使う
MQL5 Wizard では、CCandlePattern class は、トレードシグナルの親クラスに使うことができます。トレードシグナルは CCandlePattern class から使う必要があります。また、エントリーと決済を確認するためのメソッドを追加する必要があります。(そのほかにも、インジケーターなど)
転換足のパターンはトレードシグナルとして使うことができますが、確認を行った方が賢明です。(例えば、オシレーターの利用など)
- bool CheckOpenLong(double &price,double &sl,double &tp,datetime &expiration) - 買いエントリーの状態確認;
- bool CheckCloseLong(double &price) - 買い決済の状態確認;
- bool CheckOpenShort(double &price,double &sl,double &tp,datetime &expiration) - 売りエントリーの状態確認;
- bool CheckCloseShort(double &price) - 売り決済の状態確認;
//+------------------------------------------------------------------+ //| CSampleCandleSignal.mqh | //+------------------------------------------------------------------+ // include CCandlePattern class // the candlepatterns.mqh must be located in the same folder #include "CandlePatterns.mqh" // wizard description start //+------------------------------------------------------------------+ //| Description of the class | //| Title=Test signal | //| Type=Signal | //| Name=CSampleCandleSignal | //| Class=CSampleCandleSignal | //| Page= | //| Parameter=param1,int,9 | .... //| Parameter=paramN,int,13 | //| Parameter=MAPeriod,int,12 | //+------------------------------------------------------------------+ // wizard description end //+------------------------------------------------------------------+ class CSampleCandleSignal : public CCandlePattern { protected: //--- indicators .... //--- input parameters ... public: //--- constructor CTestClass(); //--- methods for setting of input parameters ... //--- initialization of indicators and time series/checking of input parameters virtual bool ValidationSettings(); virtual bool InitIndicators(CIndicators *indicators); //--- checking of trade signals virtual bool CheckOpenLong(double &price,double &sl,double &tp,datetime &expiration); virtual bool CheckCloseLong(double &price); virtual bool CheckOpenShort(double &price,double &sl,double &tp,datetime &expiration); virtual bool CheckCloseShort(double &price); protected: //--- methods of indicators initialization ... //--- methods for access to indicator's values ... };
クラスの例と構造については、MQL5 Wizard: How to Create a Module of Trading Signalsを参照してください。
項目を見てください:
//| Parameter=MAPeriod,int,12 |
wizard 説明のセクション
MAPeriod methodは、 終値の平均や足の実体の平均を計算用に、CCandlePatternの親クラスで使われます。デフォルトでは、m_ma_period=12 がCCandlePattern() class にセットされています。しかし、MetaTrader 5のStrategy Testerでパラメーターでセットした方がよいです。
必ず、親クラスのValidationSettings() と InitIndicators() を呼び出してください。
各クラスメソッドでは、親クラスのメソッドCCandlePattern と ValidationSettings と CCandlePattern を呼び出す必要があります。
先に以下のメソッドを呼び出しておくと良いでしょう。:
bool CSampleCandleSignal ::ValidationSettings() { //--- call of ValidationSettings of parent CCandlePattern class if(!CCandlePattern::ValidationSettings()) return(false); //--- your code .. //--- ok return(true); }
InitIndicators() method についても同様です。:
bool CSampleCandleSignal ::InitIndicators(CIndicators *indicators) { //--- call of InitIndicators of parent CCandlePattern class if(!CCandlePattern::InitIndicators(indicators)) return(false); //--- your code ... //--- ok return(true); }
ロウソク足のパターンを確認
特定のロウソク足のパターンを確認するには、CheckCandlestickPattern(ENUM_CANDLE_PATTERNS CandlePattern) メソッドを呼び出す必要があります。
CheckPatternAllBullish() と CheckPatternAllBearish() で、ブル型/ベア型のロウソク足のパターンを同様に確認することができます。
ロウソク足のパターンを単純化には、ENUM_CANDLE_PATTERNS の一覧が使えます。:
enum ENUM_CANDLE_PATTERNS // candlestick patterns list { CANDLE_PATTERN_THREE_BLACK_CROWS = 1, CANDLE_PATTERN_THREE_WHITE_SOLDIERS = 2, CANDLE_PATTERN_DARK_CLOUD_COVER = 3, CANDLE_PATTERN_PIERCING_LINE = 4, CANDLE_PATTERN_MORNING_DOJI = 5, CANDLE_PATTERN_EVENING_DOJI = 6, CANDLE_PATTERN_BEARISH_ENGULFING = 7, CANDLE_PATTERN_BULLISH_ENGULFING = 8, CANDLE_PATTERN_EVENING_STAR = 9, CANDLE_PATTERN_MORNING_STAR = 10, CANDLE_PATTERN_HAMMER = 11, CANDLE_PATTERN_HANGING_MAN = 12, CANDLE_PATTERN_BEARISH_HARAMI = 13, CANDLE_PATTERN_BULLISH_HARAMI = 14, CANDLE_PATTERN_BEARISH_MEETING_LINES = 15, CANDLE_PATTERN_BULLISH_MEETING_LINES = 16 };
ブル型のロウソク足の確認:
///--- Check formation of "3 White Soldiers" pattern: CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) ///--- Check formation of "Piercing Line" pattern: CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) ///--- Check formation of "Morning Doji" pattern: CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI) ///--- Check formation of "Bullish Engulfing" pattern: CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) ///--- Check formation of "Bullish Haramii" pattern: CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) ///--- Check formation of "Morning Star" pattern: CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) ///--- Check formation of "Bullish Meeting Lines" pattern: CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) ///--- Check formation of "Hammer" pattern: CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) ///--- Check formation of one of the bullish candlestick patterns CheckPatternAllBullish();
ベア型のロウソク足の確認:
///--- Check formation of "3 Black Crows" pattern: CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) ///--- Check formation of "Dark Cloud Cover" pattern: CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) ///--- Check formation of "Evening Doji" pattern: CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI) ///--- Check formation of "Bearish Engulfing" pattern: CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) ///--- Check formation of "Evening Star" pattern: CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) ///--- Check formation of "Hanging Man" pattern: CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) ///--- Check formation of "Bearish Harami" pattern: CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) ///--- Check formation of "Bearish Meeting Lines" pattern: CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) ///--- Check formation of one of the bearish patterns CheckPatternAllBearish();
メソッドの使用例:
1. 買いポジション
//+------------------------------------------------------------------+ //| Checking condition of long position opening | //+------------------------------------------------------------------+ bool CSampleCandleSignal::CheckOpenLong(double &price,double &sl,double &tp,datetime &expiration) { //--- check conditions to open long position //--- it's better to use this code in addition to indicator's checking //--- for example, let's check formation of "3 white soldiers" pattern: if CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) return(true): //--- no signal return(false); }
2. 買いの決済
//-------------------------------------------------------------------+ //| Checking condition of long position closing | //+------------------------------------------------------------------+ bool CSampleCandleSignal::CheckCloseLong(double &price) { //--- check conditions to close long position //--- for example, let's check formation of one of the bearish pattern: if CheckPatternAllBearish() return(true): //--- no signal return(false); }
3. 売りポジション
//-------------------------------------------------------------------+ //| Checking condition of short position opening | //+------------------------------------------------------------------+ bool CSampleCandleSignal::CheckOpenShort(double &price,double &sl,double &tp,datetime &expiration) { //--- check conditions to open short position //--- it's better to use this code in addition to indicator's checking //--- for example, let's check formation of "3 black crows" pattern: if CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) return(true): //--- no signal return(false); }
4. 売りポジションの決済
//-------------------------------------------------------------------+ //| Checking condition of short position closing | //+------------------------------------------------------------------+ bool CSampleCandleSignal::CheckCloseShort(double &price) { //--- check conditions to close short position //--- it's better to use this code in addition to indicator's checking //--- for example, let's check formation of one of the bullish pattern: if CheckPatternAllBullish() return(true): //--- no signal return(false); }
推奨
ダマシを減らすには、足の転換パターンを他のオシレーターなどのインジケーターで確認しなければなりません。
順張りパターンは 書籍"Strategies of best traders"が参考になります。 :
- 3 Black Crows/3 White Soldiers
- Dark Cloud Cover/Piercing Line
- Morning Doji/Evening Doji
- Bearish Engulfing/Bullish Engulfing
- Evening Star/Morning Star
- Hammer/Hanging Man
- Bearish Harami/Bullish Harami
- Bearish Meeting Lines/Bullish Meeting Lines
Stochastic、 CCI、 MFI、 RSIによる確認
後に、MQL5 Wizardでのシグナルのクラスを行います。
MetaQuotes Ltdによってロシア語から翻訳されました。
元のコード: https://www.mql5.com/ru/code/291
このトレードシグナルは、ストキャスティクスをフィルターとした"3 Black Crows/3 White Soldiers"ロウソク足パターンです。この戦略のエキスパートのコードは、MQL5ウィザードで自動生成させることができます。
MQL5 Wizard - ロウソク足の転換によるシグナルロウソク足の転換によるシグナルです。この戦略のエキスパートのコードは、MQL5ウィザードで自動生成させることができます。
ChartNavigate() 関数の使用例のシンプルなスクリプト
MQL5 Wizard - 商品チャネル指数(CCI)による条件付きの3 Black Crows/3 White Soldiersのシグナル商品チャネル指数(CCI)による条件付きの"3 Black Crows/3 White Soldiers"のシグナルを試すことができます。この戦略のエキスパートのコードは、MQL5ウィザードで自動生成させることができます。