extern string _Parameters_Trade = "----- Параметры торговли -----";
extern double Lots = 0.01;
extern int StopLoss = 150;
extern int HourOrdersSet = 21;
extern int MinuteOrdersSet = 0;
extern int DistanceSet = 20;
extern int Step = 5;
extern int HourExpiration = 3;
extern int HourCloseNull = 1;
extern int MinuteCloseNull = 30;
bool gi_124 = FALSE;
extern int Slippage = 3;
extern string _Parameters_Expert = "----- Параметры советника -----";
extern string Name_Expert = "Return";
extern bool UseSound = TRUE;
extern string NameFileSound = "alert.wav";
extern int MAGIC = 32564927;
int gi_164 = 15128749;
int gi_168 = 8421616;
int gi_unused_172 = 16776960;
int gi_unused_176 = 4678655;
int g_color_180 = Blue;
int g_color_184 = Red;
int gi_188 = 1;
string gs_192;
string gs_200;
bool gi_208 = TRUE;
void init() {
if (Digits == 5 || Digits == 3) gi_188 = 10;
if (HourOrdersSet < 21) {
Alert("Неверно задан параметр HourOrdersSet");
gi_208 = FALSE;
return;
}
if (HourCloseNull >= HourOrdersSet) {
Alert("Неверно задан параметр HourCloseNull");
gi_208 = FALSE;
return;
}
gs_200 = TimeToText(HourOrdersSet, MinuteOrdersSet);
gs_192 = TimeToText(HourCloseNull, MinuteCloseNull);
}
void deinit() {
Comment("");
}
void start() {
if (gi_208 == FALSE) {
Alert("Эксперт Return не работает");
return;
}
if (DayOfWeek() != 5 && TimeToStr(TimeCurrent(), TIME_MINUTES) == gs_200) {
SetOrders(0, 10);
SetOrders(Step, 20);
SetOrders(Step * 2, 30);
SetOrders(3 * Step, 40);
}
int l_str2time_0 = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE) + " " + gs_192);
int l_str2time_4 = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE) + " " + gs_200);
if (DayOfWeek() != 5 && TimeCurrent() > l_str2time_0 && TimeCurrent() < l_str2time_4) {
if (TotalProfit(OP_BUY) > 0.0) CloseAllPositions(0);
if (TotalProfit(OP_SELL) > 0.0) CloseAllPositions(1);
}
if (DayOfWeek() == 5 && TimeCurrent() > l_str2time_0) {
if (TotalProfit(OP_BUY) > 0.0) CloseAllPositions(0);
if (TotalProfit(OP_SELL) > 0.0) CloseAllPositions(1);
}
}
void SetOrders(int ai_0, int ai_4) {
double ld_8 = 0;
double ld_16 = 0;
int l_spread_24 = MarketInfo(Symbol(), MODE_SPREAD);
int li_28 = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE) + " " + TimeToText(HourOrdersSet)) + 3600 * HourExpiration;
if (DayOfWeek() == 5 && !gi_124 && TimeDayOfWeek(li_28) == 6) li_28 += 172800;
double ld_32 = Open[0] + l_spread_24 * Point - DistanceSet * gi_188 * Point - ai_0 * gi_188 * Point;
double ld_40 = Open[0] + DistanceSet * gi_188 * Point + ai_0 * gi_188 * Point;
if (!ExistOrder(ai_4 + 1)) {
if (StopLoss != 0) ld_8 = ld_32 - (StopLoss + 3 * Step) * gi_188 * Point + ai_0 * gi_188 * Point;
ld_16 = Open[0];
SetOrder(OP_BUYLIMIT, ld_32, ld_8, ld_16, ai_4 + 1, li_28);
}
if (!ExistOrder(ai_4 + 2)) {
if (StopLoss != 0) ld_8 = ld_40 + (StopLoss + 3 * Step) * gi_188 * Point - ai_0 * gi_188 * Point;
ld_16 = Open[0] + l_spread_24 * Point;
SetOrder(OP_SELLLIMIT, ld_40, ld_8, ld_16, ai_4 + 2, li_28);
}
}
double TotalProfit(int a_cmd_0) {
double ld_ret_4 = 0;
for (int l_pos_12 = OrdersTotal() - 1; l_pos_12 >= 0; l_pos_12--) {
if (OrderSelect(l_pos_12, SELECT_BY_POS, MODE_TRADES)) {
for (int li_16 = 10; li_16 < 50; li_16 += 10) {
if (OrderMagicNumber() > MAGIC + li_16 && OrderMagicNumber() <= MAGIC + li_16 + 2) {
if (OrderSymbol() == Symbol())
if (OrderType() == a_cmd_0) ld_ret_4 += OrderProfit();
}
}
}
}
return (ld_ret_4);
}
bool ExistOrder(int ai_0) {
bool li_ret_4 = FALSE;
for (int l_pos_8 = 0; l_pos_8 < OrdersTotal(); l_pos_8++) {
if (OrderSelect(l_pos_8, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MAGIC + ai_0) {
li_ret_4 = TRUE;
break;
}
}
}
return (li_ret_4);
}
void SetOrder(int a_cmd_0, double a_price_4, double a_price_12, double a_price_20, int ai_28, int a_datetime_32) {
color l_color_36;
string l_comment_40 = GetCommentForOrder(ai_28);
if (a_cmd_0 == OP_BUYSTOP) l_color_36 = gi_164;
else l_color_36 = gi_168;
OrderSend(Symbol(), a_cmd_0, Lots, a_price_4, Slippage * gi_188, a_price_12, a_price_20, l_comment_40, MAGIC + ai_28, a_datetime_32, l_color_36);
if (UseSound) PlaySound(NameFileSound);
}
string GetCommentForOrder(int ai_0) {
string ls_ret_4 = Name_Expert + " " + DoubleToStr(ai_0 / 10, 0) + " " + Symbol();
return (ls_ret_4);
}
void CloseAllPositions(int ai_0) {
bool l_ord_close_4;
for (int l_pos_8 = OrdersTotal() - 1; l_pos_8 >= 0; l_pos_8--) {
if (OrderSelect(l_pos_8, SELECT_BY_POS, MODE_TRADES)) {
for (int li_12 = 10; li_12 < 50; li_12 += 10) {
if (OrderMagicNumber() > MAGIC + li_12 && OrderMagicNumber() <= MAGIC + li_12 + 2) {
if (OrderSymbol() == Symbol()) {
l_ord_close_4 = FALSE;
if (ai_0 == 0 && OrderType() == OP_BUY) l_ord_close_4 = OrderClose(OrderTicket(), OrderLots(), Bid, Slippage * gi_188, g_color_180);
if (ai_0 == 1 && OrderType() == OP_SELL) l_ord_close_4 = OrderClose(OrderTicket(), OrderLots(), Ask, Slippage * gi_188, g_color_184);
if (l_ord_close_4 && UseSound) PlaySound(NameFileSound);
}
}
}
}
}
}
string TimeToText(int ai_0, int ai_4 = 0) {
string ls_16;
string ls_24;
if (ai_0 >= 10 && ai_0 <= 23) ls_16 = DoubleToStr(ai_0, 0);
else {
if (ai_0 >= 0 && ai_0 <= 9) ls_16 = "0" + DoubleToStr(ai_0, 0);
else {
Alert("Неверный параметр Hour...");
gi_208 = FALSE;
}
}
if (ai_4 >= 10 && ai_4 <= 59) ls_24 = DoubleToStr(ai_4, 0);
else {
if (ai_4 >= 0 && ai_4 <= 9) ls_24 = "0" + DoubleToStr(ai_4, 0);
else {
Alert("Неверный параметр MinuteCloseNull");
gi_208 = FALSE;
}
}
string ls_ret_8 = ls_16 + ":" + ls_24;
return (ls_ret_;
}