// ApM Modded v006 05/11/2012
#property copyright "Copyleft 2012"
#property link "http://www.net"
string modver = "M6 (TLP public)";
extern bool ShowTradeComment = TRUE;
extern double MaxSpread = 26.0; // Maximo de Spread p/ abertura de Ordem
extern double RiskPercent = 0.2; // Percentual de Risco (RiskPercent)
//extern bool RealtimeChartUpdate = FALSE;
extern double Lots = 0.01;
extern double MultiLotsFactor = 1.6;
extern double StepLots = 15.0;
extern double TakeProfit = 23.0;
extern bool UseTrailing = FALSE;
extern double TrailStart = 38.0;
extern double TrailStop = 18.0;
extern int MaxOpenOrders = 15;
extern bool SafeEquityStopOut = FALSE;
extern double SafeEquityRisk = 0.5;
extern double Slippage = 3.0;
extern int MagicNumber = 2024536;
extern bool FreezeAfterTP = FALSE;
extern bool Close_All_Orders = FALSE;
extern string TradeComment = "FXGT";
extern string ______________ = "HORARIO:";
extern int StartHour = 0;
extern int StartMinute = 0;
extern int StopHour = 0;
extern int StopMinute = 0;
extern int StartingTradeDay = 0;
extern int EndingTradeDay = 7;
/*extern*/ bool UseLotFix = TRUE;
bool vFecharOrdensServerTimeOut = FALSE;
double vQtdHorasTimeOut = 48.0;
double gd_196 = 500.0;
double vQdtDigitosMinLote = 0.0;
bool gi_212 = TRUE;
bool gi_216 = FALSE;
int gi_220 = 1;
double gd_224;
double gd_232;
double vPrecoMedio;
double gd_248;
double gd_256;
double gd_264;
double gd_272;
double VSpreeadMarketInfo;
bool gi_HaveNewOpenOrders;
int gt_292 = 0;
int vTimeOutCloseOrdens;
int gi_300 = 0;
double gd_304;
int gi_312 = 0;
int gi_OrdersOpen;
double gd_320 = 0.0;
bool gi_328 = FALSE;
bool gi_332 = FALSE;
bool gi_336 = FALSE;
int gi_340;
bool gi_344 = FALSE;
int gi_348 = 0;
int gi_352 = 0;
double gd_356;
double gd_364;
string vSafeEquity = "OFF";
string vTipoConta = "REAL";
string vMensagem = "";
bool vContinuarRodando = TRUE;
bool gi_412 = TRUE;
int vAccountNumber = 0;
int gi_420;
int gStartMinutes, gStopMinutes;
double PipToTP, MaxDD = 0;
bool IsTradeTime() {
if (FreezeAfterTP) return(false);
bool AllowTrade = true;
gStartMinutes = 60 * StartHour + StartMinute;
gStopMinutes = 60 * StopHour + StopMinute;
int day = DayOfWeek();
if (day < StartingTradeDay || day > EndingTradeDay) AllowTrade = false;
int minuntes = 60 * TimeHour(TimeCurrent()) + TimeMinute(TimeCurrent());
if (day <= StartingTradeDay && gStartMinutes >= minuntes) AllowTrade = false;
if (day >= EndingTradeDay && gStopMinutes < minuntes) AllowTrade = false;
return(AllowTrade);
}
int init() {
if (Digits == 2 || Digits == 4) gi_420 = 1;
else gi_420 = 10;
vAccountNumber = AccountNumber();
VSpreeadMarketInfo = MarketInfo(Symbol(), MODE_SPREAD) * Point * gi_420;
vQdtDigitosMinLote = 2;
if (SafeEquityStopOut) vSafeEquity = "ON";
if (IsDemo()) vTipoConta = "DEMO";
if (Period() != PERIOD_M1) {
Print("FGT ERROR :: Invalid Timeframe, Please switch to M1.");
Alert("FGT ERROR :: ", " Invalid Timeframe, Please switch to M1.");
vMensagem = "Invalid Timeframe. FGT works on M1";
vContinuarRodando = FALSE;
}
return (0);
}
int deinit() {
Comment("");
if (ObjectFind("BG") >= 0) ObjectDelete("BG");
if (ObjectFind("BG1") >= 0) ObjectDelete("BG1");
if (ObjectFind("BG2") >= 0) ObjectDelete("BG2");
if (ObjectFind("BG3") >= 0) ObjectDelete("BG3");
if (ObjectFind("BG4") >= 0) ObjectDelete("BG4");
if (ObjectFind("BG5") >= 0) ObjectDelete("BG5");
if (ObjectFind("NAME") >= 0) ObjectDelete("NAME");
return (0);
}
double NormalizaLotes(double ad_0)
{
if (ad_0 > MarketInfo(Symbol(), MODE_MAXLOT)) ad_0 = MarketInfo(Symbol(), MODE_MAXLOT);
else
if (ad_0 < MarketInfo(Symbol(), MODE_MINLOT)) ad_0 = MarketInfo(Symbol(), MODE_MINLOT);
return (ad_0);
}
//Calcula a quantidade de lotes conforme o risco
double CalculaQtdLotesRisco(double vRiskPercent)
{
bool vTrailingStop = TRUE;
double minlot_12 = MarketInfo(Symbol(), MODE_MINLOT);
double maxlot_12 = MarketInfo(Symbol(), MODE_MAXLOT);
double vMODE_POINT = MarketInfo(Symbol(), MODE_LOTSIZE) / AccountLeverage();
double ld_28 = vRiskPercent / 100.0 * AccountBalance() / vMODE_POINT;
double vRetorno = MathFloor(ld_28);
while (vTrailingStop)
{
vRetorno += minlot_12;
if (vRetorno > ld_28)
{
vTrailingStop = FALSE;
vRetorno -= minlot_12;
}
}
if(vRetorno > maxlot_12) return (maxlot_12);
else
return (vRetorno);
}
int start() {
if (Close_All_Orders == TRUE) {FecharTodasOrdens(); return (0);}
int lia_0[1];
int lia_4[1];
double vPrecoOrdemAnt;
double vPrecoStopLoss;
double vFechamentoAnt2;
double vFechamentoAnt;
int li_52;
if (UseTrailing) ModificaSLTake(TrailStart, TrailStop, vPrecoMedio);
if (vFecharOrdensServerTimeOut) {
if (TimeCurrent() >= vTimeOutCloseOrdens) {
FecharTodasOrdens();
Print("Closed All Trades Due To Server TimeOut");
}
}
if (gt_292 == Time[0]) return (0);
gt_292 = Time[0];
double vQtdLotes4 = GetProfit();
if (SafeEquityStopOut) {
if (vQtdLotes4 < 0.0 && MathAbs(vQtdLotes4) > SafeEquityRisk / 100.0 * GetAccountEquity()) {
FecharTodasOrdens();
Print("Closed All due to EQUITY STOP-OUT");
gi_344 = FALSE;
}
}
gi_HaveNewOpenOrders = FALSE;
gi_OrdersOpen = f0_16();
//if (gi_OrdersOpen == 0) gi_HaveNewOpenOrders = FALSE;
for (gi_312 = OrdersTotal() - 1; gi_312 >= 0; gi_312--) {
OrderSelect(gi_312, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUY) {
gi_332 = TRUE;
gi_336 = FALSE;
vPrecoOrdemAnt = OrderLots();
break;
}
}
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_SELL) {
gi_332 = FALSE;
gi_336 = TRUE;
vPrecoStopLoss = OrderLots();
break;
}
}
}
gi_328 = FALSE;
if (gi_OrdersOpen > 0 && gi_OrdersOpen <= MaxOpenOrders) {
RefreshRates();
gd_264 = GetLastPrecoOrderOpenBuy();
gd_272 = GetLastPrecoOrderOpenSell();
li_52 = func1(gi_332, gi_336, Bid, Ask, gd_264, gd_272, Point, StepLots, gi_420);
if (li_52 == 1) gi_328 = TRUE;
vMensagem = GetMensagemErro(3);
}
if (gi_OrdersOpen > 1 && UseLotFix) gi_300 = gi_OrdersOpen-1;
gd_304 = GetQtdLotes(OP_SELL);
if (gi_OrdersOpen < 1) {
gi_336 = FALSE;
gi_332 = FALSE;
gi_328 = TRUE;
gd_232 = AccountEquity();
}
if (gi_328) {
gd_264 = GetLastPrecoOrderOpenBuy();
gd_272 = GetLastPrecoOrderOpenSell();
if (gi_336) {
if (gi_216) {
f0_1(0, 1);
gd_304 = NormalizeDouble(MultiLotsFactor * vPrecoStopLoss, vQdtDigitosMinLote);
} else gd_304 = CalculaQtdLotesRisco (RiskPercent) + GetQtdLotes(OP_SELL);
if (gi_212) {
gi_300 = gi_OrdersOpen;
if (gd_304 > 0.0) {
RefreshRates();
gi_340 = fOrderSend(1, gd_304, Bid, Slippage, Ask, 0, 0, TradeComment + "-" + gi_300, MagicNumber, 0, HotPink);
if (gi_340 < 0) {
Print("Error: ", GetLastError());
return (0);
}
gd_272 = GetLastPrecoOrderOpenSell();
gi_328 = FALSE;
gi_344 = TRUE;
}
}
} else {
if (gi_332) {
if (gi_216) {
f0_1(1, 0);
gd_304 = NormalizeDouble(MultiLotsFactor * vPrecoOrdemAnt, vQdtDigitosMinLote);
} else gd_304 = CalculaQtdLotesRisco (RiskPercent) + GetQtdLotes(OP_BUY);
if (gi_212) {
gi_300 = gi_OrdersOpen;
if (gd_304 > 0.0) {
gi_340 = fOrderSend(0, gd_304, Ask, Slippage, Bid, 0, 0, TradeComment + "-" + gi_300, MagicNumber, 0, Lime);
if (gi_340 < 0) {
Print("Error: ", GetLastError());
return (0);
}
gd_264 = GetLastPrecoOrderOpenBuy();
gi_328 = FALSE;
gi_344 = TRUE;
}
}
}
}
}
double vSpread = MarketInfo(Symbol(), MODE_SPREAD);
if (gi_328 && gi_OrdersOpen < 1 && IsTradeTime() && vSpread < MaxSpread ) {
vFechamentoAnt2 = iClose(Symbol(), 0, 2);
vFechamentoAnt = iClose(Symbol(), 0, 1);
gd_248 = Bid;
gd_256 = Ask;
if ((!gi_336) && !gi_332) {
gi_300 = gi_OrdersOpen;
if (vFechamentoAnt2 > vFechamentoAnt) {
gd_304 = CalculaQtdLotesRisco (RiskPercent) + GetQtdLotes(OP_SELL);
if (gd_304 > 0.0) {
gi_340 = fOrderSend(1, gd_304, gd_248, Slippage, gd_248, 0, 0, TradeComment + " " + MagicNumber + "-" + gi_300, MagicNumber, 0, HotPink);
if (gi_340 < 0) {
Print(gd_304, "Error: ", GetLastError());
return (0);
}
gd_264 = GetLastPrecoOrderOpenBuy();
gi_344 = TRUE;
}
} else {
gd_304 = CalculaQtdLotesRisco (RiskPercent) + GetQtdLotes(OP_BUY);;
if (gd_304 > 0.0) {
gi_340 = fOrderSend(0, gd_304, gd_256, Slippage, gd_256, 0, 0, TradeComment + " " + MagicNumber + "-" + gi_300, MagicNumber, 0, Lime);
if (gi_340 < 0) {
Print(gd_304, "Error: ", GetLastError());
return (0);
}
gd_272 = GetLastPrecoOrderOpenSell();
gi_344 = TRUE;
}
}
}
if (gi_340 > 0) vTimeOutCloseOrdens = TimeCurrent() + 60.0 * (60.0 * vQtdHorasTimeOut);
gi_328 = FALSE;
}
gi_OrdersOpen = f0_16();
vPrecoMedio = 0;
double ld_56 = 0;
for (gi_312 = OrdersTotal() - 1; gi_312 >= 0; gi_312--) {
OrderSelect(gi_312, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
vPrecoMedio += OrderOpenPrice() * OrderLots();
ld_56 += OrderLots();
}
}
}
if (gi_OrdersOpen > 0) vPrecoMedio = NormalizeDouble(vPrecoMedio / ld_56, Digits);
if (gi_344) {
for (gi_312 = OrdersTotal() - 1; gi_312 >= 0; gi_312--) {
OrderSelect(gi_312, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUY) {
gd_224 = vPrecoMedio + TakeProfit * Point * gi_420;
gd_320 = vPrecoMedio - gd_196 * Point * gi_420;
gi_HaveNewOpenOrders = TRUE;
}
}
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_SELL) {
gd_224 = vPrecoMedio - TakeProfit * Point * gi_420;
gd_320 = vPrecoMedio + gd_196 * Point * gi_420;
gi_HaveNewOpenOrders = TRUE;
}
}
}
}
if (gi_344) {
if (gi_HaveNewOpenOrders == TRUE) {
for (gi_312 = OrdersTotal() - 1; gi_312 >= 0; gi_312--) {
OrderSelect(gi_312, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (NormalizeDouble(gd_224, Digits) == NormalizeDouble(OrderTakeProfit(), Digits)) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) OrderModify(OrderTicket(), vPrecoMedio, OrderStopLoss(), gd_224, 0, Yellow);
Sleep(3000);
if (OrderTakeProfit() > 0) gi_344 = FALSE;
}
}
}
funcaoPainel();
return (0);
}
void funcaoPainel() {
if (ShowTradeComment) {
if (IsTesting() && !IsVisualMode()) return;
if (ObjectFind("BG") < 0) {
ObjectCreate("BG", OBJ_LABEL, 0, 0, 0);
ObjectSetText("BG", "g", 210, "Webdings", Orange);
ObjectSet("BG", OBJPROP_CORNER, 0);
ObjectSet("BG", OBJPROP_BACK, TRUE);
ObjectSet("BG", OBJPROP_XDISTANCE, 0);
ObjectSet("BG", OBJPROP_YDISTANCE, 15);
}
if (ObjectFind("BG1") < 0) {
ObjectCreate("BG1", OBJ_LABEL, 0, 0, 0);
ObjectSetText("BG1", "g", 210, "Webdings", DimGray);
ObjectSet("BG1", OBJPROP_BACK, FALSE);
ObjectSet("BG1", OBJPROP_XDISTANCE, 0);
ObjectSet("BG1", OBJPROP_YDISTANCE, 42);
}
if (ObjectFind("BG2") < 0) {
ObjectCreate("BG2", OBJ_LABEL, 0, 0, 0);
ObjectSetText("BG2", "g", 210, "Webdings", DimGray);
ObjectSet("BG2", OBJPROP_CORNER, 0);
ObjectSet("BG2", OBJPROP_BACK, TRUE);
ObjectSet("BG2", OBJPROP_XDISTANCE, 0);
ObjectSet("BG2", OBJPROP_YDISTANCE, 42);
}
if (ObjectFind("NAME") < 0) {
ObjectCreate("NAME", OBJ_LABEL, 0, 0, 0);
ObjectSetText("NAME", "FOREX GRID TRADER EA - " + Symbol(), 9, "Arial Bold", White);
ObjectSet("NAME", OBJPROP_CORNER, 0);
ObjectSet("NAME", OBJPROP_BACK, FALSE);
ObjectSet("NAME", OBJPROP_XDISTANCE, 5);
ObjectSet("NAME", OBJPROP_YDISTANCE, 23);
}
if (ObjectFind("BG3") < 0) {
ObjectCreate("BG3", OBJ_LABEL, 0, 0, 0);
ObjectSetText("BG3", "g", 110, "Webdings", DimGray);
ObjectSet("BG3", OBJPROP_CORNER, 0);
ObjectSet("BG3", OBJPROP_BACK, TRUE);
ObjectSet("BG3", OBJPROP_XDISTANCE, 0);
ObjectSet("BG3", OBJPROP_YDISTANCE, 73);
}
if (ObjectFind("BG5") < 0) {
ObjectCreate("BG5", OBJ_LABEL, 0, 0, 0);
ObjectSetText("BG5", "g", 210, "Webdings", DimGray);
ObjectSet("BG5", OBJPROP_CORNER, 0);
ObjectSet("BG5", OBJPROP_BACK, FALSE);
ObjectSet("BG5", OBJPROP_XDISTANCE, 0);
ObjectSet("BG5", OBJPROP_YDISTANCE, 73);
}
vDadosPainel();
}
}
double NormalizaValor(double ad_0) {
return (NormalizeDouble(ad_0, Digits));
}
int f0_1(bool CodErro = TRUE, bool vSLConfig = TRUE) {
int vCount = 0;
for (int li_12 = OrdersTotal() - 1; li_12 >= 0; li_12--) {
if (OrderSelect(li_12, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUY && CodErro) {
RefreshRates();
if (!IsTradeContextBusy()) {
if (!OrderClose(OrderTicket(), OrderLots(), NormalizaValor(Bid), 5, CLR_NONE)) {
Print("Error close BUY " + OrderTicket());
vCount = -1;
}
} else {
if (gi_348 == iTime(NULL, 0, 0)) return (-2);
gi_348 = iTime(NULL, 0, 0);
Print("Need close BUY " + OrderTicket() + ". Trade Context Busy");
return (-2);
}
}
if (OrderType() == OP_SELL && vSLConfig) {
RefreshRates();
if (!IsTradeContextBusy()) {
if (!(!OrderClose(OrderTicket(), OrderLots(), NormalizaValor(Ask), 5, CLR_NONE))) continue;
Print("Error Closing SELL Trade : " + OrderTicket());
vCount = -1;
continue;
}
if (gi_352 == iTime(NULL, 0, 0)) return (-2);
gi_352 = iTime(NULL, 0, 0);
Print("Need to close SELL trade : " + OrderTicket() + ". Trade Context Busy");
return (-2);
}
}
}
}
return (vCount);
}
double GetQtdLotes(int CodErro) {
double vQtdLotes;
int li_12;
switch (gi_220) {
case 0:
vQtdLotes = Lots;
break;
case 1:
vQtdLotes = NormalizeDouble(Lots * MathPow(MultiLotsFactor, gi_300), vQdtDigitosMinLote);
break;
case 2:
li_12 = 0;
vQtdLotes = Lots;
for (int vContAnt = OrdersHistoryTotal() - 1; vContAnt >= 0; vContAnt--) {
if (!(OrderSelect(vContAnt, SELECT_BY_POS, MODE_HISTORY))) return (-3);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (li_12 < OrderCloseTime()) {
li_12 = OrderCloseTime();
if (OrderProfit() < 0.0) {
vQtdLotes = NormalizeDouble(OrderLots() * MultiLotsFactor, vQdtDigitosMinLote);
continue;
}
vQtdLotes = Lots;
continue;
return (-3);
}
}
}
}
if (AccountFreeMarginCheck(Symbol(), CodErro, vQtdLotes) <= 0.0) return (-1);
if (GetLastError() == 134/* NOT_ENOUGH_MONEY */) return (-2);
return (vQtdLotes);
}
int f0_16() {
PipToTP = 0;
int vQtdOrdensTotal = 0;
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
if (OrderType() == OP_SELL || OrderType() == OP_BUY) vQtdOrdensTotal++;
if (OrderTakeProfit() == 0) {gi_344 = TRUE; gi_HaveNewOpenOrders = TRUE;}
if (OrderTakeProfit() > 0.0 && PipToTP == 0) {
if (OrderType() == OP_SELL) PipToTP = (Ask - OrderTakeProfit() ) / Point / gi_420;
if (OrderType() == OP_BUY) PipToTP = (OrderTakeProfit() - Bid) / Point / gi_420;}
}
return (vQtdOrdensTotal);
}
void FecharTodasOrdens() {
for (int vQtdOrdensTotal = OrdersTotal() - 1; vQtdOrdensTotal >= 0; vQtdOrdensTotal--) {
OrderSelect(vQtdOrdensTotal, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol()) {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Blue);
if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Red);
}
Sleep(1000);
}
}
}
int fOrderSend(int CodErro, double ad_4, double ad_12, int ai_20, double ad_24, int ai_32, int ai_36, string as_40, int vSLConfig8, int ai_52, color ai_56) {
if (gi_OrdersOpen >= MaxOpenOrders) return;
int li_60 = 0;
int li_64 = 0;
int li_68 = 0;
int li_72 = 100;
switch (CodErro) {
case 0:
for (li_68 = 0; li_68 < li_72; li_68++) {
RefreshRates();
li_60 = OrderSend(Symbol(), OP_BUY, ad_4, Ask, ai_20, f0_11(Bid, ai_32), f0_17(Ask, ai_36), as_40, vSLConfig8, ai_52, ai_56);
li_64 = GetLastError();
if (li_64 == 0/* NO_ERROR */) break;
if (!((li_64 == 4/* SERVER_BUSY */ || li_64 == 137/* BROKER_BUSY */ || li_64 == 146/* TRADE_CONTEXT_BUSY */ || li_64 == 136/* OFF_QUOTES */))) break;
Sleep(5000);
}
break;
case 1:
for (li_68 = 0; li_68 < li_72; li_68++) {
li_60 = OrderSend(Symbol(), OP_SELL, ad_4, Bid, ai_20, f0_0(Ask, ai_32), f0_5(Bid, ai_36), as_40, vSLConfig8, ai_52, ai_56);
li_64 = GetLastError();
if (li_64 == 0/* NO_ERROR */) break;
if (!((li_64 == 4/* SERVER_BUSY */ || li_64 == 137/* BROKER_BUSY */ || li_64 == 146/* TRADE_CONTEXT_BUSY */ || li_64 == 136/* OFF_QUOTES */))) break;
Sleep(5000);
}
}
return (li_60);
}
double f0_11(double ad_0, int ai_8) {
if (ai_8 == 0) return (0);
return (ad_0 - ai_8 * Point * gi_420);
}
double f0_0(double ad_0, int ai_8) {
if (ai_8 == 0) return (0);
return (ad_0 + ai_8 * Point * gi_420);
}
double f0_17(double ad_0, int ai_8) {
if (ai_8 == 0) return (0);
return (ad_0 + ai_8 * Point * gi_420);
}
double f0_5(double ad_0, int ai_8) {
if (ai_8 == 0) return (0);
return (ad_0 - ai_8 * Point * gi_420);
}
double GetProfit() {
double vProfit = 0;
for (gi_312 = OrdersTotal() - 1; gi_312 >= 0; gi_312--) {
OrderSelect(gi_312, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
if (OrderType() == OP_BUY || OrderType() == OP_SELL) vProfit += OrderProfit();
}
return (vProfit);
}
void ModificaSLTake(int CodErro, int vSLConfig, double ad_8) {
int li_16;
double vPrecoStopLoss;
double vSL;
if (vSLConfig != 0) {
for (int li_36 = OrdersTotal() - 1; li_36 >= 0; li_36--) {
if (OrderSelect(li_36, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() || OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUY) {
li_16 = NormalizeDouble((Bid - ad_8) / Point / gi_420, 0);
if (li_16 < CodErro) continue;
vPrecoStopLoss = OrderStopLoss();
vSL = Bid - vSLConfig * Point * gi_420;
if (vPrecoStopLoss == 0.0 || (vPrecoStopLoss != 0.0 && vSL > vPrecoStopLoss)) OrderModify(OrderTicket(), ad_8, vSL, OrderTakeProfit(), 0, Aqua);
}
if (OrderType() == OP_SELL) {
li_16 = NormalizeDouble((ad_8 - Ask) / Point / gi_420, 0);
if (li_16 < CodErro) continue;
vPrecoStopLoss = OrderStopLoss();
vSL = Ask + vSLConfig * Point * gi_420;
if (vPrecoStopLoss == 0.0 || (vPrecoStopLoss != 0.0 && vSL < vPrecoStopLoss)) OrderModify(OrderTicket(), ad_8, vSL, OrderTakeProfit(), 0, Red);
}
}
Sleep(1000);
}
}
}
}
double GetAccountEquity() {
if (f0_16() == 0) gd_356 = AccountEquity();
if (gd_356 < gd_364) gd_356 = gd_364;
else gd_356 = AccountEquity();
gd_364 = AccountEquity();
return (gd_356);
}
double GetLastPrecoOrderOpenBuy() {
double vPrecoOrderOpen;
int vCount;
double vPrecoOrdemAnt = 0;
int vContAnt = 0;
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_BUY) {
vCount = OrderTicket();
if (vCount > vContAnt) {
vPrecoOrderOpen = OrderOpenPrice();
vPrecoOrdemAnt = vPrecoOrderOpen;
vContAnt = vCount;
}
}
}
return (vPrecoOrderOpen);
}
double GetLastPrecoOrderOpenSell() {
double vPrecoOrderOpen;
int vCount;
double vPrecoOrdemAnt = 0;
int vContAnt = 0;
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_SELL) {
vCount = OrderTicket();
if (vCount > vContAnt) {
vPrecoOrderOpen = OrderOpenPrice();
vPrecoOrdemAnt = vPrecoOrderOpen;
vContAnt = vCount;
}
}
}
return (vPrecoOrderOpen);
}
void vDadosPainel() {
string ls_1 = "", ls_2 = "", ls_3 = "";
string ls_0 = DoubleToStr(balanceDeviation(), 2);
if (balanceDeviation() > MaxDD) MaxDD = balanceDeviation();
ls_3 = "Margin Usage: " + DoubleToStr(100 - (AccountFreeMargin()/AccountBalance()*100),2) + "%\n";
if (!IsTradeTime()) ls_1 = "New Trades disallowed by scheduler";
if (FreezeAfterTP) ls_1 = "Freeze AfterTP Enabled";
Comment(""
+ "\n"
+ "\n"
+ "\n"
+ "EXPERT VERSION: 1.0 " + modver
+ "\n"
+ "======================================="
//+ "\n"
//+ "-----------------------------------------------------------------------------------"
//+ "\n"
//+ "AUTHENTICATION STATUS"
//+ "\n"
//+ "-----------------------------------------------------------------------------------"
//+ "\n"
//+ "STATUS MESSAGE: " + vMensagem
//+ "\n"
//+ "-----------------------------------------------------------------------------------"
+ "\n"
+ "ACCOUNT INFORMATION"
+ "\n"
+ "-----------------------------------------------------------------------------------"
+ "\n"
//+ "Account Name: " + AccountName()
//+ "\n"
+ "Account Number: " + AccountNumber() + " (" + vTipoConta + ")"
+ "\n"
//+ "Account Type: " + vTipoConta
//+ "\n"
+ "Account Leverage: 1:" + DoubleToStr(AccountLeverage(), 0)
+ "\n"
+ "Account Balance: " + DoubleToStr(AccountBalance(), 2)
+ "\n"
+ "Account Equity: " + DoubleToStr(AccountEquity(), 2)
+ "\n"
+ "Server Time: " + TimeToStr(TimeCurrent(), TIME_SECONDS)
+ "\n"
+ "-----------------------------------------------------------------------------------"
+ "\n"
+ "TRADE INFORMATIONS "
+ "\n"
+ "------------------------------------------------------------------------------------"
+ "\n"
+ "SAFE EQUITY STOP OUT : " + vSafeEquity + " @ " + DoubleToStr(SafeEquityRisk*100, 2) + "%"
+ "\n"
//+ "SAFE EQUITY RISK % : " + DoubleToStr(SafeEquityRisk, 2)
//+ "\n"
+ ls_2
+ "NEXT LOT(S) : " + DoubleToStr(gd_304, 2)
+ "\n"
+ "OPEN TRADES : " + DoubleToStr(ContaOrdensAbertas(), 0) + " / " + MaxOpenOrders
+ "\n"
+ "FLOATING P/L : " + DoubleToStr(AccountProfit(), 2)
+ "\n"
// + "CURRENT PROFIT: " + DoubleToStr(CurProfit, 2)
// + "\n"
// + "POTENTIAL PROFIT: " + DoubleToStr(PotProfit, 2)
// + "\n"
+ "Pips To TP: " + DoubleToStr(PipToTP, 1)
+ "\n"
+ "=======================================\n"
+ "Drawdown : " + ls_0 + "%"
+ "\n"
+ "Drawdown (Max) : " + DoubleToStr(MaxDD,2) + "%"
+ "\n"
+ ls_3
+ "Total Profit/Loss : " + DoubleToStr(calculatePLBalance(),2) + "\n"
+ ls_1
);
}
double calculatePLBalance() {
double gd_TotalPL = 0;
int vQtdOrdensTotal = OrdersHistoryTotal();
for (int i = 0; i < vQtdOrdensTotal; i++) {
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if (OrderMagicNumber() == MagicNumber) gd_TotalPL += OrderProfit() + OrderSwap() + OrderCommission();
}
return(gd_TotalPL);
}
double balanceDeviation() {
double bd;
bd = (AccountEquity() / AccountBalance() - 1.0) / (-0.01);
if (bd <= 0.0) return (0);
return (bd);
}
int ContaOrdensAbertas() {
int vQtdOrdensTotal = OrdersTotal();
int vCount = 0;
for (int i = 0; i < vQtdOrdensTotal; i++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderType() == OP_SELL || OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) vCount++;
}
return (vCount);
}
string GetMensagemErro(int CodErro) {
if (CodErro == 0) return ("HTTP Error");
if (CodErro == 1) return ("Account does not exist or banned");
if (CodErro == 2) return ("Account Activation Successful");
if (CodErro == 3) return ("Account Authentication Successful");
if (CodErro == 4) return ("Account not Activated!!!");
if (CodErro == 5) return ("Insert a valid CLICKBANK ID.");
return ("Ok");
}
int func1(int a1, int a2, double a3, double a4, double a5, double a6, double a7, double a8, double a9)
{
if ( a1 && a7 * a8 * a9 <= a5 - a4 ) return(1);
if ( a2 && a3 - a6 >= a9 * a8 * a7 ) return(1);
return(0);
}