Рисуем линию средней цены

 

Здравствуйте.


Часто, при торговле я использую усреднение или доливку и чтобы не "перебрать" приходится следить за средней ценой всех открытых позиций. На этом или другом форуме где обсуждаются вопросы написания скриптов на mql4 я нашел небольшой скрипт и доработал его под себя. Он считает число лотов и среднюю цену всех открытых позиций и печатает их в левом верхнем углу графика при каждом запуске скрипта. Вот сам скрипт:



int start()
{
   string symbol = Symbol(); string comment;
   double a = 0; double b = 0;
   double price_ask = 0, price_bid = 0;

   for (int i = 0; i < OrdersTotal(); i++)
   {
      if (OrderSelect(i, SELECT_BY_POS, MODE_MAIN))
      {
         if (OrderSymbol() == symbol)
         {
            if (OrderType() == OP_BUY)
            {
               price_ask = price_ask + OrderOpenPrice() * OrderLots();
               a += OrderLots();
            }
            
            if (OrderType() == OP_SELL)
            {
               price_bid = price_bid + OrderOpenPrice() * OrderLots();
               b += OrderLots();
            }
         }
      }
   }
   comment="AVERAGE";
   if (a > 0)
   {
      comment=StringConcatenate(comment," BUY = ",a," : ",DoubleToStr(price_ask/a,6));
   }
   if (b > 0)
   {
      comment=StringConcatenate(comment,";  SELL = ",b," : ", DoubleToStr(price_bid/b,6));
   }
   Comment(comment);

   return(0);
}


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





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

 

Офигеть, это вы в реале столько ордеров открываете? Или это для примера столько раз открылись?

 

Написать индикатор правда не долго, тем более если ваш скрипт корректно считает, но MetaEditora сейчас нет под рукой, если до вечера никто не напишет, помогу.

 
StSpirit >>:

Офигеть, это вы в реале столько ордеров открываете? Или это для примера столько раз открылись?

Написать индикатор правда не долго, тем более если ваш скрипт корректно считает, но MetaEditora сейчас нет под рукой, если до вечера никто не напишет, помогу.

Да, это реал, скрин сделан после закрытия торгов в пятницу. Неудобно конечно становится когда нужно быстро закрыть все позиции открытые по 0.1 лота, но я привык работать маленькими лотами внутри дня и ставить стопы для нескольких из них по средней цене.

 
Было бы конечно удобно, если бы в MetaTrader'е была возможность объединять несколько лотов в один... но пока ее нет, то приходится работать так.
 
StSpirit >>:

если ваш скрипт корректно считает

Скрипт считает корректно с точностью до 6 цифр после десятичной точки, я по нему давно работаю.

 
yuriyfx писал(а) >>

Да, это реал, скрин сделан после закрытия торгов в пятницу. Неудобно конечно становится когда нужно быстро закрыть все позиции открытые по 0.1 лота, но я привык работать маленькими лотами внутри дня и ставить стопы для нескольких из них по средней цене.

У KimIV возьмите скрипты для закрытия ордеров. Очень удобно.

 
wik >>:

У KimIV возьмите скрипты для закрытия ордеров. Очень удобно.

Ходил на сайт, но не нашел...

 
StSpirit >>:

Офигеть, это вы в реале столько ордеров открываете? Или это для примера столько раз открылись?



...возможно, что и не один человек.


Обращение скорее к разработчикам MetaTrader относится, но напишу его здесь раз уж начал тему о средних ценах.

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

 

Как я понял, скрипт выводит средние значения отдельно по buy-ордерам и отдельно по sell-ордерам как вы высчитываете среднюю, если открыто несколько противоположных ордеров?

 

Или такого не бывает, чтобы открывали противоположные ордера?

 
По теме может кто подскажет как нарисовать эту сиреневую линию, а то я уже устал вручную ее двигать, еще и в понедельник спрошено будет - "где там стопы?".
 
StSpirit >>:

Как я понял, скрипт выводит средние значения отдельно по buy-ордерам и отдельно по sell-ордерам как вы высчитываете среднюю, если открыто несколько противоположных ордеров?

Или такого не бывает, чтобы открывали противоположные ордера?

Можно открывать конечно, если программа позволяет, но это равносильно закрытию позиции (разница только в начислении свопов), поэтому, не стоит впадать в самообман радуясь выросшему балансу в то время как equity yе изменился или наоборот упал.

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