Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А что такое SetTrace?
Опаньки :) Щас буду рекламу делать, внимание - http://forexsystems.ru/phpBB/viewtopic.php?t=694&start=45
Можно ли изменить число хэндлов в системных установках (W'XP) и как?
Как правильно:
1.
for(int nCnt = 0; nCnt < OrdersTotal(); nCnt++) { OrderSelect(nCnt, SELECT_BY_POS, MODE_TRADES); if(OrderMagicNumber() == nMagic) { if(CurTime() - OrderOpenTime() > (nHoursToHold - 1) * 60 * 60) { if(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua); else if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, nSlip, OrangeRed); } } }2.
for(int nCnt = OrdersTotal() - 1; nCnt >= 0; nCnt--) { OrderSelect(nCnt, SELECT_BY_POS, MODE_TRADES); if(OrderMagicNumber() == nMagic) { if(CurTime() - OrderOpenTime() > (nHoursToHold - 1) * 60 * 60) { if(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua); else if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, nSlip, OrangeRed); } } }3. Безразлично.
4. Надо ставить return и следующий ордер обрабатывать в следующем тике
5. Надо как-то еще.
Поясню. Пусть мы имеем два открытых ордера, оба надо закрыть. Цикл
Закроет нулевой ордер, после чего первый станет нулевым. Потом он попытается закрыть первый ордер - и выдаст ошибку. Так?
Я не думаю, что все ошибки обсуждаемого в этой ветке эксперта связаны с этим вопросом, например common error тут вроде ни при чем. Но если я прав, то может быть, это объясняет а) order locked и ему подобные, и б) то, что нужно несколько экспертов, чтобы появились ошибки.
Можно ли изменить число хэндлов в системных установках (W'XP) и как?
туда лучше не соваться. если программе не хватает хэндлов, то эта программа написана с ошибками. в остальных случаях хэндлов хватает с огромным запасом.
for(int nCnt = 0; nCnt < OrdersTotal(); nCnt++)
на
for(int nCnt = OrdersTotal() - 1; nCnt >= 0; nCnt--)
я перешел :) от ошибки 139 к 138 и 4109
(requote, Not initialized string in array)
Последнее вообще без комментариев...
При 10 экспертах на минутном интервале, 30 секунд на каждый... Неправильно, так жить нельзя.
При 10 экспертах на минутном интервале, 30 секунд на каждый... Неправильно, так жить нельзя.
Так и надо жить, а то что ты проделываешь - это испытание прочности железа.
1. Циклы исправлены.
2. Магик намбер привавляется ко времени начала бара. Это дает, если я не ошибся, задержку открытия. То есть, эксперт с мн 7 откроется через 7 секунд после начала бара. Это позволит избежать перегрузки сервера, процессора компа, конфликта с 2.5 секундным максимумом, если он еще где-то есть...
Но увы - ошибки остаются.
Правила прежние - открываем несколько окон, на любом таймфрейме (минутки, например) и ждем.
double dStopLoss; int nHoursToHold; datetime timePrev = 0; int nSlip = 5; double dLotSize = 0.1; int nMagic = 0; ////////////////// int init () { timePrev = 0; dStopLoss = 110 * Point; nHoursToHold = 1; if(Symbol() == "EURUSD") nMagic = 1; else if(Symbol() == "EURJPY") nMagic = 2; else if(Symbol() == "USDCHF") nMagic = 3; else if(Symbol() == "GBPUSD") nMagic = 4; else if(Symbol() == "GBPJPY") nMagic = 5; else if(Symbol() == "GBPCHF") nMagic = 6; else if(Symbol() == "USDJPY") nMagic = 7; else if(Symbol() == "AUDUSD") nMagic = 8; else if(Symbol() == "EURGBP") nMagic = 9; else if(Symbol() == "USDCAD") nMagic = 10; else if(Symbol() == "EURCHF") nMagic = 11; else if(Symbol() == "EURAUD") nMagic = 12; timePrev += nMagic; // Open nMagic seconds after the new bar return(0); } // ------ int deinit() { return(0); } // ------ int start() { if(Bars < 5) return(0); // The previous bar just closed bool bIsBarEnd = false; if(timePrev != Time[0] + nMagic) bIsBarEnd = true; timePrev = Time[0] + nMagic; if(!bIsBarEnd) return(0); // ------ int nSignal = GetSignal(); if(nSignal == OP_BUY) Buy(); else if(nSignal == OP_SELL) Sell(); for(int nCnt = OrdersTotal() - 1; nCnt >= 0; nCnt--) { OrderSelect(nCnt, SELECT_BY_POS, MODE_TRADES); if(OrderMagicNumber() == nMagic) { if(CurTime() - OrderOpenTime() > (nHoursToHold - 1) * 60 * 60) { if(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua); else if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, nSlip, OrangeRed); } } } return(0); } // ------ void Sell() { if(AccountFreeMargin() < 500) return; dLotSize = GetLotSize(); int nResult = OrderSend(Symbol(), OP_SELL, dLotSize, Bid, nSlip, Bid + dStopLoss, 0, "Friday", nMagic, 0, OrangeRed); if(nResult == -1) { int nError = GetLastError(); Alert(Symbol() + ", " + nError); } } // ------ void Buy() { if(AccountFreeMargin() < 500) return; dLotSize = GetLotSize(); int nResult = OrderSend(Symbol(), OP_BUY, dLotSize, Ask, nSlip, Ask - dStopLoss, 0, "Friday", nMagic, 0, Aqua); if(nResult == -1) { int nError = GetLastError(); Alert(Symbol() + ", " + nError); } } // ------ double GetLotSize() { double dLot = 0.1; return(dLot); } // ------ int GetSignal() { int nSignal; if(MathMod(Hour(), 2) == 0) nSignal = OP_BUY; else nSignal = OP_SELL; return(nSignal); } // ------