Logo

Вход

Войти с помощью соц. сетей
Пока нет объявлений.
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения
ТОП СООБЩЕНИЙ
23.04.2019, 12:16
Лучший ответ
Выплачено: 182669 RUB
Сообщение от Mihey85 Посмотреть сообщение
Использование SymbolInfoDouble(_symbol, SYMBOL_TRADE_TICK_VALUE) не дает ожидаемого результата и риск выходит ненормированным.
А что ожидалось?
23.04.2019, 13:06
Лучший ответ
Выплачено: 20203 RUB
Сообщение от ir0407 Посмотреть сообщение
А что ожидалось?
Нормированный риск (УЕ/пункты СЛ). Стоп-лосс ненормирован, но на него нужно ставить всегда фиксированный риск (например 100$ / n пунктов СЛ, чтобы всегда проигрывать 100$)

Вроде нашел решение.
MQL код:

double getLotsByRIDC(string _symbol, double _risk_idc, int _max_stop){
double rm_lot_val = SymbolInfoDouble(_symbol, SYMBOL_TRADE_TICK_VALUE);
double rm_min_lot = SymbolInfoDouble(_symbol, SYMBOL_VOLUME_MIN);
double rm_max_lot = SymbolInfoDouble(_symbol, SYMBOL_VOLUME_MAX);
double rm_lot_step = SymbolInfoDouble(_symbol, SYMBOL_VOLUME_STEP);
double rm_lot = (_risk_idc / _max_stop) / rm_lot_val;
if(rm_lot < rm_min_lot) rm_lot = rm_min_lot;
if(rm_lot > rm_max_lot) rm_lot = rm_max_lot;
return(rm_lot);
}

Но еще нужно проверять...
23.04.2019, 20:37
Лучший ответ
Выплачено: 20203 RUB
Проверил. Но все равно должным образом не работает. Риск поставил 100$ на размер стоп-лосса.
Нажмите на изображение для увеличения.

Название:	2019-04-23_202337.png
Просмотров:	1
Размер:	14.6 Кб
ID:	27363780
В результате, размеры проигрышей всё равно получаются разные. Что я не учел в вычислении лота?
23.04.2019, 23:34
Лучший ответ
Выплачено: 69915 RUB
Сообщение от Mihey85 Посмотреть сообщение
Проверил. Но все равно должным образом не работает. Риск поставил 100$ на размер стоп-лосса.
[ATTACH]2674518[/ATTACH]
В результате, размеры проигрышей всё равно получаются разные. Что я не учел в вычислении лота?
Округление для дискретных значений.

Ванга: "А впереди у тебя ещё рыночный спред, своп и комиссия."

Ну, это если тебе прибыль нужна, а не в тестере побаловаться.
24.04.2019, 00:17
Лучший ответ
Выплачено: 20203 RUB
Сообщение от MonyaMaker Посмотреть сообщение
Округление для дискретных значений
Вы имеете в виду, округление лота до количества знаков после запятой? Есть у меня такая функция. Как раз вхожу через неё. Но даже если бы я не округлял лот до числа знаков после запятой, то это всё равно не создавало бы такой разброс. Просто функция OrderSend ругалась бы на некорректный объем и такие ордера не выставлялись бы. Но у меня нет ничего подобного. Все ордера нормально открываются.
MQL код:

double getLotsByRIDC(string _symbol, double _risk_idc, int _max_stop){
double rm_lot_val = SymbolInfoDouble(_symbol, SYMBOL_TRADE_TICK_VALUE);
//double rm_min_lot = SymbolInfoDouble(_symbol, SYMBOL_VOLUME_MIN);
double rm_max_lot = SymbolInfoDouble(_symbol, SYMBOL_VOLUME_MAX);
double rm_lot = (_risk_idc / _max_stop) / rm_lot_val;
//if(rm_lot < rm_min_lot) rm_lot = rm_min_lot;
if(rm_lot > rm_max_lot) rm_lot = rm_max_lot;
return(rm_lot);
}


Просто "rm_lot = (_risk_idc / _max_stop) / rm_lot_val" даёт не очень корректный риск. Не 100$ на размер стопа а приближенный к 100$ риск. А иногда он почти в 2 раза отличается от желаемого(. Поэтому в формуле нужно учесть что-то еще...

Казалось бы, всё предельно ясно. Функция SymbolInfoDouble(_symbol, SYMBOL_TRADE_TICK_VALUE) дает цену 1 пункта в валюте депозита при объеме в 1 лот. И лот для желаемого риска легко подсчитать. Но нет... И в чем же подвох?
24.04.2019, 03:21
Лучший ответ
Выплачено: 69915 RUB
Сообщение от Mihey85 Посмотреть сообщение
Вы имеете в виду, округление лота до количества знаков после запятой? Есть у меня такая функция. Как раз вхожу через неё. Но даже если бы я не округлял лот до числа знаков после запятой, то это всё равно не создавало бы такой разброс. Просто функция OrderSend ругалась бы на некорректный объем и такие ордера не выставлялись бы. Но у меня нет ничего подобного. Все ордера нормально открываются.
MQL код:

double getLotsByRIDC(string _symbol, double _risk_idc, int _max_stop){
double rm_lot_val = SymbolInfoDouble(_symbol, SYMBOL_TRADE_TICK_VALUE);
//double rm_min_lot = SymbolInfoDouble(_symbol, SYMBOL_VOLUME_MIN);
double rm_max_lot = SymbolInfoDouble(_symbol, SYMBOL_VOLUME_MAX);
double rm_lot = (_risk_idc / _max_stop) / rm_lot_val;
//if(rm_lot < rm_min_lot) rm_lot = rm_min_lot;
if(rm_lot > rm_max_lot) rm_lot = rm_max_lot;
return(rm_lot);
}


Просто "rm_lot = (_risk_idc / _max_stop) / rm_lot_val" даёт не очень корректный риск. Не 100$ на размер стопа а приближенный к 100$ риск. А иногда он почти в 2 раза отличается от желаемого(. Поэтому в формуле нужно учесть что-то еще...

Казалось бы, всё предельно ясно. Функция SymbolInfoDouble(_symbol, SYMBOL_TRADE_TICK_VALUE) дает цену 1 пункта в валюте депозита при объеме в 1 лот. И лот для желаемого риска легко подсчитать. Но нет... И в чем же подвох?
Нет. Я про разную стоимость пункта для разных инструментов, но похоже про это ещё рано.

Ты дистанцию, куда СЛ ставить будешь посчитал, чтобы риск не превышал твои 100 баксов?

Объем больше, дистанция меньше, и на оборот.
  • #1 Свернуть

    Нормированние риска

    Задача состоит в открытии позиций с нормированным риском на размер стоп-лосса. Стоп-лосс непостоянная величина в моей ТС. В то же время, риск должен быть постоянным (например 1$ на размер стопа). Использование SymbolInfoDouble(_symbol, SYMBOL_TRADE_TICK_VALUE) не дает ожидаемого результата и риск выходит ненормированным. Как правильно рассчитать лот?

    MQL код:

    double getLotsByRIDC(string _symbol, double _risk_idc, int i_max_stop){
    double rm_lot_val = SymbolInfoDouble(_symbol, SYMBOL_TRADE_TICK_VALUE);
    double rm_min_lot = SymbolInfoDouble(_symbol, SYMBOL_VOLUME_MIN);
    double rm_max_lot = SymbolInfoDouble(_symbol, SYMBOL_VOLUME_MAX);
    double rm_lot_step = SymbolInfoDouble(_symbol, SYMBOL_VOLUME_STEP);
    double rm_lot = _risk_idc / (rm_lot_val * i_max_stop);
    if(rm_lot < rm_min_lot) rm_lot = rm_min_lot;
    if(rm_lot > rm_max_lot) rm_lot = rm_max_lot;
    return(rm_lot);
    }
    Программы для трейдинга
    Harmonic ABCD Monitor - все сигналы на одном экране
    Опережающий индикатор Super Bollinger Bands
  • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
  • #2 Свернуть

    Сообщение от Mihey85 Посмотреть сообщение
    Использование SymbolInfoDouble(_symbol, SYMBOL_TRADE_TICK_VALUE) не дает ожидаемого результата и риск выходит ненормированным.
    А что ожидалось?

    Комментарий

    • #3 Свернуть

      Сообщение от ir0407 Посмотреть сообщение
      А что ожидалось?
      Нормированный риск (УЕ/пункты СЛ). Стоп-лосс ненормирован, но на него нужно ставить всегда фиксированный риск (например 100$ / n пунктов СЛ, чтобы всегда проигрывать 100$)

      Вроде нашел решение.
      MQL код:

      double getLotsByRIDC(string _symbol, double _risk_idc, int _max_stop){
      double rm_lot_val = SymbolInfoDouble(_symbol, SYMBOL_TRADE_TICK_VALUE);
      double rm_min_lot = SymbolInfoDouble(_symbol, SYMBOL_VOLUME_MIN);
      double rm_max_lot = SymbolInfoDouble(_symbol, SYMBOL_VOLUME_MAX);
      double rm_lot_step = SymbolInfoDouble(_symbol, SYMBOL_VOLUME_STEP);
      double rm_lot = (_risk_idc / _max_stop) / rm_lot_val;
      if(rm_lot < rm_min_lot) rm_lot = rm_min_lot;
      if(rm_lot > rm_max_lot) rm_lot = rm_max_lot;
      return(rm_lot);
      }

      Но еще нужно проверять...
      Последний раз редактировалось Mihey85; 23.04.2019, 13:14.
      Программы для трейдинга
      Harmonic ABCD Monitor - все сигналы на одном экране
      Опережающий индикатор Super Bollinger Bands

      Комментарий

      • #4 Свернуть

        Проверил. Но все равно должным образом не работает. Риск поставил 100$ на размер стоп-лосса.
        Нажмите на изображение для увеличения.

Название:	2019-04-23_202337.png
Просмотров:	1
Размер:	14.6 Кб
ID:	27363780
        В результате, размеры проигрышей всё равно получаются разные. Что я не учел в вычислении лота?
        Последний раз редактировалось Mihey85; 23.04.2019, 20:46.
        Программы для трейдинга
        Harmonic ABCD Monitor - все сигналы на одном экране
        Опережающий индикатор Super Bollinger Bands

        Комментарий

        • #5 Свернуть

          Сообщение от Mihey85 Посмотреть сообщение
          Проверил. Но все равно должным образом не работает. Риск поставил 100$ на размер стоп-лосса.
          [ATTACH]2674518[/ATTACH]
          В результате, размеры проигрышей всё равно получаются разные. Что я не учел в вычислении лота?
          Округление для дискретных значений.

          Ванга: "А впереди у тебя ещё рыночный спред, своп и комиссия."

          Ну, это если тебе прибыль нужна, а не в тестере побаловаться.
          Последний раз редактировалось MonyaMaker; 24.04.2019, 00:11.

          Комментарий

          • #6 Свернуть

            Сообщение от MonyaMaker Посмотреть сообщение
            Округление для дискретных значений
            Вы имеете в виду, округление лота до количества знаков после запятой? Есть у меня такая функция. Как раз вхожу через неё. Но даже если бы я не округлял лот до числа знаков после запятой, то это всё равно не создавало бы такой разброс. Просто функция OrderSend ругалась бы на некорректный объем и такие ордера не выставлялись бы. Но у меня нет ничего подобного. Все ордера нормально открываются.
            MQL код:

            double getLotsByRIDC(string _symbol, double _risk_idc, int _max_stop){
            double rm_lot_val = SymbolInfoDouble(_symbol, SYMBOL_TRADE_TICK_VALUE);
            //double rm_min_lot = SymbolInfoDouble(_symbol, SYMBOL_VOLUME_MIN);
            double rm_max_lot = SymbolInfoDouble(_symbol, SYMBOL_VOLUME_MAX);
            double rm_lot = (_risk_idc / _max_stop) / rm_lot_val;
            //if(rm_lot < rm_min_lot) rm_lot = rm_min_lot;
            if(rm_lot > rm_max_lot) rm_lot = rm_max_lot;
            return(rm_lot);
            }


            Просто "rm_lot = (_risk_idc / _max_stop) / rm_lot_val" даёт не очень корректный риск. Не 100$ на размер стопа а приближенный к 100$ риск. А иногда он почти в 2 раза отличается от желаемого(. Поэтому в формуле нужно учесть что-то еще...

            Казалось бы, всё предельно ясно. Функция SymbolInfoDouble(_symbol, SYMBOL_TRADE_TICK_VALUE) дает цену 1 пункта в валюте депозита при объеме в 1 лот. И лот для желаемого риска легко подсчитать. Но нет... И в чем же подвох?
            Программы для трейдинга
            Harmonic ABCD Monitor - все сигналы на одном экране
            Опережающий индикатор Super Bollinger Bands

            Комментарий

            • #7 Свернуть

              Сообщение от Mihey85 Посмотреть сообщение
              Вы имеете в виду, округление лота до количества знаков после запятой? Есть у меня такая функция. Как раз вхожу через неё. Но даже если бы я не округлял лот до числа знаков после запятой, то это всё равно не создавало бы такой разброс. Просто функция OrderSend ругалась бы на некорректный объем и такие ордера не выставлялись бы. Но у меня нет ничего подобного. Все ордера нормально открываются.
              MQL код:

              double getLotsByRIDC(string _symbol, double _risk_idc, int _max_stop){
              double rm_lot_val = SymbolInfoDouble(_symbol, SYMBOL_TRADE_TICK_VALUE);
              //double rm_min_lot = SymbolInfoDouble(_symbol, SYMBOL_VOLUME_MIN);
              double rm_max_lot = SymbolInfoDouble(_symbol, SYMBOL_VOLUME_MAX);
              double rm_lot = (_risk_idc / _max_stop) / rm_lot_val;
              //if(rm_lot < rm_min_lot) rm_lot = rm_min_lot;
              if(rm_lot > rm_max_lot) rm_lot = rm_max_lot;
              return(rm_lot);
              }


              Просто "rm_lot = (_risk_idc / _max_stop) / rm_lot_val" даёт не очень корректный риск. Не 100$ на размер стопа а приближенный к 100$ риск. А иногда он почти в 2 раза отличается от желаемого(. Поэтому в формуле нужно учесть что-то еще...

              Казалось бы, всё предельно ясно. Функция SymbolInfoDouble(_symbol, SYMBOL_TRADE_TICK_VALUE) дает цену 1 пункта в валюте депозита при объеме в 1 лот. И лот для желаемого риска легко подсчитать. Но нет... И в чем же подвох?
              Нет. Я про разную стоимость пункта для разных инструментов, но похоже про это ещё рано.

              Ты дистанцию, куда СЛ ставить будешь посчитал, чтобы риск не превышал твои 100 баксов?

              Объем больше, дистанция меньше, и на оборот.
              Последний раз редактировалось MonyaMaker; 24.04.2019, 03:27.

              Комментарий

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

                Сообщение от MonyaMaker Посмотреть сообщение
                Нет. Я про разную стоимость пункта для разных инструментов, но похоже про это ещё рано.
                А это что не стоимость пункта для инструмента _symbol?
                MQL код:

                SymbolInfoDouble(_symbol, SYMBOL_TRADE_TICK_VALUE);

                Вы вообще программист? Знаете, что дает та или другая функция? Интересуюсь просто чтобы знать как строить с вами дальнейший диалог.

                Сообщение от MonyaMaker Посмотреть сообщение
                Ты дистанцию, куда СЛ ставить будешь посчитал, чтобы риск не превышал твои 100 баксов?

                Объем больше, дистанция меньше, и на оборот.
                _risk_idc / _max_stop - стоимость пункта для стоп-лосса с риском _risk_idc (в валюте депозита)

                rm_lot_val - стоимость 1 пункта при объеме в 1 лот в валюте депозита

                А теперь представьте что риск равен 100$ а пункты СЛ тоже в количестве 100, что нам дает единицу. А стоимость 1 пункта при объеме в 1 лот, rm_lot_val, равняется 1. Как думаете, какой должен быть объем? 1/1=1. А что будет, если СЛ станет 200 пунктов, как думаете? 100$ / 200 п. = 0.5; 0.5/1=0.5; Увеличили стоп-лосс ровно в 2 раза - получаем ровно половину объема! Вот и моя функция так и работает. Но на практике оказалось, что есть нюансы, которые я не учел. Мне хотелось бы знать какие?
                Программы для трейдинга
                Harmonic ABCD Monitor - все сигналы на одном экране
                Опережающий индикатор Super Bollinger Bands

                Комментарий

                X