extern int Step = 170;
extern double FirstLot = 0.1;
extern double IncLot = 0.0;
extern int Magic = 2008;
extern double Risk = 0;
//extern string PlaceTradesFrom = "00:00";
//extern string PlaceTradesTo = "23:59";
extern bool UseHourTrade1 = false;
extern int FromHourTrade1 = 6,
ToHourTrade1 = 18;
extern bool UseHourTrade2 = false;
extern int FromHourTrade2 = 6,
ToHourTrade2 = 18;
extern bool UseBasketProfit = false;
extern double BasketProfit = 15;
extern bool UseEquityPctClose = false;
extern double EquityPct = 2.0;
//extern double MinProfit = 15.0;
extern string MaxLoss = "0=none; 1=pips (position with largest loss); 2=percent (all orders)";
extern int MaxLossMethod = 1;
extern int MaxLossPips = 100;
extern int MaxLossPct = 5;
extern bool UseNewsFilter = false;
extern int MinsBeforeNews = 60;
extern int MinsAfterNews = 30;
extern int NewsImpact = 3;
double g_ord_lots_144 = 0.0;
double g_ord_lots_152 = 0.0;
double gd_160;
double gd_168;
//int gi_176 = 16749022;
//int gi_unused_180 = 1774;
int minutesUntilNextEvent=0;
bool NewsTime() {
bool News=false;
static int PrevMinute = -1;
if (UseNewsFilter && Minute() != PrevMinute && !IsTesting()) {
PrevMinute = Minute();
int minutesSincePrevEvent = iCustom(Symbol(), 0, "FFCal", true, true, false, true, true, 1, 0);
minutesUntilNextEvent = iCustom(Symbol(), 0, "FFCal", true, true, false, true, true, 1, 1);
if ((minutesUntilNextEvent <= MinsBeforeNews) || (minutesSincePrevEvent <= MinsAfterNews)) {
int impactOfNextEvent = iCustom(Symbol(), 0, "FFCal", true, true, false, true, true, 2, 1);
if (impactOfNextEvent >= NewsImpact) {
News = true;
}
}
}
return(News);
}
int start() {
int li_0;
//if (idCheck_unique() != 1) {
li_0 = MyOrdersTotal(Magic);
double Profit=GetTotalProfit(Magic);
if ((UseBasketProfit && Profit>=BasketProfit && BasketProfit>0) || (UseEquityPctClose && Profit/AccountEquity()>=EquityPct/100 && EquityPct>0)) {
// CloseAll();
// return;
// }
//if (GetTotalProfit(Magic) >= MinProfit) {
DeletePendingOrders(Magic);
CloseOrders(Magic);
}
if (MaxLossMethod == 1 && GetMaxLossPips(Magic) >= MaxLossPips) {
DeletePendingOrders(Magic);
CloseOrders(Magic);
} else {
if (MaxLossMethod == 2 && GetTotalProfit(Magic) <= (-1.0 * AccountBalance()) * MaxLossPct / 100.0) {
DeletePendingOrders(Magic);
CloseOrders(Magic);
}
}
GlobalVariableSet("OldBalance", AccountBalance());
if ((UseHourTrade1 && !IsTradeTime1()) || (UseHourTrade2 && !IsTradeTime2())) {
//if (!IsInTimeWindow(PlaceTradesFrom, PlaceTradesTo)) {
if (li_0 > 0) DeletePendingOrders(Magic);
Comment("not in trading window");
}else {
if (UseNewsFilter && NewsTime()) {
Comment("Pending news event for ",Symbol()," in ",minutesUntilNextEvent," minutes...");
return;
}
Comment("in trading window");
if (li_0 == 0) {
OrderSend(Symbol(), OP_SELLSTOP, GetLots(), Ask - Step * Point, 3, 0, 0, "", Magic, 0, Green);
OrderSend(Symbol(), OP_BUYSTOP, GetLots(), Bid + Step * Point, 3, 0, 0, "", Magic, 0, Red);
}
gd_160 = GetLastSellPrice(Magic);
gd_168 = GetLastBuyPrice(Magic);
if (gd_160 - Bid <= 5.0 * Point) OrderSend(Symbol(), OP_BUYSTOP, g_ord_lots_144 + IncLot, gd_160 + Step * Point, 3, 0, 0, "", Magic, 0, Red);
if (Ask - gd_168 <= 5.0 * Point) OrderSend(Symbol(), OP_SELLSTOP, g_ord_lots_152 + IncLot, gd_168 - Step * Point, 3, 0, 0, "", Magic, 0, Red);
}
//}
return (0);
}
int DeletePendingOrders(int a_magic_0) {
//int l_ord_total_4;
//if (idCheck_unique() != 1) {
//l_ord_total_4 = OrdersTotal();
for (int l_pos_8 = OrdersTotal()-1; l_pos_8 >=0; l_pos_8--) {
OrderSelect(l_pos_8, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() == a_magic_0 && OrderSymbol() == Symbol() && OrderType() == OP_SELLSTOP || OrderType() == OP_BUYSTOP) OrderDelete(OrderTicket());
}
//}
return (0);
}
int CloseOrders(int a_magic_0) {
//int l_ord_total_4;
//if (idCheck_unique() != 1) {
//l_ord_total_4 = OrdersTotal();
for (int l_pos_8 = OrdersTotal()-1; l_pos_8 >=0; l_pos_8--) {
OrderSelect(l_pos_8, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() == a_magic_0 && OrderSymbol() == Symbol()) {
if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, 3);
if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, 3);
}
}
//}
return (0);
}
int MyOrdersTotal(int a_magic_0) {
int l_count_4;
//int l_ord_total_8;
//if (idCheck_unique() != 1) {
l_count_4 = 0;
//l_ord_total_8 = OrdersTotal();
for (int l_pos_12 = OrdersTotal()-1; l_pos_12 >=0; l_pos_12--) {
OrderSelect(l_pos_12, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() == a_magic_0 && OrderSymbol() == Symbol()) l_count_4++;
}
//}
return (l_count_4);
}
double GetLastBuyPrice(int a_magic_0) {
int li_4;
//if (idCheck_unique() != 1) {
li_4 = OrdersTotal() - 1;
for (int l_pos_8 = li_4; l_pos_8 >= 0; l_pos_8--) {
OrderSelect(l_pos_8, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() == a_magic_0 && OrderSymbol() == Symbol() && OrderType() == OP_SELLSTOP || OrderType() == OP_SELL) {
g_ord_lots_152 = OrderLots();
return (OrderOpenPrice());
}
}
//}
return (0);
}
double GetLastSellPrice(int a_magic_0) {
int li_4;
//if (idCheck_unique() != 1) {
li_4 = OrdersTotal() - 1;
for (int l_pos_8 = li_4; l_pos_8 >= 0; l_pos_8--) {
OrderSelect(l_pos_8, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() == a_magic_0 && OrderSymbol() == Symbol() && OrderType() == OP_BUYSTOP || OrderType() == OP_BUY) {
g_ord_lots_144 = OrderLots();
return (OrderOpenPrice());
//}
}
}
return (100000);
}
int GetMaxLossPips(int a_magic_0) {
int li_4;
int li_8;
bool li_ret_12;
//if (idCheck_unique() != 1) {
li_ret_12 = FALSE;
li_4 = OrdersTotal() - 1;
for (int l_pos_16 = li_4; l_pos_16 >= 0; l_pos_16--) {
OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() == a_magic_0 && OrderSymbol() == Symbol() && OrderType() == OP_SELL || OrderType() == OP_BUY) {
if (OrderType() == OP_SELL) li_8 = Ask - OrderOpenPrice();
else li_8 = OrderOpenPrice() - Bid;
if (li_8 < 0 && MathAbs(li_8) > li_ret_12) li_ret_12 = MathAbs(li_8);
//}
}
}
return (li_ret_12);
}
int GetTotalProfit(int a_magic_0) {
int li_4;
double ld_ret_8;
//if (idCheck_unique() != 1) {
ld_ret_8 = 0;
li_4 = OrdersTotal() - 1;
for (int l_pos_16 = li_4; l_pos_16 >= 0; l_pos_16--) {
OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() == a_magic_0 && OrderSymbol() == Symbol() && OrderType() == OP_SELL || OrderType() == OP_BUY) ld_ret_8 += OrderProfit();
}
//}
return (ld_ret_8);
}
bool IsInTimeWindow(string as_0, string as_8) {
string l_time2str_16;
//if (idCheck_unique() != 1) {
l_time2str_16 = TimeToStr(TimeCurrent(), TIME_MINUTES);
if (as_8 > as_0) return (l_time2str_16 >= as_0 && l_time2str_16 <= as_8);
//}
return (l_time2str_16 >= as_0 || l_time2str_16 <= as_8);
}
bool IsTradeTime1() {
if ((FromHourTrade1 < ToHourTrade1) && ((Hour() < FromHourTrade1) || (Hour() >= ToHourTrade1))) return (false);
if (FromHourTrade1 > ToHourTrade1 && Hour() < FromHourTrade1 && Hour() >= ToHourTrade1) return (false);
return (true);
}
bool IsTradeTime2() {
if ((FromHourTrade2 < ToHourTrade2) && ((Hour() < FromHourTrade2) || (Hour() >= ToHourTrade2))) return (false);
if (FromHourTrade2 > ToHourTrade2 && Hour() < FromHourTrade2 && Hour() >= ToHourTrade2) return (false);
return (true);
}
int idCheck_unique() {
//if (getKey1() == gi_176)
return (0);
//return (1);
}
double GetLots()
{
double minlot = MarketInfo(Symbol(), MODE_MINLOT);
if(Risk!=0) {
double lot = NormalizeDouble(AccountEquity() * Risk/100 / 1000.0, 2);
if(lot < minlot) lot = minlot;
}
else lot=FirstLot;
return(lot);
}
Tuan bagaimana caranya agar EA ini
1. pasang buy stop dan sell stop sebanyak yang kita inginkan + TP dan SL ditentukan kita
2. Setelah TP hit, ingin memasang kembali PO di tempat yang sama
Terima kasih tuan