Ошибки, баги, вопросы - страница 3574

 
Ivan Butko #:
В 21 веке, в 25-м году. 

Даже смеяться неудобно

Исходи из того что есть.

 
Volodymyr Zubov #:

Исходи из того что есть.

когда работаешь много с деньгами, экономить приходится на всем)

мног раз уже писал тут, что такое ощущение, что разработками по сайту занимается сам глава

из примеров можно привести майнеров, они перестают играть, дорого пол киловата за несколько часов игры)
 

Хочу получить значения шага шкалы

DefaultStep (метод Get)
Возвращает начальное значение шага по оси. 
double  DefaultStep()
 

Но, получаю всегда значение 25, что не верно. Такое ощущение, что это значение в пикселях.

Другие характеристики шкалы получаю правильно.

      double Os_Min=y_axis.Min();//Получить/установить минимальное значение оси
      double Os_Max=y_axis.Max();//Получить/установить минимальное значение оси
 

Приветствую всех! 

Друзья!, Помогите исправить ошибку.

Ошибка : в строке 34 '{' - unbalanced parentheses


Код:

 //+------------------------------------------------------------------+
//|                                                      EMA_RSI.mq5  |
//|                        Copyright 2023, Your Name                 |
//|                                       https://www.yourwebsite.com |
//+------------------------------------------------------------------+
#property strict

input int emaLength = 50; // Длина EMA
input int rsiLength = 14; // Длина RSI
double ema50[];
double rsi[];

//+------------------------------------------------------------------+
//| Expert initialization function                                     |
//+------------------------------------------------------------------+
int OnInit()
{
    ArraySetAsSeries(ema50, true);
    ArraySetAsSeries(rsi, true);
    return INIT_SUCCEEDED;
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                   |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}

//+------------------------------------------------------------------+
//| Expert tick function                                              |
//+------------------------------------------------------------------+
void OnTick()
{
    // Получаем данные о ценах
    MqlRates rates[];
    if (CopyRates(Symbol(), PERIOD_H1, 0, 1000, rates) <= 0)
        return;

    int rates_total = ArraySize(rates);
    
    if (rates_total < emaLength || rates_total < rsiLength)
        return;

    // Рассчитываем EMA
    if (CopyBuffer(iMA(Symbol(), PERIOD_H1, emaLength, 0, MODE_EMA, PRICE_CLOSE), 0, 0, 2, ema50) <= 0)
        return;

    // Рассчитываем RSI
    if (CopyBuffer(iRSI(Symbol(), PERIOD_H1, rsiLength, PRICE_CLOSE), 0, 0, 2, rsi) <= 0)
        return;

    double closePrice = rates[0].close; // Используем close из массива rates

    // Условия для покупки
    bool buyCondition = (closePrice > ema50[0] && rates[1].close > ema50[1] &&
                         rsi[0] > 50 && rsi[0] < 60);

    // Условия для продажи
    bool sellCondition = (closePrice < ema50[0] && rates[1].close < ema50[1] &&
                          rsi[0] < 50 && rsi[0] > 40);

    // Проверяем открытые ордера
    bool hasOpenBuy = false;
    bool hasOpenSell = false;

    for (int i = PositionsTotal() - 1; i >= 0; i--)
    {
        ulong ticket = PositionGetTicket(i);
        if (PositionSelectByTicket(ticket))
        {
            if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)
                hasOpenBuy = true;
            else if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)
                hasOpenSell = true;
  }
}

    // Вход в позицию на покупку
if (buyCondition && !hasOpenBuy)
{
    double lotSize = 0.1; // Размер лота
    double price = NormalizeDouble(SymbolInfoDouble(Symbol(), SYMBOL_ASK), _Digits); // Получаем цену Ask
    double slippage = 2; // Слиппаж
    double stopLoss = price - 100 * _Point; // Задаем стоп-лосс
    double takeProfit = price + 100 * _Point; // Задаем тейк-профит

    MqlTradeRequest request;
    MqlTradeResult result;

    request.action = TRADE_ACTION_DEAL;
    request.symbol = Symbol();
    request.volume = lotSize;
    request.type = ORDER_BUY; // Используем правильное перечисление
    request.price = price;
    request.slippage = slippage;
    request.tp = takeProfit;
    request.sl = stopLoss;

    if (!OrderSend(request, result))
    {
        Print("Ошибка открытия ордера на покупку: ", GetLastError());
    }
}

// Вход в позицию на продажу
if (sellCondition && !hasOpenSell)
{
    double lotSize = 0.1; // Размер лота
    double price = NormalizeDouble(SymbolInfoDouble(Symbol(), SYMBOL_BID), _Digits); // Получаем цену Bid
    double slippage = 2; // Слиппаж
    double stopLoss = price + 100 * _Point; // Задаем стоп-лосс
    double takeProfit = price - 100 * _Point; // Задаем тейк-профит

    MqlTradeRequest request;
    MqlTradeResult result;

    request.action = TRADE_ACTION_DEAL;
    request.symbol = Symbol();
    request.volume = lotSize;
    request.type = ORDER_SELL; // Используем правильное перечисление
    request.price = price;
    request.slippage = slippage;
    request.tp = takeProfit;
    request.sl = stopLoss;

    if (!OrderSend(request, result))
    {
        Print("Ошибка открытия ордера на продажу: ", GetLastError());
    }
}

//+------------------------------------------------------------------+


Заранее благодарю!

 
antonrex #:

Приветствую всех! 

Друзья!, Помогите исправить ошибку.

Ошибка : в строке 34 '{' - unbalanced parentheses


Код:


Заранее благодарю!

Вставляйте правильно код -

----------------‌

MQL5.community - Памятка пользователя 

Кнопка  Исходный кодпредназначена для вставки исходного кода в текст сообщения. При нажатии появляется пустое окно, в которое необходимо вставить код и далее нажать кнопку Вставить. Для отмены вставки кода необходимо нажать кнопку Отмена.

 

Приветствую всех! 

Друзья!, Помогите исправить ошибку.

Ошибка : в строке 34 '{' - unbalanced parentheses

//+------------------------------------------------------------------+
//|                                                      EMA_RSI.mq5  |
//|                        Copyright 2023, Your Name                 |
//|                                       https://www.yourwebsite.com |
//+------------------------------------------------------------------+
#property strict

input int emaLength = 50; // Длина EMA
input int rsiLength = 14; // Длина RSI
double ema50[];
double rsi[];

//+------------------------------------------------------------------+
//| Expert initialization function                                     |
//+------------------------------------------------------------------+
int OnInit()
{
    ArraySetAsSeries(ema50, true);
    ArraySetAsSeries(rsi, true);
    return INIT_SUCCEEDED;
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                   |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}

//+------------------------------------------------------------------+
//| Expert tick function                                              |
//+------------------------------------------------------------------+
void OnTick()
{
    // Получаем данные о ценах
    MqlRates rates[];
    if (CopyRates(Symbol(), PERIOD_H1, 0, 1000, rates) <= 0)
        return;

    int rates_total = ArraySize(rates);
    
    if (rates_total < emaLength || rates_total < rsiLength)
        return;

    // Рассчитываем EMA
    if (CopyBuffer(iMA(Symbol(), PERIOD_H1, emaLength, 0, MODE_EMA, PRICE_CLOSE), 0, 0, 2, ema50) <= 0)
        return;

    // Рассчитываем RSI
    if (CopyBuffer(iRSI(Symbol(), PERIOD_H1, rsiLength, PRICE_CLOSE), 0, 0, 2, rsi) <= 0)
        return;

    double closePrice = rates[0].close; // Используем close из массива rates

    // Условия для покупки
    bool buyCondition = (closePrice > ema50[0] && rates[1].close > ema50[1] &&
                         rsi[0] > 50 && rsi[0] < 60);

    // Условия для продажи
    bool sellCondition = (closePrice < ema50[0] && rates[1].close < ema50[1] &&
                          rsi[0] < 50 && rsi[0] > 40);

    // Проверяем открытые ордера
    bool hasOpenBuy = false;
    bool hasOpenSell = false;

    for (int i = PositionsTotal() - 1; i >= 0; i--)
    {
        ulong ticket = PositionGetTicket(i);
        if (PositionSelectByTicket(ticket))
        {
            if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)
                hasOpenBuy = true;
            else if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)
                hasOpenSell = true;
  }
}

    // Вход в позицию на покупку
if (buyCondition && !hasOpenBuy)
{
    double lotSize = 0.1; // Размер лота
    double price = NormalizeDouble(SymbolInfoDouble(Symbol(), SYMBOL_ASK), _Digits); // Получаем цену Ask
    double slippage = 2; // Слиппаж
    double stopLoss = price - 100 * _Point; // Задаем стоп-лосс
    double takeProfit = price + 100 * _Point; // Задаем тейк-профит

    MqlTradeRequest request;
    MqlTradeResult result;

    request.action = TRADE_ACTION_DEAL;
    request.symbol = Symbol();
    request.volume = lotSize;
    request.type = ORDER_BUY; // Используем правильное перечисление
    request.price = price;
    request.slippage = slippage;
    request.tp = takeProfit;
    request.sl = stopLoss;

    if (!OrderSend(request, result))
    {
        Print("Ошибка открытия ордера на покупку: ", GetLastError());
    }
}

// Вход в позицию на продажу
if (sellCondition && !hasOpenSell)
{
    double lotSize = 0.1; // Размер лота
    double price = NormalizeDouble(SymbolInfoDouble(Symbol(), SYMBOL_BID), _Digits); // Получаем цену Bid
    double slippage = 2; // Слиппаж
    double stopLoss = price + 100 * _Point; // Задаем стоп-лосс
    double takeProfit = price - 100 * _Point; // Задаем тейк-профит

    MqlTradeRequest request;
    MqlTradeResult result;

    request.action = TRADE_ACTION_DEAL;
    request.symbol = Symbol();
    request.volume = lotSize;
    request.type = ORDER_SELL; // Используем правильное перечисление
    request.price = price;
    request.slippage = slippage;
    request.tp = takeProfit;
    request.sl = stopLoss;

    if (!OrderSend(request, result))
    {
        Print("Ошибка открытия ордера на продажу: ", GetLastError());
    }
}

//+------------------------------------------------------------------+
 
antonrex #:

Приветствую всех! 

Друзья!, Помогите исправить ошибку.

Ошибка : в строке 34 '{' - unbalanced parentheses


Во фрагменте кода в приложенном рисунке явно не хватает закрывающей скобки.
Файлы:
 
Sergey Gridnev #:

Во фрагменте кода в приложенном рисунке явно не хватает закрывающей скобки.

Сергей, я правильно понял , нужно добавить еще одну закрывающую скобку , чтобы было вот так ?


            }

        }

 }

 
Slava #:
Исправим. Спасибо

Спасибо.
В 4540 исправлено.

 
antonrex #:

Сергей, я правильно понял , нужно добавить еще одну закрывающую скобку , чтобы было вот так ?

            }

        }

 }

Да, в самом конце кода не хватает закрывающей скобки. Кроме того, в коде ещё несколько ошибок: request.slippage - что это такое и почему оно вообще появилось в запросе, а также в типе перечисления должны быть не ORDER_BUY и ORDER_SELL, а  ORDER_TYPE_BUY и ORDER_TYPE_SELL.

Плюсом будет ещё одно замечание - перед отправкой запроса на торговый сервер необходимо обнулить значения request и result

      ZeroMemory(request);
      ZeroMemory(result);

С уважением, Владимир.


P.S. Прошу модераторов перенести вопросы автора и ответы на них в соответствующую тему.