Мультивалютный усреднитель на MQL5

none
  • Размер: 2,5 Кб
  • Добавил: AM2
  • Просмотров: 3462
  • Загрузок: 348
  • Добавлено: 25 ноября 2015
  • Обновлено: 18 мая 2016


Мультивалютный усреднитель на MQL5
Для топика: mql.opentraders.ru/29099.html

Скриншоты

  • none




    Скачать (2,5 Кб)

    Рейтинг: из 5 (голосов )

    Комментарии (1)

    +
    0
    Привет. Спасибо вам за статью, очень грамотно расписали, НО как мне сделать мультивалютным его при таком шаблоне. Он удобен чтобы тестировать и привык к нему. Работает он по такому принципу:
    If(МА 1 больше меньше...) 
     {
          MqlTick last_tick;
          SymbolInfoTick(Symbol(), last_tick);
          price = last_tick.bid;
          if(TimeCurrent() - LastTradeTime < NextOpenTradeMinute * 60) return; //next open trade after time
          if(!inTimeInterval(TimeCurrent(), TOD_From_Hour, TOD_From_Min, TOD_To_Hour, TOD_To_Min)) return; 
          if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && MQLInfoInteger(MQL_TRADE_ALLOWED))
            {
         Вот здесь он посылает меня на функцию ниже    ticket = myOrderSend(ORDER_TYPE_SELL, price, lot, "");
             if(ticket == 0) return;
            }
          else //not autotrading => only send alert
             myAlert("order", "");
          LastTradeTime = TimeCurrent();
         }


    Тут пытался методом тыка сделать его мультивалютным, но не могу разобраться, что и куда вписать. Попробовал все способы что нашел.
    ulong myOrderSend(ENUM_ORDER_TYPE type, double price, double volume, string ordername) //send order, return ticket ("price" is irrelevant for market orders)
      {
      
       if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) || !MQLInfoInteger(MQL_TRADE_ALLOWED)) return(0);
       int retries = 0;
       int long_trades = TradesCount(ORDER_TYPE_BUY);
       int short_trades = TradesCount(ORDER_TYPE_SELL);
       int long_pending = TradesCount(ORDER_TYPE_BUY_LIMIT) + TradesCount(ORDER_TYPE_BUY_STOP) + TradesCount(ORDER_TYPE_BUY_STOP_LIMIT);
       int short_pending = TradesCount(ORDER_TYPE_SELL_LIMIT) + TradesCount(ORDER_TYPE_SELL_STOP) + TradesCount(ORDER_TYPE_SELL_STOP_LIMIT);
          string ordername_ = comment;
       if(ordername != "")
          ordername_ = "("+ordername+")";
       //test Hedging
       if(!Hedging && ((type % 2 == 0 && short_trades + short_pending > 0) || (type % 2 == 1 && long_trades + long_pending > 0)))
         {
          myAlert("print", "Order "+ordername_+" not sent, hedging not allowed");
          return(0);
         }
       //test maximum trades
       if((type % 2 == 0 && long_trades >= MaxLongTrades)
       || (type % 2 == 1 && short_trades >= MaxShortTrades)
       || (long_trades + short_trades >= MaxOpenTrades)
       || (type > 1 && long_pending + short_pending >= MaxPendingOrders))
         {
          myAlert("print", " Order "+ordername_+" not sent, maximum reached");
          return(0);
         }
       //prepare to send order
       MqlTradeRequest request;
       ZeroMemory(request);
       request.action = (type <= 1) ? TRADE_ACTION_DEAL : TRADE_ACTION_PENDING;
       
       //set allowed filling type
       int filling = (int)SymbolInfoInteger(Symbol(),SYMBOL_FILLING_MODE);
       if(request.action == TRADE_ACTION_DEAL && (filling & 1) != 1)
          request.type_filling = ORDER_FILLING_IOC;
    
       request.magic = MagicNumber;
       request.symbol = Symbol();///////////////////
       request.volume = NormalizeDouble(volume, LotDigits);
       request.sl = 0;
       request.tp = 0;
       request.deviation = MaxSlippage_;
       request.type = type;
       request.comment = ordername;
       int expiration=(int)SymbolInfoInteger(Symbol(), SYMBOL_EXPIRATION_MODE);
       if((expiration & SYMBOL_EXPIRATION_GTC) != SYMBOL_EXPIRATION_GTC)
         {
          request.type_time = ORDER_TIME_DAY;  
          request.type_filling = ORDER_FILLING_RETURN;
         }
    if(!CheckMoneyForTrade(request.symbol,request.volume,request.type)) return(0);
       MqlTradeResult result;
       MqlTick last_tick;
       SymbolInfoTick(Symbol(), last_tick);
       if(MaxSpread > 0 && last_tick.ask - last_tick.bid > MaxSpread * myPoint)
         {
          myAlert(" order", " Order "+ordername_+" not sent, maximum spread "+DoubleToString(MaxSpread * myPoint, Digits())+" exceeded");
          return(0);
         }
       ZeroMemory(result);
       
       while(!OrderSuccess(result.retcode) && retries < OrderRetry+1)
         {
          //refresh price before sending order
          MqlTick last_tick;
          SymbolInfoTick(Symbol(), last_tick);
          if(type == ORDER_TYPE_BUY)
             price = last_tick.ask;
          else if(type == ORDER_TYPE_SELL)
             price = last_tick.bid;
          else if(price < 0) //invalid price for pending order
            {
             myAlert(" order ", " Order "+ordername_+" not sent, invalid price for pending order");
    	      return(0);
            }
          request.price = NormalizeDouble(price, Digits());     
          OrderSend(request, result);
          if(!OrderSuccess(result.retcode))
            {
             myAlert("print", " OrderSend "+ordername_+" error: "+result.comment);
             Sleep(OrderWait*1000);
            }
          retries++;
         }
       if(!OrderSuccess(result.retcode))
         {
          myAlert("error", "OrderSend"+ordername_+" failed "+(OrderRetry+1)+" times; error: "+result.comment);
          return(0);
         }
       string typestr[8] = {"Buy ", "Sell", "Buy Limit", "Sell Limit", "Buy Stop", "Sell Stop", "Buy Stop Limit", "Sell Stop Limit"};
       myAlert("order", "Order sent "+ordername_+": "+typestr[type]+" "+Symbol()+" Magic #"+MagicNumber);
       return(result.order);
      }
    avatar

    [ 0 ] tar28263Зарегистрирован: 24 апреля 2019 | Сообщений: 0 - forex_neforex@mail.ru

    • 24 апреля 2019, 10:28

    Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
    Чтобы написать отзыв или скачать файл, необходимо быть зарегистрированным пользователем. Если Вы уже регистрировались ранее, войдите под своим именем. Если Вы еще не регистрировались, то, пожалуйста, зарегистрируйтесь. Регистрация не займет много времени.

    Справка: зарегистрированные пользователи могут добавлять и скачивать файлы, вести собственный блог, комментировать записи, обмениваться личными сообщениями с другими участниками и др.