![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вы тут на червёрке вообще расслабились что ли?
индекс OrdersHistoryTotal()-1 и есть номер последнего ордера, чего его циклом выбирать то?
В историю уходят только закрытые ордера. Если в истории ещё нет закрытых ордеров то входа в зону if не произойдёт.
И вообще - вопрос о Самом последнем :)
первая часть ответа
Эх, ракетчики,- рожденные жать кнопки летать не могут :)
Эх, ракетчики,- рожденные жать кнопки летать не могут :)
Где уж нам... :)
Помогите вписать в этот код поиск закрытого, что бы следующий открывался противоположный. (
// ---
void OnTick()
{
// ---
// закрытие сделки
if(find_orders(_MagicNumber))
{
if(cl_buy_sig())
{
cbm(_MagicNumber, _Slippage, OP_BUY);
}
if(cl_sell_sig())
{
cbm(_MagicNumber, _Slippage, OP_SELL);
}
}
// открытие сделки
// ---
get_lots_by_percent(Ask, Ask-_SL*K_DIG*Point);
// ---
if(!find_orders(_MagicNumber, (_OnlyOneOpenedPos ? -1 : OP_BUY)))
{
if(op_buy_sig() && LAST_BUY_BARTIME != iTime(Symbol(), Period(), 0))
{
LAST_BUY_BARTIME = iTime(Symbol(), Period(), 0);
open_positions(OP_BUY, OP_LOTS);
}
}
// ---
if(!find_orders(_MagicNumber, (_OnlyOneOpenedPos ? -1 : OP_SELL)))
{
if(op_sell_sig() && LAST_SELL_BARTIME != iTime(Symbol(), Period(), 0))
{
LAST_SELL_BARTIME = iTime(Symbol(), Period(), 0);
open_positions(OP_SELL, OP_LOTS);
}
}
// ---
T_SL();
// ---
nonLoss();
}
// ---
// ---
void get_lots_by_percent(double op_price, double sl_price)
{
// MQL4 | объём сделки рассчитывается по значению SL и допустимому проценту потерь
RefreshRates();
if(_SL == 0)
{
OP_LOTS = MarketInfo(Symbol(), MODE_MINLOT);
return;
}
// ---
int pp;
if (op_price < sl_price)
pp = int((sl_price - op_price) / Point);
else
pp = int((op_price - sl_price) / Point);
OP_LOTS = (((AccountBalance() * _LosPercent) / 100) / MarketInfo(Symbol(), MODE_TICKVALUE)) / (pp);
OP_LOTS = MathRound(OP_LOTS / MarketInfo(Symbol(), MODE_LOTSTEP)) * MarketInfo(Symbol(), MODE_LOTSTEP);
OP_LOTS = MathMax(OP_LOTS, MarketInfo(Symbol(), MODE_MINLOT));
OP_LOTS = MathMin(OP_LOTS, MarketInfo(Symbol(), MODE_MAXLOT));
}
// ---
// ---
bool find_orders(int magic = -1, int type = -1, int time = -1, string symb = "NULL", double price = -1, double lot = -1)
{
// MQL4 | функция поиска открытых ордеров
// возвращает истину, если найден хотя бы один ордер с подходящими параметрами
for (int i = OrdersTotal() - 1; i >= _OR; i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
break;
if (((OrderType() == type) || (type == -1))
&& ((OrderMagicNumber() == magic) || (magic == -1))
&& ((OrderSymbol() == symb) || (symb == "NULL" && OrderSymbol() == Symbol()))
&& ((OrderOpenTime() >= time) || (time == -1))
&& ((OrderLots() == lot) || (lot == -1))
&& ((NormalizeDouble(OrderOpenPrice(), Digits) == NormalizeDouble(price, Digits)) || (price == -1)))
{
return (true);
break;
}
}
return (false);
}
// ---
Помогите вписать в этот код поиск закрытого, что бы следующий открывался противоположный. (
Как правильно выбрать последний ордер в истории?
Адаптируйте под свои нужды.
Удивительно, что пользователь этого ресурса с 2009 года, с огромным рейтингом и который продает 40 продуктов, задает такой вопрос.
Обалдеть можно.
Удивительно, что пользователь этого ресурса с 2009 года, с огромным рейтингом и который продает 40 продуктов, задает такой вопрос.
Обалдеть можно.
Ну да , когда зарегистрировался посмотрели , а когда данную тему создал нет... Удивительно.