Советник стабильно работает и на тестере, и на демо-счёте, но при компиляции выдаёт 2 предупреждения: return value of 'OrderSelect' shuld be checked, которые я никак не могу преодолеть. Если это возможно, подскажите, пожалуйста, что я неправильно или не полностью написал.
Советник стабильно работает и на тестере, и на демо-счёте, но при компиляции выдаёт предупреждение: return value of 'OrderSelect' shuld be checked, которые я никак не могу преодолеть. Если это возможно, подскажите, пожалуйста, что я неправильно или не полностью написал.
SRС для вставки кода! А зачем 2 цикла, после проверки если нет проверять если да и Тоtal должен считать оба типа и держать в памяти для каждого отдельно? Это никто не поймёт! Вы должны выстроить логику, чтобы всем было понятно, что Вы хотите, тогда и компилятор поймёт!
Здравствуйте. Не могу понять в чём моя ошибка или вернее недоработка этого блока в моей программе:
...
1) Чтобы тут правильно вставить код, нажмите на SRC, а потом в окошке копируйте ваш код (рис ниже).
2) Попробуйте такой вот код:
int Total_BUY=0, Total_SELL=0; // новые переменные как счетчики ордеров//---Раздельный учёт открытых ордеровfor(int i=OrdersTotal()-1; i>=0; i--) // Цикл перебора ордеров
{
// OrderSelect() надо выбирать с помощью ifif(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)); // Если найден ордер, то:
{
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
else
{
if(OrderType()==OP_BUY) Total_BUY++; // считает открытые позиции на покупкуif(OrderType()==OP_SELL) Total_SELL++; // считает открытые позиции на продажу
}
}
}
Помогите пожалуйста перевести алгоритм нахождения координаты точки пересечения двух отрезков
Из статьи:
Все очень просто! х1, у1 и х2,у2 - координаты вершин первого отрезка; х3, у3 и х4,у4 - координаты вершин второго отрезка;
для нахождения пересечения составляем уравнения прямых: первое уравнение: (x-x1)/(x2-x1)=(y-y1)/(y2-y1); второе уравнение (x-x3)/(x4-x3)=(y-y3)/(y4-y3); эти уравнения определяют прямую проходящую через две точки, то, что нам и надо. Из этих уравнений находим х и у по следующим формулам: x:=((x1*y2-x2*y1)*(x4-x3)-(x3*y4-x4*y3)*(x2-x1))/((y1-y2)*(x4-x3)-(y3-y4)*(x2-x1)); y:=((y3-y4)*x-(x3*y4-x4*y3))/(x4-x3); так как наши прямые пересекаются, то у них есть общая точка пересечения с координатами (х,у), которую нам и надо найти. для того, чтоб пересечение принадлежало нашим отрезкам, нужно его ограничить, т. е проверить условие: если (((x1<=x)and(x2>=x)and(x3<=x)and(x4 >=x))or((y1<=y)and(y2>=y)and(y3<=y) and(y4>=y))) то существует точка пересечения данных отрезков, а нет – то нет и точки пересечения. Еще следует проверить параллельность этих отрезков при помощи угловых коэффициентов: k1:=(x2-x1)/(y2-y1); k2:=(x4-x3)/(y4-y3); где k1 и k2 – тангенсы угла наклона отрезков к положительномунаправлению оси ОХ, если k1=k2, то отрезки параллельны, а значит, неимеют точек пересечения.
А, может быть, у кого-нибудь в архивах есть уже готовый?
Существует ли возможность или функция в MT4 перенаправить сообщения пришедшие на внутреннюю почту терминала (о изменении плеча, перезагрузки сервера, итд) по смс или е-маил
P.sзакладка в окне терминала, (торговля, активы, история счёта, новости, алерты, ПОЧТА итд.)?
Начал изучать язык MQL4 и при написании простого индикатора столкнулся с проблемой, которую никак не могу решить. Суть проблемы:
1_как найти High оставшейся части дня, есть простой цикл Close[i]-Open[i+1], необходимо найти High[i - до конца дня]. Например, от[i],[1],[2] и до конца дня (PERIOD_H1) . Ума не приложу как это сделать. Есть функция 'iHigh' , но это немного не то.
2_ это еще не все, простите за наглость, есть функция 'iBars'( Возвращает количество баров в истории по соответствующему символу и периоду). Подскажите пожалуйста, какой комбинацией функций можно подсчитать не только по соответствующему символу и периоду, но и сколько баров со временем скажем так,"12:00" или допустим "15:00" в истории(PERIOD_H1).
Перелистал весь справочник, может что проглядел, но ничего подходящего не нашел. Поисковиком пользовался, результат тот же. Может кто знает где обсуждались подобные темы, скиньте плиз ссылку.
Смотрите в справке функции, а на форуме - примеры с их применением:
1. iHighest/iLowest - чтобы не было путаницы, эти функции возвращают индекс, соответствующий максимальной/минимальной цене. Затем надо поместить их значения в High[] / Low[]. На форуме найдете множество примеров.
1_Да я пробовал использовать _iHighest, но она ведь возвращает индекс(номер бара) наибольшего найденного значения (смещение относительно "текущего бара"). А я имею ввиду, вот выполнилось у меня определенное условие на i -том баре, этот бар соответствует времени, допустим 10:00, вот тут и нужен мне максимум от _10:00 до конца дня _00:00. Если можете, хотя бы немного черканите, как? Как увязать iHighest High[] / Low[] про которые Вы говорили.
2_ iBarShift ведь возвращает индекс бара, в который попадает указанное время. Индекс одного бара. Я имел ввиду, нужно подсчитать сколько всего баров в истории(на графике), с определенным временем_12:00_13:00_14:00, и.т.д. iBars тоже не то.
atztek:
Смотрите в справке функции, а на форуме - примеры с их применением:
1. iHighest/iLowest - чтобы не было путаницы, эти функции возвращают индекс, соответствующий максимальной/минимальной цене. Затем надо поместить их значения в High[] / Low[]. На форуме найдете множество примеров.
Здравствуйте. Не могу понять в чём моя ошибка или вернее недоработка этого блока в моей программе:
//---Раздельный учёт открытых ордеров
for(int i=OrdersTotal()-1;i>=0;i--) // Цикл перебора ордеров
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES); // Если найден ордер,то:
{
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=Magic) continue;
}
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
if(OrderType()==OP_BUY)
Total++;
}
return;
}
//---
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
{
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=Magic) continue;
}
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
if(OrderType()==OP_SELL)
Total++;
}
return;
}
//---
Советник стабильно работает и на тестере, и на демо-счёте, но при компиляции выдаёт 2 предупреждения: return value of 'OrderSelect' shuld be checked, которые я никак не могу преодолеть. Если это возможно, подскажите, пожалуйста, что я неправильно или не полностью написал.
Здравствуйте. Не могу понять в чём моя ошибка или вернее недоработка этого блока в моей программе:
//---Раздельный учёт открытых ордеров
for(int i=OrdersTotal()-1;i>=0;i--) // Цикл перебора ордеров
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES); // Если найден ордер,то:
{
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=Magic) continue;
}
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
if(OrderType()==OP_BUY)
Total++;
}
return;
}
//---
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
{
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=Magic) continue;
}
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
if(OrderType()==OP_SELL)
Total++;
}
return;
}
//---
Советник стабильно работает и на тестере, и на демо-счёте, но при компиляции выдаёт предупреждение: return value of 'OrderSelect' shuld be checked, которые я никак не могу преодолеть. Если это возможно, подскажите, пожалуйста, что я неправильно или не полностью написал.
Здравствуйте. Не могу понять в чём моя ошибка или вернее недоработка этого блока в моей программе:
...1) Чтобы тут правильно вставить код, нажмите на SRC, а потом в окошке копируйте ваш код (рис ниже).
2) Попробуйте такой вот код:
Как бы заставить алерт
Alert(OrderOpenPrice());выводить цену открытия ордера с 5 числами после запятой? NormalizeDouble(OrderOpenPrice(),Digits) не помогает. (Ордер предварительно выбран).
Как бы заставить алерт
выводить цену открытия ордера с 5 числами после запятой? NormalizeDouble(OrderOpenPrice(),Digits) не помогает. (Ордер предварительно выбран).
Здравствуйте уважаемые!
Помогите пожалуйста перевести алгоритм нахождения координаты точки пересечения двух отрезков
Из статьи:
Все очень просто!
х1, у1 и х2,у2 - координаты вершин первого отрезка;
х3, у3 и х4,у4 - координаты вершин второго отрезка;
для нахождения пересечения составляем уравнения прямых:
первое уравнение:
(x-x1)/(x2-x1)=(y-y1)/(y2-y1);
второе уравнение
(x-x3)/(x4-x3)=(y-y3)/(y4-y3);
эти уравнения определяют прямую проходящую через две точки, то, что нам и надо.
Из этих уравнений находим х и у по следующим формулам:
x:=((x1*y2-x2*y1)*(x4-x3)-(x3*y4-x4*y3)*(x2-x1))/((y1-y2)*(x4-x3)-(y3-y4)*(x2-x1));
y:=((y3-y4)*x-(x3*y4-x4*y3))/(x4-x3);
так как наши прямые пересекаются, то у них есть общая точка пересечения с координатами (х,у), которую нам и надо найти.
для того, чтоб пересечение принадлежало нашим отрезкам, нужно его ограничить, т. е проверить условие:
если
(((x1<=x)and(x2>=x)and(x3<=x)and(x4 >=x))or((y1<=y)and(y2>=y)and(y3<=y) and(y4>=y)))
то существует точка пересечения данных отрезков, а нет – то нет и точки пересечения.
Еще следует проверить параллельность этих отрезков при помощи угловых коэффициентов:
k1:=(x2-x1)/(y2-y1);
k2:=(x4-x3)/(y4-y3);
где k1 и k2 – тангенсы угла наклона отрезков к положительномунаправлению оси ОХ, если k1=k2, то отрезки параллельны, а значит, неимеют точек пересечения.
А, может быть, у кого-нибудь в архивах есть уже готовый?
Существует ли возможность или функция в MT4 перенаправить сообщения пришедшие на внутреннюю почту терминала (о изменении плеча, перезагрузки сервера, итд) по смс или е-маил
P.s закладка в окне терминала, (торговля, активы, история счёта, новости, алерты, ПОЧТА итд.)?
Смотрите в справке функции, а на форуме - примеры с их применением:
1. iHighest/iLowest
- чтобы не было путаницы, эти функции возвращают индекс, соответствующий максимальной/минимальной цене.
Затем надо поместить их значения в High[] / Low[]. На форуме найдете множество примеров.
2. iBarShift
Спасибо что откликнулись.
1_Да я пробовал использовать _iHighest, но она ведь возвращает индекс(номер бара) наибольшего найденного значения (смещение относительно "текущего бара"). А я имею ввиду, вот выполнилось у меня определенное условие на i -том баре, этот бар соответствует времени, допустим 10:00, вот тут и нужен мне максимум от _10:00 до конца дня _00:00. Если можете, хотя бы немного черканите, как? Как увязать iHighest High[] / Low[] про которые Вы говорили.
2_ iBarShift ведь возвращает индекс бара, в который попадает указанное время. Индекс одного бара. Я имел ввиду, нужно подсчитать сколько всего баров в истории(на графике), с определенным временем_12:00_13:00_14:00, и.т.д. iBars тоже не то.
Смотрите в справке функции, а на форуме - примеры с их применением:
1. iHighest/iLowest
- чтобы не было путаницы, эти функции возвращают индекс, соответствующий максимальной/минимальной цене.
Затем надо поместить их значения в High[] / Low[]. На форуме найдете множество примеров.
2. iBarShift