Долбанная ошибка

 

В коде есть ошибка, ни чего не могу с ней сделать. Может подскажет кто что надо сделать.

При компиляции терминал пишет 'SymbolInfoDouble' - no one of the overloads can be applied to the function call 35 10

   could be one of 2 function(s) 35 10
   built-in: double SymbolInfoDouble(const string,ENUM_SYMBOL_INFO_DOUBLE) 35 10
   built-in: bool SymbolInfoDouble(const string,ENUM_SYMBOL_INFO_DOUBLE,double&) 35 10
    1 errors, 0 warnings 2 1
Строку выделил красным цветом
input double FirstOrderLot = 0.01;
input int FirstOrderSL = 30;
input int FirstOrderTP = 30;
input bool EnableCommonTP = true;
input double GridOrderLot = 0.01;
input int GridOrderSL = 30;
input int GridOrderTP = 30;
input int GridStep = 10;
input int MagicNumber = 123456;

int OnInit() {
    return INIT_SUCCEEDED;
}

void OnDeinit(const int reason) {
}

void OnTick() {
    double Ask = 0.0, Bid = 0.0, stopsLevel = 0.0; double askValue = 0.0;

    if (!SymbolInfoDouble(_Symbol, SYMBOL_ASK, askValue)) {
        return;
    }
    Ask = NormalizeDouble(askValue, _Digits); 

    if (!SymbolInfoDouble(_Symbol, SYMBOL_BID, Bid)) {
        return;
    }
    Bid = NormalizeDouble(Bid, _Digits);

    if (!SymbolInfoDouble(_Symbol, SYMBOL_TRADE_STOPS_LEVEL, stopsLevel)) {
        return;
    }

    if (PositionsTotal() == 0 && AccountInfoDouble(ACCOUNT_BALANCE) >= FirstOrderLot * 100000) {
        MqlTradeRequest request;
        MqlTradeResult result;
        request.action = TRADE_ACTION_DEAL;
        request.symbol = _Symbol;
        request.volume = FirstOrderLot;
        request.type = ORDER_TYPE_BUY;
        request.price = Ask;
        request.sl = Ask - FirstOrderSL * _Point;
        request.tp = Ask + FirstOrderTP * _Point;
        request.deviation = 5;
        request.magic = MagicNumber;
        request.type_filling = ORDER_FILLING_IOC;

        if (!OrderSend(request, result)) {
            Print("OrderSend failed with error ", GetLastError());
        }
    } else {
        for (int i = PositionsTotal() - 1; i >= 0; i--) {
            ulong ticket = PositionGetTicket(i);
            if (PositionGetInteger(POSITION_MAGIC) == MagicNumber) {
                if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && Bid >= PositionGetDouble(POSITION_TP)) {
                    MqlTradeRequest request;
                    MqlTradeResult result;
                    request.action = TRADE_ACTION_DEAL;
                    request.symbol = _Symbol;
                    request.volume = PositionGetDouble(POSITION_VOLUME);
                    request.type = ORDER_TYPE_SELL;
                    request.price = Bid;
                    request.deviation = 5;
                    request.magic = MagicNumber;
                    request.position = ticket;
                    request.type_filling = ORDER_FILLING_IOC;

                    if (!OrderSend(request, result)) {
                        Print("Close position failed with error ", GetLastError());
                    }
                } else if (Bid - PositionGetDouble(POSITION_PRICE_OPEN) <= -GridStep * _Point) {
                    if (AccountInfoDouble(ACCOUNT_BALANCE) >= GridOrderLot * 100000) {
                        MqlTradeRequest request;
                        MqlTradeResult result;
                        request.action = TRADE_ACTION_PENDING;
                        request.symbol = _Symbol;
                        request.volume = GridOrderLot;
                        request.type = ORDER_TYPE_BUY_STOP;
                        request.price = NormalizeDouble(Bid - GridStep * _Point, _Digits);
                        request.sl = request.price - GridOrderSL * _Point;
                        request.tp = request.price + GridOrderTP * _Point;
                        request.deviation = 5;
                        request.magic = MagicNumber;
                        request.type_filling = ORDER_FILLING_IOC;

                        if (!OrderSend(request, result)) {
                            Print("Placing grid order failed with error ", GetLastError());
                        }
                    }
                }
            }
        }
    }
}
//+------------------------------------------------------------------+
Учитесь вставлять код, иначе таки посты будут удаляться
 
mrvalexv:

В коде есть ошибка, ни чего не могу с ней сделать. Может подскажет кто что надо сделать.

SymbolInfoInteger() используйте. Соответственно переменная stopsLevel должна быть целочисленная.
Документация по MQL5: Получение рыночной информации / SymbolInfoInteger
Документация по MQL5: Получение рыночной информации / SymbolInfoInteger
  • www.mql5.com
SymbolInfoInteger - Получение рыночной информации - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
mrvalexv:
 Учитесь вставлять код, иначе таки посты будут удаляться

Вот уж где ИИ действительно пригодился бы... или он только картинки умеет рисовать? А распознать код в сообщении пользователя и вставить его правильно непосильная задача!?

 
mrvalexv:

В коде есть ошибка, ни чего не могу с ней сделать. Может подскажет кто что надо сделать.

При компиляции терминал пишет 'SymbolInfoDouble' - no one of the overloads can be applied to the function call 35 10

Строку выделил красным цветом Учитесь вставлять код, иначе таки посты будут удаляться

Кроме этой ошибки, ещё на вскидку:

  1. нужно обязательно обнулять значения переменных request и result;
  2. отложенный ордер не будет устанавливаться, т.к. для BUY_STOP нужно прибавлять шаг отступа, а не отнимать от текущей цены, а также использовать цену Ask, а не Bid;
  3. ORDER_FILLING_IOC не у всех брокеров (дилеров) работает;
  4. SYMBOL_TRADE_STOPS_LEVEL - минимальный отступ в пунктах от текущей цены закрытия для установки Stop ордеров проверяется, но нигде в коде не применятся;
  5. отложенный ордер будет устанавливаться на каждом тике, а оно Вам надо?
И вообще, такое впечатление, что это не человек писал код, а не понятно кто или что.


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


Причина обращения: