[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 74

 
Mathemat:

Массив из 8 точек - это скорее M[8][2], чем M[8][8].

"Любые три" - это выбранные заранее, что ли?


Ну да, массив конечно же M[8][2]. Любые три - это любые из массива, которые должны быть определены в процессе вычисления. Можно сформулировать несколько по-другому: Необходимо найти координаты центра окружности и координаты трех точек, максимально близко расположенных по отношению к этой окружности.
 
 
atztek:


А затем OrderOpenPrice() .


тоесть он сам её определит ?
 
Myth63:

тоесть он сам её определит ?
В каком смысле "он сам её определит"?
Вы перебираете открытые ордера и для каждого ордера команда OrderOpenPrice() выдает значение цены по которой ордер был открыт.
Присвойте ее значение какой-нибудь переменной и используйте.
 
Elenn: Ну да, массив конечно же M[8][2]. Любые три - это любые из массива, которые должны быть определены в процессе вычисления.

Короче, задача сводится к такой: есть три точки. Надо провести окружность радиуса r так, чтобы сумма квадратов расстояний от них до окружности была минимальной.

Вообще-то задача серьезная, с налету не решается. Окружность - чай, не прямая. Какие из двух расстояний брать - совсем не очевидно.

Ну конкретный пример:

Покажите правильное расположение.

 
atztek:
В каком смысле "он сам её определит"?
Вы перебираете открытые ордера и для каждого ордера команда OrderOpenPrice() выдает значение цены по которой ордер был открыт.
Присвойте ее значение какой-нибудь переменной и используйте.


ну я так и понял. просто при переборе он её сразу автоматически задаст и будет использовать для проверки. ?

for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()== OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNum2)
{
if ( Ask>(OrderOpenPrice()+(AD1*Point)) )
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Black);
return(0);

}

Вроде правильно ?

 
Myth63:


ну я так и понял. просто при переборе он её сразу автоматически задаст и будет использовать для проверки. ?

for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()== OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNum2)
{
if ( Ask>(OrderOpenPrice()+(AD1*Point)) )
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Black);
return(0);

}

Вроде правильно ?

Не совсем. А если ордер не выбран? Где нормализация цен при отсылке торгового приказа?

Ордера закрываете в цикле, а значит перебор нужно делать не от нуля, а от OrdersTotal()-1 до >=0

 
Mathemat:

Короче, задача сводится к такой: есть три точки. Надо провести окружность радиуса r так, чтобы сумма квадратов расстояний от них до окружности была минимальной.

Вообще-то задача серьезная, с налету не решается. Окружность - чай, не прямая. Какие из двух расстояний брать - совсем не очевидно.

Ну конкретный пример:

Покажите правильное расположение.


Думаю, что так:
 

Elenn: Думаю, что так:

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

Может, ГА тут поможет найти локальный минимум. Но я в этом не силен.

P.S. Вы не уточнили целевую функцию - сумма квадратов расстояний или сумма самих расстояний.

 
Mathemat:

Вообще-то задача серьезная, с налету не решается. Окружность - чай, не прямая.

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