Kuasai rahasia analisa teknikal yang akurat dengan bimbingan langsung.
Strategi trading yang siap profit!
Data MQL5 Indicator Mt5
๐ฎ๐ฉ MACD T-Forse
MQL5
//+------------------------------------------------------------------+ //| Radar Fx.mq5 | //| Musafir Eng / Gemini 2026 - ALERT SYNC | //+------------------------------------------------------------------+ #property copyright "Musafir Eng / Gemini" #property indicator_chart_window #property indicator_buffers 2 #property indicator_plots 1 #property indicator_label1 "MA_Trend" #property indicator_type1 DRAW_COLOR_LINE #property indicator_color1 clrBlue,clrRed #property indicator_width1 2 //--- INPUTS input group "=== Visual Settings ===" input bool ShowChartArrows=true; input bool ShowMA20Arrow=true; input int ArrowOffset=250; input int ArrowSize=1; input group "=== Sound Files ===" input string SoundNormal="alert.wav"; input string SoundOrange="expert.wav"; input string SoundGreen ="news.wav"; input group "=== Notification Switches ===" input bool EnableAlert1 = true; input bool EnableAlert2 = true; input bool EnableAlert3 = true; input bool EnableAlert4 = true; input bool EnableAlert5 = true; input group "=== Technical Parameters ===" input int InpMAPeriod=20; input int MA_Shift=0; input ENUM_MA_METHOD InpMAMethod=MODE_LWMA; input ENUM_APPLIED_PRICE MA_Price=PRICE_WEIGHTED; input int FastEMA=12; input int SlowEMA=26; input int SignalSMA=1; input int AdxPeriod=14; enum ENUM_POS {LEFT_SIDE,RIGHT_SIDE}; input ENUM_POS HorizontalPos=RIGHT_SIDE; enum ENUM_MODE_SIMPLE {MODE_M5,MODE_M5FX,MODE_M15,MODE_H1,MODE_H4,MODE_DAILY,MODE_FX}; input ENUM_MODE_SIMPLE TradeMode=MODE_M5; //--- GLOBALS double MABuffer[],ColorBuffer[]; string DashPrefix="T_FORCE_"; string ArrowPrefix="FXARR_LAST"; int hMACD[3],hADX[3],hMA[3]; ENUM_TIMEFRAMES currentTF[3]; bool flashClock=false, showADX=true; //+------------------------------------------------------------------+ int OnInit(){ SetIndexBuffer(0,MABuffer,INDICATOR_DATA); SetIndexBuffer(1,ColorBuffer,INDICATOR_COLOR_INDEX); ArraySetAsSeries(MABuffer, true); ArraySetAsSeries(ColorBuffer, true); ObjectsDeleteAll(0,DashPrefix); ObjectDelete(0,ArrowPrefix); if(TradeMode==MODE_M5){currentTF[0]=PERIOD_M5;currentTF[1]=PERIOD_H1;currentTF[2]=PERIOD_H4;} else if(TradeMode==MODE_M5FX){currentTF[0]=PERIOD_M5;currentTF[1]=PERIOD_M15;currentTF[2]=PERIOD_H1;} else if(TradeMode==MODE_M15){currentTF[0]=PERIOD_M15;currentTF[1]=PERIOD_H1;currentTF[2]=PERIOD_H4;} else if(TradeMode==MODE_H1){currentTF[0]=PERIOD_H1;currentTF[1]=PERIOD_H4;currentTF[2]=PERIOD_D1;} else if(TradeMode==MODE_H4){currentTF[0]=PERIOD_H4;currentTF[1]=PERIOD_D1;currentTF[2]=PERIOD_W1;} else if(TradeMode==MODE_FX){currentTF[0]=PERIOD_M5;currentTF[1]=PERIOD_M15;currentTF[2]=PERIOD_H1;} else{currentTF[0]=PERIOD_D1;currentTF[1]=PERIOD_W1;currentTF[2]=PERIOD_MN1;} for(int i=0;i<3;i++){ hMACD[i]=iMACD(_Symbol,currentTF[i],FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE); hADX[i]=iADX(_Symbol,currentTF[i],AdxPeriod); hMA[i]=iMA(_Symbol,currentTF[i],InpMAPeriod,MA_Shift,InpMAMethod,MA_Price);} EventSetTimer(1); return(INIT_SUCCEEDED);} //+------------------------------------------------------------------+ void OnDeinit(const int reason){ ObjectsDeleteAll(0,DashPrefix); ObjectDelete(0,ArrowPrefix); EventKillTimer();} //+------------------------------------------------------------------+ void OnTimer(){ flashClock=!flashClock; UpdateDashboard(); ChartRedraw();} //+------------------------------------------------------------------+ 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 copied=CopyBuffer(hMA[0],0,0,rates_total,MABuffer); if(copied<=0) return(0); ArraySetAsSeries(close, true); for(int i=0; i<copied-1; i++){ if(close[i] > MABuffer[i]) ColorBuffer[i]=0; // Blue else if(close[i] < MABuffer[i]) ColorBuffer[i]=1; // Red else ColorBuffer[i] = (i < copied-1) ? ColorBuffer[i+1] : 0;} UpdateDashboard(); return(rates_total);} //+------------------------------------------------------------------+ void UpdateDashboard(){ int mS[3]; bool mU[3], isStr[3]; bool maUp[3], maDn[3]; double adxVal[3]; for(int i=0;i<3;i++){ double mb[2], maV[2], ab[1]; if(CopyBuffer(hMACD[i],0,0,2,mb)==2){ mU[i]=(mb[1]>mb[0]); if(mb[1]>0) mS[i]=(mU[i]?2:1); else mS[i]=(!mU[i]?-2:-1); isStr[i]=(MathAbs(mS[i])==2);} if(CopyBuffer(hADX[i],0,0,1,ab)==1) adxVal[i] = ab[0]; if(CopyBuffer(hMA[i],0,0,2,maV)==2){ maUp[i] = (maV[1] > maV[0]); maDn[i] = (maV[1] < maV[0]);}} // --- ARROW LOGIC & NOTIFICATION SYNC --- if(ShowMA20Arrow){ int code = maUp[0] ? 233 : (maDn[0] ? 234 : 0); color aCol = maUp[0] ? clrBlue : (maDn[0] ? clrRed : clrWhite); string sFile = SoundNormal; string pwrStatus = "Pwr Aqua"; // Default Power if(code != 0){ // 1. Logic Power Color if((maUp[0] && maUp[1] && maUp[2]) || (maDn[0] && maDn[1] && maDn[2])){ aCol = clrGreen; sFile = SoundGreen; pwrStatus = "Pwr Green"; } else if((maUp[0] && maUp[1]) || (maDn[0] && maDn[1])){ aCol = clrOrange; sFile = SoundOrange; pwrStatus = "Pwr Orange"; } // 2. Logic Strong ADX if(adxVal[0] > 40.0) pwrStatus = "Strong Height"; else if(adxVal[0] < 20.0) pwrStatus = "Strong Low"; static datetime lastArrowTime = 0; datetime currentTime = iTime(_Symbol, PERIOD_CURRENT, 0); if(currentTime != lastArrowTime){ PlaySound(sFile); lastArrowTime = currentTime; // Format Notifikasi sesuai instruksi Abang string direction = maUp[0] ? "Turn Up" : "Turn Down"; string sTime = TimeToString(TimeCurrent(), TIME_MINUTES); if(EnableAlert1) { Alert(sTime, " ", _Symbol, " ", pwrStatus, " ", direction);} } DrawMaArrows(maUp[0], aCol, code); } else { ObjectDelete(0, ArrowPrefix); }} color borderCol = clrGray; if(adxVal[0] < 25.0 || adxVal[1] < 25.0) borderCol = clrOrange; else if(mU[0] == mU[1]) borderCol = isStr[1] ? clrBlue : clrGreen; color bgCol = clrWhite; if(mU[1] == mU[2]) bgCol = (isStr[1] && isStr[2]) ? C'150,190,255' : C'150,255,150'; RenderDisplay(mS,mU,borderCol,bgCol); if(showADX) UpdateADXHorizontal(adxVal);} //+------------------------------------------------------------------+ void DrawMaArrows(bool isUp, color arrowCol, int arrowCode){ if(ObjectFind(0,ArrowPrefix)<0) { ObjectCreate(0,ArrowPrefix,OBJ_ARROW,0,0,0); ObjectSetInteger(0,ArrowPrefix,OBJPROP_SELECTABLE,false); ObjectSetInteger(0,ArrowPrefix,OBJPROP_BACK,false);} datetime t0 = iTime(_Symbol,PERIOD_CURRENT,0); double p0 = isUp ? iLow(_Symbol,PERIOD_CURRENT,0)-(ArrowOffset*_Point) : iHigh(_Symbol,PERIOD_CURRENT,0)+(ArrowOffset*_Point); ObjectSetInteger(0,ArrowPrefix,OBJPROP_TIME,t0); ObjectSetDouble(0,ArrowPrefix,OBJPROP_PRICE,p0); ObjectSetInteger(0,ArrowPrefix,OBJPROP_ARROWCODE,arrowCode); ObjectSetInteger(0,ArrowPrefix,OBJPROP_COLOR,arrowCol); ObjectSetInteger(0,ArrowPrefix,OBJPROP_WIDTH,ArrowSize); ObjectSetInteger(0,ArrowPrefix,OBJPROP_ANCHOR,(isUp ? ANCHOR_TOP : ANCHOR_BOTTOM));} //+------------------------------------------------------------------+ void UpdateADXHorizontal(double &adxV[]){ int sY=25, sX=(HorizontalPos==LEFT_SIDE)?50:80; if(HorizontalPos==RIGHT_SIDE) sX-=2; else sX+=2; ENUM_BASE_CORNER cr = (HorizontalPos==LEFT_SIDE?CORNER_LEFT_LOWER:CORNER_RIGHT_LOWER); for(int i=0;i<3;i++){ color col; if(adxV[i] < 25.0) col = (flashClock ? clrOrange : clrWhite); else if(adxV[i] <= 40.0) col = clrBlue; else col = clrRed; ForceLabel(DashPrefix+"ADX_H_"+(string)i,"★",sX+((HorizontalPos==LEFT_SIDE?1:-1)*i*15),sY,col,10,"Arial",cr,50);}} //+------------------------------------------------------------------+ void RenderDisplay(int &mS[],bool &mU[],color borderCol,color bgCol){ int CenterX=137,CenterY=140,boxDim=70,CX_Arr=67,CY_Arr=74; if(HorizontalPos==RIGHT_SIDE){CenterX-=2;CX_Arr-=2;}else{CenterX+=2;CX_Arr+=2;} ENUM_BASE_CORNER cr=(HorizontalPos==LEFT_SIDE?CORNER_LEFT_LOWER:CORNER_RIGHT_LOWER); string bgN=DashPrefix+"BG_RECT"; if(ObjectFind(0,bgN)<0){ ObjectCreate(0,bgN,OBJ_RECTANGLE_LABEL,0,0,0); ObjectSetInteger(0,bgN,OBJPROP_CORNER,cr); ObjectSetInteger(0,bgN,OBJPROP_SELECTABLE,false); ObjectSetInteger(0,bgN,OBJPROP_BACK,true);} ObjectSetInteger(0,bgN,OBJPROP_XDISTANCE,CenterX-(boxDim/2)); ObjectSetInteger(0,bgN,OBJPROP_YDISTANCE,CenterY-(boxDim/2)); ObjectSetInteger(0,bgN,OBJPROP_XSIZE,boxDim); ObjectSetInteger(0,bgN,OBJPROP_YSIZE,boxDim); ObjectSetInteger(0,bgN,OBJPROP_BGCOLOR,bgCol); ObjectSetInteger(0,bgN,OBJPROP_BORDER_TYPE,BORDER_FLAT); ObjectSetInteger(0,bgN,OBJPROP_COLOR,borderCol); ObjectSetInteger(0,bgN,OBJPROP_WIDTH,4); color c2=(MathAbs(mS[1])==2)?(mU[1]?clrBlue:clrRed):clrOrange; color c1=(MathAbs(mS[0])==2)?(mU[0]?clrBlue:clrRed):clrOrange; if(c1==c2)c1=clrWhite; ForceLabel(DashPrefix+"A_TF1",(mU[1]?"▲":"▼"),CX_Arr,CY_Arr,c2,35,"Arial Black",cr,10); ForceLabel(DashPrefix+"A_TF0",(mU[0]?"▲":"▼"),CX_Arr,CY_Arr-3,c1,12,"Arial Black",cr,20);} //+------------------------------------------------------------------+ void ForceLabel(string n,string t,int x,int y,color c,int s,string f,ENUM_BASE_CORNER cr,int z){ if(ObjectFind(0,n)<0){ ObjectCreate(0,n,OBJ_LABEL,0,0,0); ObjectSetInteger(0,n,OBJPROP_ANCHOR,ANCHOR_CENTER); } ObjectSetInteger(0,n,OBJPROP_CORNER,cr); ObjectSetString(0,n,OBJPROP_TEXT,t); ObjectSetInteger(0,n,OBJPROP_XDISTANCE,x); ObjectSetInteger(0,n,OBJPROP_YDISTANCE,y); ObjectSetInteger(0,n,OBJPROP_COLOR,c); ObjectSetInteger(0,n,OBJPROP_FONTSIZE,s); ObjectSetString(0,n,OBJPROP_FONT,f); ObjectSetInteger(0,n,OBJPROP_ZORDER,z);}
Radar Fx
Data
- Indikator: MACD
Parameter 12 26 1, menggunakan signal histogram mainline warna panah dasboar sama dengan warna histogram
MACD Strong Blue/Red,
MACD Weak Orange - indikator Adx
Visual Bintang segi lima
warna Adx<25 orange berkedip, Adx <25 Blue,40 Red
Jika Adx TF1 <25 maka garis border berubah warnanya menjadi orange
Jika Adx TF2 <25 maka garis border berubah warnanya menjadi orange - Indikator Trend garis Ma20
Garis Ma20 warna Blue/Red, Linier Weighted dengan satu panah
jika panah baru muncul panah lama hilang
Panah arrow 233/234 Blue/Red
Jika Ma20 TF2 dan Ma20 TF1 searah maka panah Ma20 TF1 berubah menjadi orange.
Jika Ma20 TF3, Ma20 TF2 dan Ma20 TF1 searah maka panah Ma20 TF1 berubah menjadi Green
- Alert 1
MACD TF1, MACD TF2, Satu arah maka bunyi alert satu kali dan dan kotak border berubah warnanya menjadi Greendan jika tidak singkron lagi alert bunyi satu kali - Alert 2
MACD TF1 MACD Strong TF2, Satu arah maka bunyi alert satu kali dan dan kotak border berubah warnanya menjadi Blue dan jika tidak singkron lagi alert bunyi satu kali - Alert 3
MACD TF1 dan MACD TF2 tidak searah maka kotak border berubah warnanya menjadi orange - Alert 4
MACD TF2 dan MACD TF3 searah maka Backrground kotak border berubah menjadi Greentipis - Alert 5
MACD TF2 dan MACD TF3 strong, searah maka Backrground kotak border berubah menjadi Bluetipis - Alert 6
Jika panah Ma20 TF1 dan Panah Ma20 TF2 searah maka warna orange dan bunyi satu kali
Parameter Input: on/off
TPair Pwr Gree
Pair Pwr Aqua
Pair Pwr Orange
Pair Storong low
Pair Storong height
Info di jendela Notifikasi
Time Pair Pwr Gree Turn up/down
Time Pair Pwr AquaTurn up/down
Time Pair Pwr Orange Turn up/down
Time Pair Storong Low Turn up/down
Time Pair Storong height Turn up/down
Timeframe mode
M5=TF1 M5, TF2 H1, TF3 H4
fx= M5, TF1 M5, TF2 M15, TF3 H1
M15=TF1 M15, TF2 H1, TF3 H4
H1=TF1 H1, TF2 H4, TF3 Dayli
H4=TF1 H4, TF2 Dayli, TF3 Weekly
Dayli= TF1 Dayli, TF2 Weekly, TF3 Mountly
Statistic
MQL5
//+------------------------------------------------------------------+
//| Statistik.mq5 |
//| Clean Monitoring Only (No Buttons) | by Nona ๐ค |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_plots 0
//================ PENGATURAN POSISI (SESUAI GAMBAR) =================
input group "=== POSISI DASHBOARD ===";
input int X_Offset = 20; // Jarak dari kiri/kanan
input int Y_Offset = 20; // Jarak dari atas/bawah
input ENUM_BASE_CORNER Corner = CORNER_LEFT_LOWER;
input int FontSize = 8;
//================ GLOBAL ==================
string PREFIX = "NONA_STATS_";
int OnInit() {
EventSetTimer(1);
ObjectsDeleteAll(0, PREFIX);
return INIT_SUCCEEDED;}
void OnDeinit(const int reason) {
ObjectsDeleteAll(0, PREFIX);
EventKillTimer();}
int OnCalculate(const int r,const int p,const datetime &t[],const double &o[],const double &h[],const double &l[],const double &c[],const long &v[],const long &v2[],const int &s[]) {
return r; }
void OnTimer() {
UpdateData();
ChartRedraw();}
void UpdateData() {
double totalProfit = 0, totalVolume = 0, totalPips = 0;
int totalOrders = 0;
for(int i=PositionsTotal()-1; i>=0; i--) {
ulong ticket = PositionGetTicket(i);
if(ticket > 0 && PositionGetString(POSITION_SYMBOL) == _Symbol) {
totalOrders++;
totalProfit += PositionGetDouble(POSITION_PROFIT) + PositionGetDouble(POSITION_SWAP) + PositionGetDouble(POSITION_COMMISSION);
totalVolume += PositionGetDouble(POSITION_VOLUME);
double pOpen = PositionGetDouble(POSITION_PRICE_OPEN);
double pCur = PositionGetDouble(POSITION_PRICE_CURRENT);
if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)
totalPips += (pCur - pOpen) / _Point / 10;
else
totalPips += (pOpen - pCur) / _Point / 10;}}
int spread = (int)SymbolInfoInteger(_Symbol, SYMBOL_SPREAD);
datetime cStart = (datetime)SeriesInfoInteger(_Symbol, _Period, SERIES_LASTBAR_DATE);
int seconds = PeriodSeconds(_Period);
long rem = (long)(cStart + seconds) - (long)TimeCurrent();
if(rem < 0) rem = 0;
string timeStr = StringFormat("%02u:%02u", (int)(rem/60), (int)(rem%60));
color mainCol = clrBlack;
if(totalOrders > 0) mainCol = (totalProfit >= 0) ? clrBlue : clrRed;
// Format tampilan: $ Profit | Lot L | Pips p | Spread | Time
string displayText = StringFormat("$%s | %sL | %sp | %d | %s |",
DoubleToString(totalProfit, 2),
DoubleToString(totalVolume, 2),
DoubleToString(totalPips, 1),
spread,
timeStr);
DrawLabel(PREFIX+"MAIN", displayText, X_Offset, Y_Offset, mainCol);}
void DrawLabel(string n, string t, int x, int y, color c) {
if(ObjectFind(0,n)<0) ObjectCreate(0,n,OBJ_LABEL,0,0,0);
ObjectSetInteger(0,n,OBJPROP_CORNER,Corner);
ObjectSetInteger(0,n,OBJPROP_XDISTANCE,x);
ObjectSetInteger(0,n,OBJPROP_YDISTANCE,y);
ObjectSetInteger(0,n,OBJPROP_COLOR,c);
ObjectSetInteger(0,n,OBJPROP_FONTSIZE,FontSize);
ObjectSetString(0,n,OBJPROP_TEXT,t);
ObjectSetInteger(0,n,OBJPROP_ANCHOR, (Corner==CORNER_LEFT_LOWER || Corner==CORNER_LEFT_UPPER) ? ANCHOR_LEFT : ANCHOR_RIGHT);}
Monitoring Fx
MQL5
//+------------------------------------------------------------------+ //| MonitoringV7.9_Silver_Flash | //| Musafir Eng / Gemini | 2026 | //+------------------------------------------------------------------+ #property copyright "Musafir Eng / Gemini" #property indicator_chart_window #property indicator_buffers 2 #property indicator_plots 1 #property indicator_label1 "MA20 Dynamic" #property indicator_type1 DRAW_COLOR_LINE #property indicator_color1 clrBlue, clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 1 enum ENUM_MODE_SIMPLE {MODE_FX, MODE_M5, MODE_M15, MODE_H1, MODE_H4, MODE_DAILY}; //--- 1. ON/OFF WARNING ON PARAMETER INPUT --- input group "--- ON/OFF WARNING ON PARAMETER INPUT ---" input bool Detktor_Orange = true; // Sideways detector input bool Power_Green = true; // Pwr Green input bool Power_Blue = true; // Pwr Blue input bool Strong_Low = true; // Strong Low input bool Strong_Strong_Height = true; // Strong Height input group "--- CUSTOM TEXT (POJOK KIRI ATAS) ---" input bool Tampilkan_Pesan = true; input string Pesan_Baris_1 = "Arah tren MACD TF2 = Stoch TF2"; input string Pesan_Baris_2 = "Entry MACD TF1 = Ma20 TF1"; input int Posisi_X = 15; input int Posisi_Y = 100; input int Ukuran_Font = 12; input int Spasi_Antar_Baris = 25; input color Warna_Teks = clrBlack; input group "--- ARROW & VISUAL CONTROLS ---" input bool ShowMA20Arrow = true; input int ArrowOffset = 250; input int ArrowSize = 1; input group "--- INDICATOR SETTINGS ---" input int InpMAPeriod = 20; input ENUM_MA_METHOD InpMAMethod = MODE_LWMA; input int FastEMA=12, SlowEMA=26, SignalSMA=1; input int StochK=5, StochD=1, StochS=3; input int AdxPeriod=14; input int AdxSize=15; input ENUM_MODE_SIMPLE TradeMode=MODE_M5; //--- GLOBAL VARIABLES --- string DashPrefix = "FXT_"; string ArrowPrefix = "FXARR_LAST"; int hMACD[], hStoch[], hAdx[], hMA_TF[3], hMA20; double BufferMA20[], BufferMAColor[]; ENUM_TIMEFRAMES currentTF[]; bool flashClock = false; static int lastAlertState = 0; //+------------------------------------------------------------------+ int OnInit() { SetIndexBuffer(0, BufferMA20, INDICATOR_DATA); SetIndexBuffer(1, BufferMAColor, INDICATOR_COLOR_INDEX); ArraySetAsSeries(BufferMA20, true); ArraySetAsSeries(BufferMAColor, true); ObjectsDeleteAll(0, DashPrefix); ObjectDelete(0, ArrowPrefix); if(TradeMode == MODE_FX) { ArrayResize(currentTF, 8); currentTF[0]=PERIOD_M5; currentTF[1]=PERIOD_M15; currentTF[2]=PERIOD_H1; currentTF[3]=PERIOD_H4; currentTF[4]=PERIOD_H12; currentTF[5]=PERIOD_D1; currentTF[6]=PERIOD_W1; currentTF[7]=PERIOD_MN1; } else { ArrayResize(currentTF, 3); if(TradeMode==MODE_M5) {currentTF[0]=PERIOD_M5; currentTF[1]=PERIOD_H1; currentTF[2]=PERIOD_H4;} else if(TradeMode==MODE_M15){currentTF[0]=PERIOD_M15; currentTF[1]=PERIOD_H1; currentTF[2]=PERIOD_H4;} else if(TradeMode==MODE_H1) {currentTF[0]=PERIOD_H1; currentTF[1]=PERIOD_H4; currentTF[2]=PERIOD_D1;} else if(TradeMode==MODE_H4) {currentTF[0]=PERIOD_H4; currentTF[1]=PERIOD_D1; currentTF[2]=PERIOD_W1;} else {currentTF[0]=PERIOD_D1; currentTF[1]=PERIOD_W1; currentTF[2]=PERIOD_MN1;}} hMA20 = iMA(_Symbol, _Period, InpMAPeriod, 0, InpMAMethod, PRICE_CLOSE); for(int i=0; i<3; i++) { ENUM_TIMEFRAMES targetTF = (i < ArraySize(currentTF)) ? currentTF[i] : _Period; hMA_TF[i] = iMA(_Symbol, targetTF, InpMAPeriod, 0, InpMAMethod, PRICE_CLOSE);} int count = ArraySize(currentTF); ArrayResize(hMACD, count); ArrayResize(hStoch, count); ArrayResize(hAdx, count); for(int i=0; i<count; i++) { hMACD[i] = iMACD(_Symbol, currentTF[i], FastEMA, SlowEMA, SignalSMA, PRICE_CLOSE); hStoch[i] = iStochastic(_Symbol, currentTF[i], StochK, StochD, StochS, MODE_SMA, STO_LOWHIGH); hAdx[i] = iADX(_Symbol, currentTF[i], AdxPeriod); } EventSetTimer(1); return(INIT_SUCCEEDED);} void OnDeinit(const int reason) { ObjectsDeleteAll(0, DashPrefix); ObjectDelete(0, ArrowPrefix); EventKillTimer(); } 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[]) { if(rates_total < 100) return(0); if(CopyBuffer(hMA20, 0, 0, rates_total, BufferMA20) < rates_total) return(0); ArraySetAsSeries(BufferMA20, true); double cl[]; CopyClose(_Symbol, _Period, 0, rates_total, cl); ArraySetAsSeries(cl, true); for(int i=0; i<rates_total-1; i++) BufferMAColor[i] = (cl[i] > BufferMA20[i]) ? 0.0 : 1.0; UpdateDashboard(); return(rates_total);} void UpdateDashboard() { int count = ArraySize(currentTF); bool isUpM[], isUpS[], maU[3], maD[3]; double adxRaw[]; color adCol[]; int trendState[]; ArrayResize(isUpM, count); ArrayResize(isUpS, count); ArrayResize(adxRaw, count); ArrayResize(adCol, count); ArrayResize(trendState, count); for(int i=0; i<count; i++) { double mb[2], sb[2], ax[1], mv[2]; if(CopyBuffer(hMACD[i], 0, 0, 2, mb) == 2) { isUpM[i] = (mb[1] > mb[0]); if(mb[1] > 0) trendState[i] = (mb[1] > mb[0]) ? 2 : 1; else trendState[i] = (mb[1] < mb[0]) ? -2 : -1;} if(CopyBuffer(hStoch[i], 0, 0, 2, sb) == 2) isUpS[i] = (sb[1] > sb[0]); if(CopyBuffer(hAdx[i], 0, 0, 1, ax) == 1) { adxRaw[i] = ax[0]; if(ax[0] < 25) adCol[i] = (flashClock) ? clrOrange : clrWhite; else adCol[i] = (ax[0] < 40) ? clrBlue : clrRed; } if(i<3 && CopyBuffer(hMA_TF[i], 0, 0, 2, mv) == 2) { maU[i] = (mv[1] > mv[0]); maD[i] = (mv[1] < mv[0]); }} color bCol = clrGray; int currentType = 0; string alertText = ""; string pair = _Symbol; string timeStr = TimeToString(TimeCurrent(), TIME_SECONDS); string dir = isUpM[0] ? " (Up)" : " (Down)"; // --- PRIORITAS ADX BORDER --- if(adxRaw[0] < 25 || (count > 1 && adxRaw[1] < 25)) bCol = clrOrange; // --- ALERT LOGIC DENGAN FORMAT FIXED --- if(isUpM[0] != isUpM[1]) { bCol = clrOrange; currentType = 1; alertText = timeStr + " : " + pair + " : Pwr Detector Orange"; } else if(isUpM[0] == isUpM[1] && isUpM[1] == isUpS[1] && MathAbs(trendState[1]) != 2) { bCol = clrGreen; currentType = 2; alertText = timeStr + " : " + pair + " : Pwr Green: Turn" + dir;} else if(isUpM[0] == isUpM[1] && isUpM[1] == isUpS[1] && MathAbs(trendState[1]) == 2) { bCol = clrBlue; currentType = 3; alertText = timeStr + " : " + pair + " : Pwr Blue: Turn" + dir;} else if(adxRaw[0] < 25) { bCol = clrOrange; currentType = 4; alertText = timeStr + " : " + pair + " : Strong Low: Turn" + dir; } else if(adxRaw[0] > 40) { bCol = clrRed; currentType = 5; alertText = timeStr + " : " + pair + " : Strong Height: Turn" + dir;} if((currentType == 1 || currentType == 4) && !flashClock) bCol = clrSilver; if(currentType != lastAlertState && currentType != 0) { bool canShow = false; if(currentType == 1 && Detktor_Orange) canShow = true; if(currentType == 2 && Power_Green) canShow = true; if(currentType == 3 && Power_Blue) canShow = true; if(currentType == 4 && Strong_Low) canShow = true; if(currentType == 5 && Strong_Strong_Height) canShow = true; if(canShow) { Alert(alertText); PlaySound("alert.wav"); } lastAlertState = currentType;} color bgCol = clrWhite; if(isUpM[1] == isUpM[2]) { if(isUpM[1] == isUpS[2]) bgCol = C'150,190,255'; else bgCol = C'150,255,150'; } if(ShowMA20Arrow) { int code = maU[0] ? 233 : (maD[0] ? 234 : 0); color aCol = maU[0] ? clrBlue : clrRed; if(code != 0) { if((maU[0] && maU[1] && maU[2]) || (maD[0] && maD[1] && maD[2])) aCol = clrGreen; else if((maU[0] && maU[1]) || (maD[0] && maD[1])) aCol = clrOrange; DrawMaArrows(maU[0], aCol, code); } else ObjectDelete(0, ArrowPrefix); } RenderDisplay(trendState, isUpM, isUpS, adCol, bCol, bgCol); if(Tampilkan_Pesan) { ForceLabel(DashPrefix+"MSG1", Pesan_Baris_1, Posisi_X, Posisi_Y, Warna_Teks, Ukuran_Font, "Arial Bold", CORNER_LEFT_UPPER); ForceLabel(DashPrefix+"MSG2", Pesan_Baris_2, Posisi_X, Posisi_Y + Spasi_Antar_Baris, Warna_Teks, Ukuran_Font, "Arial Bold", CORNER_LEFT_UPPER); } else { ObjectDelete(0, DashPrefix+"MSG1"); ObjectDelete(0, DashPrefix+"MSG2");}} void DrawMaArrows(bool isUp, color arrowCol, int arrowCode) { if(ObjectFind(0,ArrowPrefix)<0) ObjectCreate(0,ArrowPrefix,OBJ_ARROW,0,0,0); MqlRates r[]; CopyRates(_Symbol, _Period, 0, 1, r); double p = isUp ? r[0].low - (ArrowOffset*_Point) : r[0].high + (ArrowOffset*_Point); ObjectSetInteger(0,ArrowPrefix,OBJPROP_TIME,r[0].time); ObjectSetDouble(0,ArrowPrefix,OBJPROP_PRICE,p); ObjectSetInteger(0,ArrowPrefix,OBJPROP_ARROWCODE,arrowCode); ObjectSetInteger(0,ArrowPrefix,OBJPROP_COLOR,arrowCol); ObjectSetInteger(0,ArrowPrefix,OBJPROP_WIDTH,ArrowSize); ObjectSetInteger(0,ArrowPrefix,OBJPROP_ANCHOR,(isUp ? ANCHOR_TOP : ANCHOR_BOTTOM));} void RenderDisplay(int &st[], bool &upM[], bool &upS[], color &ac[], color bC, color bgC) { int count = ArraySize(st); int rowS = 20; int startY = 60 + (count * rowS); int offX = (TradeMode == MODE_FX ? 85 : 35); int boxW = 60; int boxH = (count * rowS) + 15; string boxN = DashPrefix + "RECT"; if(ObjectFind(0, boxN) < 0) { ObjectCreate(0, boxN, OBJ_RECTANGLE_LABEL, 0, 0, 0); ObjectSetInteger(0, boxN, OBJPROP_CORNER, CORNER_LEFT_LOWER); ObjectSetInteger(0, boxN, OBJPROP_BORDER_TYPE, BORDER_FLAT); ObjectSetInteger(0, boxN, OBJPROP_WIDTH, 3);} ObjectSetInteger(0, boxN, OBJPROP_XDISTANCE, offX - 25); ObjectSetInteger(0, boxN, OBJPROP_YDISTANCE, startY + 12); ObjectSetInteger(0, boxN, OBJPROP_XSIZE, boxW); ObjectSetInteger(0, boxN, OBJPROP_YSIZE, boxH); ObjectSetInteger(0, boxN, OBJPROP_BGCOLOR, bgC); ObjectSetInteger(0, boxN, OBJPROP_COLOR, bC); for(int i=0; i<count; i++) { int rY = startY - (i * rowS); color mC = (MathAbs(st[i]) == 2) ? (st[i]>0?clrBlue:clrRed) : clrOrange; if(TradeMode == MODE_FX) ForceLabel(DashPrefix+"T"+(string)i, GetShortName(currentTF[i]), offX - 65, rY + 14, clrBlack, 10, "Consolas", CORNER_LEFT_LOWER); ForceLabel(DashPrefix+"A"+(string)i, (upM[i]?"▲":"▼"), offX - 17, rY + 14, mC, 15, "Consolas", CORNER_LEFT_LOWER); ForceLabel(DashPrefix+"S"+(string)i, (upS[i]?"▲":"▼"), offX + 7, rY + 14, (upS[i]?clrBlue:clrRed), 15, "Consolas", CORNER_LEFT_LOWER); int adxStartX = offX - ((count - 1) * 16 / 2) - 4; ForceLabel(DashPrefix+"X"+(string)i, CharToString(159), adxStartX + (i * 16), startY - boxH + 12, ac[i], AdxSize, "Wingdings", CORNER_LEFT_LOWER);}} void ForceLabel(string n, string t, int x, int y, color c, int s, string f, ENUM_BASE_CORNER corn=CORNER_LEFT_LOWER) { if(ObjectFind(0, n) < 0) { ObjectCreate(0, n, OBJ_LABEL, 0, 0, 0); } ObjectSetInteger(0, n, OBJPROP_CORNER, corn); ObjectSetString(0, n, OBJPROP_TEXT, t); ObjectSetInteger(0, n, OBJPROP_XDISTANCE, x); ObjectSetInteger(0, n, OBJPROP_YDISTANCE, y); ObjectSetInteger(0, n, OBJPROP_COLOR, c); ObjectSetInteger(0, n, OBJPROP_FONTSIZE, s); ObjectSetString(0, n, OBJPROP_FONT, f);} string GetShortName(ENUM_TIMEFRAMES tf) { switch(tf) { case PERIOD_M5: return "M5"; case PERIOD_M15: return "M15"; case PERIOD_H1: return "H1"; case PERIOD_H4: return "H4"; case PERIOD_H12: return "H12"; case PERIOD_D1: return "D1"; case PERIOD_W1: return "W1"; case PERIOD_MN1: return "MN1"; default: return "??"; }} void OnTimer() { flashClock = !flashClock; UpdateDashboard(); ChartRedraw(); }
Monitoring V5.3.3
Data
Strategi Monitoring:
Arah tren ➡️MACD Plus TF2=Stoch TF2
Area Entry ➡️MACD TF1=Ma20 TF1
- Indikator: MACD
Parameter 12 26 1, menggunakan signal histogram mainline warna panah dasboar sama dengan warna histogram
MACD Strong Blue/Red,
MACD Weak Orange - Indikator Stochastic
Stochastic Periode %K= 5 Periode %D = 1 Slowly = 3,
Harga low/hight
Methode: Berat linier - indikator Adx
Visual arrow 159 Mt5
warna Adx<25 orange berkedip, Adx <25 Blue, <40 Red - Indikator Trend garis Ma20
Garis Ma20 warna Blue/Red, Linier Weighted dengan satu panah
jika panah baru muncul panah lama hilang
Panah arrow 233/234 Blue/Red
Jika Ma20 TF2 dan Ma20 TF1 searah maka panah Ma20 TF1 berubah menjadi orange.
Jika Ma20 TF3, Ma20 TF2 dan Ma20 TF1 searah maka panah Ma20 TF1 berubah menjadi Green
Logika Alert:
- Alert 1
MACD TF1, MACD Weak TF2, Stoch TF2 Satu arah maka bunyi alert satu kali dan dan kotak border berubah warnanya menjadi Green dan jika tidak singkron lagi alert bunyi satu kali - Alert 2
MACD TF1 MACD Strong TF2, Stoch TF2 Satu arah maka bunyi alert satu kali dan dan kotak border berubah warnanya menjadi Blue dan jika tidak singkron lagi alert bunyi satu kali - Alert 3
MACD TF1 dan MACD TF2 tidak searah maka kotak border berubah warnanya menjadi orange - Alert 4
MACD TF2 dan MACD TF3 searah maka Backrground kotak border berubah menjadi Green tipis - Alert 5
MACD TF2 dan MACD TF3, Stoch TF3 searah maka Backrground kotak border berubah menjadi Blue tipis - Alert 6
AdxTF1 <25 Border Berubah menjadi Orange
AdxTF2 <25 Border Berubah menjadi Orange
- M5=TF1 M5, TF2 H1, TF3 H4
- fx= M5, TF1 M5, TF2 M15, TF3 H1
- M15=TF1 M15, TF2 H1, TF3 H4
- H1=TF1 H1, TF2 H4, TF3 Dayli
- H4=TF1 H4, TF2 Dayli, TF3 Weekly
- Dayli= TF1 Dayli, TF2 Weekly, TF3 Mountly
- Detktor Orange
- Power Green
- Power Blue
- Strong low
- Strong strong height
- time : Pair : Pwr Green: Turn (Up/Down)
- time : Pair : Pwr Blue: Turn (Up/Down)
- time : Pair: Pwr Detector Orange
MACD TF1 dan TF2 tidak searah
Jika Adx TF1<25
Jika Adx TF2<25 - time : Pair : Strong Low: Turn (Up/Down)
- time : Pair : Strong Height: Turn (Up/Down)
Garis Ma20 warna Blue/Red, Linier Weighted dengan satu panah
jika panah baru muncul panah lama hilang
Panah arrow 233/234 Blue/Red
Jika Ma20 TF2 dan TF1 searah maka panah Ma20 TF1 berubah menjadi orange
seperi ini ada 3 penyebab garis border berwana orange, penyebabnya tak usah di tulis di jendela info cukup"time : Pair: Pwr Detector Orange"
hanya ada 5 Notifikasi format jangan dirubah Notification Window Information:
- time : Pair : Pwr Green: Turn (Up/Down)
- time : Pair : Pwr Blue: Turn (Up/Down)
- time : Pair: Pwr Detector Orange
- time : Pair : Strong Low: Turn (Up/Down)
- time : Pair : Strong Height: Turn (Up/Down)
Ma ultimate Mtf
MQL5
//+------------------------------------------------------------------+ //| MA Ultimate Mtf.mq5 | Copyright 2026, Gemini AI | //+------------------------------------------------------------------+ #property copyright "Gemini AI" #property indicator_chart_window #property indicator_buffers 2 #property indicator_plots 1 #property indicator_label1 "MA Line TF1" #property indicator_type1 DRAW_COLOR_LINE #property indicator_color1 clrDodgerBlue, clrRed #property indicator_width1 2 enum ENUM_TF_MODE {TF_MODE_M5FX=0,TF_MODE_M5=1,TF_MODE_M15=2,TF_MODE_H1=3,TF_MODE_H4=4,TF_MODE_DAILY=5}; input group "=== SETTINGS ===" input ENUM_TF_MODE InpTFMode = TF_MODE_M15; input int InpMAPeriod = 20; input ENUM_MA_METHOD InpMAMethod = MODE_LWMA; input group "=== ARROW ===" input uchar InpCodeBuy = 233; input uchar InpCodeSell = 234; input int InpArrowGap = 15; input int InpArrowSize = 1; input color InpColorBuy = clrDodgerBlue; input color InpColorSell = clrRed; input color InpColorConf2 = clrOrange; input color InpColorConf3 = clrAqua; double BuffA[], ColorA[]; int handleA, handleB, handleC; ENUM_TIMEFRAMES tf1, tf2, tf3; int OnInit(){ switch(InpTFMode){ case TF_MODE_M5FX: tf1=PERIOD_M5; tf2=PERIOD_M15; tf3=PERIOD_H1; break; case TF_MODE_M5: tf1=PERIOD_M5; tf2=PERIOD_H1; tf3=PERIOD_H4; break; case TF_MODE_M15: tf1=PERIOD_M15; tf2=PERIOD_H1; tf3=PERIOD_H4; break; case TF_MODE_H1: tf1=PERIOD_H1; tf2=PERIOD_H4; tf3=PERIOD_D1; break; case TF_MODE_H4: tf1=PERIOD_H4; tf2=PERIOD_D1; tf3=PERIOD_W1; break; case TF_MODE_DAILY: tf1=PERIOD_D1; tf2=PERIOD_W1; tf3=PERIOD_MN1; break; default: tf1=PERIOD_CURRENT; tf2=PERIOD_H1; tf3=PERIOD_H4;} SetIndexBuffer(0,BuffA,INDICATOR_DATA); SetIndexBuffer(1,ColorA,INDICATOR_COLOR_INDEX); handleA=iMA(_Symbol,tf1,InpMAPeriod,0,InpMAMethod,PRICE_CLOSE); handleB=iMA(_Symbol,tf2,InpMAPeriod,0,InpMAMethod,PRICE_CLOSE); handleC=iMA(_Symbol,tf3,InpMAPeriod,0,InpMAMethod,PRICE_CLOSE); return(INIT_SUCCEEDED);} void OnDeinit(const int r){ObjectsDeleteAll(0,"MA_SIG_");} int OnCalculate(const int rt,const int pc,const datetime &t[],const double &o[],const double &h[],const double &l[],const double &c[],const long &tv[],const long &v[],const int &s[]){ if(CopyBuffer(handleA,0,0,rt,BuffA)<=0)return(0); ObjectsDeleteAll(0,"MA_SIG_"); int lim=(pc>1?pc-1:1); for(int i=lim;i<rt;i++){ColorA[i]=(BuffA[i]>BuffA[i-1])?0.0:1.0;} bool ok=false; for(int i=rt-1;i>5;i--){ if(ok)break; int dA=(BuffA[i]>BuffA[i-1]?0:1); int pA=(BuffA[i-1]>(i>1?BuffA[i-2]:BuffA[i-1])?0:1); if(dA!=pA){ double mB[2],mC[2]; int sB=iBarShift(_Symbol,tf2,t[i]); int sC=iBarShift(_Symbol,tf3,t[i]); if(CopyBuffer(handleB,0,sB,2,mB)==2 && CopyBuffer(handleC,0,sC,2,mC)==2){ int dB=(mB[1]>mB[0]?0:1); int dC=(mC[1]>mC[0]?0:1); int cL=1; if(dA==dB && dA==dC)cL=3; else if(dA==dB)cL=2; CreateArrow(t[i],dA,cL,(dA==0?l[i]:h[i])); ok=true;}}} return(rt);} void CreateArrow(datetime t,int d,int cL,double pV){ string n="MA_SIG_LAST"; double g=InpArrowGap*_Point; bool up=(d==0); double fP=up?(pV-g):(pV+g); color aC=(cL==3?InpColorConf3:(cL==2?InpColorConf2:(up?InpColorBuy:InpColorSell))); if(ObjectCreate(0,n,OBJ_ARROW,0,t,fP)){ ObjectSetInteger(0,n,OBJPROP_ARROWCODE,up?InpCodeBuy:InpCodeSell); ObjectSetInteger(0,n,OBJPROP_COLOR,aC); ObjectSetInteger(0,n,OBJPROP_WIDTH,InpArrowSize); ObjectSetInteger(0,n,OBJPROP_ANCHOR,up?ANCHOR_TOP:ANCHOR_BOTTOM);}}
๐ฎ๐ฉ MACD T-Forse
Data
Stoch Fx
MQL5
//+------------------------------------------------------------------+
//|Stoch Fx.mq5|
//|Copyright 2026, Gemini AI Free|
//+------------------------------------------------------------------+
#property copyright "Gemini 2026"
#property version "1.21"
#property indicator_chart_window
#property indicator_plots 0
enum ENUM_TF_MODE {MODE_M5,MODE_M15,MODE_H1,MODE_H4,MODE_D1};
enum ENUM_SIDE {SIDE_LEFT,SIDE_RIGHT};
input group "== SYSTEM MODE =="
input ENUM_TF_MODE SelectedMode = MODE_M5;
input group "== FIXED POSITION =="
input ENUM_SIDE DashboardSide = SIDE_LEFT;
input int FixedX = 25;
input int FixedY = 80;
input int FixedGap = 25;
int h_Stoch[3];
ENUM_TIMEFRAMES tfs[3];
int OnInit(){
switch(SelectedMode){
case MODE_M5:tfs[0]=PERIOD_M5;tfs[1]=PERIOD_H1;tfs[2]=PERIOD_H4;break;
case MODE_M15:tfs[0]=PERIOD_M15;tfs[1]=PERIOD_H1;tfs[2]=PERIOD_H4;break;
case MODE_H1:tfs[0]=PERIOD_H1;tfs[1]=PERIOD_H4;tfs[2]=PERIOD_D1;break;
case MODE_H4:tfs[0]=PERIOD_H4;tfs[1]=PERIOD_D1;tfs[2]=PERIOD_W1;break;
case MODE_D1:tfs[0]=PERIOD_D1;tfs[1]=PERIOD_W1;tfs[2]=PERIOD_MN1;break;}
for(int i=0;i<3;i++){
h_Stoch[i]=iStochastic(_Symbol,tfs[i],5,1,3,MODE_SMA,STO_LOWHIGH);}
EventSetTimer(1);
return(INIT_SUCCEEDED);}
void OnDeinit(const int reason){
EventKillTimer();
ObjectsDeleteAll(0,"ME_");}
void OnTimer(){RefreshDash();ChartRedraw();}
void CreateSym(string name,int x,int y,string sym,color clr){
string oName="ME_"+name;
if(ObjectFind(0,oName)<0)ObjectCreate(0,oName,OBJ_LABEL,0,0,0);
ENUM_BASE_CORNER corner=(DashboardSide==SIDE_LEFT)?CORNER_LEFT_LOWER:CORNER_RIGHT_LOWER;
ENUM_ANCHOR_POINT anchor=(DashboardSide==SIDE_LEFT)?ANCHOR_LEFT_LOWER:ANCHOR_RIGHT_LOWER;
ObjectSetInteger(0,oName,OBJPROP_CORNER,corner);
ObjectSetInteger(0,oName,OBJPROP_ANCHOR,anchor);
ObjectSetInteger(0,oName,OBJPROP_XDISTANCE,x);
ObjectSetInteger(0,oName,OBJPROP_YDISTANCE,y);
ObjectSetString(0,oName,OBJPROP_TEXT,sym);
ObjectSetInteger(0,oName,OBJPROP_COLOR,clr);
ObjectSetInteger(0,oName,OBJPROP_FONTSIZE,10);
ObjectSetString(0,oName,OBJPROP_FONT,"Wingdings 3");}
void RefreshDash(){
for(int i=0;i<3;i++){
double stoch_buffer[];
ArraySetAsSeries(stoch_buffer,true);
if(CopyBuffer(h_Stoch[i],0,0,2,stoch_buffer)<2)continue;
bool isUp=(stoch_buffer[0]>stoch_buffer[1]);
int lockY=FixedY-(i*FixedGap);
string sym=isUp?CharToString(112):CharToString(113);
color c=isUp?clrBlue:clrRed;
CreateSym("S_"+(string)i,FixedX,lockY,sym,c);}}
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[]){
RefreshDash();
return(rates_total);}
๐ฎ๐ฉ MACD T-Forse
Data
Radar Fx V1.7
MQL5
//+------------------------------------------------------------------+
//| Radar Fx Precision.mq5 |
//| Musafir Eng / Gemini 2026 |
//+------------------------------------------------------------------+
#property copyright "Musafir Eng / Gemini"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots 1
#property indicator_label1 "MA_Trend"
#property indicator_type1 DRAW_COLOR_LINE
#property indicator_color1 clrBlue,clrRed
#property indicator_width1 2
input bool ShowChartArrows=true;
input bool Power_of_the_Green=true;
input bool Power_of_the_Aqua=true;
input bool Power_of_the_Box=true;
input int MA_Period=20;
input int MA_Shift=0;
input ENUM_MA_METHOD MA_Method=MODE_LWMA;
input ENUM_APPLIED_PRICE MA_Price=PRICE_WEIGHTED;
enum ENUM_POS {LEFT_SIDE,RIGHT_SIDE};
input ENUM_POS HorizontalPos=RIGHT_SIDE;
enum ENUM_MODE_SIMPLE{MODE_M5,MODE_M5FX,MODE_M15,MODE_H1,MODE_H4,MODE_DAILY};
input ENUM_MODE_SIMPLE TradeMode=MODE_M5;
double MABuffer[],ColorBuffer[];
string DashPrefix="T_FORCE_";
string ArrowPrefix="FXARR_LAST";
int hMACD[3],hADX[3],hMA,hMA_TF2;
ENUM_TIMEFRAMES currentTF[3];
bool flashClock=false,showADX=true,lastBoxUp=false;
datetime lastAlertSync=0,lastAlertBox=0;
int OnInit(){
SetIndexBuffer(0,MABuffer,INDICATOR_DATA);
SetIndexBuffer(1,ColorBuffer,INDICATOR_COLOR_INDEX);
ObjectsDeleteAll(0,DashPrefix);
ObjectDelete(0,ArrowPrefix);
if(TradeMode==MODE_M5){currentTF[0]=PERIOD_M5;currentTF[1]=PERIOD_H1;currentTF[2]=PERIOD_H4;}
else if(TradeMode==MODE_M5FX){currentTF[0]=PERIOD_M5;currentTF[1]=PERIOD_M15;currentTF[2]=PERIOD_H1;}
else if(TradeMode==MODE_M15){currentTF[0]=PERIOD_M15;currentTF[1]=PERIOD_H1;currentTF[2]=PERIOD_H4;}
else if(TradeMode==MODE_H1){currentTF[0]=PERIOD_H1;currentTF[1]=PERIOD_H4;currentTF[2]=PERIOD_D1;}
else if(TradeMode==MODE_H4){currentTF[0]=PERIOD_H4;currentTF[1]=PERIOD_D1;currentTF[2]=PERIOD_W1;}
else{currentTF[0]=PERIOD_D1;currentTF[1]=PERIOD_W1;currentTF[2]=PERIOD_MN1;}
for(int i=0;i<3;i++){
hMACD[i]=iMACD(_Symbol,currentTF[i],12,26,1,PRICE_CLOSE);
hADX[i]=iADX(_Symbol,currentTF[i],14);}
hMA=iMA(_Symbol,currentTF[0],MA_Period,MA_Shift,MA_Method,MA_Price);
hMA_TF2=iMA(_Symbol,currentTF[1],MA_Period,MA_Shift,MA_Method,MA_Price);
EventSetTimer(1);
return(INIT_SUCCEEDED);}
void OnDeinit(const int reason){
ObjectsDeleteAll(0,DashPrefix);
ObjectDelete(0,ArrowPrefix);
EventKillTimer();}
void OnTimer(){
flashClock=!flashClock;
UpdateDashboard();
ChartRedraw();}
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 copied=CopyBuffer(hMA,0,0,rates_total,MABuffer);
if(copied>1){
for(int i=(prev_calculated>0?prev_calculated-1:1);i<rates_total;i++){
if(close[i]>MABuffer[i])ColorBuffer[i]=0;
else if(close[i]<MABuffer[i])ColorBuffer[i]=1;
else ColorBuffer[i]=(i>0)?ColorBuffer[i-1]:0;}}
UpdateDashboard();
return(rates_total);}
void UpdateDashboard(){
int mS[3];bool mU[3],isStr[3];
double ma1[2],ma2[2];
bool tf1Up=false,tf2Up=false;
if(CopyBuffer(hMA,0,0,2,ma1)==2)tf1Up=(ma1[1]>ma1[0]);
if(CopyBuffer(hMA_TF2,0,0,2,ma2)==2)tf2Up=(ma2[1]>ma2[0]);
for(int i=0;i<3;i++){
double b[2];
if(CopyBuffer(hMACD[i],0,0,2,b)==2){
mU[i]=(b[1]>b[0]);
if(b[1]>0)mS[i]=(mU[i]?2:1);
else mS[i]=(!mU[i]?-2:-1);
isStr[i]=(MathAbs(mS[i])==2);}
else{mS[i]=0;mU[i]=false;isStr[i]=false;}}
bool isAquaSync=(isStr[0] && isStr[1] && mU[0]==mU[1]);
bool isGreenSync=(!isStr[0] && !isStr[1] && mU[0]==mU[1]);
if(lastAlertSync!=iTime(_Symbol,currentTF[0],0)){
if(isAquaSync && Power_of_the_Aqua){Alert("P Aqua "+_Symbol);PlaySound("alert.wav");lastAlertSync=iTime(_Symbol,currentTF[0],0);}
else if(isGreenSync && Power_of_the_Green){Alert("P Green "+_Symbol);PlaySound("news.wav");lastAlertSync=iTime(_Symbol,currentTF[0],0);}}
if(Power_of_the_Box && lastAlertBox!=iTime(_Symbol,currentTF[2],0)){
if(mU[2]!=lastBoxUp){Alert("P Box "+_Symbol);lastBoxUp=mU[2];lastAlertBox=iTime(_Symbol,currentTF[2],0);}}
if(ShowChartArrows)ScanSyncCross(tf1Up,tf2Up);
RenderDisplay(mS,mU,isStr,isAquaSync,isGreenSync);
if(showADX)UpdateADXHorizontal();}
void ScanSyncCross(bool tf1Up,bool tf2Up){
double cl[];ArraySetAsSeries(cl,true);
int sz=ArraySize(MABuffer);
if(sz>100 && CopyClose(_Symbol,currentTF[0],0,100,cl)>1){
for(int i=0;i<99;i++){
if(cl[i]>MABuffer[sz-1-i] && cl[i+1]<=MABuffer[sz-2-i]){
color c=(tf1Up==tf2Up)?clrOrange:clrBlue;
DrawSingleArrow(233,c,iTime(_Symbol,currentTF[0],i),iLow(_Symbol,currentTF[0],i));
break;}
if(cl[i]<MABuffer[sz-1-i] && cl[i+1]>=MABuffer[sz-2-i]){
color c=(tf1Up==tf2Up)?clrOrange:clrRed;
DrawSingleArrow(234,c,iTime(_Symbol,currentTF[0],i),iHigh(_Symbol,currentTF[0],i));
break;}}}}
void RenderDisplay(int &mS[],bool &mU[],bool &isStr[],bool aquaSync,bool greenSync){
int sY=100,cX=85;
ENUM_BASE_CORNER cr=(HorizontalPos==LEFT_SIDE?CORNER_LEFT_LOWER:CORNER_RIGHT_LOWER);
color c3=(mS[2]==2?clrBlue:(mS[2]==-2?clrRed:clrOrange));
color bCol=(mU[2]==mU[1]?c3:clrDimGray);
color c2=aquaSync?(flashClock?clrAqua:clrWhite):(greenSync?(flashClock?clrLime:clrWhite):(mS[1]==2?clrBlue:(mS[1]==-2?clrRed:clrOrange)));
color c1=(mS[0]==2?clrBlue:(mS[0]==-2?clrRed:clrOrange));
ForceLabel(DashPrefix+"BDR",CharToString(168),cX,sY,bCol,70,"Wingdings",cr);
ForceLabel(DashPrefix+"A_TF2",(mU[1]?"▲":"▼"),cX,sY+7,c2,52,"Arial Black",cr);
ForceLabel(DashPrefix+"A_TF1",(mU[0]?"▲":"▼"),cX,sY+7,c1,18,"Arial Black",cr);}
void ForceLabel(string n,string t,int x,int y,color c,int s,string f,ENUM_BASE_CORNER cr){
if(ObjectFind(0,n)<0)ObjectCreate(0,n,OBJ_LABEL,0,0,0);
ObjectSetInteger(0,n,OBJPROP_CORNER,cr);
ObjectSetInteger(0,n,OBJPROP_ANCHOR,ANCHOR_CENTER);
ObjectSetString(0,n,OBJPROP_TEXT,t);
ObjectSetInteger(0,n,OBJPROP_XDISTANCE,x);
ObjectSetInteger(0,n,OBJPROP_YDISTANCE,y);
ObjectSetInteger(0,n,OBJPROP_COLOR,c);
ObjectSetInteger(0,n,OBJPROP_FONTSIZE,s);
ObjectSetString(0,n,OBJPROP_FONT,f);
ObjectSetInteger(0,n,OBJPROP_ZORDER,250);}
void UpdateADXHorizontal(){
int sY=35,sX=(HorizontalPos==LEFT_SIDE)?65:105;
for(int i=0;i<3;i++){
double buff[1];
if(CopyBuffer(hADX[i],0,0,1,buff)==1){
color col=(buff[0]>40.0)?clrRed:(buff[0]>25.0?clrBlue:clrOrange);
ForceLabel(DashPrefix+"ADX_H_"+(string)i,"★",sX+((HorizontalPos==LEFT_SIDE?1:-1)*i*20),sY,col,9,"Arial Bold",(HorizontalPos==LEFT_SIDE?CORNER_LEFT_LOWER:CORNER_RIGHT_LOWER));}}}
void DrawSingleArrow(int cd,color cl,datetime t,double p){
if(ObjectFind(0,ArrowPrefix)<0)ObjectCreate(0,ArrowPrefix,OBJ_ARROW,0,0,0);
ObjectSetInteger(0,ArrowPrefix,OBJPROP_TIME,t);
ObjectSetDouble(0,ArrowPrefix,OBJPROP_PRICE,p);
ObjectSetInteger(0,ArrowPrefix,OBJPROP_ARROWCODE,cd);
ObjectSetInteger(0,ArrowPrefix,OBJPROP_COLOR,cl);
ObjectSetInteger(0,ArrowPrefix,OBJPROP_ANCHOR,(cd==233?ANCHOR_TOP:ANCHOR_BOTTOM));}
void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam){
if(id==CHARTEVENT_OBJECT_CLICK && sparam==DashPrefix+"BDR"){
static uint lastClickTime=0;uint currentTime=GetTickCount();
if(currentTime-lastClickTime<400){
showADX=!showADX;
if(!showADX)for(int i=0;i<3;i++)ObjectDelete(0,DashPrefix+"ADX_H_"+(string)i);
UpdateDashboard();ChartRedraw();lastClickTime=0;}
else lastClickTime=currentTime;}}
Radar FX V1.7
Data
- Indikator: MACD
Parameter 12 26 1, menggunakan signal histogram mainline warna panah dasboar sama dengan warna histogram
MACD Strong Blue/Red,
MACD Weak Orange - Stochastic Periode %K= 5 Periode %D = 1 Slowly = 3,
Harga low/hight
Methode: Berat linier - indikator Adx
Visual arrow 159 Mt5
warna Adx<25 orange berkedip, Adx <25 Blue, <40 Red - Indikator Trend garis Ma20
Garis Ma20 warna Blue/Red, Linier Weighted dengan satu panah
jika panah baru muncul panah lama hilang
Panah arrow 233/234 Blue/Red
Jika Ma20 TF2 dan Ma20 TF1 searah maka panah Ma20 TF1 berubah menjadi orange.
Jika Ma20 TF2 dan Ma20 TF1 searah maka panah Ma20 TF1 berubah menjadi orange
MACD H4 & Stoch H4 satu arah
Open Close Cross Cross zeroline TF1
Logika Alert:
- Alert 1
MACD TF1, MACD TF2, Stoch TF2 Satu arah maka bunyi alert satu kali dan dan kotak border berubah warnanya menjadi Green dan jika tidak singkron lagi alert bunyi satu kali - Alert 2
MACD TF1 MACD Strong TF2, Stoch TF2 Satu arah maka bunyi alert satu kali dan dan kotak border berubah warnanya menjadi Blue dan jika tidak singkron lagi alert bunyi satu kali - Alert 3
MACD TF1 dan MACD TF2 tidak searah maka kotak border berubah warnanya menjadi orange - Alert 4
MACD TF2 dan MACD TF3 searah maka Backrground kotak border berubah menjadi Green tipis - Alert 5
MACD TF2 dan MACD TF3, Stoch TF3 searah maka Backrground kotak border berubah menjadi Blue tipis
- Orange
- Green Installation Power
- Blue Mounting Power
- Go Installation Power
- Strong Installation Power
Notification Window Information:
- Enable Green Pair (Up/Down)
- Enable Blue Pair (Up/Down)
- Enable Go Pair (Up/Down)
- Enable Strong Pair (Up/Down)
MACD histogram Std
MQL5
//+------------------------------------------------------------------+ //| MACD histogram Std.mq5 | //| Copyright 2026, Engineer Precision | //+------------------------------------------------------------------+ #property copyright "Engineer Precision" #property indicator_separate_window #property indicator_buffers 5 #property indicator_plots 2 //--- PLOT HISTOGRAM #property indicator_label1 "MACD Histogram" #property indicator_type1 DRAW_COLOR_HISTOGRAM #property indicator_color1 clrAqua, clrLightSalmon, clrLightSalmon, clrAqua #property indicator_width1 2 //--- PLOT SIGNAL LINE #property indicator_label2 "Signal Line" #property indicator_type2 DRAW_COLOR_LINE #property indicator_color2 clrDodgerBlue, clrTomato, clrTomato, clrDodgerBlue #property indicator_width2 2 enum ENUM_ARROW_MODE { MODE_NO_ARROW = 0, MODE_SINGLE_ARROW = 1, MODE_TEN_ARROWS = 10 }; //+------------------------------------------------------------------+ //| INPUT PARAMETERS | //+------------------------------------------------------------------+ input group "=== MACD Calculation ===" input int FastEMA = 12; input int SlowEMA = 26; input int SignalSMA = 1; input ENUM_APPLIED_PRICE AppliedPrice = PRICE_CLOSE; input group "=== Zero Line Style (Solid Black) ===" input color ZeroLineColor = clrBlack; input int ZeroLineWidth = 1; input ENUM_LINE_STYLE ZeroLineStyle = STYLE_SOLID; input group "=== T Green (Buy) Settings ===" input uchar ArrowCodeBuy = 233; input color ColorTGreen = clrBlack; input int ArrowSizeBuy = 1; input int ArrowOffset = 10; input bool EnableAlertBuy = true; input group "=== Sell Settings ===" input uchar ArrowCodeSell = 234; input color ColorSell = clrBlack; input int ArrowSizeSell = 1; input bool EnableAlertSell = true; input group "=== Notification Mode ===" input ENUM_ARROW_MODE ArrowMode = MODE_SINGLE_ARROW; input bool ShowAlertGlobal = true; //--- BUFFERS double MacdBuffer[]; double ColorBuffer[]; double SignalLineBuffer[]; double SignalColorBuffer[]; double InternalMacd[]; int handle_macd; datetime lastAlertTime = 0; //+------------------------------------------------------------------+ int OnInit() { SetIndexBuffer(0, MacdBuffer, INDICATOR_DATA); SetIndexBuffer(1, ColorBuffer, INDICATOR_COLOR_INDEX); SetIndexBuffer(2, SignalLineBuffer, INDICATOR_DATA); SetIndexBuffer(3, SignalColorBuffer, INDICATOR_COLOR_INDEX); SetIndexBuffer(4, InternalMacd, INDICATOR_CALCULATIONS); IndicatorSetInteger(INDICATOR_LEVELS, 1); IndicatorSetDouble(INDICATOR_LEVELVALUE, 0, 0.0); IndicatorSetInteger(INDICATOR_LEVELCOLOR, 0, ZeroLineColor); IndicatorSetInteger(INDICATOR_LEVELWIDTH, 0, ZeroLineWidth); IndicatorSetInteger(INDICATOR_LEVELSTYLE, 0, ZeroLineStyle); handle_macd = iMACD(_Symbol, _Period, FastEMA, SlowEMA, SignalSMA, AppliedPrice); IndicatorSetString(INDICATOR_SHORTNAME, "MACD T Green [Solid Precision]"); return(INIT_SUCCEEDED);} //+------------------------------------------------------------------+ void ManageArrows(string type, datetime time, double price, color clr, int code, int size) { if(ArrowMode == MODE_NO_ARROW) return; string name = (ArrowMode == MODE_SINGLE_ARROW) ? "TG_SINGLE_SIG" : "TG_" + type + "_" + (string)time; // Logika Rendemen Kecil: Update posisi jika waktu berubah if(ArrowMode == MODE_SINGLE_ARROW) { if(ObjectFind(0, name) >= 0) { datetime oldTime = (datetime)ObjectGetInteger(0, name, OBJPROP_TIME); if(oldTime == time) return; ObjectDelete(0, name);}} double offset = ArrowOffset * _Point * 10; double finalPrice = (code == ArrowCodeBuy) ? (price - offset) : (price + offset); if(ObjectCreate(0, name, OBJ_ARROW, 0, time, finalPrice)) { ObjectSetInteger(0, name, OBJPROP_ARROWCODE, code); ObjectSetInteger(0, name, OBJPROP_COLOR, clr); ObjectSetInteger(0, name, OBJPROP_WIDTH, size); ObjectSetInteger(0, name, OBJPROP_ANCHOR, (code == ArrowCodeBuy ? ANCHOR_TOP : ANCHOR_BOTTOM)); ObjectSetInteger(0, name, OBJPROP_SELECTABLE, false); ObjectSetInteger(0, name, OBJPROP_HIDDEN, true);}} //+------------------------------------------------------------------+ 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[]) { if(rates_total < SlowEMA) return(0); if(CopyBuffer(handle_macd, 0, 0, rates_total, MacdBuffer) <= 0) return(0); if(CopyBuffer(handle_macd, 1, 0, rates_total, SignalLineBuffer) <= 0) return(0); int start = (prev_calculated > 0) ? prev_calculated - 1 : 1; //--- LOOP PEWARNAAN HISTOGRAM for(int i = start; i < rates_total; i++) { if(MacdBuffer[i] >= 0) ColorBuffer[i] = (MacdBuffer[i] > MacdBuffer[i-1]) ? 0 : 1; else ColorBuffer[i] = (MacdBuffer[i] < MacdBuffer[i-1]) ? 2 : 3; if(SignalLineBuffer[i] >= 0) SignalColorBuffer[i] = (SignalLineBuffer[i] > SignalLineBuffer[i-1]) ? 0 : 1; else SignalColorBuffer[i] = (SignalLineBuffer[i] < SignalLineBuffer[i-1]) ? 2 : 3;} //--- LOGIKA PANAH (DIPERBAIKI UNTUK MODE SINGLE & TEN) --- if(ArrowMode != MODE_NO_ARROW) { int foundCount = 0; int maxSearch = (int)ArrowMode; // 1 atau 10 // Kita scan dari bar terbaru ke belakang for(int j = rates_total - 1; j > 0 && foundCount < maxSearch; j--) { bool isBuy = (MacdBuffer[j] > 0 && MacdBuffer[j-1] <= 0); bool isSell = (MacdBuffer[j] < 0 && MacdBuffer[j-1] >= 0); if(isBuy || isSell) { if(isBuy) ManageArrows("TGreen", time[j], low[j], ColorTGreen, ArrowCodeBuy, ArrowSizeBuy); if(isSell) ManageArrows("Sell", time[j], high[j], ColorSell, ArrowCodeSell, ArrowSizeSell); // Alert hanya untuk perpotongan di bar yang sedang berjalan/terakhir if(j == rates_total - 1 && lastAlertTime != time[j] && ShowAlertGlobal) { if(isBuy && EnableAlertBuy) Alert(_Symbol + " [T Green]: Buy Signal!"); if(isSell && EnableAlertSell) Alert(_Symbol + " [Sell]: Sell Signal!"); lastAlertTime = time[j];} foundCount++;}}} return(rates_total);} void OnDeinit(const int reason) { ObjectsDeleteAll(0, "TG_"); }
๐ฎ๐ฉ MACD T-Forse
Data
๐ฎ๐ฉ MACD T-Forse
MQL5
//๐ณ️๐๐ณ️๐๐ณ️๐๐ณ️๐๐ณ️๐๐ณ️ KODE EA DI SINI
๐ฎ๐ฉ MACD T-Forse
Data


