Logo

Вход

Войти с помощью соц. сетей
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения
  • #1 Свернуть

    что не так с подсчетом общего объема открытых позиций?

    не работает код почему-то (не правильно делает подсчет). что нет так?



    MQL код:
    int OnCalculate(const int rates_total, const int prev_calculated, const datetime& time[], const double& open[], const double& high[], const double& low[], const double& close[], const long& tick_volume[], const long& volume[], const int& spreads[])
    {

    int positions=PositionsTotal();

    double volumex = 0.00;

    for(int i=0; i<positions; i++)
    {
    //Определение символа по которому открыта позиция и выбор позиции для дальнейшей работы
    if(PositionSelect(PositionGetSymbol(i)))
    {
    //Берем нужную информацию по выбранной позиции
    volumex+= PositionGetDouble(POSITION_VOLUME);
    Print("position #"+IntegerToString(i)+": "+DoubleToString(volumex,2));
    }
    }

    return(rates_total);
    }
    Последний раз редактировалось Gold; 02.12.2016, 13:04.
  • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
  • #2 Свернуть

    Сообщение от dantetemp Посмотреть сообщение
    не правильно делает подсчет. что нет так?
    Почему неправильно? На мой взгляд, все правильно.
    У меня функция так-же выглядит, см. пост #1.


    У Вас ошибка в принте. Выводится суммарный объем сделок, а не отдельно взятой.
    Для отображения объема отдельно взятой сделки и вывода в лог, принт должен быть таким
    MQL код:
    Print(
    "position #"+IntegerToString(i)+
    ", lot: "+DoubleToString(PositionGetDouble(POSITION_VOLUME ),2)+
    ", summ. lot: "+DoubleToString(volumex,2)
    );
     
    Последний раз редактировалось Gold; 01.02.2018, 15:30.
    Правила форума | КИСА | Акция «Деньги за посты» | Как вставить картинку?

    Комментарий

    • #3 Свернуть

      Сообщение от Gold Посмотреть сообщение
      Почему неправильно? На мой взгляд, все правильно.
      У меня функция так-же выглядит, см. пост #1.


      У Вас ошибка в принте. Выводится суммарный объем сделок, а не отдельно взятой.
      Для отображения объема отдельно взятой сделки и вывода в лог, принт должен быть таким
      MQL код:
      Print(
      "position #"+IntegerToString(i)+
      ", lot: "+DoubleToString(PositionGetDouble(POSITION_VOLUME ),2)+
      ", summ. lot: "+DoubleToString(volumex,2)
      );

      спасибо за ответ!

      мне тоже, кажется, что с кодом все в порядке. считает только неправильно! уже десятки раз проверял.

      например, сейчас открыл позиции в следующей последовательности: 0.03 лота, 0.03 лота, 1 лот, 2 лота.

      не важно, какой код принта использовать, показывает общую сумму неправильно: 0.03, 0.06, 0.09, 0.12.

      соответственно, размер лотов также показывает неправильно: 0.03 лота, 0.03 лота, 0.03 лота, 0.03 лота.

      ошибка возникает, как только начинаешь открывать позиции разного размера.

      Комментарий

      • #4 Свернуть

        Сообщение от dantetemp Посмотреть сообщение
        мне тоже, кажется, что с кодом все в порядке. считает только неправильно! уже десятки раз проверял.
        Да, действительно, считает неправильно. Видимо, из-за недавних изменений в платформе, появления возможности открывать несколько позиций по одному инструменту, как в МТ4, и соотв. появления Hedge счетов - для нового типа счетов нужен другой подход.
           
        Последний раз редактировалось Gold; 05.12.2016, 20:56.
        Правила форума | КИСА | Акция «Деньги за посты» | Как вставить картинку?

        Комментарий

        • #5 Свернуть

          Сообщение от dantetemp Посмотреть сообщение
          ошибка возникает, как только начинаешь открывать позиции разного размера.
          Теперь правильно считает общий объем открытых сделок на хеджинговом счете.

          MQL код:
          double OpenPositionTotalVolume()
          {
          double volume = 0.0;

          //Если хеджинговый счет
          if(AccountInfoInteger(ACCOUNT_MARGIN_MODE)==ACCOUN T_MARGIN_MODE_RETAIL_HEDGING)
          {
          for(int i=PositionsTotal()-1;i>=0;i--)
          {
          if(PositionSelectByTicket(PositionGetTicket(i)))
          {
          volume += PositionGetDouble(POSITION_VOLUME);
          }
          }
          }

          //Если неттинговый счет
          if(AccountInfoInteger(ACCOUNT_MARGIN_MODE)==ACCOUN T_MARGIN_MODE_RETAIL_NETTING || AccountInfoInteger(ACCOUNT_MARGIN_MODE)==ACCOUNT_M ARGIN_MODE_EXCHANGE)
          {
          for(int i=PositionsTotal()-1;i>=0;i--)
          {
          if(PositionSelect(PositionGetSymbol(i)))
          {
          volume += PositionGetDouble(POSITION_VOLUME);
          }
          }
          }
          return(NormalizeDouble(volume,2));
          }
           
          Правила форума | КИСА | Акция «Деньги за посты» | Как вставить картинку?

          Комментарий

          • #6 Свернуть

            подскажите скрипт подсчета сделок. Типа сколько лотов сделано за неделю/месяц.

            Нашел подсчет профитов и прочие тики , но почему то просто объемов проторгованных не нашел.
            Нужно поработать с историей сделок.
            Сори если не сюда написал, так как история к открытым не относится.
            открыть счет InstaForex Galaxy PAMM Ищет инвестора!!!
            registration ForexDengi новости форекс рынка, акцииподпиcка!

            Комментарий

            • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
            • #7 Свернуть

              Сообщение от Galaxy Посмотреть сообщение
              подскажите скрипт подсчета сделок. Типа сколько лотов сделано за неделю/месяц.

              Нашел подсчет профитов и прочие тики , но почему то просто объемов проторгованных не нашел.
              Нужно поработать с историей сделок.
              Сори если не сюда написал, так как история к открытым не относится.
              Для какого терминала, МТ4 или МТ5?
              Я себе делал для МТ4 советник, где то по перекликающейся задаче.
              Пример журнала прилагается.

              Комментарий

              Сейчас онлайн

              working...
              X