//=====================================================================
extern int MinPrfofit = 1;
extern int MaxLoss = 10;
extern int Delta = 3;
extern int BB_Period = 1;
extern int BB_Deviation = 2;
extern bool FixLotMM = FALSE;
extern double FixLotSize = 0.1;
extern double RiskPercent = 10.0;
extern int Slippage = 2;
//=====================================================================
int g_magic_132;
double g_stoplevel_140;
double g_spread_148;
double g_maxlot_156;
double g_minlot_164;
double g_lotstep_172;
double g_lots_180;
double gd_188;
string Comm="";
//=====================================================================
int init() {
g_magic_132 = StringGetChar(Symbol(), 0) + 77704 + StringGetChar(Symbol(), 1) << 1 + 3 * StringGetChar(Symbol(), 3) + StringGetChar(Symbol(), 4) << 2 + 10000 * Period();
HideTestIndicators(TRUE);
return (0);
}
//=====================================================================
int start() {
string ls_0;
double l_price_8;
double l_price_16;
double ld_24;
bool li_32;
bool li_36;
g_stoplevel_140 = MarketInfo(Symbol(), MODE_STOPLEVEL);
g_spread_148 = MarketInfo(Symbol(), MODE_SPREAD);
g_maxlot_156 = MarketInfo(Symbol(), MODE_MAXLOT);
g_minlot_164 = MarketInfo(Symbol(), MODE_MINLOT);
g_lotstep_172 = MarketInfo(Symbol(), MODE_LOTSTEP);
if (FixLotMM) g_lots_180 = FixLotSize;
else g_lots_180 = AccountFreeMargin() / 1000.0 * (RiskPercent / 100.0);
if (g_lots_180 < g_minlot_164) g_lots_180 = g_minlot_164;
else {
if (g_lots_180 > g_maxlot_156) g_lots_180 = g_maxlot_156;
else {
for (gd_188 = g_minlot_164; gd_188 <= g_lots_180; gd_188 += g_lotstep_172) {
}
g_lots_180 = gd_188 - g_lotstep_172;
}
}
for (int $i = OrdersTotal() - 1; $i >= 0; $i--) {
OrderSelect($i, SELECT_BY_POS);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_132) continue;
if (OrderType() == OP_BUY) {
ld_24 = Bid - OrderOpenPrice();
if ((MinPrfofit > 0 && ld_24 >= MinPrfofit * Point) || (MaxLoss > 0 && ld_24 <= (-1 * MaxLoss) * Point)) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Purple);
}
}
if (OrderType() == OP_SELL) {
ld_24 = OrderOpenPrice() - Ask;
if ((MinPrfofit > 0 && ld_24 >= MinPrfofit * Point) || (MaxLoss > 0 && ld_24 <= (-1 * MaxLoss) * Point)) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Red);
}
}
}
double l_ibands_44 = iBands(Symbol(), 0, BB_Period, BB_Deviation, 0, PRICE_OPEN, MODE_UPPER, 0);
double l_ibands_52 = iBands(Symbol(), 0, BB_Period, BB_Deviation, 0, PRICE_OPEN, MODE_LOWER, 0);
if (Close[0] > l_ibands_44 + Delta * Point) li_36 = TRUE;
else li_36 = FALSE;
if (Close[0] < l_ibands_52 - Delta * Point) li_32 = TRUE;
else li_32 = FALSE;
if (li_32) {
if (MaxLoss == 0) l_price_8 = 0;
else l_price_8 = Ask - (MaxLoss + g_stoplevel_140) * Point;
if (MinPrfofit == 0) l_price_16 = 0;
else l_price_16 = Ask + (MinPrfofit + g_stoplevel_140 + g_spread_148) * Point;
OrderSend(Symbol(), OP_BUY, g_lots_180, Ask, Slippage, l_price_8, l_price_16, Comm, g_magic_132, 16711680);
}
if (li_36) {
if (MaxLoss == 0) l_price_8 = 0;
else l_price_8 = Bid + (MaxLoss + g_stoplevel_140) * Point;
if (MinPrfofit == 0) l_price_16 = 0;
else l_price_16 = Bid - (MinPrfofit + g_stoplevel_140 + g_spread_148) * Point;
OrderSend(Symbol(), OP_SELL, g_lots_180, Bid, Slippage, l_price_8, l_price_16, Comm, g_magic_132, 255);
}
return (0);
}Отредактировано Andy_Kon (2008-12-30 17:19:29)