【解説】 【MQL5 community】 Awesome Oscillator (オーサム・オシレーター): 短期移動平均線(MA)と中期(長期)移動平均線(MA)との差(=AO)をヒストグラムとして、また短期移動平均線(MA)(シグナルライン)を表示し、 買われ過ぎ、売られ過ぎ、トレンドの転換を判断するための指標です。 MACDに似ている。 AOが0になる時は短期と中期の移動平均線(MA)がクロスした事を意味します。
緑:AOの値が前期よりも大きくなった時、つまり「短期移動平均>中期移動平均」を示している。
(i) 上昇トレンドにおいて、より上昇スピードが加速している場合。
(ii) 下降トレンドにおいて、下降トレンドが終わり始めている場合。
赤:AOの値が前期よりも小さくなった時、つまり「短期移動平均<中期移動平均」を示している。
(i) 上昇トレンドにおいて、上昇スピードが減速している場合。
(ii) 下降トレンドにおいて、より下降トレンドが加速しているる場合。
【シグナル】
【売り】
AOが+0.1付近で買われ過ぎとみなし、売り
【買い】
AOが-0.1付近で売られ過ぎとみなし、買い
シグナルラインとヒストグラムとの乖離を転換期と見る方法の他、ヒストグラムの色の変化を転換点と見る方法もあります。
//+------------------------------------------------------------------+ //| Awesome_Oscillator.mq5 | //| Copyright 2009, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "2009, MetaQuotes Software Corp." #property link "http://www.mql5.com" //---- indicator settings #property indicator_separate_window #property indicator_buffers 4 #property indicator_plots 1 #property indicator_type1 DRAW_COLOR_HISTOGRAM #property indicator_color1 Green,Red #property indicator_width1 1 #property indicator_label1 "AO" //--- indicator buffers double ExtAOBuffer[]; double ExtColorBuffer[]; double ExtFastBuffer[]; double ExtSlowBuffer[]; //--- handles for MAs int ExtFastSMAHandle; int ExtSlowSMAHandle; //--- bars minimum for calculation #define DATA_LIMIT 33 //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void OnInit() { //---- indicator buffers mapping SetIndexBuffer(0,ExtAOBuffer,INDICATOR_DATA); SetIndexBuffer(1,ExtColorBuffer,INDICATOR_COLOR_INDEX); SetIndexBuffer(2,ExtFastBuffer,INDICATOR_CALCULATIONS); SetIndexBuffer(3,ExtSlowBuffer,INDICATOR_CALCULATIONS); //--- set accuracy IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1); //--- sets first bar from what index will be drawn PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,33); //--- name for DataWindow IndicatorSetString(INDICATOR_SHORTNAME,"AO"); //--- get handles ExtFastSMAHandle=iMA(NULL,0,5,0,MODE_SMA,PRICE_MEDIAN); ExtSlowSMAHandle=iMA(NULL,0,34,0,MODE_SMA,PRICE_MEDIAN); //---- initialization done } //+------------------------------------------------------------------+ //| Awesome Oscillator | //+------------------------------------------------------------------+ 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 &TickVolume[], const long &Volume[], const int &Spread[]) { //--- check for rates total if(rates_total<=DATA_LIMIT) return(0);// not enough bars for calculation //--- not all data may be calculated int calculated=BarsCalculated(ExtFastSMAHandle); if(calculated<rates_total) { Print("Not all data of ExtFastSMAHandle is calculated (",calculated,"bars ). Error",GetLastError()); return(0); } calculated=BarsCalculated(ExtSlowSMAHandle); if(calculated<rates_total) { Print("Not all data of ExtSlowSMAHandle is calculated (",calculated,"bars ). Error",GetLastError()); return(0); } //--- we can copy not all data int to_copy; if(prev_calculated>rates_total || prev_calculated<0) to_copy=rates_total; else { to_copy=rates_total-prev_calculated; if(prev_calculated>0) to_copy++; } //--- get FastSMA buffer if(CopyBuffer(ExtFastSMAHandle,0,0,to_copy,ExtFastBuffer)<=0) { Print("Getting fast SMA is failed! Error",GetLastError()); return(0); } //--- get SlowSMA buffer if(CopyBuffer(ExtSlowSMAHandle,0,0,to_copy,ExtSlowBuffer)<=0) { Print("Getting slow SMA is failed! Error",GetLastError()); return(0); } //--- first calculation or number of bars was changed int i,limit; if(prev_calculated<=DATA_LIMIT) { for(i=0;i<DATA_LIMIT;i++) ExtAOBuffer[i]=0.0; limit=DATA_LIMIT; } else limit=prev_calculated-1; //--- main loop of calculations for(i=limit;i<rates_total;i++) { ExtAOBuffer[i]=ExtFastBuffer[i]-ExtSlowBuffer[i]; if(ExtAOBuffer[i]>ExtAOBuffer[i-1])ExtColorBuffer[i]=0.0; // set color Green else ExtColorBuffer[i]=1.0; // set color Red } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
【表示結果】
緑:「短期移動平均>中期移動平均」、 赤:「短期移動平均<中期移動平均」
Back to Meta Trader