Смотри, как бесплатно скачать роботов
Ищи нас в Telegram!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Библиотеки

Код вычисления прибыли в предполагаемом уровне цены - библиотека для MetaTrader 4

Просмотров:
3684
Рейтинг:
(12)
Опубликован:
2013.07.24 00:53
Обновлен:
2014.04.21 14:56
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Всем доброго времени суток. Думаю, среди нас было немалое количество трейдеров, кто думал, как вычислить сколько составит прибыль, если цена будет в этом уровне? Предлагаю Вашему вниманию код, над которым я очень долго трудился, поэтому хочу поделиться им. Для чего? Хороший пример, а также, возможно, у кого-то появятся идеи, как его улучшить, или он найдет ему применение в своих работах и т.д.

double getLots(double newSL) {
   int opnTime = 0;
   double lotSum = 0; 
   for (int i = 0; i <= OrdersTotal()-1; i++) {
      OrderSelect(i, SELECT_BY_POS);     
      if ((OrderOpenTime() > opnTime) && (OrderType() == OP_BUY) || (OrderType() == OP_SELL)) { 
         opnTime = OrderOpenTime(); 
         if (OrderType() == OP_BUY)    { lotSum += OrderLots() * (newSL - OrderOpenPrice()) / Point; }
         if (OrderType() == OP_SELL)   { lotSum -= OrderLots() * (newSL - OrderOpenPrice()) / Point; }
      }
   }   
   return(lotSum);
}

Может быть я, конечно, настолько глуп (не смейтесь, конечно) но для меня стоило больших трудов написать эти несколько строк (господа программисты поймут мое благоговение, ведь этот алгоритм, сколько я его ни тестировал ошибок не дает и вполне применим в реальных АТС). Для чего мне это нужно было? Мне не понравилось как работает трал в одном советнике, а именно - режет большую прибыль, но, к сожалению заменить его в этой АТС будет слишком проблематично, и решил я его доработать. Оказалось, что все гениальное просто.

Единственный передаваемый параметр этой функции ( double newSL) - это предполагаемый уровень цены, в котором мы хотим узнать сколько в его точки будет прибыли от всех сделок. Что делает эта функция? Пересчитывает по отдельности каждую открытую позицию и считает сколько в указанной точке будет прибыли в лотах * пунктов. Что делать с этим значением дальше? Да все, что душа изволит. Есть масса применений, у меня сразу появилась куча идей по поводу применения. Я, допустим, вставил эту функцию в трал, а именно в то место, где идет условие изменения уровня Stop Loss.

if ((getLots(stopLoss) > 0) && ( ... )) {
    OrderModify( ... );
}

В этом случае, сколько б трейдов у вас ни было б открыто, причем не важно, коротких, или длинных, если трал в вашем решении используется для всех позиций сразу, то уровень Stop Loss обязательно выставится только в безубыток. К примеру, упомяну лавину, данное решение может найти и там применение, ведь именно там используется этот принцип перекрытия убыточных сделок разворотом в другую сторону... В любой стратегии, где есть трал, где хотите. Вам нужно, чтобы трал выставлялся только с определенного уровня прибыли?

if ((getLots(stopLoss) > 3) && ( ... )) {
    OrderModify( ... );
}

В этом случае Stop Loss не будет ставиться до тех пор, пока суммарная прибыль от всех позиций в точке Stop Loss не составит определенную величину. Эту величину расчитать просто: число, возвращаемое getLots() - это Лот * Кол-во пунктов (т.е. часть той формулы, по которой мы считаем прибыль), исходя из этого легко посчитать прибыль - 10 $ (именно столько стоит 1 пункт движения цены) умножаем на 32,46 р. (именно столько стоил 1 $ на момент написания этой статьи), т.о. получаем getLots() * 324,60 = Предполагаемая суммарная прибыль от всех сделок в желаемом уровне Stop Loss. Допустим, мы хотим, чтобы трейлинг от наших сделок начинался с прибылью не меньше 1000 р. Считаем: 1000 р. / 324,60 = 3 (примерно), т.е. если getLots(stopLoss) > 3 то новый Stop Loss не будет ставиться до тех пор, пока его уровень не будет посчитан функцией трейлинга таким образом, чтобы конеченая прибыль от всех открытых на данный момент сделок была бы меньше 1000 р.

Надеюсь, я помог кому-то в его трудах.

Сетка универсал Sprut Сетка универсал Sprut

Универсальный сеточный советник собранный из скриптов (автор скриптов smilion)

CME_FUTURES_VOLUME CME_FUTURES_VOLUME

Индикатор CME_FUTURES_VOLUME позволяет просмотреть таблицу Time&Sales валютных фьючерсов СМЕ.

Master_MM_Droid Master_MM_Droid

Советник с реализацией идеи защиты депозита от слива.

RSI 3TF RSI 3TF

Индикатор RSI, отображает показания 3-х периодов (Time Frame).