Скачать MetaTrader 5

Подсчет OrderProfit. - страница 3

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
fore-x
92
fore-x 2012.08.19 20:05  

Если вам нужно посчитать прибыль каждого ордера отдельно, на текущий момент времени, то используйте ОрдерПрофит ---> это понятно, но задача маленько другая.

если вам нужно посчитать прибыль в синтетической точке, тогда вместо ОрдерКлозеПрайс нужно подставить синтетическую цену закрытия. Нужно не забыть, что ордера закрываются по разным ценам Бид/Аск ---> в коде это реализовано в виде линий аск и бид

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

Вообще очень много тонкостей. Я например считаю общую прибыль для массива ордеров в нужной точке, а не для каждого в отдельности.

На самом деле это уже коды продвинутого уровня. ---> эх, знать бы формулу еще

Я могу дать вам код моего индикатора, но разобраться в нем будет довольно сложно (код без комментариев) --->Дайте пожалуйста?

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


Рустам
3597
Рустам 2012.08.19 20:10  
Просто внимательно прочитайте в доке метод округления для этого языка. и потом,это же доли цента...
fore-x
92
fore-x 2012.08.19 20:17  
FAQ:
Просто внимательно прочитайте в доке метод округления для этого языка.

Не понял в чем фишка?

Но если использовать отсечку по DoubleToStr, то тоже не выйдет.

Рустам
3597
Рустам 2012.08.19 20:19  
fore-x:

Не понял в чем фишка?

Но если использовать отсечку по DoubleToStr, то тоже не выйдет.


будет то же самое, единственный выход перевести число в строку, убрать лишние символы сзади, и перевести обратно в число

так
double in  = 1.256;
string str = DoubleToStr(in,3);
str = StringSubstr(str,0,StringLen(str)-1);
in  = StrToDouble(str);
или так
in = StrToDouble(StringSubstr(DoubleToStr(in,3),0,StringLen(DoubleToStr(in,3))-1));

Рустам
3597
Рустам 2012.08.19 20:26  
хотя можно еще умножить на 100, отсечь дробную часть, и разделить на 100
fore-x
92
fore-x 2012.08.19 20:28  
FAQ:


будет то же самое, единственный выход перевести число в строку, убрать лишние символы сзади, и перевести обратно в число

или так
in = StrToDouble(StringSubstr(DoubleToStr(in,3),0,StringLen(DoubleToStr(in,3))-1));

Не выйдет!


P.S спасибо за код!

Рустам
3597
Рустам 2012.08.19 20:30  
выведите на печать все три значения до округления, после и реальное. Хочу посмотреть, я вроде решал эту проблему.
fore-x
92
fore-x 2012.08.19 20:43  
FAQ:
выведите на печать все три значения до округления, после и реальное. Хочу посмотреть, я вроде решал эту проблему.


Alert(profit,"   ",
            StrToDouble(StringSubstr(DoubleToStr(profit,3),0,StringLen(DoubleToStr(profit,3))-1)),"   ",
            NormalizeDouble(profit,2),"   ",
            DoubleToStr(profit,2),"   ",
            OrderProfit());
Ой, ладно, пойду спать - завтра на работу, спасибо за оказанную помощь.
fore-x
92
fore-x 2012.08.19 20:46  
FAQ:
выведите на печать все три значения до округления, после и реальное. Хочу посмотреть, я вроде решал эту проблему.
Я тоже решал, помоему делал через MathFloor и MathCeil, но там немножко другая проблема была, завтра погляжу.
123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий