Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2459
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
extern int TakeProfit = 20;
extern int StopLoss = 20;
extern double P1 = 0.01;
extern int Timeframe_Moving_minutes = 5;
extern bool Hand_Open_Order = true;
extern double Kontrol = 0.03;
int lossCount = 0;
bool isReversed = false;
string ordcomment = "Auto Trade";
int sticket, bticket;
double spread = MarketInfo(Symbol(), MODE_SPREAD) * Point;
bool isBuySignal = false;
bool isSellSignal = false;
int init()
{
GlobalVariableSet("Lots", Lots);
return(0);
}
Ошибок при компиляции не выдает, но ограничения не срабатываю. Открываются несколько сделок в одном направлении. Помогите пожалуйста исправит код.
int start()
{
// ... (остальной код)
if (!Hand_Open_Order)
{
if (iMA(NULL, Timeframe_Moving_minutes, 5, 0, MODE_SMA, PRICE_CLOSE, 0) < iMA(NULL, Timeframe_Moving_minutes, 5, 0, MODE_SMA, PRICE_CLOSE, 1)&&iMA(NULL, Timeframe_Moving_minutes, 5, 0, MODE_SMA, PRICE_CLOSE, 1) > iMA(NULL, Timeframe_Moving_minutes, 5, 0, MODE_SMA, PRICE_CLOSE, 2))
{
isSellSignal = true;
isBuySignal = false;
}
else if (iMA(NULL, Timeframe_Moving_minutes, 5, 0, MODE_SMA, PRICE_CLOSE, 0) > iMA(NULL, Timeframe_Moving_minutes, 5, 0, MODE_SMA, PRICE_CLOSE, 1)&&iMA(NULL, Timeframe_Moving_minutes, 5, 0, MODE_SMA, PRICE_CLOSE, 1) < iMA(NULL, Timeframe_Moving_minutes, 5, 0, MODE_SMA, PRICE_CLOSE, 2))
{
isBuySignal = true;
isSellSignal = false;
}
else
{
isBuySignal = false;
isSellSignal = false;
}
if (lossCount < 4)
{
if (isSellSignal)
{
Print("Нет открытых ордеров - открываем на продажу");
sticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 0, Bid + StopLoss * Point, Bid - Point * TakeProfit, ordcomment, 0, 0, Yellow);
if (sticket == -1)
{
Print("Не могу открыть ордер: ошибка #", GetLastError());
}
else
{
if (OrderSelect(0, SELECT_BY_POS, MODE_TRADES))
{
GlobalVariableSet("Lots", OrderLots());
bticket = OrderSend(Symbol(), OP_BUYSTOP, openlots(), OrderStopLoss(), 0, OrderStopLoss() + 2 * (OrderOpenPrice() - OrderStopLoss()), OrderStopLoss() - 2 * (OrderOpenPrice() - OrderStopLoss()), ordcomment, 0, 0, Magenta);
if (bticket == -1)
{
Print("Не могу открыть отложенный ордер: ошибка #", GetLastError());
}
}
}
}
else if (isBuySignal)
{
Print("Нет открытых ордеров - открываем на покупку");
bticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 0, Ask - StopLoss * Point, Ask + TakeProfit * Point, ordcomment, 0, 0, Yellow);
if (bticket == -1)
{
Print("Не могу открыть ордер: ошибка #", GetLastError());
}
else
{
if (OrderSelect(0, SELECT_BY_POS, MODE_TRADES))
{
GlobalVariableSet("Lots", OrderLots());
sticket = OrderSend(Symbol(), OP_SELLSTOP, openlots(), OrderStopLoss(), 0, OrderStopLoss() - 2 * (OrderStopLoss() - OrderOpenPrice()), OrderStopLoss() + 2 * (OrderStopLoss() - OrderOpenPrice()), ordcomment, 0, 0, Magenta);
if (sticket == -1)
{
Print("Не могу открыть отложенный ордер: ошибка #", GetLastError());
}
}
}
}
}
else
{
if (isSellSignal)
{
Print("Открываем ордер на продажу в том же направлении, что и до этого");
if (isReversed)
{
sticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 0, Bid + StopLoss * Point, Bid - Point * TakeProfit, ordcomment, 0, 0, Yellow);
}
else
{
bticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 0, Ask - StopLoss * Point, Ask + TakeProfit * Point, ordcomment, 0, 0, Yellow);
}
}
else if (isBuySignal)
{
Print("Открываем ордер на покупку в том же направлении, что и до этого");
if (isReversed)
{
bticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 0, Ask - StopLoss * Point, Ask + TakeProfit * Point, ordcomment, 0, 0, Yellow);
}
else
{
sticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 0, Bid + StopLoss * Point, Bid - Point * TakeProfit, ordcomment, 0, 0, Yellow);
}
}
if (sticket == -1 || bticket == -1)
{
Print("Не могу открыть ордер: ошибка #", GetLastError());
}
else
{
if (OrderSelect(0, SELECT_BY_POS, MODE_TRADES))
{
GlobalVariableSet("Lots", OrderLots());
}
}
}
}
// ... (остальной код)
if (OrderSelect(0, SELECT_BY_POS, MODE_TRADES))
{
if (OrderProfit() >= 0.0)
{
lossCount = 0;
isReversed = false;
}
else
{
lossCount++;
isReversed = true;
}
}
// ... (остальной код)
return(0);
}
double openlots()
{
return(2 * Lots + 0 + NormalizeDouble(GlobalVariableGet("Lots"), 3));
}
int deinit()
{
Comment("");
return(0);
}
darirunu1 #:
....
примерно так выглядит мат на MQL :-)
extern double Lots = 0.01;
extern int TakeProfit = 20;
...
{
Comment("");
return(0);
}