Задача:Зная цену и лот первого ордера и зная точно где будем доливатся , долить столько что бы средняя цена оказалась в указанном месте.
...
x цель по лоту
(цена открытия*y+текущая цена*x)/(x+y)=цель усреднения
(1.5y+1.4x)/(x+y)=1.45 x=1;(1.5y+1.4x)/(x+y)=1.43 x=2;
(1.5y+1.4x)/(x+y)=1.425 x=3;
(1.5y+1.4x)/(x+y)=1.42 x=4;
а как посчитать х так и не допёр...
C1*y + C2*x = C3*(y +x) -> (C1 - C3) * y = (C3 - C2) * x -> x = (C1 - C3) * y / (C3 - C2)
Проверим: C1 = 1.5, C2 = 1.4, C3 = 1.43, y = 1
1.5 * 1 + 1.4 * х = 1.43 * (1 + х) -> x = (1.5 - 1.43) * 1 / (1.43 - 1.4) -> x = 0.07 / 0.03 = 2.33
Задача:Зная цену и лот первого ордера и зная точно где будем доливатся , долить столько что бы средняя цена оказалась в указанном месте.
Пока что в голову пришло только написать цикл и перебирать лот с минимальным значением, но это очень серьёзно тормозит советника даже на 1 паре. При добавлении пар всё просто висит.
Как высчитать из имеющейся информации, лот? Я уже моск сломал, ни чего дельного на ум не пришло.
...//+------------------------------------------------------------------+ //| расчёт лота для усреднения на заданный прайс | //+------------------------------------------------------------------+ double price_averaging(double SP,double TP,double UP,double n,double lotmin) { //SP - цена текущей позиции до усреднения (стартовая цена) //TP - текущая рыночная цена //UP - цена на которую требуется усреднится // n - количество лотов у текущей позиции // x - требуемое количество лотов для усреднения в заданную точку //lotmin - минимальный лот double pU=fabs(SP-UP);//- на сколько пунктов требуется усреднится double pO=fabs(TP-UP);//- сколько пунктов между UP и TP double x=(pO*n)/pU; //теперь x следует нормализовать к минимальному лоту int res=x/lotmin; return((double)res*lotmin); } //+------------------------------------------------------------------+ЗЫ Только не забывайте что цена открытия бай-ордера и селл-ордера это разные цены, хотя при нормализации лота в большинстве случаев эта разница всё равно будет снивелирована.

- www.mql5.com
ЗЫ Только не забывайте что цена открытия бай-ордера и селл-ордера это разные цены, хотя при нормализации лота в большинстве случаев эта разница всё равно будет снивелирована.
у тебя тут ошибочка помоему закралась...
вместо
double x=(pO*n)/pU; //теперь x следует нормализовать к минимальному лоту int res=x/lotmin; return((double)res*lotmin);Сделал так и всё заработало
double x=NormalizeDouble(pU/pO*n,2);
А так, СПАСИБО огромное конечно.
у тебя тут ошибочка помоему закралась...
вместо
Сделал так и всё заработалоНет, в этом месте ошибки нет.
В твоём варианте нормализации ты приводишь значение ко 2-му знаку после запятой, те подразумевается что минимальный лот равен 0,01.
А что если минимальный лот отличается от этого значения?
Ну добро если лот будет 0,1 то можно просто поставить в функции нормализации 1, а если минлот равен 0,05 ???
Хотя я не правильно употребил слово нормализация в комментарии, правильнее было бы сказать "привести к минимальному лоту".
А затем уже можно и нормализовать.
Кстати говоря есть случаи когда минлот и степлот отличаются так что лучше бы применить вместо минлот всё таки степлот.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Задача:Зная цену и лот первого ордера и зная точно где будем доливатся , долить столько что бы средняя цена оказалась в указанном месте.
Пока что в голову пришло только написать цикл и перебирать лот с минимальным значением, но это очень серьёзно тормозит советника даже на 1 паре. При добавлении пар всё просто висит.
Как высчитать из имеющейся информации, лот? Я уже моск сломал, ни чего дельного на ум не пришло.
Пример:
Имеем цену открытия 1.5000 * 1 лот
Имеем текущую цену 1.4000, надо что бы средняя цена оказалась на уровне скажем 1.4300, сколько надо залить ? То есть сколько в данном случае я знаю :) , но интересует как это всё высчитывается.
Единственное до чего мой больной моск допёр это составить уравнение типа:
y=1 // Страртовый лот
x цель по лоту
(цена открытия*y+цена где усредняемся*x)/(x+цена открытия)=цель усреднения
(1.5y+1.4x)/(x+y)=1.45 x=1;(1.5y+1.4x)/(x+y)=1.43 x=2;
(1.5y+1.4x)/(x+y)=1.425 x=3;
(1.5y+1.4x)/(x+y)=1.42 x=4;
а как посчитать х так и не допёр...