Есть полезная для тебя функция https://www.mql5.com/ru/forum/107476/page20#79398 попробуй с ее помощью.
lucka88:
Есть полезная для тебя функция https://www.mql5.com/ru/forum/107476/page20#79398 попробуй с ее помощью.
Есть полезная для тебя функция https://www.mql5.com/ru/forum/107476/page20#79398 попробуй с ее помощью.
да вот нашел ее, попытался переделать под свои нужды, получается полная лажа. Советник можно сказать перестает торговать. Помогите нубу. Вот текст совы с применением это функции. Может у меня слишкоммного ограничений?
extern double Lots = 1; extern int Slippage = 5; extern string comment = "WT BOT"; extern int Magic = 123; extern int startHour =10; extern int endHour =18; extern int tf_filtr = 60; extern int takeprofit = 10; extern int stoploss = 5; extern string A2 = "--- Параметры индикатора ---"; extern int T3Period = 8; extern int T3Price = PRICE_CLOSE; extern double b = 0.618; extern string TimeFrame = "current time frame"; extern int BarCount = 1500; //----- Параметры индикаторов ----- extern string A = "--- СИГНАЛЫ ---"; extern bool ByBar = true; //Для побарового режима. При открытии свечи. Иначе - на каждом тике. extern int SignalBar = 1; //Бар, на котором проверяется сигнал индикатора double Sig1, Sig2, SL, TP; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { if (Digits == 3 || Digits == 5) { takeprofit *= 10; stoploss *= 10; Slippage *= 10; } return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { // индикатор в осциллографе Sig1 = NormalizeDouble(iCustom(Symbol(), 0, "BB_MACD_v1.01", 0, 1), Digits); //лайм Sig2 = NormalizeDouble(iCustom(Symbol(), 0, "BB_MACD_v1.01", 1, 1), Digits); //магнета int Sig = Signal(); if((Sig == 1 && High[1] > High[2])&&(Sig1 != EMPTY_VALUE && Sig2 == EMPTY_VALUE) && (CountSell() > 0)) //лайм и есть ордера на продажу. то закрываем { for (int i = OrdersTotal ()-1; i >=0; i--) { if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) { if (OrderMagicNumber () == Magic && OrderType() == OP_SELL ) OrderClose (OrderTicket(), OrderLots (), Ask, Slippage, Black); } } } if((Sig == -1 && Low[1] < Low[2])&&( Sig1 == EMPTY_VALUE && Sig2 != EMPTY_VALUE) && (CountBuy() > 0))//магнета и есть ордера на покупку. то закрываем { for (i = OrdersTotal ()-1; i >=0; i--) { if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) { if (OrderMagicNumber () == Magic && OrderType() == OP_BUY ) OrderClose (OrderTicket(), OrderLots (), Bid, Slippage, Black); } } } if((Hour()>=startHour && Hour()<endHour)&&(Sig == 1 && High[1] > High[2])&&(Sig1 != EMPTY_VALUE && Sig2 == EMPTY_VALUE) &&(CountBuyHistory ()==0))//лайм и нет ордера на покупку. то открываем { SL = NormalizeDouble(Low[1]-stoploss*Point,Digits); TP = NormalizeDouble(High[1]+takeprofit*Point,Digits); OrderSend (Symbol(), OP_BUY, Lots, Ask, Slippage, SL, TP, comment, Magic, 0, Blue); } if((Hour()>=startHour && Hour()<endHour)&&(Sig == -1 && Low[1] < Low[2])&&( Sig1 == EMPTY_VALUE && Sig2 != EMPTY_VALUE)&&(CountSellHistory ()==0))//магнета и нет ордера на продажу. то открываем { SL = NormalizeDouble(High[1]+stoploss*Point,Digits); TP = NormalizeDouble(Low[1]-takeprofit*Point,Digits); OrderSend (Symbol(), OP_SELL, Lots, Bid, Slippage, SL, TP, comment, Magic, 0, Red); } return(0); } //+------------------------------------------------------------------+ int CountSell () { int count = 0; for (int trade = OrdersTotal()-1; trade >= 0; trade--) { OrderSelect (trade, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol () == Symbol()&& OrderMagicNumber () == Magic) { if (OrderType () == OP_SELL) count++; } } return(count); } //+------------------------------------------------------------------+ int CountBuy () { int count = 0; for (int trade = OrdersTotal()-1; trade >= 0; trade--) { OrderSelect (trade, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol () == Symbol()&& OrderMagicNumber () == Magic) { if (OrderType () == OP_BUY) count++; } } return(count); } //+------------------------------------------------------------------+ //T3_08 int Signal() { double L1,L2,L1a,L2a; L1 = iCustom(NULL,0,"T3_08_2Color",T3Period,T3Price,b ,TimeFrame,BarCount,0,SignalBar); L2 = iCustom(NULL,0,"T3_08_2Color",T3Period,T3Price,b ,TimeFrame,BarCount,1,SignalBar); L1a = iCustom(NULL,0,"T3_08_2Color",T3Period,T3Price,b ,TimeFrame,BarCount,0,SignalBar+1); L2a = iCustom(NULL,0,"T3_08_2Color",T3Period,T3Price,b ,TimeFrame,BarCount,1,SignalBar+1); if(L1 < L2 && L1a < L2a) return(+1); if(L1 > L2 && L1a > L2a ) return(-1); return(0); } //+------------------------------------------------------------------+ int CountSellHistory () { int i, k=OrdersHistoryTotal()-1, r=0; for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol () == Symbol()&& OrderMagicNumber () == Magic) { if (OrderType()==OP_SELL) { r++; } } } } return(r); } //+------------------------------------------------------------------+ int CountBuyHistory () { int i, k=OrdersHistoryTotal()-1, r=0; for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol () == Symbol()&& OrderMagicNumber () == Magic) { if (OrderType()==OP_BUY ) { r++; } } } } return(r); } //+------------------------------------------------------------------+
if((Hour()>=startHour && Hour()<endHour)&&(Sig == 1 && High[1] > High[2])&&(Sig1 != EMPTY_VALUE && Sig2 == EMPTY_VALUE) &&(CountBuyHistory ()==0))//лайм и нет ордера
как может быть там ордер если ты смотришь посчитанные исторические ордера бай. Положи функцию как есть без переделок и вместо CountBuyHistory ()==0 поставь
GetTypeLastClosePos(Symbol(),Magic)==OP_SELL Если позиция была Sell то открывать Buy можно. Для Sell аналогично.

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Доброго времени суток, господа, помогите довести до ума советник. Суть проблемы такова:надо добавить функцию, чтобы после закрытия сделки в buy, например, следующая могла быть только в Sell и наоборот после сделки в Sell мог открываться только Buy . Как это сделать подскажите, текст советника ниже: