Есть функция проверки: если есть сигнал на Бай (b=1)то запускается эта функция. и если последний ордер Бай был закрыт по стоплоссу, т о покупка отменяется. (b=0), для селл ткакя же проверка. Вот код:
void Check_History()
{
int cnt;
for(cnt=OrdersHistoryTotal();cnt>0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY);
{if(OrderMagicNumber()== mag &&
OrderSymbol()==Symbol())
{ if (OrderType() == OP_BUY && OrderClosePrice()<=OrderStopLoss()) {b=0; break;}
if (OrderType() == OP_SELL && OrderClosePrice()>=OrderStopLoss()) {s=0; break;}
if (OrderType() == OP_BUY && OrderClosePrice()>OrderStopLoss()) break;
if (OrderType() == OP_SELL && OrderClosePrice()<OrderStopLoss()) break;
}
}
}
}
Так вот если полседний Бай был закрыт по стоплоссу и селл также был закрыт по стоплоссу, то вылазит ошибка 4105 (Ни один ордер не выбран.) Почему ?
Как этого избежать ?
исправил OrdersHistoryTotal() на OrdersHistoryTotal()-1
Так не помогло ...
Можно выложить правильный код ?
исправил OrdersHistoryTotal() на OrdersHistoryTotal()-1
Так не помогло ...
Можно выложить правильный код ?
Чет настроение седня .... В логике Вашей не разбирался и вообще менять внешние переменные внутри функций - плохой стиль: это источник ошибок.
Пробуйте, написал на скорую руку :
bool IsLastOpenSignalValid(string SYMBL, int ordT=OP_BUY, int MGCK=0) { if((ordT!=OP_BUY)||(ordT!=OP_SELL)) return(false); for(int cnt=OrdersHistoryTotal()-1;cnt>=0;cnt--) { if(!OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY)) break; if( (((MGCK!=0))&&(OrderMagicNumber()!= MGCK)) || (OrderSymbol()!=SYMBL) ) continue; if(OrderType()!=ordT) continue; double ordCls = NormalizeDouble(OrderClosePrice(),Digits); double ordStp = NormalizeDouble(OrderStopLoss(), Digits); switch(ordT) { case OP_BUY: if(ordCls<=ordStp) return(false); return(true); case OP_SELL: if(ordCls>=ordStp) return(false); return(true); default: return(false); // If Wrong Opder Type } } return(true);// If OrderType is not Found }//bool IsLastOpenSignalValid(string SYMBL, int ordT=OP_BUY, int MGCK=0)
Не тестировал - проверяйте.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть функция проверки: если есть сигнал на Бай (b=1)то запускается эта функция. и если последний ордер Бай был закрыт по стоплоссу, т о покупка отменяется. (b=0), для селл ткакя же проверка. Вот код:
void Check_History()
{
int cnt;
for(cnt=OrdersHistoryTotal();cnt>0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY);
{if(OrderMagicNumber()== mag &&
OrderSymbol()==Symbol())
{ if (OrderType() == OP_BUY && OrderClosePrice()<=OrderStopLoss()) {b=0; break;}
if (OrderType() == OP_SELL && OrderClosePrice()>=OrderStopLoss()) {s=0; break;}
if (OrderType() == OP_BUY && OrderClosePrice()>OrderStopLoss()) break;
if (OrderType() == OP_SELL && OrderClosePrice()<OrderStopLoss()) break;
}
}
}
}
Так вот если полседний Бай был закрыт по стоплоссу и селл также был закрыт по стоплоссу, то вылазит ошибка 4105 (Ни один ордер не выбран.) Почему ?
Как этого избежать ?