Отвечу, пожалуй, на свой же вопрос, раз уж решение найдено - мало ли, кто будет гуглить...
Вопрос был о том, как правильно получить цену открытия последнего ордера из истории. Получилось (у меня, по крайней мере), что никак - надо было добывать цену сделки, а не ордера. На тестере, причем, работал и исходный вариант (не мной написанный) - подозреваю, что разница была в том, что на демке вместо цены пишется просто "market price", и при попытке запросить его как double почему-то возвращаются нули. Ну и черт бы с ними, теперь функция выглядит так:
PositionID = PositionGetInteger(POSITION_IDENTIFIER);
double FindLastPrice(long PositionID) {
int i = 0, DealsTotal;
ENUM_DEAL_TYPE CheckType;
long Ticket, OldTicket = 0, PosID, Magic, Type;
double OrderPrice = 0;
DealsTotal = HistoryDealsTotal();
for (i = 0; i < DealsTotal; i++) {
Ticket = (int)HistoryDealGetTicket(i);
PosID = HistoryDealGetInteger(Ticket, DEAL_POSITION_ID);
Magic = HistoryDealGetInteger(Ticket, DEAL_MAGIC);
Type = HistoryDealGetInteger(Ticket, DEAL_TYPE);
if (Sell) CheckType = DEAL_TYPE_SELL;
else CheckType = DEAL_TYPE_BUY;
if ((PosID == PositionID) && (Magic == MagicNumber) && (Type == CheckType)) {
if (Ticket > OldTicket) {
OrderPrice = HistoryDealGetDouble(Ticket, DEAL_PRICE);
OldTicket = Ticket;
}
}
}
if(!OrderPrice) Print("Ошибка получения цены открытия предыдущей сделки! Error ",GetLastError());
return(OrderPrice);
}
Пришлось убить несколько часов на эту ерунду, но по крайней мере во всем есть свои плюсы: из-за этой неработающей функции пришлось придумывать обходной путь, параллельно освоив базовую работу с файлами, чтобы тупо записывать в файлик каждую новую цену ордера и считывать ее при необходимости...
Да я этот сайт уже неделю вдоль и поперек гуглю (именно через гугл, т.к. встроенный поиск тут какой-то странный: то выдает совсем невтемные вещи в случайном порядке, а не по релевантности; то вообще сообщает, что "ничего не найдено" даже на скопированные из этой же документации запросы)... Вот только чтобы найти что-то полезное, надо хотя бы конкретно знать, как это полезное называется, и чем оно отличается от уже имеющегося неработающего варианта :) Про поиск легко говорить с позиции человека, знающего язык на приличном уровне, но сложнее реализовать, если само название mql5 знаешь всего неделю и уже пытаешься что-то на нем сочинять...
Ну и плюс к тому, не особо люблю готовые решения и подробные мануалы, как концепт - отбивают все желание разбираться самостоятельно. :) Может мой способ самообучения и не особо эффективный, но принципиальнее, чтобы это было интересно - иначе энтузиазма вообще вкладывать в эту тему личное время на долго не хватит.
Вот код, где выставляется ордер на покупку, а затем меняются его SL и TP.
Выдается ошибка: 2013.09.06 00:03:39 Trades '10022332': failed modify order #0 buy 0.00 GBPUSD at market sl: 0.00000 tp: 0.00000 -> 1.56255, sl: 1.55787 tp: 1.56787 [Invalid request] Что не так в запросе для изменения уровней?
Вот код, где выставляется ордер на покупку, а затем меняются его SL и TP.
Выдается ошибка: 2013.09.06 00:03:39 Trades '10022332': failed modify order #0 buy 0.00 GBPUSD at market sl: 0.00000 tp: 0.00000 -> 1.56255, sl: 1.55787 tp: 1.56787 [Invalid request] Что не так в запросе для изменения уровней?
Средняя прибыльная сделка не покроет проскальзывание и прибыльность маленькая, а еще это может быть подгонкой).
Эксперта писал я сам. В нем нет стоплосса.
Эксперта писал я сам. В нем нет стоплосса.
Это еще хуже).
Отвечу, пожалуй, на свой же вопрос, раз уж решение найдено - мало ли, кто будет гуглить...
Вопрос был о том, как правильно получить цену открытия последнего ордера из истории. Получилось (у меня, по крайней мере), что никак - надо было добывать цену сделки, а не ордера. На тестере, причем, работал и исходный вариант (не мной написанный) - подозреваю, что разница была в том, что на демке вместо цены пишется просто "market price", и при попытке запросить его как double почему-то возвращаются нули. Ну и черт бы с ними, теперь функция выглядит так:
Пришлось убить несколько часов на эту ерунду, но по крайней мере во всем есть свои плюсы: из-за этой неработающей функции пришлось придумывать обходной путь, параллельно освоив базовую работу с файлами, чтобы тупо записывать в файлик каждую новую цену ордера и считывать ее при необходимости...
Отвечу, пожалуй, на свой же вопрос, раз уж решение найдено - мало ли, кто будет гуглить...
Вопрос был о том, как правильно получить цену открытия последнего ордера из истории. ....
А могли бы просто воспользоваться поиском по сайту или просмотреть статьи, в которых уже чего только нет.
>>> Рецепты MQL5 - История сделок и библиотека функций для получения свойств позиции
А могли бы просто воспользоваться поиском по сайту или просмотреть статьи, в которых уже чего только нет.
>>> Рецепты MQL5 - История сделок и библиотека функций для получения свойств позиции
Да я этот сайт уже неделю вдоль и поперек гуглю (именно через гугл, т.к. встроенный поиск тут какой-то странный: то выдает совсем невтемные вещи в случайном порядке, а не по релевантности; то вообще сообщает, что "ничего не найдено" даже на скопированные из этой же документации запросы)... Вот только чтобы найти что-то полезное, надо хотя бы конкретно знать, как это полезное называется, и чем оно отличается от уже имеющегося неработающего варианта :) Про поиск легко говорить с позиции человека, знающего язык на приличном уровне, но сложнее реализовать, если само название mql5 знаешь всего неделю и уже пытаешься что-то на нем сочинять...
Ну и плюс к тому, не особо люблю готовые решения и подробные мануалы, как концепт - отбивают все желание разбираться самостоятельно. :) Может мой способ самообучения и не особо эффективный, но принципиальнее, чтобы это было интересно - иначе энтузиазма вообще вкладывать в эту тему личное время на долго не хватит.
Тем не менее, за ссылку спасибо, почитаю.
Добрый день.
Можно ли как нибудь закачать исторические данные для валют лет за 20-30?
А то в Альфа-форексе только за последние 12 лет, а перед этим какими то кусками.
Добрый день.
Можно ли как нибудь закачать исторические данные для валют лет за 20-30?
А то в Альфа-форексе только за последние 12 лет, а перед этим какими то кусками.
Вот код, где выставляется ордер на покупку, а затем меняются его SL и TP.
Выдается ошибка: 2013.09.06 00:03:39 Trades '10022332': failed modify order #0 buy 0.00 GBPUSD at market sl: 0.00000 tp: 0.00000 -> 1.56255, sl: 1.55787 tp: 1.56787 [Invalid request]
Что не так в запросе для изменения уровней?
Вот код, где выставляется ордер на покупку, а затем меняются его SL и TP.
Выдается ошибка: 2013.09.06 00:03:39 Trades '10022332': failed modify order #0 buy 0.00 GBPUSD at market sl: 0.00000 tp: 0.00000 -> 1.56255, sl: 1.55787 tp: 1.56787 [Invalid request]
Что не так в запросе для изменения уровней?