Индикаторы: i-UrovenZero - страница 3

 

Вот Вы ленитесь... ;)) В индикаторе уже есть множество расчётов, уровней и т.п. Расчёт волатильности бесполезен без виденья уровней баланса, безубытков, маржинколла, ожидаемой прибыли... И наоборот. Это параметр объективный, не какой-то гипотетический... Например: мне нужно видеть какая среднедневная волатильность на этой неделе (в окно графика вмещается только пара дней), и видеть - есть ли риск что в течении этого/следующего дня цена может развернутся и возможная волатильность может достигнуть маржинколла, выйдет ли в безубыток, какие возможны прибыли при текущей волатильности.

Как бы, не хочется создавать новый индикатор из нескольких строк рисующий 2 уровня, состоящий из тех же функций что у Вас уже есть в этом, и который нужен только в связке с Вашим индикатором... )

Вот набросал заготовку:

void LevelsDayVolatility (int DayVlt = 5);   //  DayVlt - кол-во дней за которые вычисляется среднедневная волатильность
{
   if (dPrevtime == iTime(NULL,PERIOD_M1,0)) return;  else dPrevtime = iTime(NULL,PERIOD_M1,0);    // корректируем уровни раз в минуту, чтоб не тратить зря время процессора
  
   double DayVltPts = iATR(NULL,PERIOD_D1,DayVlt,1);           // среднеднев.волатильность
   datetime timeDayBegin = iTime(NULL,PERIOD_D1,0);            // время начала этих суток 00:00
   int ibarDayBegin = iBarShift(NULL,PERIOD_M1,timeDayBegin);  // номер бара начала суток
   рисовать линию по цене (iLowest(NULL,PERIOD_M1,MODE_LOW,ibarDayBegin)   + DayVltPts);  // возмож.днев.волатильность вверх
   рисовать линию по цене (iHighest(NULL,PERIOD_M1,MODE_HIGH,ibarDayBegin) - DayVltPts);  // возмож.днев.волатильность вниз
}
 

Пара ошибок:

1. Расчёт безубытка не учитывает спрэд (а погрешность например в 9 пунктов и более - это слишком дохрена). В коде строка 422. Надо так:

 if (BuyLots > 0)    UrZPb = Bid - (BuyProfit / (tickvalue * BuyLots) * Point);     //уровень безубытка для BUY ордеров
 if (SellLots > 0)   UrZPs = Ask + (SellProfit / (tickvalue * SellLots) * Point) - spread * Point;   //уровень безубытка для SELL ордеров

Проверил на EURUSD открывая Buy, Sell, и суммарный безубыток с несколькими Buy и Sell. Так всё правильно.

2. Нормализация переменной dlots в строке 372. Вобщем "и так работает ну и хрен с ним". )) Но правильней не нормализовывать лот через число знаков в цене котировки:

 double dlots = NormalizeDouble(dLots,Digits);           //убираем погрешность в расчете количества ордеров

а так:

 double lotstep = MarketInfo(Symbol(),MODE_LOTSTEP);
 double dlots = (dLots/lotstep)*lotstep;
А строго говоря, это вообще не надо, dLot = сумме лотов и не может быть меньше 0.01.
 
Придумал термин: "метрический индикатор", в отличие от прогностических индикаторов. ))
 
incognitos:
Придумал термин: "метрический индикатор", в отличие от прогностических индикаторов. ))
Х)
 
incognitos:

Пара ошибок:

1. Расчёт безубытка не учитывает спрэд (а погрешность например в 9 пунктов и более - это слишком дохрена). В коде строка 422. Надо так:

 if (BuyLots > 0)    UrZPb = Bid - (BuyProfit / (tickvalue * BuyLots) * Point);     //уровень безубытка для BUY ордеров
 if (SellLots > 0)   UrZPs = Ask + (SellProfit / (tickvalue * SellLots) * Point) - spread * Point;   //уровень безубытка для SELL ордеров

Проверил на EURUSD открывая Buy, Sell, и суммарный безубыток с несколькими Buy и Sell. Так всё правильно.

2. Нормализация переменной dlots в строке 372. Вобщем "и так работает ну и хрен с ним". )) Но правильней не нормализовывать лот через число знаков в цене котировки:

 double dlots = NormalizeDouble(dLots,Digits);           //убираем погрешность в расчете количества ордеров

а так:

 double lotstep = MarketInfo(Symbol(),MODE_LOTSTEP);
 double dlots = (dLots/lotstep)*lotstep;
А строго говоря, это вообще не надо, dLot = сумме лотов и не может быть меньше 0.01.


по п.1 - можно и так как Вы пишите если вы отсчет ведете только по Bid уровню...

...я же с самого начала работаю с двумя уровнями и Bid и Ask - и о чем Вы говорите, может быть и существенная вещь для Вас и ваших сторонников в отображении ценовых уровней(!) но я это упускаю т.к. я этим не пользуюсь и думаю это не столь важная вещь и тем более не считаю это ошибкой! ...хотя Вы может с этим и не согласитесь... Х)

по п.2 - ну... я не сильный программист и в культуре кодинга не силен как в прочем и грамматике - так что за некоторые оплошности в "правильности" прошу не судить меня очень строго!!! Х)

З.Ы.:

double dlots = (dLots/lotstep)*lotstep;

 
incognitos:

Вот Вы ленитесь... ;)) В индикаторе уже есть множество расчётов, уровней и т.п. Расчёт волатильности бесполезен без виденья уровней баланса, безубытков, маржинколла, ожидаемой прибыли... И наоборот. Это параметр объективный, не какой-то гипотетический... Например: мне нужно видеть какая среднедневная волатильность на этой неделе (в окно графика вмещается только пара дней), и видеть - есть ли риск что в течении этого/следующего дня цена может развернутся и возможная волатильность может достигнуть маржинколла, выйдет ли в безубыток, какие возможны прибыли при текущей волатильности.

Как бы, не хочется создавать новый индикатор из нескольких строк рисующий 2 уровня, состоящий из тех же функций что у Вас уже есть в этом, и который нужен только в связке с Вашим индикатором... )

Вот набросал заготовку:

void LevelsDayVolatility (int DayVlt = 5);   //  DayVlt - кол-во дней за которые вычисляется среднедневная волатильность
{
   if (dPrevtime == iTime(NULL,PERIOD_M1,0)) return;  else dPrevtime = iTime(NULL,PERIOD_M1,0);    // корректируем уровни раз в минуту, чтоб не тратить зря время процессора
  
   double DayVltPts = iATR(NULL,PERIOD_D1,DayVlt,1);           // среднеднев.волатильность
   datetime timeDayBegin = iTime(NULL,PERIOD_D1,0);            // время начала этих суток 00:00
   int ibarDayBegin = iBarShift(NULL,PERIOD_M1,timeDayBegin);  // номер бара начала суток
   рисовать линию по цене (iLowest(NULL,PERIOD_M1,MODE_LOW,ibarDayBegin)   + DayVltPts);  // возмож.днев.волатильность вверх
   рисовать линию по цене (iHighest(NULL,PERIOD_M1,MODE_HIGH,ibarDayBegin) - DayVltPts);  // возмож.днев.волатильность вниз
}

...вот Вы сами пишите - ВОЗМОЖНАЯ волатильность... а сутью этого индикатора, как я считаю, является отображение реальных вещей происходящих здесь и сейчас и очень хотелось бы чтоб какие либо возможные и невозможные прогнозы не затронули его сущность, по крайней мере в исходном/оригинальном коде!

а про лень - ЛЕНЬ ИСТОЧНИК ПРОГРЕССА!!! Х)

не было бы лени - не было бы и этого индикатора!!! :))))

 

Согласен, лень - двигатель прогресса! )))

1. Ладно, сделаю себе простенький индикатор с этой функцией, среднеднев.волатильности и среднеднев.вол. / 2 в каждую сторону. )

2. Об ошибке в расчёте безубытка. "можно и так как Вы пишите если вы отсчет ведете только по Bid уровню..."

Я просто смотрел по графе "прибыль ордера в долларах" в терминале. На графике цена показывается по Bid. Если торговать с упомянутой поправкой, то линии соответствуют реальному безубытку. Если же без поправки, то указывают на убыток равный спрэду, что не является "безубытком".

3. "ну... я не сильный программист и в культуре кодинга не силен как в прочем и грамматике - так что за некоторые оплошности в "правильности" прошу не судить меня очень строго!!! Х)"

Просто у Вас написано, что "подробности по переменным смотрите в коде", а код по функциям безубытка повязан в переменную dLots. Вот я и голову ломал, почему она так непонятно нормализована, может я что-то не понимаю... ))

 

Ещё предложение:

В табличке где показывается сумма ордеров каждого типа и их параметров добавить колонку "соотношение позиции к размеру депозита, в процентах".

Чтобы видеть сколько ордера занимают средств (в %), и не превышает ли это квоту которую трейдер выделяет для торговли согласно его MM (обычно считается что безопасно торговать 10-20% средств). Чтобы видеть сколько суммарно средств вовлечено, это очень важно для "разруливания" сложной ситуации, когда открыто несколько ордеров, используются локи, усреднения, маржинколы...

 
incognitos:

Ещё предложение:

В табличке где показывается сумма ордеров каждого типа и их параметров добавить колонку "соотношение позиции к размеру депозита, в процентах".

Чтобы видеть сколько ордера занимают средств (в %), и не превышает ли это квоту которую трейдер выделяет для торговли согласно его MM (обычно считается что безопасно торговать 10-20% средств). Чтобы видеть сколько суммарно средств вовлечено, это очень важно для "разруливания" сложной ситуации, когда открыто несколько ордеров, используются локи, усреднения, маржинколы...

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

но давайте по порядку - т.е. как Вы говорите - трейдер выставляет такой объем ордера который займет 10-20% от средств?... грубо - если он торгует милионом $ то ему нужен ордер допустим в 1000 лотов, а если всего 1000 $ то 1 лот? правильно я понимаю?

а чем не подходит для этой оценки стандартный(терминальский) параметр "Уровень баланса" он и в панели индикатора есть (Панель баланса, INFO_5) или допустим его можно оценивать через возможный объем покупки ордера...

или же Вы хотите текущий/начальный баланс брать за 100% и отметить уровень где будет допустим 80% от него? ну это можно сделать... без вопросов...

по п.2 - когда в индикаторе показывает общее значение по sell-ордерам = 0.000 по Ask-у и вы в этот момент закроете ордера - то цены в терминале будут указаны по Bid-ам - но потери в размер спреда то не будет! или я заблуждаюсь? %)

по п.3 - какая разница с какой точностью (в десятитысячную или сотую) будет производится подсчет величин со значением не меньше двух знаков после запятой? - в принципе никакой - этот индюк я разрабатывал для мартин систем и однажды часть его кода была частью этой мартин-системы - а там уже было важно с какой точностью происходит подсчет объема ордера... а сейчас это отдельная разработка и этот момент остался так как есть...

 
bor-ix:

по п.2 - когда в индикаторе показывает общее значение по sell-ордерам = 0.000 по Ask-у и вы в этот момент закроете ордера - то цены в терминале будут указаны по Bid-ам - но потери в размер спреда то не будет! или я заблуждаюсь? %)

Давайте проверим: Чтобы всё было видно - берём окно в терминале в таймфрейме M5 и увеличиваем покрупнее. Открываем ордер Sell.

  • Если в коде индикатора внесена поправка на спред. В окне при соединении цены Bid с линией Безубытка индикатора внизу в панели терминала показывается "убыток/прибыль = 0.0$". Закроем ордер когда Bid смещён сколько-то пунктов от линии Безубытка, например внизу написанно "-0.4$". Закрыли. Переключаем панель терминала на вкладку "История счёта", и видим что прибыль по ордеру так и есть "-0.4$", сколько показывалось - с такой прибылью ордер реально и закрылся.
  • В оригинальном случае, для Sell линия Безубытка показывает на "-0.12" долларов, т.е. не учитывается спрэд. Если закроем ордер по линии безубытка, потеряем спрэд.

bor-ix:

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

но давайте по порядку - т.е. как Вы говорите - трейдер выставляет такой объем ордера который займет 10-20% от средств?... грубо - если он торгует милионом $ то ему нужен ордер допустим в 1000 лотов, а если всего 1000 $ то 1 лот? правильно я понимаю?

а чем не подходит для этой оценки стандартный(терминальский) параметр "Уровень баланса" он и в панели индикатора есть (Панель баланса, INFO_5) или допустим его можно оценивать через возможный объем покупки ордера...

или же Вы хотите текущий/начальный баланс брать за 100% и отметить уровень где будет допустим 80% от него? ну это можно сделать... без вопросов...

"Уровень баланса" в терминале показывает отношение Средств к Залогу (а не к сумме открытых лотов). Это больше надо брокеру, чтобы закрыть ордера трейдера без риска для кредита (кредитного плеча) предоставляемого им трейдеру. Трейдеру нафиг не надо.

Я тоже использую мартин и усреднение. Есть известное правило MM (Money managment) - торговать не более 10% депозита. Дело в следующем: чтобы поставить лок надо иметь свободными 50% средств (не учитывая залог) от средств вовлечённых в торговлю, т.е. если 50% связано ордерами то и для лока (такого же объёма ордеров в обратную сторону) надо столько же. Чтобы отыграть убыток надо ставить новый ордер таким же лотом. Если играем по мартину, то новый ордер должен быть в 2 раза больше, т.е. если средства это 100%, и убыточный ордер это 30% от средств, то новый ордер должен быть 30%*2 = 60%. Но торговать такими непомерными рисками (рискуя потерей всего депозита из-за 1-2 ордеров) не станет ни один разумный трейдер.

По мартингейлу: если ордер (или сумма предыдущих мелких ордеров) = 10% депозита, то следующее колено должно быть 10%*2=20%, суммарно 10+20=30%. Следующее колено уже на грани полного слива = 30% + 30*2 = 90% депозита + залог = 100% средств, при этом ордера на грани риска закрытия по Margin Call.

Снижаем риски в 2-3 раза, учитываем что средств должно хватить чтобы покрыть просадку по среднедневной волатильности (умноженной на два для надёжности). Итого: для безрисковой торговли в MM должно быть строгое правило - не превышать 10% от депозита. Если идёт превышение - пора разруливать. Ну это как на автомобиле ехать: руль туда-сюда чёток - это нормально, но если крен пошёл больше - пора возращатся к безопасной норме.

Да вот прямо вчера я слил свои 100$. Решил увеличить базовый торгуемый лот, в процессе пришлось открыть несколько дополнительных ордеров (по мартину/усреднению), и суммарно все ордера оказывается вышли за лимиты и возможную дневную волатильность. В итоге было грустно до смеха, когда видел что тренд вот-вот развернётся, и этот дневной максимум действительно развернулся минут через 10, и вернулись бы все вовлечённые средства и ещё прибыль бы получил. Но не хватило пройти просадку буквально пары долларов. ))

Как мне кажется, формула должна быть такая: Баланс / (плавающая прибыль открытого ордера + залог по ордеру) = процентное соотношение. И так для каждого типа ордеров и суммы всех ордеров.

> "или же Вы хотите текущий/начальный баланс брать за 100% и отметить уровень где будет допустим 80% от него? ну это можно сделать... без вопросов... "

Не, визуальный уровень, как мне кажется, в индикаторе уже есть - это уровни лока (т.е. 50% отношение средств к открытым ордерам), дальше уровень Stopout (он обычно и равен 80%), дальше Margin Call =90%. Цифрового процентного не хватает.

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