Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 887
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
сделай void start() и ошибки не будет
Спасибо! Ошибка исчезла, но позиция все равно не закрывается.
Недостаточно кода чтобы точно сказать в чем причина
Фрагмент:
void CritCloseBuy()
{
if (((Yellow_0-Red_0)<(Yellow_1-Red_1) && ((MA_0<MA_1)&&(MA_1>MA_2))) || ((Yellow_0-Red_0)>(Yellow_1-Red_1) && ((MB_0<MB_1)&&(MB_1>MB_2))))
while(true)
{
ord_close=OrderClose(OrderTicket(),0.1,MarketInfo(OrderSymbol(),MODE_BID),0,Red);
if (ord_close = false)
{
Comment("Закрытие позиции БАЙ завершилось с ошибкой #",GetLastError()); //Сообщение об ошибке
break;
}
else
{
Ord=0;
break;
}
}
Может причина в открытии:
void CritOpen()
{
if (///условие открытия///)
while(true)
{
ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,0,0,0,NULL,10011,0,clrNONE); //открываем ордер БАЙ, МАГИК 10011
if(ticket<=0)
{
Comment("Открытие позиции БАЙ-10011 завершилось с ошибкой #",GetLastError());
break;
}
else
{
Comment("Открыта позиция БАЙ-10011 лотом 0.1,цена", Ask);
Ord=(Ord+1);
break;
}
}
Фрагмент:
перед ord_close=OrderClose(OrderTicket(),0.1,MarketInfo(OrderSymbol(),MODE_BID),0,Red);
неплохо бы ордер-то выбрать функцией OrderSelect(). А смысла в таком построении цикла вокруг функции закрытия вообще не вижу...
перед ord_close=OrderClose(OrderTicket(),0.1,MarketInfo(OrderSymbol(),MODE_BID),0,Red);
неплохо бы ордер-то выбрать функцией OrderSelect().
так он у меня единственный. Но впрочем сначала так и было. Это я уже начал искать причину методом тыка. И я в цикле непойму смысла.
Просто шпарю по аналогии: раз открыл с циклом, значит и закрыть должен...
У Игоря Кима наше такой пример:
void start() {
ManagePositions();
}
//+----------------------------------------------------------------------------+
//| Закрытие позиций по рыночной цене |
//| Параметры: |
//| sym - наименование инструмента ("" - текущий символ) |
//| op - операция (-1 - любая позиция) |
//| mn - MagicNumber (-1 - любой магик) |
//+----------------------------------------------------------------------------+
void ClosePositions(string sym="", int op=-1, int mn=-1) {
int i, k=OrdersTotal();
if (sym=="") sym=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sym && (op<0 || OrderType()==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
if (OrderType()==OP_BUY) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy);
}
if (OrderType()==OP_SELL) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell);
}
}
}
}
}
}
Но компилятор требует проверки возвращаемого значения OrderClose
У Игоря Кима наше такой пример:
Но компилятор требует проверки возвращаемого значения OrderClose
Ну так делай как в примере - сначала выбор, а потом уже закрытие. Единственный или миллион ордеров, не имеет значения, сначала каждый выбрать надо.
А проверку организовать совсем просто if(!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell)) Print("Ошибка закрытия №", GetLastError());
У Игоря Кима наше такой пример:
...
Но компилятор требует проверки возвращаемого значения OrderClose
Ну так делай как в примере - сначала выбор, а потом уже закрытие. Единственный или миллион ордеров, не имеет значения, сначала каждый выбрать надо.
А проверку организовать совсем просто if(!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell)) Print("Ошибка закрытия №", GetLastError());
Сделал так: if (!OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red))
{
Comment("Закрытие позиции БАЙ завершилось с ошибкой #",GetLastError());
break;
}
else
{
Ord=0;
break;
}
Продолжает требовать "return value should be checked .
Сделал так:
ord_close=OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red);
if (ord_close = false)
{
Comment("Закрытие позиции БАЙ завершилось с ошибкой #",GetLastError()); //Сообщение об ошибке
break;
}
else
{
Ord=0;
break;
}
Молчит. Но и в том, и в другом случае не закрывает позицию
ЗЫ: мне кажется, ошибка в определении условий закрытия и открытия поз
В посте выше приведен пример условия закрытия. Что там может быть неправильно?
Молчит. Но и в том, и в другом случае не закрывает позицию
ЗЫ: мне кажется, ошибка в определении условий закрытия и открытия поз
В посте выше приведен пример условия закрытия. Что там может быть неправильно?
Ну если молча, без ошибок, не закрывает, значит условие для закрытия не подходит. Нужно переосмыслить и переписать это самое условие.
Тут скобки как-то не так расставлены:
if (((Yellow_0-Red_0)<(Yellow_1-Red_1) && ((MA_0<MA_1)&&(MA_1>MA_2))) || ((Yellow_0-Red_0)>(Yellow_1-Red_1) && ((MB_0<MB_1)&&(MB_1>MB_2))))
А если вот так?
if (((Yellow_0-Red_0<Yellow_1-Red_1) && (MA_0<MA_1 && MA_1>MA_2)) || ((Yellow_0-Red_0>Yellow_1-Red_1) && (MB_0<MB_1 && MB_1>MB_2)))