[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 227
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте, такая проблема: советник устанавливает отложенные лимитные ордера, далее цена двигается и ордера становятся рыночные. Всё работает, но на некоторых ордерах появляется абсолютно непонятный глюк, т.к. все ордера устанавливаются через определённую фиксированную константу "K", то расстояние между ними всегда должна быть константой (Rn+1 = Rn + "K"). Но не тут то было - ордер открыт, цена указана, всё проверено, но расстояние от предыдущего ордера до следующего не равно "K", при этом если смотреть результаты арифметических операций с ценами, т.е. тупо вычесть и посмотреть результат, то он равен "K", но логическое сравнение == упорно показывает false, это приводит к тому, что советник постоянно открывает ордера по этой цене и при этом "думает" что ордера там нет. Извените если длинно получилось, просто хотел объяснить подробнее. Чесно говоря абсолютно не понимаю, что делать :(
Спасибо разобрался! Но еще есть вот эта 2011.09.30 21:26:49 TestGenerator: unmatched data error (volume limit 13634 at 2011.07.19 20:00 exceeded)
насколько я понял это сообщение не касается эксперта, но все же хотелось бы знать как это понимать?
Помогите исправить функцию
Я пытаюсь написать функцию определяющую цену закрытия последнего ордера (по времени ближайшего к настоящему времени)
Пишу вот так:
Но
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);
}
Но почему-то функция мне возвращает данные самого первого ордера, который открылся в тестере.
Вообще-то это моя промежуточная цель. А хотел я написать функцию, которая бы давала последнюю цену частичного закрытия ордера (не на весь объём лотов) Но тут даже подступиться не знаю как...
Вместо этого нужно
... Далее ...
Вот тут бросается в глаза, что с матчастью у вас не всё дружно. При выборе ордера по тикету параметр pool игнорируется. Т.е. бесполезно писать MODE_HISTORY - этот параметр относится только к выбору по индексу.
Если выбрали ордер по тикету, то, чтобы убедиться, что он выбран из списка закрытых ордеров, нужно проверить его время закрытия. Оно должно быть больше ноля - только у закрытых позиций этот параметр >0.
на 5 минутном таймфрейме в торговом терминале МТ4 не отображается история. Это решаемо?
прошу прощения за тупой вопрос. Я имел ввиду, что не отображается история ранее ноября 2010 года :)
Значит её нет. Можно ещё уточнить. Попробывать сделать побольше баров на графике в настройках МТ4.
Решается закачкой или покупкой более длинной истории.
Значит её нет. Можно ещё уточнить. Попробывать сделать побольше баров на графике в настройках МТ4.
Решается закачкой или покупкой более длинной истории.
А максимальное количество баров в истории какое? Может история обрезана уже.