エキスパート: シンプルなMAエキスパートアドバイザー

 

シンプルなMAエキスパートアドバイザー:

 これは、新しいストラテジーテスタをお試しになりたくてもEAをお持ちでない方むけです。

シンプルな MAエキスパートアドバイザー

作者: Karlis Balcers

 

テスターではエラーが出る:

2010.04.28 06:27:44 Core 1 プロセス作成エラー [2].

 
1Serg:

テスターではエラーが出る:

2010.04.28 06:27:44 Core 1 プロセス作成エラー [2].

最新のビルドにアップデートし、プログラムディレクトリのルートにあるmetatester.exeファイルを確認してください。
 
Renat:
最新のビルドにアップデートし、プログラムディレクトリのルートにmetatester.exeファイルがあるか確認してください。

ありがとうございます。

オプティマイザとビジュアライゼーションがありません。

 
1Serg:

オプティマイザとビジュアライゼーションがありません。

オプティマイザーはあります - テスターウィンドウの高さを上げてください。

ビジュアライゼーションは後で。

 
Renat:

オプティマイザーはそこにあります。テスターウィンドウの高さを上げるだけです。

視覚化は後ほど。

かっこいい!

 

ありがとう、

tsaktuo様、K_eSimpleMAのコードを勉強させていただき、EAの構造やSMAクロスの扱い方などの概念を理解するのに大変役に立ちました。

この記事をシェアしていただき、本当にありがとうございました。

SymbolInfoTick 関数に関する質問です:


MQL5のマニュアルには、SymbolInfoTick(Symbol(),tick) について、指定したシンボルの現在の価格を MqlTick型の変数に返すと書いてあり、また、この関数は成功すればtrueを返し、そうでなければfalseを返すと書いてあります。

上記によると、私が理解しているのは、受信したtickがない場合、メッセージ("Failed to get Symbol info!") が出力されるということですこれは正しいのでしょうか もし正しくないのであれば、どういうことなのか教えてください。

もう一つの質問は、メッセージがティックごとに表示される場合はどう なりますか?

ありがとうございました。

 

trReq.sl=tick.ask-_Point*sl;// 注文の損切りレベル

trReq.tp=tick.ask+_Point*tp;// 注文の利益確定 レベル

が必要:

trReq.sl=tick.bid-_Point*sl;// ストップロス・レベル。

trReq.tp=tick.bid+_Point*tp;// 注文の利食いレベル

で、それに応じて売り注文に変更する。

買いは売値で行われるが、買値で決済される。

例えば、利益と損失を20ポイントに制限したい場合、買いの買値(終値)と売りの売値(終値)からちょうど20ポイントをカウントする必要があります。

 

このコードに追加して、ストップなしでMACD トレンドで取引する方法を教えてください。

ロング:MACDは速いMAが遅いMAを上から下へ横切っている。

Croy Long: MACDが高速で上昇し、低速のMAを下から上にクロスしている。

ショート:MACDが減少する速いMAが遅いMAを上から下へ横切る

ショート:MACDの減少する高速MAが、低速MAを下から上に横切る

このようにやってみた:

//+------------------------------------------------------------------+
//|MACD&DEMA.mq5
//|Copyright 2010, AM2 Group.|
//|http://am2_group.netam2_group.net
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, AM2 Group."
#property link      "http://www.am2_group.net"
#property version   "1.00"

//--- 入力パラメータ
input int Periods=2;          // 期間1移動平均
input int Shift=38;           // 期間2移動平均
input int SL=30;              // ストップ・ロス
input int TP=100;             // テイクプロフィット
input int MAGIC=3072010;      // マジック・ナンバー・カウンセラー

MqlTradeRequest trReq;
MqlTradeResult trRez;
int ma1Handle;
int ma2Handle;
int macdHandle;               // MACD インジケーター・ハンドル
double ma1Val[];
double ma2Val[];
double macdVal[]; // 日足バーのMACD数値格納用の動的配列
  
int sl;
int tp;
//+------------------------------------------------------------------+
//| エキスパート初期化関数|
//+------------------------------------------------------------------+
int OnInit()
{
   //すべての新規注文リクエストにデフォルト値を設定する。
      trReq.action=TRADE_ACTION_DEAL;
      trReq.magic=MAGIC;
      trReq.symbol=Symbol();                 // 取引シンボル
      trReq.volume=0.1;                      // ロット単位での取引要求量
      trReq.deviation=1;                     // 要求価格からの可能な最大偏差
      trReq.type_filling=ORDER_FILLING_AON;  // 注文の実行タイプ
      trReq.type_time=ORDER_TIME_GTC;        // オーダー実行時間
      trReq.comment="MA Sample";
   //終了
  
   //2つのMA指標のハンドルを作成
      ma1Handle=iMA(Symbol(),PERIOD_CURRENT,Periods,0,MODE_EMA,PRICE_CLOSE);
      ma2Handle=iMA(Symbol(),PERIOD_CURRENT,Periods+Shift,0,MODE_EMA,PRICE_CLOSE);
   //---MACDインジケーターのハンドルを取得する
      macdHandle=iMACD(NULL,PERIOD_D1,15,26,1,PRICE_CLOSE);
   //終了
  
   //入力パラメータはReadOnly
      tp=0;
      sl=0;
   //終了
  
   //小数点以下5桁の口座の場合
      if(_Digits==5)
      {
         sl*=10;
         tp*=10;
      }
   //終了
      
   return(0);
}
//+------------------------------------------------------------------+
|エキスパート初期化関数|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| エキスパート・ティック機能|
//+------------------------------------------------------------------+
void OnTick()
  {
  
   MqlTick tick; //ティック情報用の変数
   if(!SymbolInfoTick(Symbol(),tick))
   {
      Print("Failed to get Symbol info!");
      return;
   }
  
   //最新のMA指標値をバッファにコピーする
   int copied=CopyBuffer(ma1Handle,0,0,4,ma1Val);
   if(copied>0)
      copied=CopyBuffer(ma2Handle,0,0,4,ma2Val);
      copied=CopyBuffer(macdHandle,0,0,4,macdVal);
   if(copied>0)
   {
      //MAPeriod > MAPeriod + Shift -> BUYの場合
      if(ma1Val[1]>ma2Val[1] && macdVal[1]>macdVal[2])
      {
         trReq.price=tick.bid;                   // SymbolInfoDouble(NULL,SYMBOL_BID);
         trReq.sl=tick.bid-_Point*sl;            // 注文のストップロス・レベル
         trReq.tp=tick.bid+_Point*tp;            // 注文の利益確定レベル
         trReq.type=ORDER_TYPE_BUY;              // 注文タイプ
         OrderSend(trReq,trRez);
      }
      //MAPeriod < MAPeriod + Shiftの場合 → SELL
      else if(ma1Val[1]<ma2Val[1] && macdVal[1]<macdVal[2])
      {
         trReq.price=tick.ask;
         trReq.sl=tick.ask+_Point*sl;            // 注文のストップロス・レベル
         trReq.tp=tick.ask-_Point*tp;            // 注文の利益確定レベル
         trReq.type=ORDER_TYPE_SELL;             // 注文タイプ
         OrderSend(trReq,trRez);
      }
   }

  }
//+------------------------------------------------------------------+
 
Automated-Trading:

シンプルなMA EA

著者:アウトキャスト

こんにちはアウトキャスト、

私はEAの初心者です。tsaktuo氏のesimpleMAをインポートしたのですが、コードがよくわかりません。

 

MAをバッファリングしてチャートに表示させるという私の問題を解決してくれたので、あなたのコード例を見つけて嬉しかったです。 投稿してくれてありがとう。

一つ質問があるのですが、どのようにして新規注文をクローズするか決定するのでしょうか?

ありがとうございます。