//+----------------------------------------------------------------------------+ //| Возвращает номер бара открытия последней позиции или -1. | //| Параметры: | //| sym - наименование инструмента ("" - текущий символ) | //| tf - таймфрейм ( 0 - текущий таймфрейм) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfBarOpenLastPos(string sym="", int tf=0, int op=-1, int mn=-1) { datetime oot; 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) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (oot<OrderOpenTime()) oot=OrderOpenTime(); } } } } } } return(iBarShift(sym, tf, oot, True)); }
GetLastError() возвращает 0 во время открытия ордера и ордер не открываеться. В справке "ERR_NO_ERROR - 0 - Нет ошибки". Может я чего недопонимаю, но при "Нет ошибки" ордер должен бы открываться. Обьясните что не так!!!
почему совок покупает и не закрывает, при комиляции ошибок нет
Или сделай ticket статической или вынеси определение за пределы старта.
...
int init()
{
count=Bars;
return(0);
}
...
int start()
{
if(OrdersTotal()==0 && NumberOfBarOpenLastPos()!=0 && count<Bars )
{
//открытие ордеров
}
...
//+----------------------------------------------------------------------------+
//| Возвращает номер бара открытия последней позиции или -1. |
//| Параметры: |
//| sym - наименование инструмента ("" - текущий символ) |
//| tf - таймфрейм ( 0 - текущий таймфрейм) |
//| op - операция (-1 - любая позиция) |
//| mn - MagicNumber (-1 - любой магик) |
//+----------------------------------------------------------------------------+
int NumberOfBarOpenLastPos(string sym="", int tf=0, int op=-1, int mn=-1) {
datetime oot;
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) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (oot<OrderOpenTime()) oot=OrderOpenTime();
}
}
}
}
}
}
return(iBarShift(sym, tf, oot, True));
}
Да, действительно. Бывает так, что этот прием
NumberOfBarOpenLastPos()!=0 не срабатывает.
Причем только тогда, когда советник работает по ВСЕМ ТИКАМ.
а вот в режиме по ЦЕНАМ ОТКРЫТИЯ эта функция в таком варианте работает вполне нормально !
Не знаю почему так.
Попробуйте вывести в коммент эту функцию и прямо на графике отследить её работу.Пока так.
Может специалисты подскажут вам лучший вариант проверки ?
Пож. подскажите, что означает запись в журнале:
Красный кружок и
2009.04.23 11:03:41 Old tick GBPJPYFXF60 142.58000/142.63000
(позиция не открылась)
Пож. подскажите, что означает запись в журнале:
Красный кружок и
2009.04.23 11:03:41 Old tick GBPJPYFXF60 142.58000/142.63000
(позиция не открылась)
RefreshRates(); перед открытием ордера поможет
RefreshRates(); перед открытием ордера поможет
Ну точно. Это же реквоты были.
Благодарю.
Ну точно. Это же реквоты были.
Это не реквоты.
RefreshRates();
ticket = OrderSend(Symbol(),OP_BUY,GetLots(100),Ask,maxSlippage,0,0,"Long",Magic,0,Green);
if (NeedScreenShot) WindowScreenShot(Symbol() + Period() + "_" + Hour() + Minute() + "_.gif",1024,768);
if (NeedAlert) Alert(Symbol() + " " + Period() + ": Going Long");
if (ticket > 0) break;
lasterror = GetLastError();
if ((lasterror == 0) || (lasterror == 2) || (lasterror == 4) || (lasterror == 6) || (lasterror == 8) || (lasterror == 9) || (lasterror == 64) || (lasterror == 128) || (lasterror == 132) || (lasterror == 133) || (lasterror == 137) || (lasterror == 139) || (lasterror == 141) || (lasterror == 146))
{
Sleep(10);
кружок красный 2009.04.23 14:08:08 Old tick GBPJPYFXF30 142.95000/143.00999
Всеравно не покупает, десять запросов подряд делает на сервер по одной и тойже цене, и все красные кружки, может где ище ошибка,
Помогите пож. или может насервере отключена авт. торговля ?? Forex.com непойму .Вверху код, может что добавить.