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

 
Neo333:
Здравствуйте, такая проблема: советник устанавливает отложенные лимитные ордера, далее цена двигается и ордера становятся рыночные. Всё работает, но на некоторых ордерах появляется абсолютно непонятный глюк, т.к. все ордера устанавливаются через определённую фиксированную константу "K", то расстояние между ними всегда должна быть константой (Rn+1 = Rn + "K"). Но не тут то было - ордер открыт, цена указана, всё проверено, но расстояние от предыдущего ордера до следующего не равно "K", при этом если смотреть результаты арифметических операций с ценами, т.е. тупо вычесть и посмотреть результат, то он равен "K", но логическое сравнение == упорно показывает false, это приводит к тому, что советник постоянно открывает ордера по этой цене и при этом "думает" что ордера там нет. Извените если длинно получилось, просто хотел объяснить подробнее. Чесно говоря абсолютно не понимаю, что делать :(
Ну если сравниваете по ==, то используйте NormalizeDouble, а вообще лучше MathAbs(Price1-Price2)<delta
 
VladimirR:

Спасибо разобрался! Но еще есть вот эта 2011.09.30 21:26:49 TestGenerator: unmatched data error (volume limit 13634 at 2011.07.19 20:00 exceeded)

насколько я понял это сообщение не касается эксперта, но все же хотелось бы знать как это понимать?



Нестыковка в истории по таймфремам. https://www.mql5.com/ru/forum/108760
 
sergeev:

Помогите исправить функцию


73
Eugene1 30.09.2011 16:19

Я пытаюсь написать функцию определяющую цену закрытия последнего ордера (по времени ближайшего к настоящему времени)

Пишу вот так:


Но

do

uble PriceCloseLastPos(string smb = "", int cmd = -1, int mMin = -1, int mMax = -1) {
int ticketDateTime=0;
int orderTicket=-1;
double closePrice = 0;
int ordTotal = OrdersTotal();
if (smb == "0") smb = Symbol();
for (int i = 0; i < ordTotal; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol() == smb || smb == "") {
if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
if (cmd < OP_BUY || OrderType() == cmd) {
if (mMin < 0 || (OrderMagicNumber() >= mMin && OrderMagicNumber() <= mMax)) {
if (ticketDateTime < OrderCloseTime()) {
ticketDateTime = OrderCloseTime();
orderTicket = OrderTicket();
closePrice = OrderClosePrice();
}
}
}
}
}
}
}
if(orderTicket > -1) OrderSelect(orderTicket, SELECT_BY_TICKET, MODE_HISTORY );
return (closePrice);
}

Но почему-то функция мне возвращает данные самого первого ордера, который открылся в тестере.

Вообще-то это моя промежуточная цель. А хотел я написать функцию, которая бы давала последнюю цену частичного закрытия ордера (не на весь объём лотов) Но тут даже подступиться не знаю как...

int ordTotal = OrdersTotal();

Вместо этого нужно

int ordTotal = OrdersHistoryTotal();

... Далее ...

if(orderTicket > -1) OrderSelect(orderTicket, SELECT_BY_TICKET, MODE_HISTORY );

Вот тут бросается в глаза, что с матчастью у вас не всё дружно. При выборе ордера по тикету параметр pool игнорируется. Т.е. бесполезно писать MODE_HISTORY - этот параметр относится только к выбору по индексу.

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

 
на 5 минутном таймфрейме в торговом терминале МТ4 не отображается история. Это решаемо?
 
rosman:
на 5 минутном таймфрейме в торговом терминале МТ4 не отображается история. Это решаемо?
прошу прощения за тупой вопрос. Я имел ввиду, что не отображается история ранее ноября 2010 года :)
 
rosman:
прошу прощения за тупой вопрос. Я имел ввиду, что не отображается история ранее ноября 2010 года :)

Значит её нет. Можно ещё уточнить. Попробывать сделать побольше баров на графике в настройках МТ4.

Решается закачкой или покупкой более длинной истории.

 
Zhunko:

Значит её нет. Можно ещё уточнить. Попробывать сделать побольше баров на графике в настройках МТ4.

Решается закачкой или покупкой более длинной истории.

Сервис>Настройки>вкладка"Графики">максимальное кол-во баров в окне стояло 65 000 -->менял на 100 000 и более, всё равно только ноябрь 2010 - самое позднее. Архив котировок по данному инструменту и таймфрейму загружен полностью - вплоть до ноября 1999
 
А максимальное количество баров в истории какое? Может история обрезана уже.
 
Zhunko:
А максимальное количество баров в истории какое? Может история обрезана уже.
стоит 10 000 000.
 
Выкладывайте архив. У себя посмотрю.