BS__MarketPrice
Download scriptThis script is designed as a comprehensive on-screen dashboard for the MetaTrader 4 platform. It serves as a visual information hub, providing traders with real-time market data, trend analysis, and statistical metrics directly on their charts without requiring them to constantly switch between different timeframes or windows.
The logic of the tool can be broken down into four primary functional areas:
1. Dynamic Trend & Price Monitoring
The script continuously monitors price movements to determine the current market direction. It uses Moving Averages (MA) as the underlying logic to differentiate between bullish and bearish trends.
- Color Coding: Instead of just showing numbers, the dashboard uses colors to signify momentum. For example, if the short-term price action is above a specific average, the text may turn blue (Up); if it falls below, it turns red (Down).
- Multi-Timeframe Analysis: It tracks these trends across multiple timeframes simultaneously (ranging from 1 minute up to 240 minutes), allowing you to see at a glance if the market is aligned across different scales.
2. Statistical Market Metrics
The dashboard calculates and displays several key technical statistics automatically:
- High-to-Low Range: It identifies the difference between the daily high and low prices, helping traders understand the current day's volatility.
- Daily Average (D.Av): The script performs a calculation based on price ranges over various periods (1, 5, 10, and 20 days) to generate a "Daily Average." It then compares this average to the previous day’s movement to indicate whether current volatility is expanding or contracting.
- Pips to Open: It calculates how many pips the current price has moved relative to the daily opening price, providing an immediate sense of the day's progress.
3. Real-Time Trading Environment Data
To help traders manage execution and timing, the script extracts "live" environment data:
- Spread Monitoring: It displays the current difference between the Bid and Ask prices in real-time.
- Candle Countdown: It calculates the remaining time until the next candle closes, allowing for better timing of entries and exits.
4. Visual Organization & Customization
The logic is structured to be highly modular regarding its visual presentation:
- Dashboard Placement: Users can adjust the X and Y coordinates (positioning) of the entire information block on the chart.
- Information Toggle: The script includes an "Extra Information" feature that allows users to hide or show specific trend data blocks to keep the chart clean or detailed depending on their preference.
- Automated Object Management: The script is programmed to automatically create, update, and delete the visual labels on the screen, ensuring the information remains current with every price tick.
//+------------------------------------------------------------------+
//| #MarketPrice.mq4 |
//| ServerUang |
//| http://www.indofx-trader.net/ |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| BS_#MarketPrice.mq4|
//| edited by masemus |
//+------------------------------------------------------------------+
#property copyright "ServerUang"
#property link "http://www.indofx-trader.net/"
#property indicator_chart_window
//----
extern string Indicator_Name="BS_#MarketPrice";
extern bool Right_Top=true;
extern int Shift_Y=0;
extern int Shift_X=0;
// Untuk menentukan Warna Harga sesuai arah Trend
extern string Price_Variable="Setting for Price Color";// change
extern color Price_color_Up=Blue;
extern color Price_color_Dn=Red;
extern int Time_Frame=15;
//----
extern int MA_Fast_Period=1;
extern int MA_Fast_Method=0;
extern int MA_Fast_Apply_To=0;
extern int MA_Fast_Shift=0;
//----
extern int MA_Slow_Period=4;
extern int MA_Slow_Method=0;
extern int MA_Slow_Apply_To=0;
extern int MA_Slow_Shift=0;
//----
extern string Value_Color ="Setting for Value Color";
extern color Highest_Color =White;
extern color Distance_from_Highest_Color=Gainsboro;
extern color Lowest_Color =Yellow;
extern color Distance_from_Lowest_Color =Gold;
extern color Hi_to_Lo_Color =White;
extern color Daily_Av_Up_Color =Lime;
extern color Daily_Av_Dn_Color =Orange;
extern color Time_n_Spread_Color =Aqua;
extern color PipsToOpen_Up_Color =LightSkyBlue;
extern color PipsToOpen_Dn_Color =Salmon;
//----
extern string Xtra_Information="Setting for Extra information";
extern bool Show_Xtra_Info =true;
//----
extern color Label_color =Silver;
extern color Text_Xtreme_Up_Color=White;
extern color Text_Up_Color =LightBlue;
extern color Text_Dn_Color =Orange;
extern color Text_Xtreme_Dn_Color=Yellow;
// Untuk menentukan arah Trend
extern string Trend_Variable="Variable TRend Direction";// change
extern int xMA_Fast_Period =1;
extern int xMA_Fast_Method =0;
extern int xMA_Fast_Apply_To =0;
extern int xMA_Fast_Shift =0;
//----
extern int xMA_Slow_Period =20;
extern int xMA_Slow_Method =0;
extern int xMA_Slow_Apply_To =0;
extern int xMA_Slow_Shift =0;
extern color Trend_Up_Color =Blue;
extern color Trend_Dn_Color =Red;
//=================================================================================
string Label_Teks="", Huruf="", Teks="", nomor="";
double Nilai, x, y, d_A, d_B, TF, Range, bbP, bbMid, bbM, nilaiWarnaCandle;
color WarnaHarga, WarnaTrend, WarnaCandle;
int Ukuran, n, Kolom;
// --- variabel Daili_Av --------------------------------------------
int R1, R5, R10, R20, RAvg, i;
string Teks_ReRata="", Teks_Rerata_Kemarin ="", Nomor="";
color Warna_ReRata;
// --- Variabel Time for next candle
string Teks_Menit, Teks_Detik;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectsDeleteAll(0,OBJ_HLINE);
ObjectsDeleteAll(0,OBJ_TEXT);
ObjectsDeleteAll(0,OBJ_LABEL);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//----
int counted_bars=IndicatorCounted();
//Menampilkan Harga
Nilai=iMA(Symbol(),0,1,0,MODE_EMA,PRICE_CLOSE,0); Teks=DoubleToStr(Nilai,Digits);
Huruf="Arial"; Ukuran=18; x=5+Shift_X; y=5+Shift_Y;
// WarnaHarga=WarnaLampu pada trend TF 5 menit
d_B=iMA(Symbol(),Time_Frame,MA_Fast_Period,MA_Fast_Shift,MA_Fast_Method,MA_Fast_Apply_To,0);
d_A=iMA(Symbol(),Time_Frame,MA_Slow_Period,MA_Slow_Shift,MA_Slow_Method,MA_Slow_Apply_To,0);
WarnaHarga=CheckWarna(d_B, d_A, Price_color_Up, Price_color_Dn);
Tulis("MP01", Right_Top, x, y, Teks, Ukuran, Huruf, WarnaHarga);
//----
Huruf="Tahoma Bold"; Ukuran=10;
d_A=iHigh(NULL,1440,0); Teks=DoubleToStr(d_A, Digits);
d_B=iLow(NULL,1440,0); Teks=DoubleToStr(d_B, Digits);
//--- Informasi Hi to Lo ---
Teks=DoubleToStr((d_A - d_B)/Point,0);
x=40+Shift_X; y=5+Shift_Y;
Tulis("MP06", Right_Top, x, y, Teks, Ukuran, Huruf, Hi_to_Lo_Color);
Tulis("MP22", Right_Top, x-11, y+0, " Curr: ", 7, Huruf, Label_color);
//--- Informasi Daily Av ---
R1=0; R5=0; R10=0; R20=0; RAvg=0; i=0;
R1= (iHigh(NULL,PERIOD_D1,1)-iLow(NULL,PERIOD_D1,1))/Point;
for(i=1;i<=5;i++)
R5 =R5 + (iHigh(NULL,PERIOD_D1,i)-iLow(NULL,PERIOD_D1,i))/Point;
for(i=1;i<=10;i++)
R10=R10 + (iHigh(NULL,PERIOD_D1,i)-iLow(NULL,PERIOD_D1,i))/Point;
for(i=1;i<=20;i++)
R20=R20 + (iHigh(NULL,PERIOD_D1,i)-iLow(NULL,PERIOD_D1,i))/Point;
//----
R5=R5/5;
R10=R10/10;
R20=R20/20;
RAvg=(R1+R5+R10+R20)/4;
//----
Teks_ReRata=(DoubleToStr(RAvg,Digits-4));
Teks_Rerata_Kemarin=(iHigh(NULL,PERIOD_D1,1)-iLow(NULL,PERIOD_D1,1))/Point;
//----
if (Teks_ReRata > Teks_Rerata_Kemarin) {Warna_ReRata=Daily_Av_Up_Color;}
else {Warna_ReRata=Daily_Av_Dn_Color;}
//----
x=40+Shift_X; y=45+Shift_Y;
Tulis("MP07", Right_Top, x, y, Teks_ReRata, Ukuran, Huruf, Warna_ReRata);
Tulis("MP23", Right_Top, x-11, y+0, " D.Av: ", 7, Huruf, Label_color);
//Time for Next Candle
d_B=(Time[4]-Time[5])-MathMod(CurTime(),Time[4]-Time[5]);
d_A=d_B/60;
d_B=(d_A-MathFloor(d_A))*60;
d_A=MathFloor(d_A);
Teks_Menit=DoubleToStr(d_A,0);
Teks_Detik=DoubleToStr(d_B,0);
Teks=Teks_Menit+":"+Teks_Detik;
x=185+Shift_X; y=5+Shift_Y;
Tulis("MP08", Right_Top, x, y, Teks, Ukuran, Huruf, Time_n_Spread_Color);
Tulis("MP24", Right_Top, x-11, y+0, " Time : ", 7, Huruf, Label_color);
// --- Spread
d_A=(Ask - Bid)/Point;
Teks=(DoubleToStr(d_A,Digits-4));
x=68+Shift_X; y=45+Shift_Y;
Tulis("MP09", Right_Top, x, y, Teks, Ukuran, Huruf, Time_n_Spread_Color);
Tulis("MP25", Right_Top, x-11, y+0, " Sprd: ", 7, Huruf, Label_color);
//--- Informasi from Pips to Open ---
d_A=iOpen(NULL,1440,0);
d_B=iClose(NULL,1440,0);
WarnaHarga=CheckWarna(d_B, d_A, PipsToOpen_Up_Color, PipsToOpen_Dn_Color);
Teks=DoubleToStr((d_B-d_A)/Point,0);
x=68+Shift_X; y=5+Shift_Y;
Tulis("MP10", Right_Top, x, y, Teks, Ukuran, Huruf, WarnaHarga);
Tulis("MP26", Right_Top, x-11, y+0, " To Op: ", 7, Huruf, Label_color);
//--- Show_Xtra_Info ---
if (Show_Xtra_Info)
{//--- Info TRend ---
Huruf="Trebucet"; Ukuran=7;
if (Right_Top) {Teks="BS TR";}
else {Teks="TR BS";}
x=156+Shift_X; y=3+Shift_Y+4;
Tulis("MP11", Right_Top, x, y, Teks, Ukuran, Huruf, Label_color);
Tulis("MP12", Right_Top, x-66, y+32, " 240 ", Ukuran, Huruf, Label_color);
Tulis("MP13", Right_Top, x-55, y+32, " 60 ", Ukuran, Huruf, Label_color);
Tulis("MP14", Right_Top, x-44, y+32, " 30 ", Ukuran, Huruf, Label_color);
Tulis("MP15", Right_Top, x-33, y+32, " 15 ", Ukuran, Huruf, Label_color);
Tulis("MP16", Right_Top, x-22, y+32, " 5 ", Ukuran, Huruf, Label_color);
Tulis("MP17", Right_Top, x-11, y+32, " 1 ", Ukuran, Huruf, Label_color);
n=1;
while(n<=6)
{
switch(n)
{
case 1: TF= 1; Range=2; break;
case 2: TF= 5; Range=(Ask - Bid)/Point; break;
case 3: TF= 15; Range=(Ask - Bid)/Point; break;
case 4: TF= 30; Range=(Ask - Bid)/Point; break;
case 5: TF= 60; Range=(Ask - Bid)/Point; break;
case 6: TF= 240; Range=(Ask - Bid)/Point; break;
//case 7: TF = 1440; break;
}//switch
nomor=DoubleToStr(n,0); x=125+Shift_X; y=23+Shift_Y+5; Kolom=11;
Huruf="Arial Bold"; Ukuran=40;
d_B=iMA(Symbol(),TF, xMA_Fast_Period, xMA_Fast_Shift, xMA_Fast_Method, xMA_Fast_Apply_To,0);
d_A=iMA(Symbol(),TF, xMA_Slow_Period, xMA_Slow_Shift, xMA_Slow_Method, xMA_Slow_Apply_To,0);
WarnaTrend=CheckWarna(d_B, d_A, Trend_Up_Color, Trend_Dn_Color);
Tulis("MP18"+nomor, Right_Top, x-(n*Kolom), y-23, "-", Ukuran, Huruf, WarnaTrend);
//BuySeLL
d_B=iMA(Symbol(),TF, 1, 0, 0, 0, 0);
d_A=iMA(Symbol(),TF, 4, 0, 0, 0, 0);
WarnaTrend=CheckWarna(d_B, d_A, Trend_Up_Color, Trend_Dn_Color);
Tulis("MP19"+nomor, Right_Top, x-(n*Kolom), y-5, "-", Ukuran, Huruf, WarnaTrend);
//Huruf="Tahoma Narrow"; Ukuran=7; x=10+Shift_X; y=88+Shift_Y+44;
//Tulis("MP20", Right_Top, x, y, "Created by ServerUang", Ukuran, Huruf, Gray);
n++;
}//while
}//Show
else
{
Huruf="Tahoma Narrow"; Ukuran=7; x=10+Shift_X; y=88+Shift_Y+4;
Tulis("MP21", Right_Top, x, y, "Created by ServerUang", Ukuran, Huruf, Gray);
}
//----
return(0);
}
// Prosedur Tulis
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void Tulis(string LBL, double sebelah, int pos_x, int pos_y, string teks, int ukuran_huruf, string nama_huruf, color warna=CLR_NONE)
{
Label_Teks=LBL;
ObjectCreate(LBL, OBJ_LABEL, 1, 0, 0);
ObjectSetText(LBL,teks, ukuran_huruf, nama_huruf, warna);
ObjectSet(LBL, OBJPROP_CORNER, sebelah);
ObjectSet(LBL, OBJPROP_XDISTANCE, pos_y);
ObjectSet(LBL, OBJPROP_YDISTANCE, pos_x);
}
// Function CheckWarna
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
color CheckWarna(double a, double b, color U, color D)
{
if (a>b) { return(U); } else { return(D); }
}
//+------------------------------------------------------------------+
Comments