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】WoodiesCCI.mq5

【解説】【MQL5 community】 WoodiesCCI: Ken Wood[作成者]のHP、 この指標の詳細は 説明書(pdf) をご確認ください。

 指標の中心にあるゼロライン(ZL)は赤色緑色とあり、 赤色の場合は、現在の価格がLSMA(25期間の最小2乗移動平均)よりも低い時、 逆に緑色の場合は、現在の価格がLSMAよりも高い時を表している。 またゼロラインに近づくとはじかれる可能性がとても高いですが、 これを抜けると、ブレイクアウトする可能性があります。

 ヒストグラムはCCIを示している。 このCCIはモメンタムインディケーターで価格とEMAの差を比較、 ゼロを挟んで250から−250の間で動きます。 ()

 赤い線・・・6期のCCI

 CCIはどの時間足のチャートでも機能しますが、 長い足のチャートの方がよりよい結果を出すとのこと。


【シグナル】

 CCIがゼロラインと交差した場合には、注意が必要で、 ロウソク足が6以上、ゼロラインの上か下にある場合には、 トレンドがあると捉え、 反対方向に行き、CCIとゼロラインが交差した場合には、トレンドが反転したとみる。

 ブレイクアウトする直前にはCCIが大きく動き、ブレイクアウトを予測します。

//+------------------------------------------------------------------+
//|                                                   WoodiesCCI.mq5 |
//|                                        Copyright Dmitry Voronkov |
//|                                                 vdv_2001@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Dmitry Voronkov"
#property link      "vdv_2001@mail.ru"
#property version   "1.00"
#property indicator_separate_window
#property indicator_maximum   300.00
#property indicator_minimum   -300.00
#property indicator_level1    50
#property indicator_level2    -50
#property indicator_level3    100
#property indicator_level4    -100
#property indicator_level5    200
#property indicator_level6    -200
#property indicator_buffers   6
#property indicator_plots     4
//#property indicator_label1    "Slow CCI HISTOGRAM"
#property indicator_type1     DRAW_COLOR_HISTOGRAM
#property indicator_color1    Silver, Gold, LightGreen, Tomato
#property indicator_width1    2
#property indicator_type2     DRAW_LINE
#property indicator_color2    Black
#property indicator_width2    1
#property indicator_type3     DRAW_LINE
#property indicator_color3    Red
#property indicator_width3    1
#property indicator_type4     DRAW_COLOR_LINE
#property indicator_color4    Green, Red
#property indicator_width4    3
input ENUM_TIMEFRAMES   InpPeriod=PERIOD_CURRENT;  // Time period
input int   InpSlowCCIPeriod=14; // Slow CCI
input int   InpFastCCIPeriod=6; // Fast CCI
input int   InpLSMAPeriod=25; // Period LSMA
input int   InpSignalBar=6;   // Bar of change of a trend
input int   InpHowLong=300;   // How many bars
//--- global variable
int        CountPeriodBar=0;
//---- indicator buffer
double   ExtSlowCCIHistogram[];
double   ExtSlowCCIHistogramColor[];
double   ExtSlowCCILine[];
double   ExtFastCCILine[];
double   ExtLSMA[];
double   ExtColorLSMA[];
//--- handles of the indicators
int      HSlowCCI;
int      HFastCCI;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtSlowCCIHistogram,INDICATOR_DATA);
   SetIndexBuffer(1,ExtSlowCCIHistogramColor,INDICATOR_COLOR_INDEX);
   SetIndexBuffer(2,ExtSlowCCILine,INDICATOR_DATA);
   SetIndexBuffer(3,ExtFastCCILine,INDICATOR_DATA);
   SetIndexBuffer(4,ExtLSMA,INDICATOR_DATA);
   SetIndexBuffer(5,ExtColorLSMA,INDICATOR_COLOR_INDEX);
   PlotIndexSetString(0,PLOT_LABEL,"Histogram ("+IntegerToString(InpSlowCCIPeriod)+") CCI");
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpSlowCCIPeriod-1);
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,InpSlowCCIPeriod-1);
   PlotIndexSetString(2,PLOT_LABEL,"Turbo("+IntegerToString(InpFastCCIPeriod)+") CCI");
   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,InpFastCCIPeriod-1);
   PlotIndexSetString(3,PLOT_LABEL,"LSMA("+IntegerToString(InpLSMAPeriod)+")");

//--- indicator name
   IndicatorSetString(INDICATOR_SHORTNAME,"WoodiesCCI "+PeriodToString(InpPeriod));
   IndicatorSetInteger(INDICATOR_DIGITS,2);
//---
   HSlowCCI=iCCI(NULL,InpPeriod,InpSlowCCIPeriod,PRICE_TYPICAL);
   HFastCCI=iCCI(NULL,InpPeriod,InpFastCCIPeriod,PRICE_TYPICAL);
   EventSetTimer(1);
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Expert Timer function                                            |
//+------------------------------------------------------------------+
void OnTimer()
  {
   long second=TimeEndOfPeriod(InpPeriod);
   IndicatorSetString(INDICATOR_SHORTNAME,"WoodiesCCI "+PeriodToString(InpPeriod)+" ["+IntegerToString(second)+" sec ]");
   ChartRedraw();
  }
//+------------------------------------------------------------------+
//| 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 start_buf,pos=0;
   int  counter_bars;
   double   Buff[],price[];
   bool  fup=false, fdn=false;
   int count=BarsCalculated(HSlowCCI);
   int count_fast=BarsCalculated(HFastCCI);
   if(count<=0 || count_fast<=0)
     {
      Print("Not all data of iCCI is calculated. Error",GetLastError());
      return(0);
     }
   if(CountPeriodBar!=count || prev_calculated!=rates_total)
     {
      CountPeriodBar=count;
      if(count>rates_total){ start_buf=count-rates_total;count=rates_total;}
      if(count==rates_total) start_buf=0;
      // Quantity of bars for the analysis
      if(InpHowLong<=0) pos=count; else pos=InpHowLong;

      if(CopyBuffer(HSlowCCI,0,start_buf,count,ExtSlowCCIHistogram)<=0)
        {
         Print("Getting of iCCI data has failed! Error",GetLastError());
         return(0);
        }
      ArrayCopy(ExtSlowCCILine,ExtSlowCCIHistogram);
      if(CopyBuffer(HFastCCI,0,start_buf,count,ExtFastCCILine)<=0)
        {
         Print("Getting of iCCI data has failed! Error",GetLastError());
         return(0);
        }
      ArrayInitialize(ExtSlowCCIHistogramColor,0);
      ArrayInitialize(ExtColorLSMA,0);
     }
   else
     {
      if(CopyBuffer(HSlowCCI,0,0,1,Buff)<=0)
        {
         Print("Getting of iCCI data has failed! Error",GetLastError());
         return(0);
        }
      ExtSlowCCIHistogram[rates_total-1]=Buff[0];
      ExtSlowCCILine[rates_total-1]=ExtSlowCCIHistogram[rates_total-1];
      if(CopyBuffer(HFastCCI,0,0,1,Buff)<=0)
        {
         Print("Getting of iCCI data has failed! Error",GetLastError());
         return(0);
        }
      ExtFastCCILine[rates_total-1]=Buff[0];
     }
   for(int i=rates_total-pos; i<rates_total; i++)
     {
      if(ExtSlowCCIHistogram[i-1]*ExtSlowCCIHistogram[i]<0)
         counter_bars=1;
      else
         counter_bars++;
      if(counter_bars==InpSignalBar-1)ExtSlowCCIHistogramColor[i]=1;
      if(counter_bars>=InpSignalBar && ExtSlowCCIHistogram[i]>0)
         ExtSlowCCIHistogramColor[i]=2;
      if(counter_bars>=InpSignalBar && ExtSlowCCIHistogram[i]<0)
         ExtSlowCCIHistogramColor[i]=3;
     }
   int close_count=CopyClose(NULL,InpPeriod,0,pos+InpLSMAPeriod,price);
   if(close_count<=0)
     {
      Print("Getting Close data has failed! Error",GetLastError());
      return(0);
     }
   for(int i=1; i<pos; i++)
     {
      double tmp=CalcLsma(close_count-i,InpLSMAPeriod,price);
      if(price[close_count-i]==tmp) ExtColorLSMA[rates_total-i]=ExtColorLSMA[rates_total-i-1];
      if(price[close_count-i]>tmp) ExtColorLSMA[rates_total-i]=0;
      if(price[close_count-i]<tmp) ExtColorLSMA[rates_total-i]=1;

     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Function will transform time period to string value              |
//+------------------------------------------------------------------+
string PeriodToString(ENUM_TIMEFRAMES period)
  {
   ENUM_TIMEFRAMES tmp;
   if(period==PERIOD_CURRENT) tmp=_Period; else tmp=period;
   switch(tmp)
     {
      case PERIOD_M1: return("M1");
      case PERIOD_M2: return("M2");
      case PERIOD_M3: return("M3");
      case PERIOD_M4: return("M4");
      case PERIOD_M5: return("M5");
      case PERIOD_M6: return("M6");
      case PERIOD_M10: return("M10");
      case PERIOD_M12: return("M12");
      case PERIOD_M15: return("M15");
      case PERIOD_M20: return("M20");
      case PERIOD_M30: return("M30");
      case PERIOD_H1: return("H1");
      case PERIOD_H2: return("H2");
      case PERIOD_H3: return("H3");
      case PERIOD_H4: return("H4");
      case PERIOD_H6: return("H6");
      case PERIOD_H8: return("H8");
      case PERIOD_H12: return("H12");
      case PERIOD_D1: return("Daily");
      case PERIOD_W1: return("Weekly");
      case PERIOD_MN1: return("Monthly");
     }
   return(NULL);
  };
//+-------------------------------------------------------------------+
//| The function returnes time remaining for the close of a period    |
//+-------------------------------------------------------------------+
datetime TimeEndOfPeriod(ENUM_TIMEFRAMES _TimePeriod)
  {
   datetime tmpDateTime;
   int tmp;
   MqlDateTime last_time;
   TimeToStruct(TimeTradeServer(),last_time);
   last_time.sec=0;
   if(_TimePeriod<=PERIOD_H1)
     {
      tmp=(PeriodSeconds(_TimePeriod)/PeriodSeconds(PERIOD_M1));
      tmp=last_time.min/tmp;
      last_time.min=(tmp+1)*PeriodSeconds(_TimePeriod)/PeriodSeconds(PERIOD_M1);
     }
   else
   if(_TimePeriod>PERIOD_H1 && Period()<=PERIOD_D1)
     {
      tmp=(PeriodSeconds(_TimePeriod)/PeriodSeconds(PERIOD_H1));
      tmp=last_time.hour/tmp;
      last_time.hour=(tmp+1)*PeriodSeconds(_TimePeriod)/PeriodSeconds(PERIOD_H1);
      last_time.min=0;
     }
   tmpDateTime=StructToTime(last_time);
   tmpDateTime=tmpDateTime-TimeTradeServer();
   return(tmpDateTime);
  }
//+------------------------------------------------------------------+
//| Calculation of LSMA                                              |
//+------------------------------------------------------------------+
double CalcLsma(const int index,int period,const double &price[])
  {
   double sum=0;
   for(int i=1;i<=period;i++)
     {
      double tmp=i-(period+1)/3.0;
      sum+=(tmp*price[index-period+i])*6;
     }
   return(sum/(period*(period+1)));
  }
//+------------------------------------------------------------------+


【表示結果】






Back to Meta Trader

Google

解説本:


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

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



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

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


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


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


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


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