广告很火的EA—EURO BLASTER Turbo 修改版
2012-05-10 08:58:36 来源: 作者:
里面的止损1500点完全可以调整为150点,还有止赢也可以大,总的来说这是非常优秀的智能交易程序,分批下单是值得我们学习的一个模式。经过调试后还是可以重新此版本是经过我改动的,不会影响其赚钱的效果!
//------------------------------------------------------------------
#property copyright "外汇联盟 www.FXunion.com QQ群144033"
#property link ""
extern string EA_Name = "EURO-BLASTER Turbo";
extern string Creator = "";
extern int Password = 0;
extern bool EB = TRUE;
extern int MagicNo = 475543;
extern bool TurboTrading = TRUE;
extern bool Aggressive = FALSE;
extern int Magic_No = 1146236;
extern string ln1 = "-----------------------------";
extern string Part1 = "Time Management";
extern string ln2 = "-----------------------------";
extern bool Use_Time_Mgmt = FALSE;
extern bool Trade_On_Monday = TRUE;
extern bool Trade_On_Tuesday = TRUE;
extern bool Trade_On_Wednesday = TRUE;
extern bool Trade_On_Thursday = TRUE;
extern bool Trade_On_Friday = TRUE;
extern string Part1_1 = ">> Start-End Time 1 <<";
extern int TradeStartHour = 0;
extern int TradeStartMinutes = 0;
extern int TradeEndHour = 12;
extern int TradeEndMinutes = 0;
extern string Part1_2 = ">> Start-End Time 2 <<";
extern int TradeStartHour2 = 12;
extern int TradeStartMinutes2 = 0;
extern int TradeEndHour2 = 24;
extern int TradeEndMinutes2 = 0;
extern string ln3 = "------------------------------";
extern string Part2 = "Trading Management";
extern string ln4 = "------------------------------";
extern bool NFA_Rules = FALSE;
extern bool MM = TRUE;
extern double RiskPercent = 5.0;
extern double LotSize = 0.1;
extern double Max_Lot_Size = 100.0;
extern int MaxOrder = 4;
extern double StopTime = 0.0;
extern double TakeProfit = 25.0;
extern double Min_Auto_TP = 10.0;
extern double StopLoss = 1500.0;
extern string ln5 = "------------------------------";
extern double TrailingStop = 0.0;
extern bool TrailingProfit = FALSE;
extern int TrailingPips = 2;
extern bool Profit_Protection = FALSE;
extern double Percent_Over_Balance = 2.0;
extern bool BreakEven = FALSE;
extern int BreakEvenPips = 10;
extern bool HedgeAllowed = TRUE;
extern int Slippage = 3;
extern string ln6 = "------------------------------";
extern int Turbo_Bars_Period = 100;
extern int Turbo_Detection_Period = 20;
extern int Bars_Period_Screen = 288;
extern string End = "*** Good Luck ***";
int g_period_384 = 10;int Count32 = 0; double PipValue=1;double DDBuffer=0; string 文本 = "我的图标";
int gi_388 = 20;
double gd_unused_392 = 5.0;
double gd_unused_400 = 10.0;
double gd_unused_408 = 22.0;
double gd_unused_416 = 20.0;
int gi_424 = 11;
double gd_unused_428 = 26.0;
double gd_unused_436 = 13.0;
double gd_unused_444 = 15.0;
double gd_unused_452 = 10.0;
double gd_460;
double g_minlot_468;
double g_lotstep_476;
double gd_484;
double g_point_508;
int g_slippage_516;
int g_stoplevel_520;
int gi_524;
int gi_528 = 0;
int gi_532 = 0;
bool li_40;
int li_44;
int li_48;
int l_icustom_52;
int l_icustom_56;
int init() {
if (Point == 0.00001) g_point_508 = 0.0001;
else {
if (Point == 0.001) g_point_508 = 0.01;
else g_point_508 = Point;
}
return (0);
}
int deinit() {
return (0);
}
int Crossed(double ad_0, double ad_8) {
if (ad_0 > ad_8) gi_532 = 1;
if (ad_0 < ad_8) gi_532 = 2;
if (gi_532 != gi_528) {
gi_528 = gi_532;
return (gi_528);
}
return (0);
}
double Predict() {
double l_ima_4;
double l_ima_28;
double l_ima_36;
double l_istddev_132;
double ld_44 = 0;
double ld_52 = 0;
double ld_68 = 0;
double ld_76 = 0;
double ld_unused_84 = 0;
double ld_unused_92 = 0;
double ld_100 = 0;
double ld_108 = 0;
double ld_116 = 0;
double ld_124 = 0;
double ld_140 = 0;
double ld_unused_60 = 0;
double ld_156 = 0;
double ld_164 = 0;
double ld_180 = 0;
double ld_20 = 0;
double l_ima_12 = iMA(NULL, 0, g_period_384, 0, MODE_SMA, PRICE_CLOSE, 0);
for (int li_0 = 1; li_0 <= g_period_384; li_0++) {
l_ima_4 = iMA(NULL, 0, g_period_384, 0, MODE_SMA, PRICE_CLOSE, li_0);
l_ima_28 = iMA(NULL, 0, g_period_384, 0, MODE_SMA, PRICE_HIGH, li_0);
l_ima_36 = iMA(NULL, 0, g_period_384, 0, MODE_SMA, PRICE_LOW, li_0);
l_istddev_132 = iStdDev(NULL, 0, g_period_384, 0, MODE_SMA, PRICE_CLOSE, li_0);
ld_44 += (High[li_0] + Low[li_0]) / 2.0;
ld_52 += Close[li_0];
ld_68 += ld_44 - ld_52;
ld_76 += l_ima_4;
ld_124 += l_istddev_132;
ld_156 += Close[li_0] - Open[li_0] - (Close[li_0 - 1] - (Open[li_0 - 1]));
ld_20 = ld_20 + (l_ima_28 - l_ima_4) + (l_ima_36 - l_ima_4);
}
ld_100 = ld_44 / g_period_384;
ld_108 = ld_52 / g_period_384;
ld_116 = ld_76 / g_period_384;
ld_140 = ld_124 / g_period_384;
ld_180 = ld_68 / g_period_384;
ld_164 = ld_156 / g_period_384;
if (ld_180 > 0.0 && l_ima_12 > ld_116 && ld_164 > 0.0 && Open[0] < l_ima_12 + ld_140 && Open[0] > l_ima_12) return (1);
if (ld_180 < 0.0 && l_ima_12 < ld_116 && ld_164 < 0.0 && Open[0] > l_ima_12 - ld_140 && Open[0] < l_ima_12) return (2);
}
double Predict2() {
double ld_28 = 0;
double ld_36 = 0;
double ld_44 = 0;
double ld_52 = 0;
double ld_60 = 0;
double ld_76 = 0;
double ld_100 = 0;
double ld_116 = 0;
double ld_132 = 0;
double l_istddev_84 = 0;
double ld_148 = 0;
double ld_156 = 0;
double ld_164 = 0;
l_istddev_84 = iStdDev(NULL, 0, 10, 0, MODE_EMA, PRICE_CLOSE, 0);
double l_istddev_92 = iStdDev(NULL, 0, 20, 0, MODE_EMA, PRICE_CLOSE, 0);
double l_ima_4 = iMA(NULL, PERIOD_M30, 10, 0, MODE_SMA, PRICE_CLOSE, 0);
double l_ima_12 = iMA(NULL, PERIOD_M30, 10, 0, MODE_SMA, PRICE_CLOSE, 1);
double l_ima_20 = iMA(NULL, PERIOD_M30, 10, 0, MODE_SMA, PRICE_CLOSE, 2);
for (int li_0 = 1; li_0 <= gi_388; li_0++) {
ld_28 += Close[li_0];
ld_36 += High[li_0] - Low[li_0];
ld_44 += Close[li_0] - Open[li_0];
if (li_0 <= 10) {
ld_148 += Close[li_0];
ld_156 += High[li_0] - Low[li_0];
ld_164 += Close[li_0] - Open[li_0];
}
}
ld_52 = ld_28 / gi_388;
ld_60 = ld_36 / gi_388;
ld_76 = ld_44 / gi_388;
double ld_172 = ld_148 / 10.0;
double ld_180 = ld_156 / 10.0;
double ld_188 = ld_164 / 10.0;
ld_132 = (Open[0] - ld_172) / l_istddev_84;
double ld_140 = (Open[0] - ld_52) / l_istddev_92;
ld_100 = ld_172 + 0.308 * ld_180;
double ld_108 = ld_52 + 0.18 * ld_60;
ld_116 = ld_172 - 0.308 * ld_180;
double ld_124 = ld_52 - 0.18 * ld_60;
if ((l_ima_4 - l_ima_20 > l_ima_12 - l_ima_20 + 2.0 * g_point_508 && ld_188 > 0.0 && ld_164 > 0.0 && Open[0] > ld_116 && Open[0] <= ld_172 + ld_132 * ld_188 && ld_132 < 0.0 &&
High[1] - Low[1] < 1.777 * ld_180) || (l_ima_4 - l_ima_20 > l_ima_12 - l_ima_20 + 2.0 * g_point_508 && ld_76 > 0.0 && ld_44 > 0.0 && Open[0] > ld_124 && Open[0] <= ld_52 + ld_132 * ld_76 && ld_140 < 0.0 && High[1] - Low[1] < 1.586 * ld_180)) return (1);
if ((l_ima_4 - l_ima_20 < l_ima_12 - l_ima_20 - 2.0 * g_point_508 && ld_188 < 0.0 && ld_164 < 0.0 && Open[0] < ld_100 && Open[0] >= ld_172 + ld_132 * ld_188 && ld_132 > 0.0 &&
High[1] - Low[1] < 1.777 * ld_180) || (l_ima_4 - l_ima_20 < l_ima_12 - l_ima_20 - 2.0 * g_point_508 && ld_76 < 0.0 && ld_44 < 0.0 && Open[0] < ld_108 && Open[0] >= ld_52 + ld_132 * ld_76 && ld_140 > 0.0 && High[1] - Low[1] < 1.586 * ld_180)) return (2);
if (l_ima_4 - l_ima_20 > l_ima_12 - l_ima_20 + 2.0 * g_point_508 && ld_76 > 0.0 && ld_44 > 0.0 && Open[0] > ld_124 && Open[0] <= ld_52 + ld_132 * ld_76 && ld_140 < 0.0 &&
High[1] - Low[1] > 1.586 * ld_180) return (3);
if (l_ima_4 - l_ima_20 < l_ima_12 - l_ima_20 - 2.0 * g_point_508 && ld_76 < 0.0 && ld_44 < 0.0 && Open[0] < ld_108 && Open[0] >= ld_52 + ld_132 * ld_76 && ld_140 > 0.0 &&
High[1] - Low[1] > 1.586 * ld_180) return (4);
}
double Predict1() {
double ld_4 = 0;
double ld_12 = 0;
double ld_20 = 0;
double ld_unused_28 = 0;
double ld_36 = 0;
double ld_44 = 0;
double ld_52 = 0;
double ld_ret_68 = 0;
double l_ima_76 = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0);
double l_istddev_84 = iStdDev(NULL, 0, 20, 0, MODE_EMA, PRICE_CLOSE, 0);
for (int li_0 = 1; li_0 <= Turbo_Detection_Period; li_0++) {
ld_4 = ld_4 + Close[li_0] - l_ima_76;
ld_12 += (Close[li_0] - l_ima_76) * (Close[li_0 - 1] - l_ima_76);
ld_20 += (Close[li_0] - l_ima_76) * (Close[li_0] - l_ima_76);
}
if (ld_20 == 0.0) ld_20 = 0.0001;
ld_36 = ld_12 / ld_20;
ld_44 = MathSqrt((2.0 * ld_36 * ld_36 + 1.0) / Turbo_Detection_Period);
ld_52 = ld_36 / ld_44;
double ld_60 = 2;
if (ld_52 < ld_60 && ld_52 > (-ld_60)) ld_ret_68 = 1;
else {
if (Open[0] > l_ima_76 && ld_4 > 0.0) ld_ret_68 = 2;
if (Open[0] < l_ima_76 && ld_4 < 0.0) ld_ret_68 = 3;
}
return (ld_ret_68);
}
int chk(int ai_0, int ai_4) {
string ls_8 = "2009.31.10";
string ls_16 = "2009.31.12";
string ls_24 = "2010.28.02";
string ls_32 = "2010.30.04";
int l_str2time_40 = StrToTime(ls_8);
int l_str2time_44 = StrToTime(ls_16);
int l_str2time_48 = StrToTime(ls_24);
int l_str2time_52 = StrToTime(ls_32);
int li_56 = 0;
return (1);
}
double LotsOptimized() {
if (!MM) return (LotSize);
double l_marginrequired_0 = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
if (Max_Lot_Size > 0.0 && Max_Lot_Size < gd_460) gd_460 = Max_Lot_Size;
if (RiskPercent > 100.0) RiskPercent = 100;
double ld_ret_8 = AccountFreeMargin() * RiskPercent / (100000 / l_marginrequired_0);
if (g_lotstep_476 < 0.1) ld_ret_8 = NormalizeDouble(MathFloor(ld_ret_8 / gd_484) * g_lotstep_476, 2);
else ld_ret_8 = NormalizeDouble(MathFloor(ld_ret_8 / gd_484) * g_lotstep_476, 1);
if (ld_ret_8 < g_minlot_468) ld_ret_8 = g_minlot_468;
if (ld_ret_8 > gd_460) ld_ret_8 = gd_460;
return (ld_ret_8);
}
int isTradeTime() {
int l_str2time_4;
int l_str2time_8;
int l_str2time_12;
int l_str2time_16;
int l_datetime_0 = TimeCurrent();
if (Use_Time_Mgmt) {
l_str2time_4 = StrToTime(TradeStartHour + ":" + TradeStartMinutes);
l_str2time_8 = StrToTime(TradeEndHour + ":" + TradeEndMinutes);
l_str2time_12 = StrToTime(TradeStartHour2 + ":" + TradeStartMinutes2);
l_str2time_16 = StrToTime(TradeEndHour2 + ":" + TradeEndMinutes2);
if (l_str2time_4 < l_str2time_8 && (l_datetime_0 >= l_str2time_4 && l_datetime_0 <= l_str2time_8)) return (1);
if (l_str2time_12 > l_str2time_4 && l_str2time_12 >= l_str2time_8 && l_datetime_0 >= l_str2time_8)
if (l_str2time_12 < l_str2time_16 && (l_datetime_0 >= l_str2time_12 && l_datetime_0 <= l_str2time_16)) return (1);
}
return (0);
}
int Trade(int ai_0, int ai_4, int ai_8) {
int l_ticket_52;
double ld_12 = StopLoss;
double l_price_20 = 0;
double l_price_28 = 0;
double l_istddev_36 = iStdDev(NULL, 0, 20, 0, MODE_EMA, PRICE_CLOSE, 0);
double l_istddev_44 = iStdDev(NULL, 0, 20, 0, MODE_EMA, PRICE_CLOSE, 1);
int l_slippage_56 = Slippage;
if (ai_0 == 1) {
if (ai_8 == 1 && li_40 == FALSE) l_ticket_52 = OrderSend(Symbol(), OP_BUY, LotsOptimized(), Ask, l_slippage_56, 0, 0, "Euro-Blaster Turbo", MagicNo, 0, Green);
if (ai_8 == 2 && li_40 == FALSE) l_ticket_52 = OrderSend(Symbol(), OP_BUY, LotsOptimized(), Ask, l_slippage_56, 0, 0, "Euro-Blaster Turbo", Magic_No, 0, Green);
if (l_ticket_52 > 0) {
if (OrderSelect(l_ticket_52, SELECT_BY_TICKET, MODE_TRADES)) Print("BUY order opened : ", OrderOpenPrice());
if (!NFA_Rules) {
if (ld_12 > 0.0) l_price_20 = Ask - StopLoss * g_point_508;
if (ld_12 <= 0.0) l_price_20 = 0;
if (TakeProfit > 0.0 && ai_4 == 1) l_price_28 = Ask + TakeProfit * g_point_508;
if (Min_Auto_TP > 0.0 && ai_4 == 2) l_price_28 = Ask + (l_istddev_36 + l_istddev_44) / 2.0 + Min_Auto_TP * g_point_508;
if (Min_Auto_TP > 0.0 && ai_4 == 3) l_price_28 = Ask + Min_Auto_TP * g_point_508;
if (l_price_20 > 0.0 || l_price_28 > 0.0) OrderModify(OrderTicket(), OrderOpenPrice(), l_price_20, l_price_28, 0, CLR_NONE);
}
} else Print("Error opening BUY order : ", GetLastError());
} else {
if (ai_0 == 2) {
if (ai_8 == 1 && li_40 == FALSE) l_ticket_52 = OrderSend(Symbol(), OP_SELL, LotsOptimized(), Bid, l_slippage_56, 0, 0, "Euro-Blaster Turbo", MagicNo, 0, Red);
if (ai_8 == 2 && li_40 == FALSE) l_ticket_52 = OrderSend(Symbol(), OP_SELL, LotsOptimized(), Bid, l_slippage_56, 0, 0, "Euro-Blaster Turbo", Magic_No, 0, Red);
if (l_ticket_52 > 0) {
if (OrderSelect(l_ticket_52, SELECT_BY_TICKET, MODE_TRADES)) Print("SELL order opened : ", OrderOpenPrice());
if (!NFA_Rules) {
if (ld_12 > 0.0) l_price_20 = Bid + StopLoss * g_point_508;
if (ld_12 <= 0.0) l_price_20 = 0;
if (TakeProfit > 0.0 && ai_4 == 1) l_price_28 = Bid - TakeProfit * g_point_508;
if (Min_Auto_TP > 0.0 && ai_4 == 2) l_price_28 = Bid - (l_istddev_36 + l_istddev_44) / 2.0 - Min_Auto_TP * g_point_508;