//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.05.2008 |//| Описание : Возвращает флаг закрытия последней позиции по стопу. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {
datetime t;
double ocp, osl;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(sy, MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
osl=NormalizeDouble(OrderStopLoss(), dg);
if (ocp==osl) return(True);
}
return(False);
}
Привожу свой кусок кода из своего советника - Вам необходимо для себя переделать -
//---Поиск последнего отработавшего ордера для открытия очередной позиции ---for (orderIndex = (OrdersHistoryTotal() - 1); orderIndex >= 0; orderIndex--)
{
if (!OrderSelect(orderIndex, SELECT_BY_POS, MODE_HISTORY))
{
Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
continue;
}
if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber))
{
continue;
}
//-------------------------Принимаем в расчет только ордер, закрытый недавно-----------------------if (OrderCloseTime() >= iTime(NULL, 0, 1))
{
int lastType = OrderType();
double lastLots = OrderLots();
double lastProfit = OrderProfit() + OrderSwap();
// Print ("lastProfit = ", NormalizeDouble(lastProfit, 1));// Анализ только что закрывшегося ордераif (lastProfit > 0.0) - здесь у Вас будет другое условие
{
//--- здесь у Вас будет код...
}
}
}
Покопайте в этом направлении, что-либо, конечно, от себя будет необходимо добавить...
Функция возвращает истину если промежуток времени истёк. В противном случае ложь.
extern int timeout - внешняя переменная, задающая интервал в минутах.
Это упрощённо (для тестера или одного эксперта на счету) чтобы не заморачиваться с магикам и анализом кучи закрытых ордеров.
спасибо, наконeц-то добил. Хотя и нe понял, почeму OrdersHistoryTotal()-1 возвращаeт № послeднeго ордeра (а нe пeрвого), но всe работаeт достаточно для поставлeeной задачи.
спасибо, наконeц-то добил. Хотя и нe понял, почeму OrdersHistoryTotal()-1 возвращаeт № послeднeго ордeра (а нe пeрвого), но всe работаeт достаточно для поставлeeной задачи.
OrdersHistoryTotal() - это количество ордеров в истории. Нумерация их обратная, начинается с нуля (самый старший нулевой), поэтому номер последнего в списке будет = OrdersHistoryTotal() - 1
Это чтобы не шерстить весь список на каждом тике, т.к. в списке м.б. несколько тысяч и более ордеров.
OrdersHistoryTotal() - это количество ордеров в истории. Нумерация их обратная, начинается с нуля (самый старший нулевой), поэтому номер последнего в списке будет = OrdersHistoryTotal() - 1
Это чтобы не шерстить весь список на каждом тике, т.к. в списке м.б. несколько тысяч и более ордеров.
Алeксаендр, спасибо за ликбeз. Eсли нe сeкрeт - почeму тeбe золото большe нравится, и почeму прeдпочтeниe"рукам"?
Алeксаендр, спасибо за ликбeз. Eсли нe сeкрeт - почeму тeбe золото большe нравится, и почeму прeдпочтeниe"рукам"?
Золото наиболее технично (имхо). Такой вывод сделал давно когда тренировался на форексе, на котором до сих пор ощутимых результатов так и не добился. Золото же отлично отрабатывало тигуры ТА, особенно мне нравилось торговать пробитие треугольников на М15, М30. Потом пересел на фондовый рынок (NYSE), там как-то всё правильнее что-ли ... есть единый источник котировок, стакан, лента, никаких стоплевелов, фризлевелов и прочей искусственной ДЦшной хрени. Руками золото торговал т.к. автоматизировать фигуры ТА мой уровень программирования не позволяет. Но МТ4 и MQL4 мне ощутимо помог в плане проверок многих идей в т.ч. на фондовом рынке. В первую очередь помог быстро отсечь тупиковые направления. Очень хорошо отрезвляет автоматизация. :)
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Спасибо, Ромаен. Я в этом направлeнии и думал. Нужно найти информацию по учeту закрытых ордeров. МЕожeт подскажeшь, что почитать?
Не сочтите за рекламу... http://www.alpari.ru/ru/school/textbook/autotrading/expert_advisors/, кроме этого у Кима И.В. ф-ия определения закрытия ордера по стоп-лоссу -
Привожу свой кусок кода из своего советника - Вам необходимо для себя переделать -
Покопайте в этом направлении, что-либо, конечно, от себя будет необходимо добавить...
Делаю так:
Функция возвращает истину если промежуток времени истёк. В противном случае ложь.
extern int timeout - внешняя переменная, задающая интервал в минутах.
Это упрощённо (для тестера или одного эксперта на счету) чтобы не заморачиваться с магикам и анализом кучи закрытых ордеров.
спасибо, наконeц-то добил. Хотя и нe понял, почeму OrdersHistoryTotal()-1 возвращаeт № послeднeго ордeра (а нe пeрвого), но всe работаeт достаточно для поставлeeной задачи.
Не сочтите за рекламу... http://www.alpari.ru/ru/school/textbook/autotrading/expert_advisors/, кроме этого у Кима И.В. ф-ия определения закрытия ордера по стоп-лоссу -
Привожу свой кусок кода из своего советника - Вам необходимо для себя переделать -
Покопайте в этом направлении, что-либо, конечно, от себя будет необходимо добавить...
Eщe раз, спасибо. обошeлся "мeньшeй кровью" но щас покопаюсь в Вашeм прeдложeниие, можeт что и открою для сeбя.
понравился подход : if (OrderCloseTime() >= iTime(NULL, 0, 1))
я никак нe мог придумать, как выбрать послeдний из закрытых ордeров. Благодарю!
спасибо, наконeц-то добил. Хотя и нe понял, почeму OrdersHistoryTotal()-1 возвращаeт № послeднeго ордeра (а нe пeрвого), но всe работаeт достаточно для поставлeeной задачи.
OrdersHistoryTotal() - это количество ордеров в истории. Нумерация их обратная, начинается с нуля (самый старший нулевой), поэтому номер последнего в списке будет = OrdersHistoryTotal() - 1
Это чтобы не шерстить весь список на каждом тике, т.к. в списке м.б. несколько тысяч и более ордеров.
OrdersHistoryTotal() - это количество ордеров в истории. Нумерация их обратная, начинается с нуля (самый старший нулевой), поэтому номер последнего в списке будет = OrdersHistoryTotal() - 1
Это чтобы не шерстить весь список на каждом тике, т.к. в списке м.б. несколько тысяч и более ордеров.
Алeксаендр, спасибо за ликбeз. Eсли нe сeкрeт - почeму тeбe золото большe нравится, и почeму прeдпочтeниe"рукам"?
Алeксаендр, спасибо за ликбeз. Eсли нe сeкрeт - почeму тeбe золото большe нравится, и почeму прeдпочтeниe"рукам"?
Золото наиболее технично (имхо). Такой вывод сделал давно когда тренировался на форексе, на котором до сих пор ощутимых результатов так и не добился. Золото же отлично отрабатывало тигуры ТА, особенно мне нравилось торговать пробитие треугольников на М15, М30. Потом пересел на фондовый рынок (NYSE), там как-то всё правильнее что-ли ... есть единый источник котировок, стакан, лента, никаких стоплевелов, фризлевелов и прочей искусственной ДЦшной хрени. Руками золото торговал т.к. автоматизировать фигуры ТА мой уровень программирования не позволяет. Но МТ4 и MQL4 мне ощутимо помог в плане проверок многих идей в т.ч. на фондовом рынке. В первую очередь помог быстро отсечь тупиковые направления. Очень хорошо отрезвляет автоматизация. :)
Сейчас руками торгую очень мало, лень уже.