Спасибо за вопрос, только хотел задать такой же. Будем вместе надеяться на скорый ответ знатоков! :-))
//================================================================================================ Анализ ордеров ====
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);
}