#property copyright "Copyright � 2008, FOREXflash Software Corp."
#property link "http://www.metaquotes.net"
extern int Risk_percent = 20;
extern double minLots = 0.1;
extern double maxLots = 8.0;
extern double StopLoss = 600.0;
extern double TakeProfit = 900.0;
extern bool use_hidden_stop_loss = TRUE;
extern int hidden_sl = 300;
extern bool use_hidden_take_profit = TRUE;
extern int hidden_tp = 600;
extern bool UseTrailingStop = TRUE;
extern int TrailingStop = 50;
extern int UseFastTrail = 1;
extern int Slippage = 3;
extern int OrderRetries = 5;
extern int SleepBetweenTrades = 1000;
extern int MagicNumber = 1803;
extern int iStartTradingHour = 8;
extern int iEndTradingHour = 21;
extern int MACD_Fast = 8;
extern int MACD_Slow = 17;
extern int MACD_Signal = 9;
extern int RSI = 21;
extern int Momentum = 14;
extern int DeMarker = 14;
extern int ADX = 14;
extern int ForceIndex = 14;
int gi_260 = 0;
int gi_264 = 16711680;
int gi_268 = 255;
int g_color_272 = Green;
int g_color_276 = Yellow;
double gd_280 = 0.1;
int gi_unused_288 = 0;
int gi_292;
int gi_296;
string gs_300;
string gs_308 = "FXParazite by FOREXflash";
string gs_316 = "";
int gi_unused_324 = -1;
int g_count_328 = 0;
int g_count_332 = 0;
int g_time_336 = 0;
int g_time_340 = 0;
int gi_unused_344 = 0;
double gd_unused_348 = 0.0;
double gd_unused_356 = -50.0;
bool gi_364 = TRUE;
bool gi_368 = TRUE;
int Check_Licence() {
bool li_ret_0 = TRUE;
//if (gs_316 == "demo") return (1);
/*if (IsDemo() == FALSE) {
Alert(gs_308 + ". Only demo accounts allowed.");
li_ret_0 = FALSE;
}*/
return (li_ret_0);
}
void hidden_take_profit() {
bool is_closed_8;
int order_total_0 = OrdersTotal();
for (int pos_4 = order_total_0 - 1; pos_4 >= 0; pos_4--) {
OrderSelect(pos_4, SELECT_BY_POS);
is_closed_8 = FALSE;
if (OrderSymbol() == Symbol()) {
if (OrderType() == OP_BUY && OrderOpenPrice() + hidden_tp * Point <= Bid) is_closed_8 = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red);
if (OrderType() == OP_SELL && OrderOpenPrice() - hidden_tp * Point >= Ask) is_closed_8 = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red);
}
}
}
void hidden_stop_loss() {
bool is_closed_8;
int order_total_0 = OrdersTotal();
for (int pos_4 = order_total_0 - 1; pos_4 >= 0; pos_4--) {
OrderSelect(pos_4, SELECT_BY_POS);
is_closed_8 = FALSE;
if (OrderSymbol() == Symbol()) {
if (OrderType() == OP_BUY && OrderOpenPrice() - hidden_sl * Point >= Bid) is_closed_8 = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red);
if (OrderType() == OP_SELL && OrderOpenPrice() + hidden_sl * Point <= Ask) is_closed_8 = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red);
}
}
}
int init() {
return (0);
}
int deinit() {
return (0);
}
int FILTERS() {
double imacd_0 = iMACD(Symbol(), Period(), MACD_Fast, MACD_Slow, MACD_Signal, PRICE_CLOSE, MODE_MAIN, 0);
double imacd_8 = iMACD(Symbol(), Period(), MACD_Fast, MACD_Slow, MACD_Signal, PRICE_CLOSE, MODE_SIGNAL, 0);
double iadx_16 = iADX(NULL, 0, ADX, PRICE_CLOSE, MODE_PLUSDI, 0);
double iadx_24 = iADX(NULL, 0, ADX, PRICE_CLOSE, MODE_MINUSDI, 0);
double irsi_32 = iRSI(NULL, 0, RSI, PRICE_CLOSE, 0);
double idemarker_40 = iDeMarker(NULL, 0, DeMarker, 0);
double imomentum_48 = iMomentum(NULL, 0, Momentum, PRICE_CLOSE, 0);
double iforce_56 = iForce(NULL, 0, ForceIndex, MODE_EMA, PRICE_CLOSE, 0);
if (imomentum_48 > 100.0 && (idemarker_40 > 0.5 && iforce_56 > 0.0) && (irsi_32 > 50.0 && imacd_0 > imacd_8 && iadx_16 > iadx_24)) return (1);
if (imomentum_48 <= 100.0 && (idemarker_40 < 0.5 < 50 && iforce_56 < 0.0) && (irsi_32 < 50.0 && imacd_0 < imacd_8 && iadx_16 < iadx_24)) return (-1);
return (0);
}
int start() {
bool li_20;
bool li_24;
bool li_28;
bool li_32;
bool li_40;
bool li_44;
double ld_60;
double ld_68;
string ls_unused_76;
string ls_unused_84;
string ls_unused_92;
string ls_unused_100;
string ls_unused_108;
string ls_116;
double high_124;
double low_132;
if (use_hidden_stop_loss) hidden_stop_loss();
if (use_hidden_take_profit) hidden_take_profit();
Check_Licence();
int index_0 = 0;
int index_4 = 0;
int li_unused_8 = 0;
bool li_36 = FALSE;
bool li_48 = FALSE;
int li_unused_52 = 0;
int li_unused_56 = 0;
gs_300 = Symbol();
if (UseTrailingStop && OpenTradesForMN(MagicNumber) > 0) MoveTrailingStopsPerMN(MagicNumber, TrailingStop, UseFastTrail);
g_time_340 = Time[0];
if (g_time_340 == g_time_336) {
if (g_count_332 + g_count_328 == 2) return (0);
} else {
g_time_336 = g_time_340;
g_count_332 = 0;
g_count_328 = 0;
}
if (High[1] <= High[2] && Low[1] >= Low[2] && Close[1] <= Open[1]) li_20 = TRUE;
else li_20 = FALSE;
if (High[1] <= High[2] && Low[1] >= Low[2] && Close[1] > Open[1]) li_24 = TRUE;
else li_24 = FALSE;
if (li_24 == TRUE && Close[2] > Open[2]) li_28 = TRUE;
else li_28 = FALSE;
if (li_20 == TRUE && Close[2] < Open[2]) li_32 = TRUE;
else li_32 = FALSE;
if (Open[1] < Close[1]) ld_60 = Close[1] - (Close[1] - Open[1]) / 3.0;
else ld_60 = Close[1] - (Close[1] - Low[1]) / 3.0;
if (Open[1] > Close[1]) ld_68 = Close[1] + (Open[1] - Close[1]) / 3.0;
else ld_68 = Close[1] + (High[1] - Close[1]) / 3.0;
if (Low[0] <= ld_60 || Hour() >= gi_260 && li_32 == FALSE && li_24 == FALSE) li_40 = TRUE;
else li_40 = FALSE;
if (High[0] >= ld_68 || Hour() >= gi_260 && li_28 == FALSE && li_20 == FALSE) li_44 = TRUE;
else li_44 = FALSE;
if (High[0] > High[1]) li_36 = TRUE;
else li_36 = FALSE;
if (li_36 == TRUE) {
index_0++;
high_124 = High[index_0];
while (high_124 < High[index_0 + 1]) {
high_124 = High[index_0 + 1];
index_0++;
}
}
if (Low[0] < Low[1]) li_48 = TRUE;
else li_48 = FALSE;
if (li_48 == TRUE) {
index_4++;
low_132 = Low[index_4];
while (low_132 > Low[index_4 + 1]) {
low_132 = Low[index_4 + 1];
index_4++;
}
}
if (li_36 == TRUE) {
Call_MM();
if (gi_364 == FALSE && iVolume(Symbol(), 0, 0) <= 1.0) gi_364 = TRUE;
if (Hour() <= iStartTradingHour || Hour() >= iEndTradingHour) return;
if (li_40 == TRUE) {
if (Low[0] > Low[1] && Low[1] < High[2]) {
if (OpenTradesForMN(MagicNumber) == 0 && g_count_328 == 0) {
if (FILTERS() == 1) {
gi_292 = OpenAtMarket(gs_300, OP_BUY, gd_280, StopLoss, TakeProfit, gs_308, MagicNumber, 0, gi_264, OrderRetries, SleepBetweenTrades);
gi_364 = FALSE;
if (StringLen(DoubleToStr(gi_292, 0)) == 1) ls_116 = "0" + gi_292;
else ls_116 = gi_292;
gi_unused_324 = 1;
g_count_328++;
}
}
}
}
}
if (li_48 == TRUE) {
Call_MM();
if (gi_368 == FALSE && iVolume(Symbol(), 0, 0) <= 1.0) gi_368 = TRUE;
if (Hour() <= iStartTradingHour || Hour() >= iEndTradingHour) return;
if (li_44 == TRUE) {
if (High[0] < High[1]) {
if (OpenTradesForMN(MagicNumber) == 0 && g_count_332 == 0) {
if (FILTERS() == -1) {
gi_296 = OpenAtMarket(gs_300, OP_SELL, gd_280, StopLoss, TakeProfit, gs_308, MagicNumber, 0, gi_268, OrderRetries, SleepBetweenTrades);
gi_368 = FALSE;
gi_unused_324 = 0;
g_count_332++;
}
}
}
}
}
return (0);
}
void MoveTrailingStopsPerMN(int a_magic_0, int ai_4, int ai_8) {
double price_20;
int order_total_16 = OrdersTotal();
for (int pos_12 = 0; pos_12 < order_total_16; pos_12++) {
OrderSelect(pos_12, SELECT_BY_POS, MODE_TRADES);
if (OrderType() == OP_SELL && OrderSymbol() == gs_300 && OrderMagicNumber() == a_magic_0) {
if (OrderStopLoss() == 0.0) {
price_20 = NormalizeDouble(Ask + Point * ai_4, Digits);
OrderModify(OrderTicket(), OrderOpenPrice(), price_20, OrderTakeProfit(), 0, g_color_276);
}
if (ai_8 > 0) {
if (OrderOpenPrice() > Ask && OrderStopLoss() > OrderOpenPrice()) {
if (OrderStopLoss() - Ask > Point * ai_4 + Point) {
price_20 = NormalizeDouble(Ask + Point * ai_4, Digits);
if (price_20 != 0.0) OrderModify(OrderTicket(), OrderOpenPrice(), price_20, OrderTakeProfit(), 0, g_color_276);
}
}
}
if (OrderOpenPrice() - Ask > Point * ai_4) {
if (OrderStopLoss() > Ask + Point * ai_4 + Point) {
price_20 = NormalizeDouble(Ask + Point * ai_4, Digits);
OrderModify(OrderTicket(), OrderOpenPrice(), price_20, OrderTakeProfit(), 0, g_color_276);
}
}
}
if (OrderType() == OP_BUY && OrderSymbol() == gs_300 && OrderMagicNumber() == a_magic_0) {
if (OrderStopLoss() == 0.0) {
price_20 = NormalizeDouble(Bid - Point * ai_4, Digits);
OrderModify(OrderTicket(), OrderOpenPrice(), price_20, OrderTakeProfit(), 0, g_color_272);
}
if (ai_8 > 0) {
if (OrderOpenPrice() < Bid && OrderStopLoss() < OrderOpenPrice()) {
if (Bid - OrderStopLoss() > Point * ai_4 + Point) {
price_20 = NormalizeDouble(Bid - Point * ai_4, Digits);
if (price_20 != 0.0) OrderModify(OrderTicket(), OrderOpenPrice(), price_20, OrderTakeProfit(), 0, g_color_272);
}
}
}
if (Bid - OrderOpenPrice() > Point * ai_4) {
if (OrderStopLoss() < Bid - Point * ai_4 - Point) {
price_20 = NormalizeDouble(Bid - Point * ai_4, Digits);
OrderModify(OrderTicket(), OrderOpenPrice(), price_20, OrderTakeProfit(), 0, g_color_272);
}
}
}
}
}
int OpenTradesForMN(int a_magic_0) {
int count_12 = 0;
int order_total_8 = OrdersTotal();
for (int pos_4 = 0; pos_4 < order_total_8; pos_4++) {
OrderSelect(pos_4, SELECT_BY_POS, MODE_TRADES);
if (OrderType() <= OP_SELL)
if (OrderMagicNumber() == a_magic_0) count_12++;
}
return (count_12);
}
int OpenAtMarket(string a_symbol_0, int a_cmd_8, double a_lots_12, int ai_20, int ai_24, string a_comment_28, int a_magic_36, int a_datetime_40, color a_color_44, int ai_48, int ai_52) {
double price_64;
double price_72;
double price_80;
int ticket_88;
int error_92;
int li_60 = ai_48;
li_60 = ai_48;
if (a_cmd_8 > OP_SELL) {
Print("OpenAtMarket Error: OrderType is a Pending Order!");
return (0);
}
while (li_60 > 0) {
RefreshRates();
if (a_cmd_8 == OP_BUY) {
price_64 = NormalizeDouble(Ask, Digits);
price_72 = NormalizeDouble(price_64 - ai_20 * Point, Digits);
price_80 = NormalizeDouble(price_64 + ai_24 * Point, Digits);
}
if (a_cmd_8 == OP_SELL) {
price_64 = NormalizeDouble(Bid, Digits);
price_72 = NormalizeDouble(price_64 + ai_20 * Point, Digits);
price_80 = NormalizeDouble(price_64 - ai_24 * Point, Digits);
}
ticket_88 = OrderSend(a_symbol_0, a_cmd_8, a_lots_12, price_64, Slippage, price_72, price_80, a_comment_28, a_magic_36, a_datetime_40, a_color_44);
li_60--;
if (ticket_88 == -1) {
error_92 = GetLastError();
if (error_92 == 4/* SERVER_BUSY */ || error_92 == 146/* TRADE_CONTEXT_BUSY */ || error_92 == 137/* BROKER_BUSY */ || error_92 == 6/* NO_CONNECTION */ || error_92 == 128/* TRADE_TIMEOUT */ ||
error_92 == 129/* INVALID_PRICE */ || error_92 == 136/* OFF_QUOTES */ || error_92 == 135/* PRICE_CHANGED */ || error_92 == 138/* REQUOTE */) {
Sleep(ai_52);
continue;
}
li_60 = 0;
Print("OpenAtMarket: OrderSend Error ", error_92);
} else li_60 = 0;
}
return (ticket_88);
}
void Call_MM() {
gd_280 = AccountFreeMargin() / 100000.0 * Risk_percent;
gd_280 = MathMin(maxLots, MathMax(minLots, gd_280));
if (minLots < 0.1) {
gd_280 = NormalizeDouble(gd_280, 2);
return;
}
if (minLots < 1.0) {
gd_280 = NormalizeDouble(gd_280, 1);
return;
}
gd_280 = NormalizeDouble(gd_280, 0);
}