BreakOutBoxes

BreakOutBoxes V2.06

开心版 无广告 228

更新日期:2022-02-22 分类标签: 语言:中文 平台:没限制

41 人已下载 手机查看

BreakOutBoxes

//+------------------------------------------------------------------+
//| BreakOutBoxes.mq4 |
//| Copyright © 2009 DA |
//| |
//| 4 June 2009 v1.1 |
//| Modified to cope with all three major sessions: |
//| Tokyo |
//| Europe (called 'London') |
//| USA |
//| Modified to cope with 5-digit prices. |
//| Modified to cope with Daylight Saving Time in UK and USA. |
//| Stop Loss selection re-instated. |
//| Box width is now fixed: |
//| 7 hours for London (00:00-07:00 BST) |
//| 2 hours for New York (11:00-13:00 BST) |
//| 5 hours for Tokyo (19:00-00:00 GMT) |
//| These work for GMT data sources (IBFX, ODL, etc.). |
//| |
//| 5 June 2009 v1.2 |
//| Modified to cope with all three major sessions: |
//| |
//| 6 June 2009 v1.21 |
//| Selection of Digits made automatic |
//| Selection of session other than 1, 2 or 3 protected |
//| 1 fewer bars selected for calculation of box top & bottom |
//| Operation in timeframes above H1 inhibited |
//| |
//| 7 June 2009 v1.22 |
//| Added code for ADR - Average Daily Range (last 30 days) |
//| |
//| 8 June 2009 v1.23 |
//| Fix for 5-digit code error |
//| |
//| 8 June 2009 v1.24 |
//| Fix to get The Box to draw for next session before time |
//| |
//| 14 June 2009 v1.25 |
//| New architecture copes with look-back. |
//| Added switch for non-black background colours. |
//| |
//| 15 June 2009 v1.26 |
//| Asian session box no display on Sundays |
//| Box begin/end vertical lines added |
//| |
//| 15 June 2009 v1.27 |
//| Fixed Box Range numeric error |
//| |
//| 19 June 2009 v1.28 |
//| Fixed GMT offset problem when box spans two days |
//| Added the broker's spread to all buy prices |
//| |
//| 22 June 2009 v2.0 |
//| Added alerts for Buy/Sell levels being reached during |
//| the active trading box. |
//| |
//| 23 June 2009 v2.01 & v2.02 |
//| Architectural changes to try to avoid having to change |
//| timeframe to get ADR and Spread to calculate on open. |
//| |
//| 26 June 2009 v2.03 |
//| Bug fix - Box Range data now collected from only the box |
//| for the current session (instead of the oldest one drawn |
//| if NumberOfDays is greater than 1) |
//| |
//| 29 June 2009 v2.04 |
//| Bug in Spread calculation on 5-digit data fixed |
//| Vertical line for London open added to iSession = 2 |
//| |
//| 11 July 2009 v2.05 |
//| Changed trading box width - added an hour |
//| Added Stop Loss to items on display on the charts |
//| |
//| 18 July 2009 v2.06 |
//| Added Auto_Stop_Loss facility |
//| |
//| |
//| Grath (DA) |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, YourSource Ltd"
#property link ""

#property indicator_separate_window

//+------------------------------------------------------------------+

extern int Margin = 8;
extern int TP1 = 25;
extern int TP2 = 50;
extern int TP3 = 80;
extern int SL = 30;
extern bool Auto_SL = true;

extern string IIIIIIIIIII = "1=Asia 2=LON 3=NY";
extern int iSession = 2;
extern int GMT_Offset = 0;
extern bool UK_DST = true;
extern bool US_DST = true;
extern int NumberOfDays = 10;
extern int iMaxNoOfDays = 14;

extern int SL_GU = 45;
extern int SL_GJ = 50;
extern int SL_EU = 35;
extern int SL_EJ = 35;
extern int SL_GBPCHF = 30;
extern int SL_USDCHF = 30;

extern bool ChartHasBlkBgd = true;
extern color BoxColor = LightGoldenrod;
extern color TradingBoxColor = DarkSalmon;

extern bool Pop_Up_Box = true;
extern double Alert_Time_Out = 16;
extern string IIIIIIII = "..if TP1 false, alert @ Buy/Sell levels.";
extern bool Alert_On_TP1 = false;
extern bool Alert_on = false;

string editor="Grath 2.06";
double top, bottom;
string sLeft, sBoxEnd, sBoxEndNew, temp, WindowName;
string sFridayClose = "22:00", sTimeLondonOpen;
datetime dtRight, dtLeft, dtTempTime, dtTradingBoxEnd, dtFridayClose;
int BoxLength, TradingBoxWidth, iSpread ;
bool IsAllowed = true;
bool twiddle = false;
bool twiddle2 = false;

double bep, btp1, btp2, btp3, btp4, bsl;
double sep, stp1, stp2, stp3, stp4, ssl;
double drange, dLinePrice, dHeight, dSpread;
double AVG = 0;
string average; // for ADR

double timecur=-1; //this is the time current for the pauses between movements
double timeloc=-1;
double timeloc2= -1;//this is a smaller lock out just for displaying the breach message

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void init()
{
if (NumberOfDays > iMaxNoOfDays) NumberOfDays = iMaxNoOfDays;
switch(iSession)
{
case 1:
IndicatorShortName("Tokyo Box");
WindowName = "Tokyo Box";
sBoxEnd = "23:00";
BoxLength = 5;
break;
case 2:
IndicatorShortName("London Box");
WindowName = "London Box";
if (UK_DST)
{
sBoxEnd = "06:00";
BoxLength = 6;
sTimeLondonOpen = "07:00";
}
else
{
sBoxEnd = "07:00";
BoxLength = 7;
sTimeLondonOpen = "08:00";
}
break;
case 3:
IndicatorShortName("New York Box");
WindowName = "New York Box";
if (US_DST)
{
sBoxEnd = "12:00";
}
else
{
sBoxEnd = "13:00";
}
BoxLength = 2;
break;
default:
IsAllowed = false; // We don't respond to wild inputs
} //switch(iSession)

switch (iSession)
{
case 1: TradingBoxWidth = 6; break;
case 2: TradingBoxWidth = 4; break; // was 3, but now trying 4
case 3: TradingBoxWidth = 3; break; // was 2, but now trying 3
}

// Take care of input parameters
// Stop Loss first
if (Auto_SL)
{
string sTemp = Symbol() ;
if (sTemp == "GBPUSD") SL = SL_GU;
if (sTemp == "EURUSD") SL = SL_EU;
if (sTemp == "EURJPY") SL = SL_EJ;
if (sTemp == "GBPJPY") SL = SL_GJ;
if (sTemp == "GBPCHF") SL = SL_GBPCHF;
if (sTemp == "USDCHF") SL = SL_USDCHF;

}
if (Digits == 5 || Digits == 3)
{
TP1 = TP1 * 10;
TP2 = TP2 * 10;
TP3 = TP3 * 10;
SL = SL * 10;
Margin = Margin * 10;
}

//----Author
ObjectCreate("Ydb", OBJ_LABEL, 0, 0, 0);
if (ChartHasBlkBgd)
{
ObjectSetText("Ydb", editor, 8, "Gungsuh", Yellow);
}
else
{
ObjectSetText("Ydb", editor, 8, "Gungsuh", Blue);
}
ObjectSet("Ydb", OBJPROP_CORNER, 1);
ObjectSet("Ydb", OBJPROP_XDISTANCE, 5);
ObjectSet("Ydb", OBJPROP_YDISTANCE, 5);

//-----Average Daily Range
getADR(ChartHasBlkBgd);

//-----Broker's Spread
iSpread = getSpread(ChartHasBlkBgd);

// Let's see at a glance which Box we're trading
ObjectCreate ("WHICHBOX",OBJ_LABEL, 0,0,0);
if (ChartHasBlkBgd)
{
ObjectSetText("WHICHBOX", WindowName, 10,"Arial Bold", Yellow);
}
else
{
ObjectSetText("WHICHBOX", WindowName, 10,"Arial Bold", Blue);
}
ObjectSet("WHICHBOX", OBJPROP_CORNER, 0);
ObjectSet("WHICHBOX", OBJPROP_XDISTANCE, 5);
ObjectSet("WHICHBOX", OBJPROP_YDISTANCE, 280);

// We need to know if Alerts are ON or OFF
ObjectCreate ("ALERT_ONOFF",OBJ_LABEL, 0,0,0);
if (Alert_on)
{
if (ChartHasBlkBgd)
{
ObjectSetText("ALERT_ONOFF", "Alerts ON", 10,"Arial Bold", Yellow);
}
else
{
ObjectSetText("ALERT_ONOFF", "Alerts ON", 10,"Arial Bold", Blue);
}
}
else
{
if (ChartHasBlkBgd)
{
ObjectSetText("ALERT_ONOFF", "Alerts OFF", 10,"Arial Bold", Yellow);
}
else
{
ObjectSetText("ALERT_ONOFF", "Alerts OFF", 10,"Arial Bold", Blue);
}
}
ObjectSet("ALERT_ONOFF", OBJPROP_CORNER, 0);
ObjectSet("ALERT_ONOFF", OBJPROP_XDISTANCE, 5);
ObjectSet("ALERT_ONOFF", OBJPROP_YDISTANCE, 300);

//----- and now a reminder of what the Margin is set at:
ObjectCreate ("SHOW_MARGIN",OBJ_LABEL, 0,0,0);
if (ChartHasBlkBgd)
{
ObjectSetText("SHOW_MARGIN", "Margin is: " + Margin, 10,"Arial Bold", Yellow);
}
else
{
ObjectSetText("SHOW_MARGIN", "Margin is: " + Margin, 10,"Arial Bold", Blue);
}
ObjectSet("SHOW_MARGIN", OBJPROP_CORNER, 0);
ObjectSet("SHOW_MARGIN", OBJPROP_XDISTANCE, 5);
ObjectSet("SHOW_MARGIN", OBJPROP_YDISTANCE, 320);

//----- and finally a reminder of what the Stop Loss is set at:
ObjectCreate ("SHOW_SL",OBJ_LABEL, 0,0,0);
if (ChartHasBlkBgd)
{
ObjectSetText("SHOW_SL", "Stop Loss: " + SL, 10,"Arial Bold", Yellow);
}
else
{
ObjectSetText("SHOW_SL", "Stop Loss: " + SL, 10,"Arial Bold", Blue);
}
ObjectSet("SHOW_SL", OBJPROP_CORNER, 0);
ObjectSet("SHOW_SL", OBJPROP_XDISTANCE, 5);
ObjectSet("SHOW_SL", OBJPROP_YDISTANCE, 340);

} // init()

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
void deinit()
{
DeleteObjects();
}

 

//+------------------------------------------------------------------+
//| Remove all indicator Rectangles |
//+------------------------------------------------------------------+
void DeleteObjects()
{
datetime dtTradeDate=TimeCurrent();

for (int i=0; i<iMaxNoOfDays; i++)
{
if ( TimeDayOfWeek(dtTradeDate) == 5 && dtTradingBoxEnd > dtFridayClose ) dtTradeDate = decrementTradeDate(dtTradeDate); // Tokyo on Fridays!

ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " LineBAT"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " LineBATL"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " LineBTP1"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " LineBTP1L"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " LineBTP2"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " LineBTP2L"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " LineBTP3"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " LineBTP3L"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " LineSAT"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " LineSATL"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " LineSTP1"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " LineSTP1L"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " LineSTP2"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " LineSTP2L"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " LineSTP3"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " LineSTP3L"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " TheBox"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " TheBox2"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " TimevlActiveRight"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " TimevlLeft"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " TimevlRight"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " TimevlLondonOpen"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " ZoneBuyTP1"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " ZoneBuyTP2"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " ZoneBuyTP3"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " ZoneBuyZone"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " ZoneSellTP1"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " ZoneSellTP2"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " ZoneSellTP3"); //
ObjectDelete(TimeToStr(dtTradeDate,TIME_DATE) + " ZoneSellZone"); //

dtTradeDate=decrementTradeDate(dtTradeDate);
while (TimeDayOfWeek(dtTradeDate) > 5 || TimeDayOfWeek(dtTradeDate) < 1 ) dtTradeDate = decrementTradeDate(dtTradeDate); // Removed Sundays from plots
}
ObjectsDeleteAll(0,OBJ_TEXT);
ObjectDelete("B1");
ObjectDelete("B11");
ObjectDelete("B12");
ObjectDelete("B13");
ObjectDelete("B14");
ObjectDelete("B15");
ObjectDelete("B16");
ObjectDelete("B17");
ObjectDelete("B18");
ObjectDelete("B19");
ObjectDelete("B2");
ObjectDelete("B20");
ObjectDelete("B210");
ObjectDelete("B3");
ObjectDelete("B4");
ObjectDelete("B5");
ObjectDelete("B6");
ObjectDelete("B7");
ObjectDelete("B8");
ObjectDelete("ADR");
ObjectDelete("SPREAD");
ObjectDelete("Ydb");
ObjectDelete("sBoxRange");
ObjectDelete("sPricelabel");
ObjectDelete("sPrice");
ObjectDelete("WHICHBOX");
ObjectDelete("ALERT_ONOFF");
ObjectDelete("SHOW_MARGIN");

//Comment("");

} // DeleteObjects()

//+------------------------------------------------------------------+
//| Calculate 30-day average daily range for the price pair |
//+------------------------------------------------------------------+
void getADR(bool ChartHasBlkBgd)
{
//------ Average Daily Range
AVG = (iHigh(NULL,PERIOD_D1,30)-iLow(NULL,PERIOD_D1,30));
AVG = AVG + (iHigh(NULL,PERIOD_D1,29)-iLow(NULL,PERIOD_D1,29));
AVG = AVG + (iHigh(NULL,PERIOD_D1,28)-iLow(NULL,PERIOD_D1,28));
AVG = AVG + (iHigh(NULL,PERIOD_D1,27)-iLow(NULL,PERIOD_D1,27));
AVG = AVG + (iHigh(NULL,PERIOD_D1,26)-iLow(NULL,PERIOD_D1,26));
AVG = AVG + (iHigh(NULL,PERIOD_D1,25)-iLow(NULL,PERIOD_D1,25));
AVG = AVG + (iHigh(NULL,PERIOD_D1,24)-iLow(NULL,PERIOD_D1,24));
AVG = AVG + (iHigh(NULL,PERIOD_D1,23)-iLow(NULL,PERIOD_D1,23));
AVG = AVG + (iHigh(NULL,PERIOD_D1,22)-iLow(NULL,PERIOD_D1,22));
AVG = AVG + (iHigh(NULL,PERIOD_D1,21)-iLow(NULL,PERIOD_D1,21));
AVG = AVG + (iHigh(NULL,PERIOD_D1,20)-iLow(NULL,PERIOD_D1,20));
AVG = AVG + (iHigh(NULL,PERIOD_D1,19)-iLow(NULL,PERIOD_D1,19));
AVG = AVG + (iHigh(NULL,PERIOD_D1,18)-iLow(NULL,PERIOD_D1,18));
AVG = AVG + (iHigh(NULL,PERIOD_D1,17)-iLow(NULL,PERIOD_D1,17));
AVG = AVG + (iHigh(NULL,PERIOD_D1,16)-iLow(NULL,PERIOD_D1,16));
AVG = AVG + (iHigh(NULL,PERIOD_D1,15)-iLow(NULL,PERIOD_D1,15));
AVG = AVG + (iHigh(NULL,PERIOD_D1,14)-iLow(NULL,PERIOD_D1,14));
AVG = AVG + (iHigh(NULL,PERIOD_D1,13)-iLow(NULL,PERIOD_D1,13));
AVG = AVG + (iHigh(NULL,PERIOD_D1,12)-iLow(NULL,PERIOD_D1,12));
AVG = AVG + (iHigh(NULL,PERIOD_D1,11)-iLow(NULL,PERIOD_D1,11));
AVG = AVG + (iHigh(NULL,PERIOD_D1,10)-iLow(NULL,PERIOD_D1,10));
AVG = AVG + (iHigh(NULL,PERIOD_D1,9)-iLow(NULL,PERIOD_D1,9));
AVG = AVG + (iHigh(NULL,PERIOD_D1,8)-iLow(NULL,PERIOD_D1,8));
AVG = AVG + (iHigh(NULL,PERIOD_D1,7)-iLow(NULL,PERIOD_D1,7));
AVG = AVG + (iHigh(NULL,PERIOD_D1,6)-iLow(NULL,PERIOD_D1,6));
AVG = AVG + (iHigh(NULL,PERIOD_D1,5)-iLow(NULL,PERIOD_D1,5));
AVG = AVG + (iHigh(NULL,PERIOD_D1,4)-iLow(NULL,PERIOD_D1,4));
AVG = AVG + (iHigh(NULL,PERIOD_D1,3)-iLow(NULL,PERIOD_D1,3));
AVG = AVG + (iHigh(NULL,PERIOD_D1,2)-iLow(NULL,PERIOD_D1,2));
AVG = AVG + (iHigh(NULL,PERIOD_D1,1)-iLow(NULL,PERIOD_D1,1));
AVG = AVG/30;
switch(Digits)
{
case 5: AVG = AVG*10000; break; // Deal with the extra one
case 4: AVG = AVG*10000; break;
case 3: AVG = AVG*100; break; // Deal with the extra one
case 2: AVG = AVG*100; break;
}
ObjectCreate ("ADR",OBJ_LABEL, 0,0,0);
if (ChartHasBlkBgd)
{
ObjectSetText("ADR", "ADR: "+ DoubleToStr(AVG,0) + " pips.", 9,"Georgia", Yellow);
}
else
{
ObjectSetText("ADR", "ADR: "+ DoubleToStr(AVG,0) + " pips.", 9,"Georgia", Blue);
}
ObjectSet("ADR", OBJPROP_CORNER, 1);
ObjectSet("ADR", OBJPROP_XDISTANCE, 5);
ObjectSet("ADR", OBJPROP_YDISTANCE, 40);
}

//+------------------------------------------------------------------+
//| Calculate the broker's spread for the price pair |
//+------------------------------------------------------------------+
int getSpread(bool ChartHasBlkBgd)
{
// What's the spread on this pair?
// -------------------------------

iSpread=MarketInfo(Symbol(),MODE_SPREAD);
if (Digits==5 || Digits==3)
{
iSpread = iSpread/10;
}

ObjectCreate ("SPREAD",OBJ_LABEL, 0,0,0);
if (ChartHasBlkBgd)
{
ObjectSetText("SPREAD", "Spread: "+ iSpread + " pips.", 9,"Georgia", Yellow);
}
else
{
ObjectSetText("SPREAD", "Spread: "+ iSpread + " pips.", 9,"Georgia", Blue);
}
ObjectSet("SPREAD", OBJPROP_CORNER, 1);
ObjectSet("SPREAD", OBJPROP_XDISTANCE, 5);
ObjectSet("SPREAD", OBJPROP_YDISTANCE, 60);

return(iSpread);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
void start()
{
if (Period() < 61)
{
if (IsAllowed)
{
int counted_bars=IndicatorCounted();

//getADR(ChartHasBlkBgd);
//iSpread = getSpread(ChartHasBlkBgd);

datetime dtTradeDate=TimeCurrent(); //Sets up date/time of last bar displayed

// Create the box times
//---------------------
// Change sBoxEnd according to GMT_Offset
dtTempTime = StrToTime(TimeToStr(D'1970.01.01 ',TIME_DATE ) + " " + sBoxEnd);
dtTempTime = dtTempTime + (3600 * GMT_Offset);
sBoxEndNew = TimeToStr(dtTempTime, TIME_MINUTES);
dtRight = StrToTime (TimeToStr (dtTradeDate, TIME_DATE) + " " + sBoxEndNew);

sLeft = TimeToStr( dtRight - D'1970.01.01 1'* BoxLength, TIME_MINUTES );
dtLeft = StrToTime (TimeToStr (dtTradeDate, TIME_DATE) + " " + sLeft);

string periodB_end = TimeToStr( dtRight + D'1970.01.01 1'* TradingBoxWidth, TIME_MINUTES );
dtTradingBoxEnd = StrToTime (TimeToStr (dtTradeDate, TIME_DATE) + " " + periodB_end);

dtTempTime = StrToTime(TimeToStr(D'1970.01.01 ',TIME_DATE ) + " " + sFridayClose);
dtTempTime = dtTempTime + (3600 * GMT_Offset);
sFridayClose = TimeToStr(dtTempTime, TIME_MINUTES);
dtFridayClose = StrToTime(TimeToStr(dtTradeDate,TIME_DATE ) + " " + sFridayClose);

if (dtLeft > dtRight) twiddle = true; // to set DateFix in the for loop
if (dtRight > dtTradingBoxEnd) twiddle2 = true; // to set DateFix in the for loop
if (twiddle2) dtFridayClose = dtFridayClose - 86400;

// -------- This is where we start drawing boxes and lines -----------------//

for (int i=0; i<NumberOfDays; i++)
{
if ( TimeDayOfWeek(dtTradeDate) == 5 && dtTradingBoxEnd > dtFridayClose ) dtTradeDate = decrementTradeDate(dtTradeDate); // Tokyo on Fridays!
DrawObjects(dtTradeDate, TimeToStr(dtTradeDate,TIME_DATE) + " TheBox", sLeft, sBoxEndNew, periodB_end, ChartHasBlkBgd, BoxColor, TradingBoxColor, Margin, iSession, GMT_Offset, iSpread, twiddle, twiddle2, i, Alert_on, Pop_Up_Box, Alert_Time_Out, 1); // draws The Box
DrawObjects(dtTradeDate, WindowName, sLeft, sBoxEndNew, periodB_end, ChartHasBlkBgd,SpringGreen, SpringGreen, Margin, iSession, GMT_Offset, iSpread, twiddle, twiddle2, i, Alert_on, Pop_Up_Box, Alert_Time_Out, 5); // Draw the separate window
DrawObjects(dtTradeDate, TimeToStr(dtTradeDate,TIME_DATE) + " Line", sLeft, sBoxEndNew, periodB_end, ChartHasBlkBgd, SpringGreen, SpringGreen, Margin, iSession, GMT_Offset, iSpread, twiddle, twiddle2, i, Alert_on, Pop_Up_Box, Alert_Time_Out, 2);
DrawObjects(dtTradeDate, TimeToStr(dtTradeDate,TIME_DATE) + " Time", sLeft, sBoxEndNew, periodB_end, ChartHasBlkBgd, SpringGreen, SpringGreen, Margin, iSession, GMT_Offset, iSpread, twiddle, twiddle2, i, Alert_on, Pop_Up_Box, Alert_Time_Out, 6); // vertical lines
DrawObjects(dtTradeDate, TimeToStr(dtTradeDate,TIME_DATE) + " Zone", sLeft, sBoxEndNew, periodB_end, ChartHasBlkBgd, SpringGreen, SpringGreen, Margin, iSession, GMT_Offset, iSpread, twiddle, twiddle2, i, Alert_on, Pop_Up_Box, Alert_Time_Out, 4); // Draw buy and sell zones

dtTradeDate=decrementTradeDate(dtTradeDate);
while (TimeDayOfWeek(dtTradeDate) > 5 || TimeDayOfWeek(dtTradeDate) < 1 ) dtTradeDate = decrementTradeDate(dtTradeDate); // Remove Sat/Sun from plots
} //for
} //if IsAllowed
else
{
Print("iSession can only be 1, 2 or 3!");
}
} //if Period() < 61
else
{
Print("Period over H1 not supported!");
}
} //start()

 

//+------------------------------------------------------------------+
//| Create Objects - Rectangles and Trend lines |
//+------------------------------------------------------------------+

void DrawObjects(datetime dtTradeDate, string sObjName, string sTimeBegin, string sTimeEnd, string sTimeTradeEnd, bool BlkBgd, color cObjColor1, color cObjColor2, int iMargin, int Session, int iGMT_Offset, int iSpread, bool DateFix, bool DateFix2, int iCtr, bool Alert_on, bool Pop_Up_Box, double Time_Out, int iForm)
{
datetime dtTimeBegin, dtTimeEnd, dtTimeObjEnd, dtLineEnd, dtTimeLondonOpen;
double dPriceHigh, dPriceLow, dPriceOpen, dPriceClose, dPriceMid;
int iBarBegin, iBarEnd;
string sObjDesc;

dtTimeBegin = StrToTime(TimeToStr(dtTradeDate, TIME_DATE) + " " + sTimeBegin);
dtTimeEnd = StrToTime(TimeToStr(dtTradeDate, TIME_DATE) + " " + sTimeEnd);
if (DateFix) dtTimeBegin = dtTimeBegin - 86400;
dtTimeObjEnd = StrToTime(TimeToStr(dtTradeDate, TIME_DATE) + " " + sTimeTradeEnd);
if (DateFix2) dtTimeObjEnd = dtTimeObjEnd + 86400;

dtLineEnd = StrToTime(TimeToStr ( dtTimeEnd + D'1970.01.01 1'* 3 )); // for the price trendlines
dtTimeLondonOpen = StrToTime(TimeToStr(dtTradeDate, TIME_DATE) + " " + sTimeLondonOpen);

iBarBegin = iBarShift(NULL, 0, dtTimeBegin) + 1;
iBarEnd = iBarShift(NULL, 0, dtTimeEnd) + 1;

dPriceHigh = High[Highest(NULL, 0, MODE_HIGH, (iBarBegin)-iBarEnd, iBarEnd)];
dPriceLow = Low [Lowest (NULL, 0, MODE_LOW , (iBarBegin)-iBarEnd, iBarEnd)];

top = dPriceHigh;
bottom = dPriceLow;

bep = top+(iMargin * Point);
btp1 = bep+(TP1*Point);
btp2 = bep+(TP2*Point);
btp3 = bep+(TP3*Point);
if (Digits==5 || Digits==3)
{
btp4 = btp3+(200*Point);
}
else
{
btp4 = btp3+(20*Point);
}
bsl = bep-(SL*Point);

sep = bottom-(iMargin*Point);
stp1 = sep-(TP1*Point);
stp2 = sep-(TP2*Point);
stp3 = sep-(TP3*Point);
if (Digits==5 || Digits==3)
{
stp4 = stp3-(200*Point);
}
else
{
stp4 = stp3-(20*Point);
}
ssl = sep+(SL*Point);

if (iCtr == 0)
{
drange = (top-bottom)/Point;
switch (Digits)
{
case 5: drange = drange/10; dSpread = iSpread*Point*10; break;
case 4: drange = drange; dSpread = iSpread*Point; break;
case 3: drange = drange/10; dSpread = iSpread*Point*10; break;
case 2: drange = drange; dSpread = iSpread*Point; break;
}
}

//------------------------------------------------------------------------------------------------------+
// Alerts - From Chin Breakout Alert |
//------------------------------------------------------------------------------------------------------+

if (Alert_On_TP1)
{
if (Close[0] >= btp1 && TimeCurrent() > timeloc && Alert_on == true && iCtr == 0 && TimeCurrent() >= dtTimeEnd && TimeCurrent() <= dtTimeObjEnd)
{
timeloc2=TimeCurrent()+4.5; //this is a smaller lock out just for displaying the breech message
timeloc= TimeCurrent(); //done just for a slight pause
if (Pop_Up_Box==False)
{
PlaySound("Alert2.wav");
for(double asdfff =1;asdfff <1900.0239 😉 asdfff+=.91231; //a little pause
while(TimeCurrent()<=timeloc) asdfff=0; //another little pause
PlaySound("Alert.wav");
}
else {Alert("Breakout North ", Symbol()," ",DoubleToStr(bep, Digits));}
timeloc=TimeCurrent()+Time_Out; //how many seconds do we lock out the Alert
}
if (Close[0] <= stp1 && TimeCurrent() > timeloc && Alert_on ==true && iCtr == 0 && TimeCurrent() >= dtTimeEnd && TimeCurrent() <= dtTimeObjEnd)
{
timeloc2=TimeCurrent()+4.5;//this is a smaller lock out just for displaying the breech message
timeloc =TimeCurrent(); //just for a slight, unofficial pause
if (Pop_Up_Box==False)
{
PlaySound("Alert.wav");
for(double asdf =1;asdf <1200.0239 😉 asdf+=.91231; //a little pause
while(TimeCurrent()<=timeloc) asdf=0; //another little pause
PlaySound("Alert2.wav");
}
else {Alert("Breakout South ",Symbol()," ",DoubleToStr(sep, Digits));}
timeloc=TimeCurrent()+Time_Out; //how many seconds do we lock out the Alert
}
}
else
{
if (Close[0] >= bep && TimeCurrent() > timeloc && Alert_on == true && iCtr == 0 && TimeCurrent() >= dtTimeEnd && TimeCurrent() <= dtTimeObjEnd)
{
timeloc2=TimeCurrent()+4.5; //this is a smaller lock out just for displaying the breech message
timeloc= TimeCurrent(); //done just for a slight pause
if (Pop_Up_Box==False)
{
PlaySound("Alert2.wav");
for(double lasdfff =1;lasdfff <1900.0239 😉 lasdfff+=.91231; //a little pause
while(TimeCurrent()<=timeloc) lasdfff=0; //another little pause
PlaySound("Alert.wav");
}
else {Alert("Breakout North ", Symbol()," ",DoubleToStr(bep, Digits));}
timeloc=TimeCurrent()+Time_Out; //how many seconds do we lock out the Alert
}
if (Close[0] <= bep && TimeCurrent() > timeloc && Alert_on ==true && iCtr == 0 && TimeCurrent() >= dtTimeEnd && TimeCurrent() <= dtTimeObjEnd)
{
timeloc2=TimeCurrent()+4.5;//this is a smaller lock out just for displaying the breech message
timeloc =TimeCurrent(); //just for a slight, unofficial pause
if (Pop_Up_Box==False)
{
PlaySound("Alert.wav");
for(double lasdf =1;lasdf <1200.0239 😉 lasdf+=.91231; //a little pause
while(TimeCurrent()<=timeloc) lasdf=0; //another little pause
PlaySound("Alert2.wav");
}
else {Alert("Breakout South ",Symbol()," ",DoubleToStr(sep, Digits));}
timeloc=TimeCurrent()+Time_Out; //how many seconds do we lock out the Alert
}
}

//------------------------------------------------------------------------------------------------------

 

//---- Rectangles - The Box and the Trading Box
if(iForm==1)
{
//Comment("\nCounter: ", iCtr);
//Comment("\nTime begin: ", TimeToStr(dtTimeBegin, 1), " ", TimeToStr(dtTimeBegin, 2), "\nTime end: ", TimeToStr(dtTimeEnd, 1), " ", TimeToStr(dtTimeEnd, 2), "\nTime 2nd end: ", TimeToStr(dtTimeObjEnd, 1), " ", TimeToStr(dtTimeObjEnd, 2), "\nTop: ", DoubleToStr(dPriceHigh,5), "\nBottom: ", DoubleToStr(dPriceLow,5), "\nsTimeBegin: ", sTimeBegin , "\nsTimeEnd: ", sTimeEnd, "\nsTimeTradeEnd: ", sTimeTradeEnd ) ;

ObjectCreate(sObjName, OBJ_RECTANGLE, 0, 0, 0, 0);
ObjectSet(sObjName, OBJPROP_TIME1 , dtTimeBegin);
ObjectSet(sObjName, OBJPROP_TIME2 , dtTimeEnd);
ObjectSet(sObjName, OBJPROP_PRICE1, dPriceHigh);
ObjectSet(sObjName, OBJPROP_PRICE2, dPriceLow);
ObjectSet(sObjName, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(sObjName, OBJPROP_COLOR, cObjColor1);
ObjectSet(sObjName, OBJPROP_WIDTH, 1);

ObjectCreate(sObjName+"2", OBJ_RECTANGLE, 0, 0, 0, 0);
ObjectSet(sObjName+"2", OBJPROP_TIME1 , dtTimeEnd);
ObjectSet(sObjName+"2", OBJPROP_TIME2 , dtTimeObjEnd); //dtTimeObjEnd
ObjectSet(sObjName+"2", OBJPROP_PRICE1, dPriceHigh);
ObjectSet(sObjName+"2", OBJPROP_PRICE2, dPriceLow);
ObjectSet(sObjName+"2", OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(sObjName+"2", OBJPROP_COLOR, cObjColor2);
ObjectSet(sObjName+"2", OBJPROP_BACK, 1);

//------ Box Range and some labels in main window
if(ObjectFind("sBoxRange") == -1)
{
ObjectCreate ("sBoxRange",OBJ_LABEL, 0, 0, 0);
}
if (BlkBgd)
{
ObjectSetText("sBoxRange", "Box Range: "+ DoubleToStr(drange,Point) + " pips.", 10,"Georgia", Yellow);
}
else
{
ObjectSetText("sBoxRange", "Box Range: "+ DoubleToStr(drange,Point) + " pips.", 10,"Georgia", Blue);
}
ObjectSet("sBoxRange", OBJPROP_CORNER, 1);
ObjectSet("sBoxRange", OBJPROP_XDISTANCE, 5);
ObjectSet("sBoxRange", OBJPROP_YDISTANCE, 20);

if(ObjectFind("sPriceLabel") == -1)
{
ObjectCreate ("sPriceLabel",OBJ_LABEL, 0, 0, 0);
if (BlkBgd)
{
ObjectSetText("sPriceLabel", "PRICE", 10,"Arial Bold", Silver);
}
else
{
ObjectSetText("sPriceLabel", "PRICE", 10,"Arial Bold", SlateGray);
}
ObjectSet("sPriceLabel", OBJPROP_CORNER, 0);
ObjectSet("sPriceLabel", OBJPROP_XDISTANCE, 5);
ObjectSet("sPriceLabel", OBJPROP_YDISTANCE, 255);
}

if(ObjectFind("sPrice") == -1)
{
ObjectCreate ("sPrice",OBJ_LABEL, 0, 0, 0);
}
if (BlkBgd)
{
ObjectSetText("sPrice",DoubleToStr (Bid,Digits), 15,"Arial Bold", Silver);
}
else
{
ObjectSetText("sPrice",DoubleToStr (Bid,Digits), 15,"Arial Bold", SlateGray);
}
ObjectSet("sPrice", OBJPROP_CORNER, 0);
ObjectSet("sPrice", OBJPROP_XDISTANCE, 55);
ObjectSet("sPrice", OBJPROP_YDISTANCE, 250);

} // if(iForm==1)

if(iForm==2) // draw the price lines
{
if (iCtr == 0)
{
//------ Draw the lines and text
double SetOff = 8*Point;
if (Digits == 5 || Digits == 3) SetOff = SetOff * 10; // Put the text above the line
ObjectCreate(sObjName+"BATL", OBJ_TEXT, 0, Time[5], bep);
ObjectSetText(sObjName+"BATL", " BUY AT @ "+DoubleToStr(bep+dSpread,Digits)+"", 8, "Arial", PaleGreen);
ObjectMove(sObjName+"BATL", 0, dtTimeBegin, bep + SetOff + dSpread ); // Put the text above the line

ObjectCreate (sObjName+"BAT", OBJ_TREND, 0, 0, 0);
ObjectSet(sObjName+"BAT", OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(sObjName+"BAT", OBJPROP_COLOR,SpringGreen );
ObjectSet(sObjName+"BAT", OBJPROP_TIME1 , dtTimeBegin);
ObjectSet(sObjName+"BAT", OBJPROP_TIME2 , dtLineEnd);
ObjectSet(sObjName+"BAT", OBJPROP_PRICE1, bep+dSpread);
ObjectSet(sObjName+"BAT", OBJPROP_PRICE2, bep+dSpread);
ObjectSet(sObjName+"BAT", OBJPROP_WIDTH, 1);
ObjectSet(sObjName+"BAT", OBJPROP_BACK, 1);
//ObjectMove("BAT", bep, Time[0], bep );

ObjectCreate(sObjName+"BTP1L", OBJ_TEXT, 0, Time[0], btp1+dSpread);
ObjectSetText(sObjName+"BTP1L", " PROFIT TARGET 1: "+DoubleToStr(btp1+dSpread,Digits)+"", 8, "Arial", Silver);
ObjectMove(sObjName+"BTP1L", 0, dtTimeBegin, btp1+dSpread );

ObjectCreate (sObjName+"BTP1",OBJ_TREND, 0, 0, 0);
ObjectSet(sObjName+"BTP1", OBJPROP_STYLE, STYLE_DASHDOTDOT);
ObjectSet(sObjName+"BTP1", OBJPROP_COLOR,SpringGreen );
ObjectSet(sObjName+"BTP1", OBJPROP_TIME1 , dtTimeBegin);
ObjectSet(sObjName+"BTP1", OBJPROP_TIME2 , dtLineEnd);
ObjectSet(sObjName+"BTP1", OBJPROP_PRICE1, btp1+dSpread);
ObjectSet(sObjName+"BTP1", OBJPROP_PRICE2, btp1+dSpread);
ObjectSet(sObjName+"BTP1", OBJPROP_WIDTH, 1);
ObjectSet(sObjName+"BTP1", OBJPROP_BACK, 1);
//ObjectMove("BTP1", 0, Time[0], btp1+dSpread );

ObjectCreate(sObjName+"BTP2L", OBJ_TEXT, 0, Time[0], btp2+dSpread);
ObjectSetText(sObjName+"BTP2L", " PROFIT TARGET 2: "+DoubleToStr(btp2+dSpread,Digits)+"", 8, "Arial", Silver);
ObjectMove(sObjName+"BTP2L", 0, dtTimeBegin, btp2+dSpread );

ObjectCreate (sObjName+"BTP2",OBJ_TREND, 0, 0, 0);
ObjectSet(sObjName+"BTP2", OBJPROP_STYLE, STYLE_DASHDOTDOT);
ObjectSet(sObjName+"BTP2", OBJPROP_COLOR,SpringGreen );
ObjectSet(sObjName+"BTP2", OBJPROP_TIME1 , dtTimeBegin); //--
ObjectSet(sObjName+"BTP2", OBJPROP_TIME2 , dtLineEnd);
ObjectSet(sObjName+"BTP2", OBJPROP_PRICE1, btp2+dSpread);
ObjectSet(sObjName+"BTP2", OBJPROP_PRICE2, btp2+dSpread);
ObjectSet(sObjName+"BTP2", OBJPROP_WIDTH, 1);
ObjectSet(sObjName+"BTP2", OBJPROP_BACK, 1); //--
//ObjectMove("BTP2",btp2, Time[0],btp2 );

ObjectCreate(sObjName+"BTP3L", OBJ_TEXT, 0, Time[0], btp3+dSpread);
ObjectSetText(sObjName+"BTP3L", " PROFIT TARGET 3: "+DoubleToStr(btp3+dSpread,Digits)+"", 8, "Arial", Silver);
ObjectMove(sObjName+"BTP3L", 0, dtTimeBegin, btp3+dSpread );

ObjectCreate (sObjName+"BTP3",OBJ_TREND, 0, 0, 0);
ObjectSet(sObjName+"BTP3", OBJPROP_STYLE, STYLE_DASHDOTDOT);
ObjectSet(sObjName+"BTP3", OBJPROP_COLOR,SpringGreen );
ObjectSet(sObjName+"BTP3", OBJPROP_TIME1 , dtTimeBegin); //--
ObjectSet(sObjName+"BTP3", OBJPROP_TIME2 , dtLineEnd);
ObjectSet(sObjName+"BTP3", OBJPROP_PRICE1, btp3+dSpread);
ObjectSet(sObjName+"BTP3", OBJPROP_PRICE2, btp3+dSpread);
ObjectSet(sObjName+"BTP3", OBJPROP_WIDTH, 1);
ObjectSet(sObjName+"BTP3", OBJPROP_BACK, 1); //--
//ObjectMove(sObjName+"BTP3", 0, dtTimeBegin, btp3 + dSpread );

ObjectCreate(sObjName+"SATL", OBJ_TEXT, 0, Time[5], sep);
ObjectSetText(sObjName+"SATL", " SELL AT @ "+DoubleToStr(sep,Digits)+"", 8, "Arial", PaleGreen);
ObjectMove(sObjName+"SATL",0, dtTimeBegin, sep );

ObjectCreate (sObjName+"SAT",OBJ_TREND, 0, 0, 0);
ObjectSet(sObjName+"SAT", OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(sObjName+"SAT", OBJPROP_COLOR,OrangeRed );
ObjectSet(sObjName+"SAT", OBJPROP_TIME1 , dtTimeBegin); //--
ObjectSet(sObjName+"SAT", OBJPROP_TIME2 , dtLineEnd);
ObjectSet(sObjName+"SAT", OBJPROP_PRICE1, sep);
ObjectSet(sObjName+"SAT", OBJPROP_PRICE2, sep);
ObjectSet(sObjName+"SAT", OBJPROP_WIDTH, 1);
ObjectSet(sObjName+"SAT", OBJPROP_BACK, 1); //--
//ObjectMove("SAT",sep, Time[0],sep );

ObjectCreate(sObjName+"STP1L", OBJ_TEXT, 0, Time[0], stp1);
ObjectSetText(sObjName+"STP1L", " PROFIT TARGET 1: "+DoubleToStr(stp1,Digits)+"", 8, "Arial", Silver);
ObjectMove(sObjName+"STP1L", 0, dtTimeBegin, stp1 );

ObjectCreate (sObjName+"STP1",OBJ_TREND, 0, 0, 0);
ObjectSet(sObjName+"STP1", OBJPROP_STYLE, STYLE_DASHDOTDOT);
ObjectSet(sObjName+"STP1", OBJPROP_COLOR,OrangeRed );
ObjectSet(sObjName+"STP1", OBJPROP_TIME1 , dtTimeBegin); //--
ObjectSet(sObjName+"STP1", OBJPROP_TIME2 , dtLineEnd);
ObjectSet(sObjName+"STP1", OBJPROP_PRICE1, stp1);
ObjectSet(sObjName+"STP1", OBJPROP_PRICE2, stp1);
ObjectSet(sObjName+"STP1", OBJPROP_WIDTH, 1);
ObjectSet(sObjName+"STP1", OBJPROP_BACK, 1); //--
//ObjectMove(sObjName+"STP1",stp1, Time[0],stp1 );

ObjectCreate(sObjName+"STP2L", OBJ_TEXT, 0, Time[0], stp2);
ObjectSetText(sObjName+"STP2L", " PROFIT TARGET 2: "+DoubleToStr(stp2,Digits)+"", 8, "Arial", Silver);
ObjectMove(sObjName+"STP2L", 0, dtTimeBegin, stp2 );

ObjectCreate (sObjName+"STP2",OBJ_TREND, 0, 0, 0);
ObjectSet(sObjName+"STP2", OBJPROP_STYLE, STYLE_DASHDOTDOT);
ObjectSet(sObjName+"STP2", OBJPROP_COLOR,OrangeRed );
ObjectSet(sObjName+"STP2", OBJPROP_TIME1 , dtTimeBegin); //--
ObjectSet(sObjName+"STP2", OBJPROP_TIME2 , dtLineEnd);
ObjectSet(sObjName+"STP2", OBJPROP_PRICE1, stp2);
ObjectSet(sObjName+"STP2", OBJPROP_PRICE2, stp2);
ObjectSet(sObjName+"STP2", OBJPROP_WIDTH, 1);
ObjectSet(sObjName+"STP2", OBJPROP_BACK, 1); //--
//ObjectMove(sObjName+"STP2",stp2, Time[0],stp2 );

ObjectCreate(sObjName+"STP3L", OBJ_TEXT, 0, Time[0], stp3);
ObjectSetText(sObjName+"STP3L", " PROFIT TARGET 3: "+DoubleToStr(stp3,Digits)+"", 8, "Arial", Silver);
ObjectMove(sObjName+"STP3L", 0, dtTimeBegin, stp3 );

ObjectCreate (sObjName+"STP3",OBJ_TREND, 0, 0, 0);
ObjectSet(sObjName+"STP3", OBJPROP_STYLE, STYLE_DASHDOTDOT);
ObjectSet(sObjName+"STP3", OBJPROP_COLOR,OrangeRed );
ObjectSet(sObjName+"STP3", OBJPROP_TIME1 , dtTimeBegin); //--
ObjectSet(sObjName+"STP3", OBJPROP_TIME2 , dtLineEnd);
ObjectSet(sObjName+"STP3", OBJPROP_PRICE1, stp3);
ObjectSet(sObjName+"STP3", OBJPROP_PRICE2, stp3);
ObjectSet(sObjName+"STP3", OBJPROP_WIDTH, 1);
ObjectSet(sObjName+"STP3", OBJPROP_BACK, 1); //--
//ObjectMove(sObjName+"STP3",stp3, Time[0],stp3 );

} //if (TimeToStr( dtTimeBegin, 1) == TimeToStr( TimeCurrent(), 1))
} // if(iForm==2)

//----- The Zones
if(iForm==4)
{
if (ObjectFind(sObjName+"BuyZone")<0) ObjectCreate(sObjName+"BuyZone", OBJ_RECTANGLE, 0,0, 0,0);
ObjectSet(sObjName+"BuyZone", OBJPROP_TIME1 , dtTimeEnd);
ObjectSet(sObjName+"BuyZone", OBJPROP_PRICE1 , btp1+dSpread);
ObjectSet(sObjName+"BuyZone", OBJPROP_TIME2 , dtTimeObjEnd);
ObjectSet(sObjName+"BuyZone", OBJPROP_PRICE2 , bep+dSpread);
ObjectSet(sObjName+"BuyZone", OBJPROP_COLOR , C'0,0,150');

if (ObjectFind(sObjName+"BuyTP1")<0) ObjectCreate(sObjName+"BuyTP1", OBJ_RECTANGLE, 0,0, 0,0);
ObjectSet(sObjName+"BuyTP1", OBJPROP_TIME1 , dtTimeEnd);
ObjectSet(sObjName+"BuyTP1", OBJPROP_PRICE1 , btp2+dSpread);
ObjectSet(sObjName+"BuyTP1", OBJPROP_TIME2 , dtTimeObjEnd);
ObjectSet(sObjName+"BuyTP1", OBJPROP_PRICE2 , btp1+dSpread);
ObjectSet(sObjName+"BuyTP1", OBJPROP_COLOR , C'0,0,180');

if (ObjectFind(sObjName+"BuyTP2")<0) ObjectCreate(sObjName+"BuyTP2", OBJ_RECTANGLE, 0,0, 0,0);
ObjectSet(sObjName+"BuyTP2", OBJPROP_TIME1 , dtTimeEnd);
ObjectSet(sObjName+"BuyTP2", OBJPROP_PRICE1 , btp3+dSpread);
ObjectSet(sObjName+"BuyTP2", OBJPROP_TIME2 , dtTimeObjEnd);
ObjectSet(sObjName+"BuyTP2", OBJPROP_PRICE2 , btp2+dSpread);
ObjectSet(sObjName+"BuyTP2", OBJPROP_COLOR , C'0,0,210');

if (ObjectFind(sObjName+"BuyTP3")<0) ObjectCreate(sObjName+"BuyTP3", OBJ_RECTANGLE, 0,0, 0,0);
ObjectSet(sObjName+"BuyTP3", OBJPROP_TIME1 , dtTimeEnd);
ObjectSet(sObjName+"BuyTP3", OBJPROP_PRICE1 , btp4+dSpread);
ObjectSet(sObjName+"BuyTP3", OBJPROP_TIME2 , dtTimeObjEnd);
ObjectSet(sObjName+"BuyTP3", OBJPROP_PRICE2 , btp3+dSpread);
ObjectSet(sObjName+"BuyTP3", OBJPROP_COLOR , C'0,0,235');

if (ObjectFind(sObjName+"SellZone")<0) ObjectCreate(sObjName+"SellZone", OBJ_RECTANGLE, 0,0, 0,0);
ObjectSet(sObjName+"SellZone", OBJPROP_TIME1 , dtTimeEnd);
ObjectSet(sObjName+"SellZone", OBJPROP_PRICE1 , stp1);
ObjectSet(sObjName+"SellZone", OBJPROP_TIME2 , dtTimeObjEnd);
ObjectSet(sObjName+"SellZone", OBJPROP_PRICE2 , sep);
ObjectSet(sObjName+"SellZone", OBJPROP_COLOR , C'150,0,0');

if (ObjectFind(sObjName+"SellTP1")<0) ObjectCreate(sObjName+"SellTP1", OBJ_RECTANGLE, 0,0, 0,0);
ObjectSet(sObjName+"SellTP1", OBJPROP_TIME1 , dtTimeEnd);
ObjectSet(sObjName+"SellTP1", OBJPROP_PRICE1 , stp2);
ObjectSet(sObjName+"SellTP1", OBJPROP_TIME2 , dtTimeObjEnd);
ObjectSet(sObjName+"SellTP1", OBJPROP_PRICE2 , stp1);
ObjectSet(sObjName+"SellTP1", OBJPROP_COLOR , C'180,0,0');

if (ObjectFind(sObjName+"SellTP2")<0) ObjectCreate(sObjName+"SellTP2", OBJ_RECTANGLE, 0,0, 0,0);
ObjectSet(sObjName+"SellTP2", OBJPROP_TIME1 , dtTimeEnd);
ObjectSet(sObjName+"SellTP2", OBJPROP_PRICE1 , stp3);
ObjectSet(sObjName+"SellTP2", OBJPROP_TIME2 , dtTimeObjEnd);
ObjectSet(sObjName+"SellTP2", OBJPROP_PRICE2 , stp2);
ObjectSet(sObjName+"SellTP2", OBJPROP_COLOR , C'210,0,0');

if (ObjectFind(sObjName+"SellTP3")<0) ObjectCreate(sObjName+"SellTP3", OBJ_RECTANGLE, 0,0, 0,0);
ObjectSet(sObjName+"SellTP3", OBJPROP_TIME1 , dtTimeEnd);
ObjectSet(sObjName+"SellTP3", OBJPROP_PRICE1 , stp4);
ObjectSet(sObjName+"SellTP3", OBJPROP_TIME2 , dtTimeObjEnd);
ObjectSet(sObjName+"SellTP3", OBJPROP_PRICE2 , stp3);
ObjectSet(sObjName+"SellTP3", OBJPROP_COLOR , C'245,0,0');

} //if(iForm==4)

//----- the separate data window.
//---------- sObjName contains the session name from WindowName
if(iForm==5)
{
//if (MustWait) return(0);
if (TimeToStr( dtTimeBegin, 1) == TimeToStr( TimeCurrent(), 1) || (DateFix && TimeToStr( dtTimeBegin + 86400, 1) == TimeToStr( TimeCurrent(), 1)))
{
ObjectCreate ("B1",OBJ_LABEL, WindowFind(sObjName),0,0);
if(BlkBgd)
{
ObjectSetText("B1", ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 8,"Arial Bold", White);
}
else
{
ObjectSetText("B1", ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 8,"Arial Bold", SlateGray);
}
ObjectSet("B1", OBJPROP_CORNER, 0);
ObjectSet("B1", OBJPROP_XDISTANCE, 5);
ObjectSet("B1", OBJPROP_YDISTANCE, 10);

ObjectCreate ("B2",OBJ_LABEL, WindowFind(sObjName),0,0);
ObjectSetText("B2", "BUY ZONE", 9,"Arial Bold", DeepSkyBlue);
ObjectSet("B2", OBJPROP_CORNER, 0);
ObjectSet("B2", OBJPROP_XDISTANCE, 5);
ObjectSet("B2", OBJPROP_YDISTANCE, 25);

ObjectCreate ("B3",OBJ_LABEL, WindowFind(sObjName),0,0);
if(BlkBgd)
{
ObjectSetText("B3", ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 8,"Arial Bold", White);
}
else
{
ObjectSetText("B3", ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 8,"Arial Bold", SlateGray);
}
ObjectSet("B3", OBJPROP_CORNER, 0);
ObjectSet("B3", OBJPROP_XDISTANCE, 5);
ObjectSet("B3", OBJPROP_YDISTANCE, 35);

ObjectCreate ("B4",OBJ_LABEL, WindowFind(sObjName),0,0);
ObjectSetText("B4", "BUY "+Symbol()+ " AT @", 9,"Arial Bold", DodgerBlue);
ObjectSet("B4", OBJPROP_CORNER, 0);
ObjectSet("B4", OBJPROP_XDISTANCE, 5);
ObjectSet("B4", OBJPROP_YDISTANCE, 50);

ObjectCreate ("B5",OBJ_LABEL, WindowFind(sObjName),0,0);
ObjectSetText("B5",DoubleToStr (bep+dSpread,Digits), 9,"Arial Bold", DarkOrange);
ObjectSet("B5", OBJPROP_CORNER, 0);
ObjectSet("B5", OBJPROP_XDISTANCE, 120);
ObjectSet("B5", OBJPROP_YDISTANCE, 50);

if (Digits == 5 || Digits == 3)
{
ObjectCreate ("B6",OBJ_LABEL, WindowFind(sObjName),0,0);
ObjectSetText("B6", "TP 1 TP 2 TP3", 9,"Arial Bold", DodgerBlue);
ObjectSet("B6", OBJPROP_CORNER, 0);
ObjectSet("B6", OBJPROP_XDISTANCE, 5);
ObjectSet("B6", OBJPROP_YDISTANCE, 70);

ObjectCreate ("B7",OBJ_LABEL, WindowFind(sObjName),0,0);
ObjectSetText("B7",DoubleToStr (btp1+dSpread,Digits)+" "+ DoubleToStr (btp2+dSpread,Digits)+" "+ DoubleToStr (btp3+dSpread,Digits), 9,"Arial Bold", YellowGreen);
ObjectSet("B7", OBJPROP_CORNER, 0);
ObjectSet("B7", OBJPROP_XDISTANCE, 35);
ObjectSet("B7", OBJPROP_YDISTANCE, 70);
}
else
{
ObjectCreate ("B6",OBJ_LABEL, WindowFind(sObjName),0,0);
ObjectSetText("B6", "TP 1 TP 2 TP 3", 9,"Arial Bold", DodgerBlue);
ObjectSet("B6", OBJPROP_CORNER, 0);
ObjectSet("B6", OBJPROP_XDISTANCE, 5);
ObjectSet("B6", OBJPROP_YDISTANCE, 70);

ObjectCreate ("B7",OBJ_LABEL, WindowFind(sObjName),0,0);
ObjectSetText("B7",DoubleToStr (btp1+dSpread,Digits)+" "+ DoubleToStr (btp2+dSpread,Digits)+" "+ DoubleToStr (btp3+dSpread,Digits), 9,"Arial Bold", YellowGreen);
ObjectSet("B7", OBJPROP_CORNER, 0);
ObjectSet("B7", OBJPROP_XDISTANCE, 35);
ObjectSet("B7", OBJPROP_YDISTANCE, 70);
}

ObjectCreate ("B8",OBJ_LABEL, WindowFind(sObjName),0,0);
ObjectSetText("B8", "SL", 9,"Arial Bold", DodgerBlue);
ObjectSet("B8", OBJPROP_CORNER, 0);
ObjectSet("B8", OBJPROP_XDISTANCE, 5);
ObjectSet("B8", OBJPROP_YDISTANCE, 90);

ObjectCreate ("B9",OBJ_LABEL, WindowFind(sObjName),0,0);
if (BlkBgd)
{
ObjectSetText("B9",DoubleToStr (bsl+dSpread,Digits), 9,"Arial Bold", Yellow);
}
else
{
ObjectSetText("B9",DoubleToStr (bsl+dSpread,Digits), 9,"Arial Bold", Chocolate);
}
ObjectSet("B9", OBJPROP_CORNER, 0);
ObjectSet("B9", OBJPROP_XDISTANCE, 35);
ObjectSet("B9", OBJPROP_YDISTANCE, 90);

ObjectCreate ("B11",OBJ_LABEL, WindowFind(sObjName),0,0);
if (BlkBgd)
{
ObjectSetText("B11", ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 8,"Arial Bold", White);
}
else{
ObjectSetText("B11", ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 8,"Arial Bold", SlateGray);
}
ObjectSet("B11", OBJPROP_CORNER, 0);
ObjectSet("B11", OBJPROP_XDISTANCE, 305);
ObjectSet("B11", OBJPROP_YDISTANCE, 10);

ObjectCreate ("B12",OBJ_LABEL, WindowFind(sObjName),0,0);
ObjectSetText("B12", "SELL ZONE", 9,"Arial Bold", Orange);
ObjectSet("B12", OBJPROP_CORNER, 0);
ObjectSet("B12", OBJPROP_XDISTANCE, 305);
ObjectSet("B12", OBJPROP_YDISTANCE, 25);

ObjectCreate ("B13",OBJ_LABEL, WindowFind(sObjName),0,0);
if (BlkBgd)
{
ObjectSetText("B13", ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 8,"Arial Bold", White);
}
else
{
ObjectSetText("B13", ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 8,"Arial Bold", SlateGray);
}
ObjectSet("B13", OBJPROP_CORNER, 0);
ObjectSet("B13", OBJPROP_XDISTANCE, 305);
ObjectSet("B13", OBJPROP_YDISTANCE, 35);

ObjectCreate ("B14",OBJ_LABEL, WindowFind(sObjName),0,0);
ObjectSetText("B14", "SELL "+Symbol()+ " AT @", 9,"Arial Bold", OrangeRed);
ObjectSet("B14", OBJPROP_CORNER, 0);
ObjectSet("B14", OBJPROP_XDISTANCE, 305);
ObjectSet("B14", OBJPROP_YDISTANCE, 50);

ObjectCreate ("B15",OBJ_LABEL, WindowFind(sObjName),0,0);
ObjectSetText("B15",DoubleToStr (sep,Digits), 9,"Arial Bold", DarkOrange);
ObjectSet("B15", OBJPROP_CORNER, 0);
ObjectSet("B15", OBJPROP_XDISTANCE, 430);
ObjectSet("B15", OBJPROP_YDISTANCE, 50);

if (Digits == 5 || Digits == 3)
{
ObjectCreate ("B16",OBJ_LABEL, WindowFind(sObjName),0,0);
ObjectSetText("B16", "TP 1 TP 2 TP3", 9,"Arial Bold", OrangeRed);
ObjectSet("B16", OBJPROP_CORNER, 0);
ObjectSet("B16", OBJPROP_XDISTANCE, 305);
ObjectSet("B16", OBJPROP_YDISTANCE, 70);

ObjectCreate ("B17",OBJ_LABEL, WindowFind(sObjName),0,0);
ObjectSetText("B17",DoubleToStr (stp1,Digits)+" "+ DoubleToStr (stp2,Digits)+" "+ DoubleToStr (stp3,Digits), 9,"Arial Bold", YellowGreen);
ObjectSet("B17", OBJPROP_CORNER, 0);
ObjectSet("B17", OBJPROP_XDISTANCE, 335);
ObjectSet("B17", OBJPROP_YDISTANCE, 70);
}
else
{
ObjectCreate ("B16",OBJ_LABEL, WindowFind(sObjName),0,0);
ObjectSetText("B16", "TP 1 TP 2 TP 3", 9,"Arial Bold", OrangeRed);
ObjectSet("B16", OBJPROP_CORNER, 0);
ObjectSet("B16", OBJPROP_XDISTANCE, 305);
ObjectSet("B16", OBJPROP_YDISTANCE, 70);

ObjectCreate ("B17",OBJ_LABEL, WindowFind(sObjName),0,0);
ObjectSetText("B17",DoubleToStr (stp1,Digits)+" "+ DoubleToStr (stp2,Digits)+" "+ DoubleToStr (stp3,Digits), 9,"Arial Bold", YellowGreen);
ObjectSet("B17", OBJPROP_CORNER, 0);
ObjectSet("B17", OBJPROP_XDISTANCE, 335);
ObjectSet("B17", OBJPROP_YDISTANCE, 70);
}

ObjectCreate ("B18",OBJ_LABEL, WindowFind(sObjName),0,0);
ObjectSetText("B18", "SL", 9,"Arial Bold", OrangeRed);
ObjectSet("B18", OBJPROP_CORNER, 0);
ObjectSet("B18", OBJPROP_XDISTANCE, 305);
ObjectSet("B18", OBJPROP_YDISTANCE, 90);

ObjectCreate ("B19",OBJ_LABEL, WindowFind(sObjName),0,0);
if (BlkBgd)
{
ObjectSetText("B19",DoubleToStr (ssl,Digits), 9,"Arial Bold", Yellow);
}
else
{
ObjectSetText("B19",DoubleToStr (ssl,Digits), 9,"Arial Bold", Chocolate);
}
ObjectSet("B19", OBJPROP_CORNER, 0);
ObjectSet("B19", OBJPROP_XDISTANCE, 335);
ObjectSet("B19", OBJPROP_YDISTANCE, 90);

ObjectCreate ("B20",OBJ_LABEL, WindowFind(sObjName),0,0);
if (BlkBgd)
{
ObjectSetText("B20", ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 8,"Arial Bold", White);
}
else
{
ObjectSetText("B20", ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 8,"Arial Bold", SlateGray);
}
ObjectSet("B20", OBJPROP_CORNER, 0);
ObjectSet("B20", OBJPROP_XDISTANCE, 5);
ObjectSet("B20", OBJPROP_YDISTANCE, 105);

ObjectCreate ("B210",OBJ_LABEL, WindowFind(sObjName),0,0);
if (BlkBgd)
{
ObjectSetText("B210", ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 8,"Arial Bold", White);
}
else
{
ObjectSetText("B210", ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 8,"Arial Bold", SlateGray);
}
ObjectSet("B210", OBJPROP_CORNER, 0);
ObjectSet("B210", OBJPROP_XDISTANCE, 305);
ObjectSet("B210", OBJPROP_YDISTANCE, 105);

} //if (TimeToStr( dtTimeBegin, 1) == TimeToStr( TimeCurrent(), 1))
} //if(iForm==5)

//---- // create vertical lines
if(iForm==6)
{
if(ObjectFind(sObjName+"vlLeft") == -1)
{
ObjectCreate (sObjName+"vlLeft", OBJ_VLINE, 0, dtTimeBegin, 0);
ObjectSet(sObjName+"vlLeft", OBJPROP_STYLE, STYLE_DOT);
ObjectSet(sObjName+"vlLeft", OBJPROP_COLOR,OrangeRed );
}

if(ObjectFind(sObjName+"vlRight") == -1)
{
ObjectCreate (sObjName+"vlRight", OBJ_VLINE, 0, dtTimeEnd, 0);
ObjectSet(sObjName+"vlRight", OBJPROP_STYLE, STYLE_DOT);
ObjectSet(sObjName+"vlRight", OBJPROP_COLOR,OrangeRed );
}

if(ObjectFind(sObjName+"vlActiveRight") == -1)
{
ObjectCreate (sObjName+"vlActiveRight", OBJ_VLINE, 0, dtTimeObjEnd, 0);
ObjectSet(sObjName+"vlActiveRight", OBJPROP_STYLE, STYLE_DOT);
ObjectSet(sObjName+"vlActiveRight", OBJPROP_COLOR,OrangeRed );
}

if (iSession == 2)
{
if(ObjectFind(sObjName+"vlLondonOpen") == -1)
{
ObjectCreate (sObjName+"vlLondonOpen", OBJ_VLINE, 0, dtTimeLondonOpen, 0);
ObjectSet(sObjName+"vlLondonOpen", OBJPROP_STYLE, STYLE_DOT);
ObjectSet(sObjName+"vlLondonOpen", OBJPROP_COLOR,Gold );
}
}

} //if(iForm==6)

} // void DrawObjects()

//+------------------------------------------------------------------+
//| Decrement Date to draw objects in the past |
//+------------------------------------------------------------------+

datetime decrementTradeDate(datetime dtTimeDate)
{
int iTimeYear=TimeYear(dtTimeDate);
int iTimeMonth=TimeMonth(dtTimeDate);
int iTimeDay=TimeDay(dtTimeDate);
int iTimeHour=TimeHour(dtTimeDate);
int iTimeMinute=TimeMinute(dtTimeDate);

iTimeDay--;
if (iTimeDay==0)
{
iTimeMonth--;
if (iTimeMonth==0)
{
iTimeYear--;
iTimeMonth=12;
}

// Thirty days hath September...
if (iTimeMonth==4 || iTimeMonth==6 || iTimeMonth==9 || iTimeMonth==11) iTimeDay=30;
// ...all the rest have thirty-one...
if (iTimeMonth==1 || iTimeMonth==3 || iTimeMonth==5 || iTimeMonth==7 || iTimeMonth==8 || iTimeMonth==10 || iTimeMonth==12) iTimeDay=31;
// ...except...
if (iTimeMonth==2) if (MathMod(iTimeYear, 4)==0) iTimeDay=29; else iTimeDay=28;
}
return(StrToTime(iTimeYear + "." + iTimeMonth + "." + iTimeDay + " " + iTimeHour + ":" + iTimeMinute));
}

 

相关资源

暂无评论

暂无评论...