analitik8888 1 Share Posted February 11, 2014 Доброго времени суток! С февраля начал изучать MQL и застопорился на одном советнике... Торгует по линиям индикатора Bands. Если цена около нижней линии - покупаем, около верхней - продаём. Закрываем ордера, если цена достигла средней. ошибки: Не открываются ордера на BUY и закрытие ордеров идёт на более поздних барах. Как это можно исправить? int start() { sr =iCustom("GBPJPY", 1,"Bands",BandsPeriod,BandsShift,BandsDeviations,0,0); max =iCustom("GBPJPY", 1,"Bands",BandsPeriod,BandsShift,BandsDeviations,1,0); min =iCustom("GBPJPY", 1,"Bands",BandsPeriod,BandsShift,BandsDeviations,2,0); if (MathAbs(min-Ask)<0.005 && countb() == 0) OrderSend("GBPJPY",OP_BUY,lots,Ask,prosk,0,0,NULL,magic,0); if (MathAbs(Bid-max)<0.005 && counts() == 0) OrderSend("GBPJPY",OP_SELL,lots,Bid,prosk,0,0,NULL,magic,0); if (MathAbs(Bid-sr)<0.01 && countb() !=0) deleteb(); if (MathAbs(Ask-sr)<0.01 && counts() !=0) deletes(); return(0); } int countb () { int count = 0; for (int trade = OrdersTotal()-1; trade>=0; trade--) { OrderSelect(trade,SELECT_BY_POS,MODE_TRADES); if (OrderSymbol() == "GBPJPY" && OrderMagicNumber() == magic && OrderType()== OP_BUY ) count++; } return(count); } void deleteb() { for (int trade = OrdersTotal()-1;trade>=0;trade--) { OrderSelect(trade,SELECT_BY_POS,MODE_TRADES); if (OrderSymbol() == "GBPJPY" && OrderMagicNumber() == magic && OrderType()== OP_BUY ) OrderClose(OrderTicket(),lots, Bid,prosk); } } Функции counts(), countb() считают количество открытых ордеров по валютной паре на SELL и BUY соответственно. deletes() и deleteb() закрывают. Link to post Share on other sites
AntFX 6,474 Share Posted February 11, 2014 Скорее всего вы просто не учитываете, что график, который вы видите на экране, это не тот график, по которому открываются ордера на Бай и закрываются ордера на Селл. Это тот график, по которому открываются ордера на Селл и закрываются ордера на Бай. От этого и разница. А поскольку период самый маленький М1, да и пара с не маленькими спредами, то и разница между графиками выходит существенная. 1 Link to post Share on other sites
analitik8888 1 Author Share Posted February 14, 2014 Здравствуйте! Делаю так, чтобы обрабатывались только тики, время прихода которых только с 11:00 до 21:00. if ((TimeHour(TimeCurrent())>10) && (TimeHour(TimeCurrent()<22))) { ... } else { ... } Просто проверил, чтобы час последнего известного времени попадал в соответствующие границы, но почему-то в тело ифа и в случай иначе вообще не заходит. Может быть что-то забыл учесть? Благодарю за внимание. Link to post Share on other sites
analitik8888 1 Author Share Posted February 14, 2014 Скорее всего вы просто не учитываете, что график, который вы видите на экране, это не тот график, по которому открываются ордера на Бай и закрываются ордера на Селл. Это тот график, по которому открываются ордера на Селл и закрываются ордера на Бай. От этого и разница. А поскольку период самый маленький М1, да и пара с не маленькими спредами, то и разница между графиками выходит существенная. Да, точно) Совсем про спред забыл) Спасибо) Link to post Share on other sites
analitik8888 1 Author Share Posted February 14, 2014 ой... ошибку нашёл) Link to post Share on other sites
Recommended Posts