Проверьте сколько раз у Вас вызывается конструкция
if( CheckOpen_Trades()==0 /*&& OrdersTotal()==0*/) { ////////////////////// TP1 SL1 /////////////////////////////// SetOrder(Symbol(), OP_BUYSTOP,LotSize,buyPrice,buyPrice-SL1*point(), buyPrice+TP1*point(),"_Buy_1",MagicNumber,exp); SetOrder(Symbol(), OP_BUYSTOP,LotSize,buyPrice,buyPrice-SL2*point(), buyPrice+TP2*point(),"_Buy_2",MagicNumber,exp); }
вызывается на каждом тике но ордера должны открытся когда их вообще нет...если просто вставить OrdersTotal()==0 все работает как надо
В том коде который Вы привели явная ошибка:
Вы проверяете ордера на OP_SELLSTOP а ордера выставляете OP_BUYSTOP

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Голову уже сломал, не могу понять в чем проблема условие такое
if( CheckOpen_Trades()==0 /*&& OrdersTotal()==0*/)
{
////////////////////// TP1 SL1 ///////////////////////////////
SetOrder(Symbol(), OP_BUYSTOP,LotSize,buyPrice,buyPrice-SL1*point(), buyPrice+TP1*point(),"_Buy_1",MagicNumber,exp);
SetOrder(Symbol(), OP_BUYSTOP,LotSize,buyPrice,buyPrice-SL2*point(), buyPrice+TP2*point(),"_Buy_2",MagicNumber,exp);
}
Функция
int CheckOpen_Trades()
{
int OpenTrades = 0;
int total = OrdersTotal();
for (int i = 0; i < total; i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber/*&& OrderType() == Mode*/)
if (OrderType() <= OP_SELLSTOP) OpenTrades++;
}
}
return (OpenTrades);
}
если нет выставленных ордеров и открытых поз то должны выставится два ордера но они ВЫСТАВЛЯЮТСЯ на все средства, куча ордеров ...
Если раскоментировать OrdersTotal()==0 тогда проблем никаких нет ...Причем самое интересное что функция посчета позиций и ордеров возвращает 0 (проверял через Print)..
Но не смотря на это выставляется куча ордеров...В чем тут загвоздка??