Спасибо за вопрос, только хотел задать такой же. Будем вместе надеяться на скорый ответ знатоков! :-))
//================================================================================================ Анализ ордеров ==== for (i=1; i<=OrdersTotal(); i++) // По всем ордерам терминала { if((OrderSelect(i-1, SELECT_BY_POS)==true) && (OrderSymbol()==Symbol())) // Если есть следующий и наша вал.пара { Kol++; Mas_Ord_Tek[0][0] = Kol; //--------------------------------------------------------------------------- Формирование нового массива ордеров ---- Mas_Ord_Tek[Kol][1] = OrderOpenPrice() ; Mas_Ord_Tek[Kol][2] = OrderStopLoss() ; Mas_Ord_Tek[Kol][3] = OrderTakeProfit(); Mas_Ord_Tek[Kol][4] = OrderTicket() ; Mas_Ord_Tek[Kol][5] = OrderLots() ; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tip_Ord = OrderType(); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - if ( Tip_Ord == OP_BUY ) { Kol_B++; Mas_Ord_Tek[Kol][6]=1; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2 - - if ( Tip_Ord == OP_SELL ) { Kol_S++; Mas_Ord_Tek[Kol][6]=2; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3 - - if ( Tip_Ord == OP_BUYLIMIT ) { Kol_BL++; Mas_Ord_Tek[Kol][6]=3; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 4 - - if ( Tip_Ord == OP_SELLLIMIT ) { Kol_SL++; Mas_Ord_Tek[Kol][6]=4; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - - if ( Tip_Ord == OP_BUYSTOP ) { Kol_BS++; Mas_Ord_Tek[Kol][6]=5; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6 - - if ( Tip_Ord == OP_SELLSTOP ) { Kol_SS++; Mas_Ord_Tek[Kol][6]=6; } //-------------------------------------------------------------------------------------------------------------------- } } //====================================================================================================================
В дальнейшем, анализируя массив, я точно знаю сколько у меня ордеров и каких по данной вал. паре.
Да ребята... Чувствую себя полным идиотом. Придется анализировать массив...
А неужели в этом чудо-редакторе не предусмотренно более простого способа, чтобы разделить инструменты?
Все-таки странный язык придумали: для пройстеших и востребованных по умолчанию действий надо писать листинги километровые, а документация более чем скромная. Сложность языка явно требует наличия примеров, если, конечно, язык для трейдеров, а не для профессиональных программистов.
Спасибо всем за ответы
А неужели в этом чудо-редакторе не предусмотренно более простого способа, чтобы разделить инструменты?
Все-таки странный язык придумали: для пройстеших и востребованных по умолчанию действий надо писать листинги километровые, а документация более чем скромная. Сложность языка явно требует наличия примеров, если, конечно, язык для трейдеров, а не для профессиональных программистов.
Спасибо всем за ответы
Если ты хочешь что попроще, для разового употребления, то достаточно анализировать ордера, принадлежащие валютной паре.
if ( OrderSymbol()==Symbol() ) { ... }
To: Slawa
По моему в этой ссылке разговор идет как раз об обратном, или
total=OrdersTotal();
if(total<n), где n=количество пар в работе, и далее эта программка?
To: SK
А где все же раскладывапются валютные пары в вашем коде? (Простите уж новичка)
По моему в этой ссылке разговор идет как раз об обратном, или
total=OrdersTotal();
if(total<n), где n=количество пар в работе, и далее эта программка?
To: SK
А где все же раскладывапются валютные пары в вашем коде? (Простите уж новичка)
Если ты хочешь что попроще, для разового употребления, то достаточно анализировать ордера, принадлежащие валютной паре.
if ( OrderSymbol()==Symbol() ) { ... }
Меня интересует как изменится этот самый стандартный
total=OrdersTotal();
if(total<1)...
Этих самых total надо < 1 для конкретной пары выставить, когда ещё ордера нет открытого,
как тогда OrderSymbol() применять?!
Ответ кроется в самом твоём вопросе.
Если ты хочешь работать только среди "своих" ордеров, т.е. принадлежащих валютной паре, то сначала надо их посчитать. Для этого необходимо пройтись по терминалу и с помощью анализа OrderSymbol()==Symbol() выбрать "свои". Их количество и будет total для текущего окна. Чтоб не путаться, я бы открыл новую переменную, например, total_win , т.е. количество ордеров, принадлежащих окну (вал. паре).
В тело цикла "пройдёмся по терминалу" можно вставить, например, такой фрагмент:
Если ты хочешь работать только среди "своих" ордеров, т.е. принадлежащих валютной паре, то сначала надо их посчитать. Для этого необходимо пройтись по терминалу и с помощью анализа OrderSymbol()==Symbol() выбрать "свои". Их количество и будет total для текущего окна. Чтоб не путаться, я бы открыл новую переменную, например, total_win , т.е. количество ордеров, принадлежащих окну (вал. паре).
В тело цикла "пройдёмся по терминалу" можно вставить, например, такой фрагмент:
total_win=0; ... //Начало цикла по всем ордерам if ( OrderSymbol()==Symbol() ) { total_win++; } //Конец цикла по всем ордерам
После такого анализа у тебя будет в распоряжении 2 переменных:
total - общее количество ордеров;
total_win - количество ордеров по вал.паре.
А дальше уже в зависимости от дальнейших целей.
Еще проще, для каждого советника и типа ордера введи свой Магический номер, а потом отлавливай их в цикле
total_win=0; ... //Начало цикла по всем ордерам if ( OrderSymbol()==Symbol() ) { total_win++; } //Конец цикла по всем ордерам
После такого анализа у тебя будет в распоряжении 2 переменных:
total - общее количество ордеров;
total_win - количество ордеров по вал.паре.
Всегде завидовал тому, кто четко может поставить задачу и упростить её. Я вот три дня сижу, чего только не удумал. А тут две строчки кода и всё решено! Спасибо!!!
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Т.е. чтобы OrdersTotal() касалось только того инструмента к которому привязан советник.
total=OrdersTotal();
if(total<1)
{
// нет ни одного открытого ордера
if(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
// проверяем на возможность встать в длинную позицию (BUY)
if(Ask<=Support)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-Stoploss*Point,Ask+TakeProfit*Point,
"Sergey",16384,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
return(0);
}
return(0);
}