とても分かりやすい。
著者失礼。逆張りなし、ロット選択可能なEA。
ロット選択可能なEA→LongShortExpertMACD.mq 5の変更:
//+------------------------------------------------------------------+ //|LongShortExpertMACD.mq5 //| Copyright 2009-2013, MetaQuotes Software Corp. //| https://login.mql5.com/en/users/jlwarrior //+------------------------------------------------------------------+ #property copyright "2009-2013, MetaQuotes Software Corp - 2013, jlwarrior" #property link "https://login.mql5.com/en/users/jlwarrior" #property version "1.00" //+------------------------------------------------------------------+ | インクルード| //+------------------------------------------------------------------+ #include <Expert\LongShortExpertModified.mqh> #include <Expert\Signal\SignalMACD.mqh> #include <Expert\Trailing\TrailingNone.mqh> #include <Expert\Money\MoneyFixedLot.mqh> //+------------------------------------------------------------------+ //| 入力| //+------------------------------------------------------------------+ //--- 専門家のための入力 input string Inp_Expert_Title ="Long/Short ExpertMACD"; int Expert_MagicNumber =10981; bool Expert_EveryTick =false; input ENUM_AVAILABLE_POSITIONS Inp_Allowed_Positions=BOTH_POSITION; //ショート/ロング/両ポジション可 //--- デフォルトのMACDExpert入力 input int Inp_Signal_MACD_PeriodFast =12; // 高速MACD期間 input int Inp_Signal_MACD_PeriodSlow =24; // スローMACDの期間 input int Inp_Signal_MACD_PeriodSignal=9; // シグナルMACDの期間 input double Inp_Money_Lot =0.5; // ロット値 input int Inp_Signal_MACD_TakeProfit =50; // テイクプロフィット値 input int Inp_Signal_MACD_StopLoss =20; // ストップ・ロス値 //+------------------------------------------------------------------+ //| グローバルエキスパートオブジェクト| //+------------------------------------------------------------------+ CLongShortExpertModified ExtExpert; //特殊なデザインのCExpertサブクラス //+------------------------------------------------------------------+ //| エキスパート初期化関数| //+------------------------------------------------------------------+ int OnInit(void) { //--- エキスパートの初期化 if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber)) { //--- 失敗 printf(__FUNCTION__+": error initializing expert"); ExtExpert.Deinit(); return(-1); } // どのポジションを許可するかを制御する特定のパラメータ ExtExpert.SetAvailablePositions(Inp_Allowed_Positions); //--- シグナル・オブジェクトの作成 CSignalMACD *signal=new CSignalMACD; if(signal==NULL) { //--- 失敗 printf(__FUNCTION__+": error creating signal"); ExtExpert.Deinit(); return(-2); } //--- エキスパートにシグナルを追加する(自動的に削除される))。 if(!ExtExpert.InitSignal(signal)) { //--- 失敗 printf(__FUNCTION__+": error initializing signal"); ExtExpert.Deinit(); return(-3); } //--- シグナル・パラメーターを設定する signal.PeriodFast(Inp_Signal_MACD_PeriodFast); signal.PeriodSlow(Inp_Signal_MACD_PeriodSlow); signal.PeriodSignal(Inp_Signal_MACD_PeriodSignal); signal.TakeLevel(Inp_Signal_MACD_TakeProfit); signal.StopLevel(Inp_Signal_MACD_StopLoss); //--- シグナル・パラメーターのチェック if(!signal.ValidationSettings()) { //--- 失敗 printf(__FUNCTION__+": error signal parameters"); ExtExpert.Deinit(); return(-4); } //--- 後続オブジェクトの作成 CTrailingNone *trailing=new CTrailingNone; if(trailing==NULL) { //--- 失敗 printf(__FUNCTION__+": error creating trailing"); ExtExpert.Deinit(); return(-5); } //--- エキスパートに末尾を追加する(自動的に削除される))。 if(!ExtExpert.InitTrailing(trailing)) { //--- 失敗 printf(__FUNCTION__+": error initializing trailing"); ExtExpert.Deinit(); return(-6); } //--- 後続パラメータを設定する //--- 末尾のパラメータをチェックする if(!trailing.ValidationSettings()) { //--- 失敗 printf(__FUNCTION__+": error trailing parameters"); ExtExpert.Deinit(); return(-7); } //--- 貨幣オブジェクトの作成 CMoneyFixedLot *money=new CMoneyFixedLot; if(money==NULL) { //--- 失敗 printf(__FUNCTION__+": error creating money"); ExtExpert.Deinit(); return(-8); } //--- エキスパートに資金を追加する(自動的に削除される))。 if(!ExtExpert.InitMoney(money)) { //--- 失敗 printf(__FUNCTION__+": error initializing money"); ExtExpert.Deinit(); return(-9); } //--- お金のパラメータを設定する money.Lots(Inp_Money_Lot); //--- マネー・パラメーターをチェックする if(!money.ValidationSettings()) { //--- 失敗 printf(__FUNCTION__+": error money parameters"); ExtExpert.Deinit(); return(-10); } //--- 必要なすべての指標を調整する if(!ExtExpert.InitIndicators()) { //--- 失敗 printf(__FUNCTION__+": error initializing indicators"); ExtExpert.Deinit(); return(-11); } //--- 成功 return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ |エキスパートの初期化関数| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ExtExpert.Deinit(); } //+------------------------------------------------------------------+ //| 関数イベント・ハンドラ "tick"| //+------------------------------------------------------------------+ void OnTick(void) { ExtExpert.OnTick(); } //+------------------------------------------------------------------+ //| 機能-イベント・ハンドラ "trade"| //+------------------------------------------------------------------+ void OnTrade(void) { ExtExpert.OnTrade(); } //+------------------------------------------------------------------+ //| 関数イベントハンドラ "timer"| //+------------------------------------------------------------------+ void OnTimer(void) { ExtExpert.OnTimer(); } //+------------------------------------------------------------------+
逆張りなしのEA→LongShortExpertModified.mqhの 変更:
//+------------------------------------------------------------------+ //|LongShortExpertModified.mqh //|著作権 2013, jlwarrior||日本語 //| https://login.mql5.com/en/users/jlwarrior //+------------------------------------------------------------------+ #include <Expert\Expert.mqh> //+------------------------------------------------------------------+ //| ロング/ショート、または両方のポジションを制御するための列挙。 ||オープン可能| //+------------------------------------------------------------------+ //--- enum ENUM_AVAILABLE_POSITIONS { LONG_POSITION, SHORT_POSITION, BOTH_POSITION }; //+------------------------------------------------------------------+ //| クラス CLongShortExpertModified.| //| 目的:ロング/ショート/両方のポジションをオープンできるようにする。 //| Derives from class CExpert (modifies only Open / Reverse methods)| //+------------------------------------------------------------------+ class CLongShortExpertModified : public CExpert { protected: ENUM_AVAILABLE_POSITIONS m_positions; public: CLongShortExpertModified(void); ~CLongShortExpertModified(void); virtual bool CheckOpen(void); void SetAvailablePositions(ENUM_AVAILABLE_POSITIONS newValue){m_positions=newValue;}; }; //+------------------------------------------------------------------+ //| コンストラクタ| //+------------------------------------------------------------------+ CLongShortExpertModified ::CLongShortExpertModified(void) : m_positions(BOTH_POSITION) { } //+------------------------------------------------------------------+ //| デストラクタ| //+------------------------------------------------------------------+ CLongShortExpertModified ::~CLongShortExpertModified(void) { } //+------------------------------------------------------------------+ | 許可されたポジションのオープンをチェック| //+------------------------------------------------------------------+ bool CLongShortExpertModified :: CheckOpen() { switch(m_positions) { case LONG_POSITION: return CheckOpenLong(); // 新規のロング・ポジションのみをチェックする case SHORT_POSITION: return CheckOpenShort(); //新規のショート・ポジションのみをチェックする default: return CExpert::CheckOpen(); //デフォルトの動作 } } //+------------------------------------------------------------------+
ロング×ショートの銘柄コードを入力する欄はどこですか?
取引の機会を逃しています。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
CExpertに基づいた売買のみのEA:
CExpertサブクラスは売買注文のみを出すことを可能にし、MACDの例を持ってその使用法を示します。
作者: Jose