4MA Candles Indicator For MT5
Ο 4MA Candles Indicator For MT5 αναλύει το ανοιχτό, το υψηλό, το κλείσιμο και το χαμηλό των κεριών για να δημιουργήσει ένα νέο σετ ιαπωνικού κηροπήγου. Όταν η τιμή τείνει πιο ψηλά, το χρώμα του κηροπήγου είναι καφέ. Αντίθετα, όταν η τιμή τείνει χαμηλότερα, το χρώμα του κηροπήγου είναι έγχρωμο πράσινο. Με βάση τον κώδικα χρώματος των κεριών, οι έμποροι μπορούν εύκολα να βρουν την κατεύθυνση της κύριας τάσης. Για να εκτελέσουν τις συναλλαγές, οι έμποροι πρέπει να βασίζονται στη μεγαλύτερη εικόνα της αγοράς. Εάν χρησιμοποιείτε την ανάγνωση αυτού του δείκτη στο χαμηλότερο χρονικό πλαίσιο, οι πιθανότητες είναι πολύ υψηλές που δεν θα είστε σε θέση να κάνετε ένα αξιοπρεπές κέρδος από αυτήν την αγορά. Προκειμένου να βελτιωθεί η διαδικασία εκτέλεσης του εμπορίου σας, πρέπει να μάθετε να αναλύετε τα σχέδια κηροπήγου όταν η τιμή χτυπά το κρίσιμο επίπεδο στήριξης και αντοχής. Βάσει των κρίσιμων επιπέδων, οι έμποροι πρέπει να επικεντρωθούν στη μακροπρόθεσμη κίνηση των τιμών, ώστε να μην έχουν να αντιμετωπίσουν τις ψευδείς αιχμές.
Εγκατάσταση του 4MA Candles Indicator For MT5
Αφού κατεβάσετε την ένδειξη μέσω της παραπάνω φόρμας, πρέπει να αποσυνδέσετε το αρχείο zip. Στη συνέχεια, πρέπει να αντιγράψετε το αρχείο 4_ma_candles.mq5 στο φάκελο MQL5Indicators της εγκατάστασης MT5 . Στη συνέχεια, κάντε επανεκκίνηση του MT5 και, στη συνέχεια, θα μπορείτε να δείτε τον δείκτη στη λίστα των δεικτών.
Παράμετροι του 4MA Candles Indicator For MT5
Το 4MA Candles Indicator For MT5 έχει παραμέτρους 2 για να ρυθμίσετε τις παραμέτρους.
input int AvgPeriod = 25; // Averages period
input enMaTypes AvgType = avgEma; // Averages method
Buffers του 4MA Candles Indicator For MT5
Το 4MA Candles Indicator For MT5 παρέχει buffers 5 .
SetIndexBuffer(0,cano ,INDICATOR_DATA);
SetIndexBuffer(1,canh ,INDICATOR_DATA);
SetIndexBuffer(2,canl ,INDICATOR_DATA);
SetIndexBuffer(3,canc ,INDICATOR_DATA);
SetIndexBuffer(4,colors,INDICATOR_COLOR_INDEX);
Κύρια μέρη του κώδικα
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 bars = Bars(_Symbol,_Period); if (bars lt rates_total) return(-1);
for (int i=(int)MathMax(prev_calculated-1,0); i lt rates_total && !IsStopped(); i++)
{
double mao = iCustomMa(AvgType,open[i] ,AvgPeriod,i,rates_total,0);
double mac = iCustomMa(AvgType,close[i],AvgPeriod,i,rates_total,1);
double mah = iCustomMa(AvgType,high[i] ,AvgPeriod,i,rates_total,2);
double mal = iCustomMa(AvgType,low[i] ,AvgPeriod,i,rates_total,3);
canh[i] = MathMax(MathMax(MathMax(mao,mac),mal),mah);
canl[i] = MathMin(MathMin(MathMin(mao,mac),mal),mah);
cano[i] = mao;
canc[i] = mac;
colors[i] = mao gt mac ? 2 : mao lt mac ? 1 : 0;
}
return(rates_total);
}
//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//
#define _maInstances 4
#define _maWorkBufferx1 1*_maInstances
#define _maWorkBufferx2 2*_maInstances
double iCustomMa(int mode, double price, double length, int r, int bars, int instanceNo=0)
{
switch (mode)
{
case avgSma : return(iSma(price,(int)length,r,bars,instanceNo));
case avgEma : return(iEma(price,length,r,bars,instanceNo));
case avgSmma : return(iSmma(price,(int)length,r,bars,instanceNo));
case avgLwma : return(iLwma(price,(int)length,r,bars,instanceNo));
default : return(price);
}
}
//
//
//
//
//
double workSma[][_maWorkBufferx2];
double iSma(double price, int period, int r, int _bars, int instanceNo=0)
{
if (period lt =1) return(price);
if (ArrayRange(workSma,0)!= _bars) ArrayResize(workSma,_bars); instanceNo *= 2; int k;
//
//
//
//
//
workSma[r][instanceNo+0] = price;
workSma[r][instanceNo+1] = price; for(k=1; k lt period && (r-k) gt =0; k++) workSma[r][instanceNo+1] += workSma[r-k][instanceNo+0];
workSma[r][instanceNo+1] /= 1.0*k;
return(workSma[r][instanceNo+1]);
}
//
//
//
//
//
double workEma[][_maWorkBufferx1];
double iEma(double price, double period, int r, int _bars, int instanceNo=0)
{
if (period lt =1) return(price);
if (ArrayRange(workEma,0)!= _bars) ArrayResize(workEma,_bars);
//
//
//
//
//
workEma[r][instanceNo] = price;
double alpha = 2.0 / (1.0+period);
if (r gt 0)
workEma[r][instanceNo] = workEma[r-1][instanceNo]+alpha*(price-workEma[r-1][instanceNo]);
return(workEma[r][instanceNo]);
}
//
//
//
//
//
double workSmma[][_maWorkBufferx1];
double iSmma(double price, double period, int r, int _bars, int instanceNo=0)
{
if (period lt =1) return(price);
if (ArrayRange(workSmma,0)!= _bars) ArrayResize(workSmma,_bars);
//
//
//
//
//
if (r lt period)
workSmma[r][instanceNo] = price;
else workSmma[r][instanceNo] = workSmma[r-1][instanceNo]+(price-workSmma[r-1][instanceNo])/period;
return(workSmma[r][instanceNo]);
}
//
//
//
//
//
double workLwma[][_maWorkBufferx1];
double iLwma(double price, double period, int r, int _bars, int instanceNo=0)
{
if (period lt =1) return(price);
if (ArrayRange(workLwma,0)!= _bars) ArrayResize(workLwma,_bars);
//
//
//
//
//
workLwma[r][instanceNo] = price;
double sumw = period;
double sum = period*price;
for(int k=1; k lt period && (r-k) gt =0; k++)
{
double weight = period-k;
sumw += weight;
sum += weight*workLwma[r-k][instanceNo];
}
return(sum/sumw);
}