[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 909
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Помогите пожалуйста. Есть эксперт в учебнике, но он работает только с одним рыночным ордером,а я хочу сделать чтобы работал с несколькими, просто торговля будет вестить на разных фин.инструментах, на них будут одновременно открываться и закрываться ордера, одновременно. Ниже скинул пример, но тормознул, на том, где для учета ордеров присваивается значения первого ордера переменным. Как для второго ордера(с другой пары валют) сделать тоже самое? и если я захочу чтобы по этим парам валют работало не только по одному ордеру, а к примеру за день индюк показал несколько открытий, но закрытия еще не произошли, и на этих двух парах валют открыто попарно 3 или 5 ордеров. Как реализовать подскажите.
// Учёт ордеров
Symb1=SymbolN1(внешняя переменная); // Название фин.инстр.
Symb2=SymbolN2(внешняя переменная); // Название фин.инстр.
Total=0; // Количество ордеров
for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:
if (OrderSymbol()!=Symb1 $$ OrderSymbol()!=Symb2)continue; // Не наш фин. инструм
if (OrderType()>1) // Попался отложенный
{
Alert("Обнаружен отложенный ордер. Эксперт не работает.");
return; // Выход из start()
}
Total++; // Счётчик рыночн. орд
if (Total>2) // Не более двух орд
{
Alert("больше 2 рыночных ордеров. Эксперт не работает.");
return; // Выход из start()
}
Ниже идет присваивание переменым значения ордера, чтобы потом с ним что то сделать и при второй итерации, т.к ордера будет 2( второй на другой паре валют) они поменяют значения на второй ордер, но мне надо чтобы зафиксировалась инфа по первому и по второму.
Ticket=OrderTicket(); // Номер выбранн. орд.
Tip =OrderType(); // Тип выбранного орд.
Price =OrderOpenPrice(); // Цена выбранн. орд.
SL =OrderStopLoss(); // SL выбранного орд.
TP =OrderTakeProfit(); // TP выбранного орд.
Lot =OrderLots(); // Количество лотов
Может просто для второго ордера зависти такие же переменные только с префиксом 1?
Ticket1=OrderTicket(); // Номер выбранн. орд.
Tip1 =OrderType(); // Тип выбранного орд.
Price1 =OrderOpenPrice(); // Цена выбранн. орд.
SL1 =OrderStopLoss(); // SL выбранного орд.
TP1 =OrderTakeProfit(); // TP выбранного орд.
Lot1 =OrderLots(); // Количество лотов
}
}
ERR_LONGS_NOT_ALLOWED 4110 Длинные позиции не разрешены. Необходимо проверить свойства эксперта.
ERR_SHORTS_NOT_ALLOWED 4111 Короткие позиции не разрешены. Необходимо проверить свойства эксперта.
что значит длинные и короткие позиции, это как? как они выгледят?
Примерно верно мыслите.
Это в подавляющем большинстве своём переменная типа bool.
А она может иметь только два значения:
true (истина) и false (ложь)
Таким образом, если флаг установлен (значение true), то значит ордер есть, если флаг сброшен (значение false), то ордера нет.
Совершенно необязательно чтобы значения true и false говорили вам о наличии/отсутствии.
Иногда значение false говорит о наличии какого-либо условия, а true - об его отсутствии.
Всё зависит от логики программы и тех критериев, которые проверяет программист.
В любом случае, если вы сами эти флаги устанавливаете, вы можете сами и назначить какое именно значение флага (истина или ложь)
будут соответствовать тому или иному состоянию данных.
В то же время, есть стандартные функции, которые возвращают вам true или false в зависимости от результата исполнения данной функции.
Эти значения вы можете посмотреть в справочнике по данной функции.
что значит длинные и короткие позиции, это как? как они выгледят?
длинные = Long = Buy
короткие =Short = Sell
спасибо
Будьте добры, подскажите к кому обратится.Очень нужен скрипт закрывающий ордер только после закрытия бара выше, или ниже
указанного уровня, естественно должна быть настройка tf.
. А ежели таков сущетсвует, дайте ссылку. Заранее благодарен
у меня ордера на покупку и продажу открывают по одной цене чуть ли не по 50-100 позиций,
как сделать чтобы у меня открывался только один ордер,если я не ошибаюсь то OrdersTotal()
и если это так, то как его использовать? и где его ставить? а то я чувствую без этой функции целую алгебру надо вбивать
у меня ордера на покупку и продажу открывают по одной цене чуть ли не по 50-100 позиций,
как сделать чтобы у меня открывался только один ордер,если я не ошибаюсь то OrdersTotal()
и если это так, то как его использовать? и где его ставить? а то я чувствую без этой функции целую алгебру надо вбивать
Так надо было свой код приложить
у меня ордера на покупку и продажу открывают по одной цене чуть ли не по 50-100 позиций,
как сделать чтобы у меня открывался только один ордер,если я не ошибаюсь то OrdersTotal()
и если это так, то как его использовать? и где его ставить? а то я чувствую без этой функции целую алгебру надо вбивать
OrderSend() срабатывает при каждом тике (я так понимаю). Чтобы снять проблему об'являеш переменную перед функцией start, например int Н=0.
Дальше код:
..........
if ( Н==0)
{
OrderSend(бла-бла-бла);
}
H=1;
И не надо алгебры. А OrdersTotal() для ограничения лучше не использовать.