親愛なる著者へ
サポートされているすべてのMAの完全なリストを確認するにはどうすればよいですか?
ありがとうございます!
説明を見てください。
ありがとう。
それによると
- 1 -> EMA
- 2 -> DEMA
- 3 -> TEMA
- ....
- 10 -> DecEMA
- ....
- 50 -> このインジケーターが算出する最大深度
ありがとう。
こう書いてある:
- 1 -> EMA
- 2 -> DEMA
- 3 -> TEMA
- ....
- 10 -> DecEMA
- ....
- 50 -> このインジケーターが計算する最大深度
三角MAはEMAの子孫ではありません。
三角MAは全く異なるタイプの計算です。
三角マサチューセッツ工科大学はEMAの子孫ではありません。
三角MAは全く異なるタイプの計算です。
OK :)
深度4から50までのEMAの子孫は何ですか?(深度10を除く)
著者がなぜ質問を無視するのか理解できない。おそらく、より明確な説明を書かなければならないのだろう。
DEMAはDouble EMA、TEMAはTriple EMA、名前はタプルの命名に基づいて いるので、4番目のEMAはQuadruple EMA、5番目はPenta EMA、6番目はHexa EMAというようになります。
価格」オプションに、「最高値と最安値の範囲」の終値を参照するオプションを追加します。ただし、以下の警告が表示されますので、よろしくお願いいたします!
//------------------------------------------------------------------
#property copyright "© mladen, 2016, MetaQuotes Software Corp."
#property link"www.forex-tsd.com, www.mql5.com"
//------------------------------------------------------------------
#プロパティ indicator_separate_window
//#プロパティ indicator_buffers 6
#プロパティ indicator_buffers 9
#プロパティ indicator_plots 3
#プロパティ indicator_label1 "OSMA充填"
#プロパティ indicator_type1 DRAW_FILLING
#プロパティ indicator_colour1 clrLightBlue,clrPeachPuff
#プロパティ indicator_label2 "MACD"
#プロパティ indicator_type2 DRAW_COLOR_LINE
#property indicator_colour2 clrSilver,clrDodgerBlue,clrSandyBrown
#プロパティ indicator_style2 STYLE_SOLID
#プロパティ indicator_width2 3
#property indicator_label3 "MACDシグナル"
#プロパティ indicator_type3 DRAW_LINE
#プロパティ indicator_colour3 clrSalmon
#プロパティ indicator_style3 STYLE_DOT
//
//
clrSalmon #property_indicator_colour3 // // // インジケータの色を指定します。
//
//enPrices
enum enPrices
{
pr_close, // クローズ
pr_open, // オープン
pr_high, // 高値
pr_low, // 安値
pr_median, // 中央値
pr_typical, // 標準
pr_weighted, // 加重
pr_average, // 平均 (high+low+open+close)/4
pr_medianb, // 平均中央値 (オープン+クローズ)/2
pr_tbiased, // トレンドバイアス価格
pr_tbiased2, // トレンドに偏った(極端な)価格
pr_haclose, // ヒーケンアシークローズ
pr_haopen , // ヘイケン・アシ・オープン
pr_hahigh, // ヒーケンアシの高値
pr_halow, // ヒーケンアシの安値
pr_hamedian, // ヒーケンアシ中央値
pr_hatypical, // ヒーケンアシの典型値
pr_haweighted, // ヒーケンアシの加重平均
pr_haaverage, // ヒーケンアシの平均値
pr_hamedianb, // Heiken ashiの中央値
pr_hatbiased, // Heiken ashiのトレンドバイアス価格
pr_hatbiased2, // ヒーケンashiトレンドバイアス(極端)価格
pr_zoneclose, // レンジの高値と安値の終値の参照 ((pr_close-pr_lowest)/(pr_highest-pr_lowest)*100)
pr_zonehigh, // 区間の最高値 (iHighest(NULL,0,MODE_HIGH,9,0))
pr_zonelow, // 区間の最低点 (iLowest(NULL,0,MODE_LOW,9,0)).
};
input ENUM_TIMEFRAMES TimeFrame = PERIOD_CURRENT; // タイムフレーム
input int MacdFast = 12; // 高速期間高速期間
input int MacdSlow = 26; // 低速期間遅い期間
input int MacdSignal = 9; // シグナル期間// シグナル期間
input enPrices NemaPrice = pr_close; // 価格
input int NemaDepth = 1; & // NEMAの深さnbsp;// NEMAの深さ
input bool AlertsOn = false; // アラートをオンにするか?
input bool AlertsOnCurrent = true; // 現在のバーでアラートするか?
input bool AlertsMessage = true; // アラート時にメッセージを表示するか?メッセージを表示するか?
input bool AlertsSound = false; // アラート時にサウンドを再生するか?input bool AlertsSound = false; // アラート時に音を鳴らすか?
input bool AlertsEmail = false; // アラート時にメールを送信するか?input bool AlertsEmail = false; // アラート時にメールを送信するか?
input bool AlertsNotify = false; // アラート時にプッシュ通知を送信するか?アラート時にサウンドを再生するか?
input bool Interpolate = true; // インターポレートするか?mtfデータ ?
// 入力 bool AlertsNotify = false; // アラート時にプッシュ通知を送信 ?
// 入力 bool Interpolate = true; // mtfデータを補間するか?
// // mtfデータをデータソースとして使用する。
// //
// // // // // // // // // // // // // // // // // //
double macd[],macdc[],signal[],fillu[],filld[],count[];
int _mtfHandle = INVALID_HANDLE; ENUM_TIMEFRAMES timeFrame.
#define _mtfCall iCustom(_Symbol,timeFrame,getIndicatorName(),PERIOD_CURRENT,MacdFast,MacdSlow,MacdSignal,NemaPrice,NemaDepth.AlertsOn,AlertsOnCurrent,AlertsMessage,AlertsSound,AlertsEmail,AlertsNotify)
double zonelow[],zonehigh[],zoneclose[];
int zonelow_handle; //--- カスタマイズされた「インターバル安値」ハンドラ
int zonehigh_handle; //--- カスタマイズされた「インターバル高値」ハンドラ
int zoneclose_handle; //--- カスタマイズされた「インターバル終値」ハンドラ
//------------------------------------------------------------------
//--- カスタマイズされた "インターバル終値 "ハンドラ //
//------------------------------------------------------------------
//
//
//
//
//
int OnInit()
{
SetIndexBuffer(0,fillu ,INDICATOR_DATA);
SetIndexBuffer(1,filld ,INDICATOR_DATA);
SetIndexBuffer(1,filld ,INDICATOR_DATA); SetIndexBuffer(2,macd ,INDICATOR_DATA).
SetIndexBuffer(2,macdc ,INDICATOR_DATA); SetIndexBuffer(3,macdc ,INDICATOR_COLOR_INDEX);
SetIndexBuffer(3,macdc ,INDICATOR_COLOR_INDEX); SetIndexBuffer(4,signal ,INDICATOR_DATA);
SetIndexBuffer(4,signal ,INDICATOR_DATA); SetIndexBuffer(5,count ,INDICATOR_CALCULATIONS).
SetIndexBuffer(5,count ,INDICATOR_CALCULATIONS); SetIndexBuffer(6,zonelow ,INDICATOR_DATA);
SetIndexBuffer(6,zonelow,INDICATOR_DATA); SetIndexBuffer(7,zonehigh,INDICATOR_DATA);
SetIndexBuffer(7,zonehigh,INDICATOR_DATA); SetIndexBuffer(8,zoneclose,INDICATOR_DATA); timeFrame = MathMax
timeFrame = MathMax(_Period,TimeFrame);
IndicatorSetString(INDICATOR_SHORTNAME,timeFrameToString(timeFrame)+" nema macd ("+(string)MacdFast+ ", "+(string)MacdSlow+", "+(string)MacdSignal+", "+(string)NemaDepth+")");");
zonelow_handle = iLow(NULL,0,iLowest(NULL,0,MODE_LOW,9,0));
zonehigh_handle = iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,9,0)); zoneclose_handle = iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,9,0))
zoneclose_handle = ((pr_close-zonelow_handle)/(zonehigh_handle-zonelow_handle))*100;
return(0);
}
//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//
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
const long& tick_volume[]、
const long& volume[]、
const int& spread[])
{
//---インジケータのカスタム "レンジ "値をインジケータバッファにコピーします。
int COPY_RATES_LOW=CopyBuffer(zonelow_handle,0,0,rates_total,zonelow); int COPY_RATES_LOW=CopyBuffer(zonelow_handle,0,0,rates_total,zonelow)
int COPY_RATES_HIGH=CopyBuffer(zonehigh_handle,0,0,rates_total,zonehigh); int COPY_RATES_HIGH=CopyBuffer(zonehigh_handle,0,0,rates_total,zonehigh);
int COPY_RATES_CLOSE=CopyBuffer(zoneclose_handle,0,0,rates_total,zoneclose);
if (Bars(_Symbol,_Period)<rates_total) return(-1);
//
//
//
//
//
if (timeFrame!=_Period)
{
double result[]; datetime currTime[],nextTime[];
if (!timeFrameCheck(timeFrame,time)) return(0);
if (_mtfHandle==INVALID_HANDLE) _mtfHandle = _mtfCall;
if (_mtfHandle==INVALID_HANDLE) return(0);
if (CopyBuffer(_mtfHandle,5,0,1,result)==-1) return(0);
//
//
//
return(0); // // //.
//
#define _mtfRatio PeriodSeconds(timeFrame)/PeriodSeconds(_Period)
int i,k,n,limit = MathMin(MathMax(prev_calculated-1,0),MathMax(rates_total-(int)result[0]*_mtfRatio-1,0));
for (i=limit; i<rates_total && !_StopFlag; i++ )
{
#define _mtfCopy(_buff,_buffNo) if (CopyBuffer(_mtfHandle,_buffNo,time[i],1、result)==-1) break; _buff[i] = result[0].
_mtfCopy(fillu ,0); filld[i] = 0;
mtfCopy(macd ,2).
mtfCopy(macdc ,3).
mtfCopy(signal ,4).
mtfCopy(signal,4); _mtfCopy(zonelow,5).
mtfCopy(zonelhigh,6)。
mtfCopy(zoneclose,7)。
//
//
_mtfCopy(zoneclose,7); // //.
//
//
if (!Interpolate) continue; CopyTime(_Symbol、timeFrame,time[i ],1,currTime).
if (i<(rates_total-1)) { CopyTime(_Symbol,timeFrame,time[i+1],1,currTime).Symbol,timeFrame,time[i+1],1,nextTime); if (currTime[0]==nextTime[0]) continue; }.
for(n=1; (i-n)> 0 && time[i-n] >= currTime[0]; n++) continue;
for(k=1; (i-k)>=0 && k<n; k++)
{
#define _mtfInterpolate(_buff) _buff[i-k] = _buff[i]+(_buff[i-n]-_buff[i])*k/n
mtfInterpolate(fillu ).
mtfInterpolate(macd ).
mtfInterpolate(signal).
mtfInterpolate(signal); _mtfInterpolate(zoneclose).
mtfInterpolate(zonehigh); _mtfInterpolate(signal); _mtfInterpolate(zoneclose); _mtfInterpolate(zonehigh).
mtfInterpolate(zoneclose);_mtfInterpolate(zonehigh);_mtfInterpolate(zoneelow);
}  ;
}
return(i);
}
//
//
//
//
//
int i=(int)MathMax(prev_calculated-1,0); for (; i<rates_total && !_StopFlag; i++)
{
double price = getPrice(NemaPrice,open,close,high,low,i,rates_total);
macd[i] = iNema(price,MacdFast,NemaDepth,i,rates_total,0)-iNema(price,MacdSlow,NemaDepth,i,rates_total,1);
signal[i] = iNema(macd[i],MacdSignal ,NemaDepth,i,rates_total,2);
macdc[i] = (macd[i]>signal[i]) ? 1 : (macd[i]<signal[i]) ? 2 : (i>0) ? macdc[i-1] : 0;
fillu[i] = macd[i]-signal[i];
filld[i] = 0;
}
count[rates_total-1] = MathMax(rates_total-prev_calculated+1,1);
manageAlerts(time,macdc,rates_total); return(rates_total); }.
return(rates_total);
}
//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//
#define _nemaInstances 3
#define _nemaInstancesSize 51
#define _nemcInstancesSize 51
#定義 _nema 50
double _workNema[][_nemaInstances*_nemaInstancesSize].
double _workNemc[][ _nemcInstancesSize].
double iNema(double value, double period, int depth, int i, int bars, int instanceNo=0).
{
depth = MathMax(MathMin(depth,_nemcInstancesSize-1),1);
int cInstance = instanceNo; instanceNo *= _nemaInstancesSize;
if (ArrayRange(_workNema,0) != bars) ArrayResize(_workNema,bars); if (ArrayRange(_workNema,0) !
if (ArrayRange(_workNemc,0) < cInstance+1) { ArrayResize(_workNemc,cInstance+1); _workNemc[cInstance][0]=-1; }
if (_workNemc[cInstance][0] != depth)
{_workNemc[cInstance][0] = depth; for(int k=1; k<=depth; k++) _workNemc[cInstance][k] =factorial(depth)/(factorial(depth-k)*factorial(k)); }.
//
//
//
//
//
workNema[i][instanceNo+_nema] = value;
if (period>1)
{
double alpha = 2.0/(1.0+period), sign=1; _workNema[i][instanceNo+_nema] = 0;
for (int k=0; k<深さ; k++, sign *= -1)
{
_workNema[i][instanceNo+k ] = (i>0) ? workNema[i-1][instanceNo+k]+α*(value-_workNema[i-1][instanceNo+k]) : value; value = _workNema[i][instanceNo+k];
_workNema[i][instanceNo+_nema] += value*sign*_workNemc[cInstance][k+1];
}
}
return(_workNema[i][instanceNo+_nema]);
}
double factorial(int n) { double a=1; for(int i=1; i<=n; i++) a*=i; return(a); } //------------------------------------------------------------------ { double a=1; for(int i=1; i<=n; i++)
//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//
//
#define priceInstances 1
double zoneLow = iLow(NULL,0,iLowest(NULL,0,MODE_LOW,9,0)); double zoneHigh = iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,9,0)); double zoneHigh = iHigh(NULL,0,MODE_HIGH,9,0)).
double zoneHigh = iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,9,0)); &.ゾーンクローズ
double zoneClose = ((pr_close-zoneLow)/(zoneHigh-zoneLow))*100;
double workHa[][priceInstances*4]; double getPrice(int t_close-zoneLow)/(zoneHigh-zoneLow)*100;
double getPrice(int tprice, const double& open[], const double& close[], const double& high[], const double& low[], int i,int _barsint instanceNo=0)
{
if (tprice>=pr_haclose)
{
if (ArrayRange(workHa,0)!= _bars) ArrayResize(workHa,_bars); instanceNo*=4;
//
//
//
//
//
double haOpen; if (i>0)
if (i>0)
haOpen = (workHa[i-1][instanceNo+2] + workHa[i-1][instanceNo+3])/2.0;
else haOpen = (open[i]+close[i])/2;
double haClose = (open[i] + high[i] + low[i] + close[i]) / 4.0;
double haHigh = MathMax(high[i], MathMax(haOpen,haClose));
double haLow = MathMin(low[i] , MathMin(haOpen,haClose)); double haLow = MathMin(low[i] , MathMin(haOpen,haClose))
if(haOpen < haClose) { workHa[i][instanceNo+0] = haLow; workHa[i][instanceNo+1] = haHigh; }&.nbsp; else { workHa[i][instanceNo+1] = haHigh; }.
else { workHa[i][instanceNo+0] = haHigh; workHa[i][?instanceNo+1] = haLow; }
workHa[i][instanceNo+2] = haOpen;
workHa[i][instanceNo+3] = haClose;
//
//
//
// //
//
スイッチ (tprice)
{
case pr_haclose: return(haClose);
case pr_haclose: return(haClose); case pr_haopen: return(haOpen); case pr_hahigh: return(haHigh); case pr_haclose: return(haHigh); return(haHigh)
case pr_hahigh: return(haHigh); case pr_halow: return(haLow); return(haHigh)
case pr_halow: return(haLow); case pr_hamedian: return(haHigh); case pr_halow: return(haLow)
case pr_hamedian: return((haHigh+haLow)/2.0);
case pr_hamedianb: return((haOpen+haClose)/2.0);
case pr_hatypical: return((haHigh+haLow+haClose)/3.0);
case pr_haweighted: return((haHigh+haLow+haClose+haClose)/4.0);
case pr_haaverage: return((haHigh+haLow+haClose+haOpen)/4.0);
ケース pr_hatbiased.
if (haClose>haOpen)
return((haHigh+haClose)/2.0); case pr_hatbiased: if (haClose>haOpen)
else return((haLow+haClose)/2.0);
case pr_hatbiased2.
if (haClose>haOpen) return(haHigh); case_hatbiased2.
if (haClose<haOpen) return(haLow); return(haClose)
return(haLow); return(haClose).
case pr_zoneclose: return(zoneClose); case pr_zonehigh: return(zoneClose); if (haClose<haOpen) return(haLow); return(haClose).
case pr_zonehigh: return(zoneHigh); case pr_zonelow: return(zoneHigh); return(zoneHigh)
case pr_zonelow: return(zoneLow); case pr_zonelow: return(zoneLow)
}
}
//
//
//
//
//
switch (tprice)
case pr_close: return(close[i]); }.
case pr_close: return(close[i]); case pr_open: return(open[i]); } } } // switch (tprice)
case pr_open: return(open[i]); case pr_high: return(high[i]); // switch (tprice) { case pr_close: return(close[i]); return(open[i])
case pr_high: return(高値[i]); case pr_low: return(安値[i]); case pr[i])
case pr_low: return(low[i]); case pr_median: return(low[i])
case pr_median: return((high[i]+low[i])/2.0); case pr_medianb: return(high[i]+low[i])/2.0)
case pr_medianb: return((open[i]+close[i])/2.0);
case pr_typical: return((high[i]+low[i]+close[i])/3.0);
case pr_weighted: return((high[i]+low[i]+close[i]+close[i])/4.0);
case pr_average: return((high[i]+low[i]+close[i]+open[i])/4.0);
ケース pr_tbiased.
if (close[i]>open[i])
return((high[i]+close[i])/2.0); case pr_tbiased.
else return((low[i]+close[i])/2.0); case pr_tbiased2: if (low[i]+close[i])/2.0).
case pr_tbiased2.
if (close[i]>open[i]) return(high[i]); case pr_tbiased2.
if (close[i]<open[i]) return(low[i]);
return(low[i]); return(close[i])return(close[i]);return(close[i]);return(close[i])
case pr_zoneclose: return(zoneclose[i]); return(low[i]); return(close[i]); return(close[i])
case pr_zonhigh: return(zonehigh[i]); case pr_zonelow: return(zonehigh[i]); return(zonehigh[i])
case pr_zonelow: return(zonelow[i]);
}
return(0); }.
}
//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//
void manageAlerts(const datetime& atime[], double& atrend[], int bars)
{
if (!AlertsOn) return; return; int whichBar = bars-1; if (!AlertsOnCurrent)
int whichBar = bars-1; if (!AlertsOnCurrent) whichBar = bars-2; datetime time1 = atime[whichBar].
if (atrend[whichBar] != atrend[whichBar-1]).
{
if (atrend[whichBar] == 1) doAlert(time1, "up"); if (atrend[whichBar] == 1)
if (atrend[whichBar] == 2) doAlert(time1, "down");
}
}
//
//
//
//
//
void doAlert(datetime forTime, string doWhat)
{
static string previousAlert="nothing"; static datetime previousTime; static datetime forTime, string doWhat { static datetime previousTime
static datetime previousTime; static string previousAlert="nothing"; static datetime previousTime
static string previousAlert="nothing"; static datetime previousTime; string message.
if (previousAlert != doWhat || previousTime != forTime)
previousAlert = doWhat; message; if (previousAlert !
previousAlert = doWhat; previousTime = forTime; forTime
previousTime = forTime.
//
//
//
previousAlert = doWhat; previousTime = forTime; // // // 前の時刻。
//
メッセージ = timeFrameToString(_Period)+" "+_Symbol+" at "+TimeToString(TimeLocal(),TIME_SECONDS)+" nema macd state changedに変更;
if (AlertsMessage) アラート(メッセージ);
if (AlertsEmail) SendMail(_Symbol+" nema macd",メッセージ); if (AlertsNotify)
if (AlertsNotify) SendNotification(message); if (AlertsSound)
if (AlertsSound) PlaySound("alert2.wav");
}
}
//-------------------------------------------------------------------
//
//-------------------------------------------------------------------
//
//
//
//
//
文字列 getIndicatorName()
{
string path = MQL5InfoString(MQL5_PROGRAM_PATH); string data = TerminalInfoString(TERMINAL_DATA_PATH)+"゙Indicator
string data = TerminalInfoString(TERMINAL_DATA_PATH)+"゙MQL5゙Indicators゙";
string name = StringSubstr(path,StringLen(data));
return(name);
}
//
//
//
//
//
int _tfsPer[]={PERIOD_M1,PERIOD_M2,PERIOD_M3,PERIOD_M4,PERIOD_M5,PERIOD_M6,PERIOD_M10,PERIOD_M12,PERIOD_M15,PERIOD_M20、PERIOD_M30,PERIOD_H1,PERIOD_H2,PERIOD_H3,PERIOD_H4,PERIOD_H6,PERIOD_H8,PERIOD_H12,PERIOD_D1,PERIOD_W1,PERIOD_MN1}; string _tfsStr[]_tfsStr[]_tfsString
string _tfsStr[]={"1分", "2分", "3分", "4分", "5分", "6分", "10分", "12分", "15分", "20分"、「30分"、"1時間"、"2時間"、"3時間"、"4時間"、"6時間"、"8時間"、"12時間"、"毎日"、"毎週"、"毎月"}; }。
string timeFrameToString(int period)
{
if (period==PERIOD_CURRENT)
period = _Period.
int i; for(i=0;i<ArraySize(_tfsPer);i++) if (period==_tfsPer[i]) break;
return(_tfsStr[i]);
}
//
//
//
//
//
bool timeFrameCheck(ENUM_TIMEFRAMES _timeFrame,const datetime& time[])
{
static bool warned=false;
if (time[0]<SeriesInfoInteger(_Symbol,_timeFrame,SERIES_FIRSTDATE))
{
datetime startTime,testTime[];
if (SeriesInfoInteger(_Symbol,PERIOD_M1,SERIES_TERMINAL_FIRSTDATE,startTime))
if (startTime>0) { CopyTime(SeriesInfoInteger(_Symbol,_timeFrame,SERIES_FIRSTDATE,startTime); }.
if (startTime<=0 || startTime>time[0]) { Comment(MQL5InfoString(MQL5_PROGRAM_NAME)+"データがありません。for "+timeFrameToString(_timeFrame)+" time framenRe-trying on next tick"); warned=true; return(false); }.
}
if (warned) { Comment(""); warned=false; }.
return(true);}。
}
======================================================================================================================================================================
説明
double'から'int'への型変換によるデータ損失の可能性 Nema_MACD.mq5 109 21
0 エラー、2 警告、212 ミリ秒経過 1 3
==================================================================================
95 int OnInit()
96 {
109 zonelow_handle = iLow(NULL,0,iLowest(NULL,0,MODE_LOW,9,0));
110 zonelhigh_handle = iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,9,0));
111 zoneclose_handle = ((pr_close-zonelow_handle)/(zonehigh_handle-zonelow_handle))*100;
価格ゾーンクローズ
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
Nema MACD:
NEMAを使って計算されたMACDです。
作者: Mladen Rakic