Tokyo:

Meta Trader
MQL 5 community

Technical Analysis Library

Meta Traderが使える有名な証券会社:

フォレックス・ドットコムMT4
↑ まずは Meta Trader口座を開設。 今なら5650円キャッシュバック中(初回入金10万+取引)。 特徴:1000通貨取引。 スプレッド:USD/JPY:1-3 pips, EURO/JPY:2-4pips


↑ まずは Robot FX の口座を開設 (初回入金5万円以上)。
スプレッド: USD/JPY 1〜3, EUR/JPY 2〜4, EUR/USD 1〜3など



↑ CFDもアリ



↑ EA Generatorで簡単に独自のプログラムが作成可能





Finance
BLOG

お薦めBLOG:

しろふくろうFXテクニカル分析研究所

しろふくろうのメタトレーダーでFXシステムトレード

Toyolab FX - 手ぶらで為替取引

基礎から学ぶシステムトレード(豊嶋久道さん)

とあるMetaTraderの備忘秘録

『Expert adviser』は、おもしろい!

【FX】システムトレードするならMetaTraderでしょ

とあるMetaTraderの備忘秘録

FXデイトレード投資法

お薦めHP:

MT4インディケーター

MT4 インジケーターと自動売買EA

MT4インジケーター

MT4(MetaTrader4) インディケータ置き場

MetaTrader4 Indicators Collection

FX自動売買研究所

為替・FX大好き主婦の楽ちんシステムトレード(^▽^)

ZuluTrade

FX外為カフェ

MetaSys-Seeker.net

MetaTraderLibrary

【SOURCE FILE】CparabolicSAR.mq5

【解説】【MQL5 community】 Parabolic Stop and Reverse (パラボリック ストップ アンド リバース): 既存にインストールされているParabolic SARColor_Parabolic_SARを変更したもの。 トレンドが反転した時や相場の転換期を判断するために使用。

【計算法】

 SAR = (EP − 前日のSAR) × AF + 前日のSAR

EP(Extreme Point):EPとは極大値のことで、上昇相場なら一定期間の最高値を用い、その後ポジションが変わらない限り最高値が更新されればEPも更新されます。 逆に下げ相場の時は最安値を用いて、これが更新されればEPも更新されます。
AF(Acceleration Factor):AFとは加速因数のことで初期値は0.02でEPが更新される毎に0.005ずつ加算されますが、ただしAFの最大値は0.2でそれを超えることはありません。 AFの値が大きくなると、SARのシグナルが早く転換しやすくなります。

【シグナル】
ローソク足がSARを下から上へ抜けたら「買いサイン」、上から下へ抜けたら「売りサイン」。


//+------------------------------------------------------------------+
//|                                                                  |
//|                                      Copyright 2010, Rinng       |
//|                                                                  |
//+------------------------------------------------------------------+
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   1
#property indicator_type1   DRAW_COLOR_ARROW
#property indicator_color1  Blue,Purple,Indigo,Sienna,SteelBlue,Aqua,SpringGreen,Gold,Yellow,Linen,MintCream
//+------------------------------------------------------------------+
class CParabolic
  {
protected:
   double            c_SARStep;     // Step
   double            c_SARMaximum;  // Maximum
   double            c_AF;          // Acceleration factor
   double            MaxHigh;       // Max High of the period
   double            MinLow;        // Min Low  of the period
   double            Sar_P;         // Parabolic Price
   double            TmpFlag[4];    // Tmp flags buffer
   int               Flag;          // Trend flag
   int               totlSar;       // Total bars
public:
   int               GetColor() { return((int)MathCeil(c_AF/c_SARStep)-1);}
   //----------------------------------------------------------------------
   void              Init(double SARStep,double SARMaximum,const double &high[],const double &low[],int totl)
     {
      totlSar=totl;
      c_SARStep=SARStep;
      c_SARMaximum=SARMaximum;
      MaxHigh=high[0];
      MinLow=low[0];
      Sar_P =low[0];
      Flag= 1;
      c_AF=c_SARStep;
     }
   //----------------------------------------------------------------------------                     
   double           Calc(const double &high[],const double &low[],int i)
     {
      //--------------- Calculate history bars
      if(i<totlSar-1)
        {
         if(Flag==1) // 1 - bull trend
           {
            if(MaxHigh<high[i])
              {
               MaxHigh=high[i];
               c_AF+=c_SARStep;
               if(c_AF>c_SARMaximum)c_AF=c_SARMaximum;
              }
            Sar_P=Sar_P+c_AF*(MaxHigh-Sar_P);
            TmpFlag[1]=Sar_P;
           }

         if(Flag==-1) // -1  - bear trend
           {
            if(MinLow>low[i])
              {
               MinLow=low[i];
               c_AF+=c_SARStep;
               if(c_AF>c_SARMaximum)c_AF=c_SARMaximum;
              }
            Sar_P=Sar_P+c_AF*(MinLow-Sar_P);
            TmpFlag[1]=Sar_P;
           }

         if(Flag==1)
           {
            if(low[i]<Sar_P)
              {
               Flag=-1;
               c_AF=c_SARStep;
               Sar_P=MaxHigh;
               MinLow=low[i];
               MaxHigh=high[i];
              }
           }

         if(Flag==-1)
           {
            if(high[i]>Sar_P)
              {
               Flag=1;
               c_AF=c_SARStep;
               Sar_P=MinLow;
               MinLow=low[i];
               MaxHigh=high[i];
              }
           }
        }
      //---------------- Calculate current bars
      if(i>=totlSar-1)
        {
         if(Flag==1)
           {
            if(MaxHigh<high[i])
              {
               MaxHigh=high[i];
               if(TmpFlag[0]==i && TmpFlag[2]==1 && TmpFlag[3]==1)
                 {
                  c_AF+=c_SARStep;
                  if(c_AF>c_SARMaximum)c_AF=c_SARMaximum;
                  TmpFlag[2]=0;
                 }
              }
            if(TmpFlag[0]!=i)
              {
               Sar_P=TmpFlag[1]+c_AF*(MaxHigh-TmpFlag[1]);
               TmpFlag[1]=Sar_P;
               TmpFlag[0]=i;
               TmpFlag[2]=1;
               TmpFlag[3]=Flag;
              }
            if(low[i]<Sar_P)
              {
               Flag=-1;
               c_AF=c_SARStep;
               Sar_P=MaxHigh;
               TmpFlag[1]=Sar_P;
               MinLow=low[i];
               MaxHigh=high[i];
              }
           }
         if(Flag==-1)
           {
            if(MinLow>low[i])
              {
               MinLow=low[i];
               if(TmpFlag[0]==i && TmpFlag[2]==1 && TmpFlag[3]==-1)
                 {
                  c_AF+=c_SARStep;
                  if(c_AF>c_SARMaximum)c_AF=c_SARMaximum;
                  TmpFlag[2]=0;
                 }
              }
            if(TmpFlag[0]!=i)
              {
               Sar_P=TmpFlag[1]+c_AF*(MinLow-TmpFlag[1]);
               TmpFlag[1]=Sar_P;
               TmpFlag[0]=i;
               TmpFlag[2]=1;
               TmpFlag[3]=Flag;
              }

            if(high[i]>Sar_P)
              {
               Flag=1;
               c_AF=c_SARStep;
               Sar_P=MinLow;
               TmpFlag[1]=Sar_P;
               MinLow=low[i];
               MaxHigh=high[i];
              }
           }
        }
      return(Sar_P);
     }
  };
//====================================================================
//--- External parametrs
input double         InpSARStep=0.02;    // Step
input double         InpSARMaximum=0.2;  // Maximum
//---- buffers
double               ExtSARBuffer[];
double               ExtColorBuffer[];
//--- global variables
CParabolic *c_parab;
double               ExtSarStep;
double               ExtSarMaximum;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- checking input data
   if(InpSARStep<0.0)
     {
      ExtSarStep=0.02;
      Print("The input parameter InpSARStep has incorrect value. Indicator will use value",
            ExtSarStep,"for calculations.");
     }
   else ExtSarStep=InpSARStep;
   if(InpSARMaximum<0.0)
     {
      ExtSarMaximum=0.2;
      Print("The input parameter InpSARMaximum has incorrect value. Indicator will use value",
            ExtSarMaximum,"for calculations.");
     }
   else ExtSarMaximum=InpSARMaximum;
//---- indicator buffers
   SetIndexBuffer(0,ExtSARBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtColorBuffer,INDICATOR_COLOR_INDEX);
//--- set arrow symbol
   PlotIndexSetInteger(0,PLOT_ARROW,159);
//--- set indicator digits
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//--- set label name
   PlotIndexSetString(0,PLOT_LABEL,"SAR("+
                      DoubleToString(ExtSarStep,2)+","+
                      DoubleToString(ExtSarMaximum,2)+")");
//---
   c_parab=new CParabolic;
   return(0);
  }
//--------------------------------------------------------------------
void OnDeinit(const int reason)
  {
   delete(c_parab);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   int limit=prev_calculated-1;
   if(prev_calculated==0)limit=0;
   for(int i=limit;i<rates_total;i++)
     {
      if(i==0) c_parab.Init(ExtSarStep,ExtSarMaximum,high,low,rates_total);
      if(i>0)
        {
         ExtSARBuffer[i]=c_parab.Calc(high,low,i);
         ExtColorBuffer[i]=c_parab.GetColor();
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+


【表示結果】






Back to Meta Trader

Google

解説本:


【初級編】 基本的な事項からプログラムの仕方まで解説

【中級編】 独自のテクニカル分析をするためのプログラミングについての解説

【初級編】 基本的な事項から筆者のトレード手法も公開している


【初級編】 しろふくろうさんによるメタトレーダーの使い方が少し書かれている


【初級編】 基本的な事項からメタトレーダーのExpert Advisorを使って、自動売買システムの作り方が書かれている.


【初級編】 EAが4つついており、なおかつジェネレーターを使った自動売買プログラム(EA)の作り方を解説


【初級編】 FXの必勝法を説いた本。その中でメタトレーダー4の活用法も紹介


【中級編】 自動売買システムの構築に必要な、MQL言語の知識をこの1冊に集約しています。 サンプルコードも豊富に用意されており、サンプルコードで個々の機能を実際に確認しながら学習していくことができます。