Logo

Вход

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

    Разная стоимость пункта

    Здравствуйте. Помогите задать отличную стоимость пункта для отложенного ордера.


    if(type==buy)
    {
    pips=NormalizeDouble((bid-oop)/Points[cnt_instr], 0);
    profit_pips=profit_pips+pips;
    profit_instr=profit_instr+pips*Point_Price[cnt_instr]+live_days*Swap_Buy[cnt_instr];
    }

    if(type==sell)
    {
    pips=NormalizeDouble((oop-ask)/Points[cnt_instr], 0);
    profit_pips=profit_pips+pips;
    profit_instr=profit_instr+pips*Point_Price[cnt_instr]+live_days*Swap_Sell[cnt_instr];
    }
  • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
  • #2 Свернуть

    Может так будет более понятно что я хочу добавить.

    extern string st3 = "----- Инструмент #1 -----";
    extern string Instr_1 = "EURUSD"; // Наименование
    extern bool Use_1 = true; // Использование
    extern int Step_Stop_1 = 100; // Шаг установки Стоповых ордеров в пунктах
    extern int Step_Limit_1 = 100; // Шаг установки Лимитных ордеров в пунктах
    extern double Swap_Buy_1 = 1; // Своп Бай для заданного лота
    extern double Swap_Sell_1 = -1; // Своп Селл для заданного лота
    extern double Points_1 = 0.00001; // Величина пункта
    extern double Point_Price_1 = 0.1; // Стоимость пункта для заданного лота
    extern double Point_Price_Limit_1 = 0.5; // Стоимость пункта для Лимитных ордеров в пунктах


    if(type==buy)
    {
    pips=NormalizeDouble((bid-oop)/Points[cnt_instr], 0);
    profit_pips=profit_pips+pips;
    profit_instr=profit_instr+pips*Point_Price[cnt_instr]+live_days*Swap_Buy[cnt_instr];
    }

    if(type==sell)
    {
    pips=NormalizeDouble((oop-ask)/Points[cnt_instr], 0);
    profit_pips=profit_pips+pips;
    profit_instr=profit_instr+pips*Point_Price[cnt_instr]+live_days*Swap_Sell[cnt_instr];
    }

    Комментарий

    • #3 Свернуть

      Сообщение от MaL0i Посмотреть сообщение
      Помогите задать отличную стоимость пункта для отложенного ордера.
      Сообщение от MaL0i Посмотреть сообщение
      Может так будет более понятно что я хочу добавить.
      Честно говоря, понятнее не особо стало. Но позволю себе предположить, что вы пытаетесь высчитать, сколько на каком-то конкретном инструменте стоит пункт. Если так, то используйте следующее:

      double tick_value = MarketInfo( Symbol(), MODE_TICKVALUE);

      tick_value - будет равен стоимости одного пункта на многих инструментах, там где пункт равен тику. Но так не везде, поэтому используйте:

      double tick_size = MarketInfo(Symbol(),MODE_TICKSIZE);

      tick_size - будет равен величине тика в пунктах

      Думаю вы именно это искали. Или нет?
       

      Комментарий

      • #4 Свернуть

        нужно понимать что ищем
        Сообщение от LionFx Посмотреть сообщение
        double tick_value = MarketInfo( Symbol(), MODE_TICKVALUE);
        это сколько "тикает" каждый торговый инструмент в валюте депозита, если депозит в долларах и торгуем мажоры на Форексе, то обычно при торговле 1 лот, будет "тикать" ровно по курсу торгуемой валюты как в обменнике , если счет в рублях, то будет, по сути, двойная конвертация, рубль в доллар и потом в торгуемый валютный инструмент
        но суть все равно одна этот параметр влияет при расчете OrderProfit() в терминале
        Сообщение от LionFx Посмотреть сообщение
        double tick_size = MarketInfo(Symbol(),MODE_TICKSIZE);
        это вообще просто минимальный шаг цены, т.е. цена изменяется у нас на 0.00001 на евро, он по сути равен _Point, но терминал делался типа универсальным, может быть где то и есть шаг изменения цены, например по 2 или 3 пипса - ни разу не встречал что то отличающегося от _Point
         

        Комментарий

        • #5 Свернуть

          Сообщение от IgorM Посмотреть сообщение
          это сколько "тикает" каждый торговый инструмент в валюте депозита, если депозит в долларах и торгуем мажоры на Форексе, то обычно при торговле 1 лот, будет "тикать" ровно по курсу торгуемой валюты как в обменнике , если счет в рублях, то будет, по сути, двойная конвертация, рубль в доллар и потом в торгуемый валютный инструмент
          А если не в долларах, и если инструмент с долларом не завязан, зачем вообще об этом думать. Проще именно представлять, что это "Размер минимального изменения цены инструмента в валюте депозита". Тоесть чему равен тик инструмента в валюте депозита.

          Сообщение от IgorM Посмотреть сообщение
          это вообще просто минимальный шаг цены, т.е. цена изменяется у нас на 0.00001 на евро, он по сути равен _Point, но терминал делался типа универсальным, может быть где то и есть шаг изменения цены, например по 2 или 3 пипса - ни разу не встречал что то отличающегося от _Point
          А я вот очень часто встречал такое. Я много пишу на заказ роботов, и у меня достаточно часто просят сделать на нестандартные инструменты, допустим на CFD, а там не так часто тик равен пункту. Это если на MT4, а на MT5, так там вообще не форексовские инструменты просят (но это отдельная тема, хотя и похожая).
             

          Комментарий

          • #6 Свернуть

            Сообщение от LionFx Посмотреть сообщение
            А если не в долларах, и если инструмент с долларом не завязан, зачем вообще об этом думать. Проще именно представлять, что это "Размер минимального изменения цены инструмента в валюте депозита". Тоесть чему равен тик инструмента в валюте депозита.
            Вы можете показать счет у которого валюта депозита не конвертируется в $ ? На вскидку помню счета рублевые, евро, голд, биткоин кто то писал
            распринтуйте это значение на мажоре на счету у которого не доллар валюта депозита, затем через несколько дней - это значение будет отличаться, на не долларовых счетах это значение динамическое, на долларовых счетах при торговле мажорами это константа
            были фантазеры, которые пытались заработать на этой тайной формуле
               

            Комментарий

            • #7 Свернуть

              Сообщение от IgorM Посмотреть сообщение
              Вы можете показать счет у которого валюта депозита не конвертируется в $ ?
              В доллар конвертируется все. Какой-то вопрос у вас странный, что может не конвертироваться в доллар? Конечно все может.

              Но тут суть то не в этом. Вот вы в пример приводите мажорные пары. Допустим депозит у нас в долларах, и тогда на мажорных парах EURUSD и GBPUSD один тик (а впрочем и один пункт), будет равен 1.0. Но на USDJPY и USDCAD тик будет равен 0.9 и 0.7 с копейками соответственно, а они также мажорные пары.

              Но это еще ерунда, так как на Fibo на какой-нибудь сое, при этом еще и размер тика будет равен 0.25 (а пункт 0.01), и соответственно значение пункта придется пересчитывать.
              Поэтому нельзя будет посчитать риск (по балансу) на сое на 300пунктов, это не осуществимое число пунктов, так как тик дробное число. Только на 250 или на 500, и в этом пригодятся именно функции, что я выше привел.
                 

              Комментарий

              • #8 Свернуть

                Сообщение от LionFx Посмотреть сообщение
                Но это еще ерунда, так как на Fibo на какой-нибудь сое, при этом еще и размер тика будет равен 0.25 (а пункт 0.01), и соответственно значение пункта придется пересчитывать.
                Поэтому нельзя будет посчитать риск (по балансу) на сое на 300пунктов, это не осуществимое число пунктов, так как тик дробное число. Только на 250 или на 500, и в этом пригодятся именно функции, что я выше привел.
                примерно так нужно считать:
                MQL код:

                double TickValue=MarketInfo(Symbol(),MODE_TICKVALUE)/MarketInfo(Symbol(),MODE_TICKSIZE);
                double pips = OrderProfit()/TickValue*OrderLots();


                TickValue - это стоимость тика в валюте депозита, зная TickValue можно получить пп для ордера, комиссия и свопы должны считаться отдельно - вне этой формулы, и скорее всего нужно учитывать значение спреда - нужно проверить
                   

                Комментарий

                • #9 Свернуть

                  Сообщение от IgorM Посмотреть сообщение
                  примерно так нужно считать:
                  Вот теперь мы и подошли к самому интересному, смотрите сами, что будет, если взять в расчет, то что вы написали выше (именно для брокера Fibo, конкретно на сое рассмотрим):
                  Print(MarketInfo(Symbol(),MODE_TICKVALUE));
                  выдаст 12.5

                  а, Print(MarketInfo(Symbol(),MODE_TICKVALUE)/MarketInfo(Symbol(),MODE_TICKSIZE));
                  выдаст 50.0

                  вот как-то и не сходится. вроде бы второй Print должен был бы выдать величину одного пункта, но он выдает значение значительно большее. А все потому что MarketInfo(Symbol(),MODE_TICKSIZE) == 0.25

                  Очень много нюансов появляется, когда начинаешь писать роботов для не совсем стандартных инструментов.
                  Могу сказать точно, что 90% советников приходится переделывать, чтобы они работали на cfd, и подобных инструментах.

                  Причем, это мы только с вами рассматривали размер пункта чему стоит. А ведь многие эксперты ставят стопы, не учитывая TICKSIZE. И OrderSend в этом случае просто вернет ошибку. Нельзя поставить стоп, как на примере выше, чтобы он не был кратным 0.25. Тоесть 850.50 можно, 850.75 можно, но 850.60 нельзя.

                  Признаюсь, что и я не всегда это учитываю, особенно когда знаю, что клиент будет торговать на парах, где это не потребуется.
                   

                  Комментарий

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

                    Сообщение от LionFx Посмотреть сообщение
                    Признаюсь, что и я не всегда это учитываю, особенно когда знаю, что клиент будет торговать на парах, где это не потребуется.
                    это обычное волевое решение, что хотите получить в качестве результата: или универсальный код или специализированный
                    но к сожалению, абсолютно универсальных кодов не бывает, всегда найдется нестандартный случай, который еще не был рассмотрен, что будет приводить к постоянному усложнению начального кода
                    Специализированные программы имеют меньший функционал, но их легче перенастроить под текущие задачи - меньший обьем кода, меньше связей ... всего меньше вплоть до написания с нуля занимает от 10-15 минут
                     

                    Комментарий

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

                    working...
                    X