Iuliana Опубликовано 11 июля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 июля, 2015 Ea na vtarom uroke,u menea shtota ne paluceaetsea.Pamagite pojalusta... :(I nacinaiutsa ashibki'SL' - some operator expected Test2.mq4 136 8'}' - semicolon expected Test2.mq4 139 4'}' - unexpected end of program Test2.mq4 140 1'}' - unexpected end of program Test2.mq4 140 1 Изменено 12 июля, 2015 пользователем Iuliana Ссылка на сообщение Поделиться на другие сайты More sharing options...
Dron15 Опубликовано 11 июля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 июля, 2015 Если вот так стоп лос записать будет учитываться комиссия ? SL = NormalizeDouble ( Ask + (OrderCommission() + OrderSwap() + TrailingStop) * Point,Digits); учесть комиссию можно по-разному... :d , принципиально: если в формуле есть OrderCommission(), то значит она учитывается...А теперь серьёзно: OrderCommission() выдаёт результат в валюте счёта, Вы торгуете мало того, что другую валюту (возможно), так ещё и бабки учитываете как пункты! Если делать правильно, то надо переводить комиссию (в валюте депо) в пункты по торгуемой паре, а только потом пересчитывать СЛ.Мне раньше думалось, что это очевидно... так ещё и бабки учитываете как пункты! Если делать правильно, то надо переводить комиссию (в валюте депо) в пункты по торгуемой паре . Сказать просто для Вас а для меня сделать тяжело. Мы просто пока в разных категориях я первокласник а Вы профессор. Но я это вижу и понимаю что сов стоп не правильно ставит. Лично для меня не хватает примеров написанных , но я вышел из положения начал советники открытые смотреть и уже исправил ошибку 4110 и прикрепил визуализацию для средней цены , все работает, оказалось все очень просто. Может кому из новичков тоже поможет кода смилиона использую из инсты, более мение понимаю как он пишет. За советы спасибо. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Konstebl Опубликовано 12 июля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 июля, 2015 Спойлер Ea na vtarom uroke,u menea shtota ne paluceaetsea.Pamagite pojalusta... :(extern string comment ="Test 2";extern int Slippage =5;extern int BarCount =10; extern int Magic = 123;extern int HourStart = 10;extern int TakeProfit =30;extern int StopLoss =20;extern double Lots =0.1; double maxprice, minprice, SL, TP;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit(){ if(Digits == 3 || Digits == 5) { TakeProfit *= 10; StopLoss *= 10; Slippage *= 10; } return(INIT_SUCCEEDED);}//+------------------------------------------------------------------+double GetMinPrice(){ double dLow=1000000, dPrice; for(int i=1; i { dPrice = iLow(Symbol(),PERIOD_H1,i); if(dPrice dLow = dPrice; } return(dLow); }//+------------------------------------------------------------------+double GetMaxPrice(){ double dHigh=1000000, dPrice; for(int i=1; i { dPrice = iHigh(Symbol(),PERIOD_H1,i); if(dPrice > dHigh) dHigh = dPrice; } return(dHigh); }//+------------------------------------------------------------------+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);}//+------------------------------------------------------------------+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 CountBuyLimit(){ 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_BUYLIMIT) count++; } } return(count);}//+------------------------------------------------------------------+int CountSellLimit(){ 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_SELLLIMIT) count++; } } return(count); }//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick(){ minprice = NormalizeDouble(GetMinPrice(),Digits); maxprice = NormalizeDouble(GetMaxPrice(),Digits); if(HourStart == TimeHour(TimeCurrent()) && CountBuyLimit() == 0 && CountSellLimit() ==0) { SL= NormalizeDouble(minprice - StopLoss*Point,Digits); TP= NormalizeDouble(minprice + StopLoss*Point,Digits); OrderSend(Symbol(),OP_BUYLIMIT, Lots, minprice, Slippage,SL, TP, comment, Magic, 0,Blue ) SL= NormalizeDouble(maxprice + StopLoss*Point,Digits); TP= NormalizeDouble(maxprice - StopLoss*Point,Digits); OrderSend(Symbol(),OP_SELLLIMIT, Lots, maxprice, Slippage,SL, TP, comment, Magic, 0,Red ) }}//+----------------------------------------I nacinaiutsa ashibki'SL' - some operator expected Test2.mq4 136 8'}' - semicolon expected Test2.mq4 139 4'}' - unexpected end of program Test2.mq4 140 1'}' - unexpected end of program Test2.mq4 140 1 Функция double GetMaxPrice() написана маленечко неправильно.Надо dHigh=1000000 приравнять к 0.Где Вы видели котировки 1000000?Ошибка 140 (Разрешена только покупка).В тестере в разделе тестирование поставьте long & Short.И ; после OrderSend() у Вас нет. Изменено 12 июля, 2015 пользователем Pavel888 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 12 июля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 июля, 2015 Согласен с Konstebl кроме "ошибки 140" - нет там её... 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Iuliana Опубликовано 12 июля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 июля, 2015 5 warning(s) .Probavala v spravke iscati,nashla no ne da kantsa poneatna extern double Lots = 0.1;extern int TakeProfit = 50;extern int Step = 50;extern double Multiplier = 2;extern int Slippage =5;extern int Magic = 123;int ticket;double price, TP, lastlot;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit(){ if (Digits == 3 || Digits == 5) { TakeProfit*= 10; Step *= 10; Slippage *= 10; } return(INIT_SUCCEEDED);}//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason){}//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick(){ if (CountTrades() == 0) { double ima = iMA(Symbol(), PERIOD_H1, 14, 0, MODE_SMA, PRICE_CLOSE, 1); if(Ask > ima) { ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic, 0, Blue); if(ticket>0) { TP = NormalizeDouble(Ask+TakeProfit*Point,Digits); OrderModify(ticket, OrderOpenPrice(), 0, TP, 0); } } else if (Bid { ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage,0, 0, "", Magic, 0,Red); if(ticket > 0) { TP = NormalizeDouble(Bid-TakeProfit*Point,Digits); OrderModify(ticket, OrderOpenPrice(), 0 , TP,0 ); } } } else { int order_type = FindLastOrderType(); if (order_type == OP_BUY) { price = FindLastPrice(OP_BUY); if (Ask { lastlot = FindLastLots(OP_BUY); lastlot = NormalizeDouble(lastlot * Multiplier, 2); ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, Slippage, 0, 0, "", Magic, 0, Blue); if (ticket > 0) ModifyOrders(OP_BUY); } } else if(order_type == OP_SELL) { price = FindLastPrice(OP_SELL); if (Bid { lastlot = FindLastLots(OP_SELL); lastlot = NormalizeDouble(lastlot * Multiplier,2); ticket=OrderSend(Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, 0, "", Magic, 0, Blue); if (ticket > 0) ModifyOrders(OP_SELL); } } }}//+------------------------------------------------------------------+double FindLastLots(int otype){ double oldlots; int oldticket; ticket = 0; for(int i = OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber()== Magic && OrderType() == otype) { oldticket = OrderTicket(); if(oldticket > ticket) { oldlots = OrderLots(); ticket = oldticket; } } } } return(oldlots);}//+------------------------------------------------------------------+void ModifyOrders(int otype){ double avgprice = 0; double order_lots = 0; price = 0; for(int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber()==Magic && OrderType() == otype) { price += OrderOpenPrice() * OrderLots(); order_lots += OrderLots(); } } } avgprice = NormalizeDouble(price / order_lots,Digits); if (otype == OP_BUY) TP = NormalizeDouble(avgprice + TakeProfit*Point,Digits); if (otype == OP_SELL) TP = NormalizeDouble(avgprice - TakeProfit*Point,Digits); for (int i = OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber()==Magic && OrderType() == otype) { OrderModify(OrderTicket(), OrderOpenPrice(), 0, TP, 0); } } }}//+------------------------------------------------------------------+double FindLastPrice(int otype){ double oldopenprice; int oldticket; ticket = 0; for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype) { oldticket = OrderTicket(); if(oldticket > ticket) { oldopenprice = OrderOpenPrice(); ticket = oldticket; } } } } return(oldopenprice);}//+------------------------------------------------------------------+int FindLastOrderType(){ for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber()== Magic) return(OrderType()); } } return(-1);}//+------------------------------------------------------------------+int CountTrades(){ int count = 0; for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber()==Magic) count++; } } return(count);}//+------------------------------------------------------------------+return value of 'OrderModify' should be checked Test4.mq4 56 13return value of 'OrderModify' should be checked Test4.mq4 65 13possible use of uninitialized variable 'oldlots' Test4.mq4 120 11return value of 'OrderModify' should be checked Test4.mq4 152 17possible use of uninitialized variable 'oldopenprice' Test4.mq4 181 12Za raneee Spasibo! Изменено 13 июля, 2015 пользователем Iuliana Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 12 июля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 июля, 2015 Вопрос к программистамКак можно сделать автоматическую прогонку имеющихся сет файлов с сохранение отчета и графика в отдельную папку?Т.е. имеется набор сетов для форвард теста, но прогонять каждый вручную, чтобы "воочию" посмотреть на график занимает кучу времени. Как можно с помощью кода, прописанного в своем советнике, либо скриптом автоматизировать сей процесс? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Konstebl Опубликовано 13 июля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 июля, 2015 Спойлер 5 warning(s) .Provala v spravke iscati,nashla no ne da kantsa poneatna extern double Lots = 0.1;extern int TakeProfit = 50;extern int Step = 50;extern double Multiplier = 2;extern int Slippage =5;extern int Magic = 123;int ticket;double price, TP, lastlot;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit(){ if (Digits == 3 || Digits == 5) { TakeProfit*= 10; Step *= 10; Slippage *= 10; } return(INIT_SUCCEEDED);}//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason){}//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick(){ if (CountTrades() == 0) { double ima = iMA(Symbol(), PERIOD_H1, 14, 0, MODE_SMA, PRICE_CLOSE, 1); if(Ask > ima) { ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic, 0, Blue); if(ticket>0) { TP = NormalizeDouble(Ask+TakeProfit*Point,Digits); OrderModify(ticket, OrderOpenPrice(), 0, TP, 0); } } else if (Bid { ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage,0, 0, "", Magic, 0,Red); if(ticket > 0) { TP = NormalizeDouble(Bid-TakeProfit*Point,Digits); OrderModify(ticket, OrderOpenPrice(), 0 , TP,0 ); } } } else { int order_type = FindLastOrderType(); if (order_type == OP_BUY) { price = FindLastPrice(OP_BUY); if (Ask { lastlot = FindLastLots(OP_BUY); lastlot = NormalizeDouble(lastlot * Multiplier, 2); ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, Slippage, 0, 0, "", Magic, 0, Blue); if (ticket > 0) ModifyOrders(OP_BUY); } } else if(order_type == OP_SELL) { price = FindLastPrice(OP_SELL); if (Bid { lastlot = FindLastLots(OP_SELL); lastlot = NormalizeDouble(lastlot * Multiplier,2); ticket=OrderSend(Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, 0, "", Magic, 0, Blue); if (ticket > 0) ModifyOrders(OP_SELL); } } }}//+------------------------------------------------------------------+double FindLastLots(int otype){ double oldlots; int oldticket; ticket = 0; for(int i = OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber()== Magic && OrderType() == otype) { oldticket = OrderTicket(); if(oldticket > ticket) { oldlots = OrderLots(); ticket = oldticket; } } } } return(oldlots);}//+------------------------------------------------------------------+void ModifyOrders(int otype){ double avgprice = 0; double order_lots = 0; price = 0; for(int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber()==Magic && OrderType() == otype) { price += OrderOpenPrice() * OrderLots(); order_lots += OrderLots(); } } } avgprice = NormalizeDouble(price / order_lots,Digits); if (otype == OP_BUY) TP = NormalizeDouble(avgprice + TakeProfit*Point,Digits); if (otype == OP_SELL) TP = NormalizeDouble(avgprice - TakeProfit*Point,Digits); for (int i = OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber()==Magic && OrderType() == otype) { OrderModify(OrderTicket(), OrderOpenPrice(), 0, TP, 0); } } }}//+------------------------------------------------------------------+double FindLastPrice(int otype){ double oldopenprice; int oldticket; ticket = 0; for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype) { oldticket = OrderTicket(); if(oldticket > ticket) { oldopenprice = OrderOpenPrice(); ticket = oldticket; } } } } return(oldopenprice);}//+------------------------------------------------------------------+int FindLastOrderType(){ for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber()== Magic) return(OrderType()); } } return(-1);}//+------------------------------------------------------------------+int CountTrades(){ int count = 0; for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber()==Magic) count++; } } return(count);}//+------------------------------------------------------------------+return value of 'OrderModify' should be checked Test4.mq4 56 13return value of 'OrderModify' should be checked Test4.mq4 65 13possible use of uninitialized variable 'oldlots' Test4.mq4 120 11return value of 'OrderModify' should be checked Test4.mq4 152 17possible use of uninitialized variable 'oldopenprice' Test4.mq4 181 12Za raneee Spasibo! Поставьте например bool rez = и ошибки return value of 'OrderModify' should be checked исчезнут.С остальными пока не разобрался.Вечером. Изменено 13 июля, 2015 пользователем Pavel888 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Iuliana Опубликовано 13 июля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 июля, 2015 Esli ea pravilina panila to pri warning : return value of 'OrderSend' should be checked,po scoliku etot order bозвращает номер тикета.Nada napisati : ticket=OrderSend(...);.No kagda ea testiruiu poevleaetsa vot eto :OrderSend error 131.Spasibo!! Изменено 13 июля, 2015 пользователем Iuliana Ссылка на сообщение Поделиться на другие сайты More sharing options...
schurik_1 Опубликовано 13 июля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 июля, 2015 Ребята помогите с индикатором он должин определять по наклону машки тренд с дневного графика на дневки эта падла работает нормуль а вот на других тф нихт гууд :(( trend_moj.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Konstebl Опубликовано 14 июля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 июля, 2015 Esli ea pravilina panila to pri warning : return value of 'OrderSend' should be checked,po scoliku etot order bозвращает номер тикета.Nada napisati : ticket=OrderSend(...);.No kagda ea testiruiu poevleaetsa vot eto :OrderSend error 131.Spasibo!! Поправил :extern double Lots = 0.1;extern int TakeProfit = 50;extern int Step = 50;extern double Multiplier = 2;extern int Slippage =5;extern int Magic = 123;int ticket;double price, TP, lastlot;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit(){ if (Digits == 3 || Digits == 5) { TakeProfit*= 10; Step *= 10; Slippage *= 10; } return(INIT_SUCCEEDED);}//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason){}//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick(){ if (CountTrades() == 0) { double ima = iMA(Symbol(), PERIOD_H1, 14, 0, MODE_SMA, PRICE_CLOSE, 1); if(Ask > ima) {double ask = Ask; ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic, 0, Blue); if(ticket>0) { TP = NormalizeDouble(Ask+TakeProfit*Point,Digits); bool rez = OrderModify(ticket, ask, 0, TP, 0); } } else if (Bid { double bid = Bid; ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage,0, 0, "", Magic, 0,Red); if(ticket > 0) { TP = NormalizeDouble(Bid-TakeProfit*Point,Digits); bool rez = OrderModify(ticket, bid, 0 , TP,0 ); } } } else { int order_type = FindLastOrderType(); if (order_type == OP_BUY) { price = FindLastPrice(OP_BUY); if (Ask { lastlot = FindLastLots(OP_BUY); lastlot = NormalizeDouble(lastlot * Multiplier, 2); ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, Slippage, 0, 0, "", Magic, 0, Blue); if (ticket > 0) ModifyOrders(OP_BUY); } } else if(order_type == OP_SELL) { price = FindLastPrice(OP_SELL); if (Bid { lastlot = FindLastLots(OP_SELL); lastlot = NormalizeDouble(lastlot * Multiplier,2); ticket=OrderSend(Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, 0, "", Magic, 0, Blue); if (ticket > 0) ModifyOrders(OP_SELL); } } }}//+------------------------------------------------------------------+double FindLastLots(int otype){ double oldlots = 0; int oldticket = 0; ticket = 0; for(int i = OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber()== Magic && OrderType() == otype) { oldticket = OrderTicket(); if(oldticket > ticket) { oldlots = OrderLots(); ticket = oldticket; } } } } return(oldlots);}//+------------------------------------------------------------------+void ModifyOrders(int otype){ double avgprice = 0; double order_lots = 0; price = 0; for(int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber()==Magic && OrderType() == otype) { price += OrderOpenPrice() * OrderLots(); order_lots += OrderLots(); } } } avgprice = NormalizeDouble(price / order_lots,Digits); if (otype == OP_BUY) TP = NormalizeDouble(avgprice + TakeProfit*Point,Digits); if (otype == OP_SELL) TP = NormalizeDouble(avgprice - TakeProfit*Point,Digits); for (int i = OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber()==Magic && OrderType() == otype) { bool rez = OrderModify(OrderTicket(), OrderOpenPrice(), 0, TP, 0); } } }}//+------------------------------------------------------------------+double FindLastPrice(int otype){ double oldopenprice = 0; int oldticket; ticket = 0; for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype) { oldticket = OrderTicket(); if(oldticket > ticket) { oldopenprice = OrderOpenPrice(); ticket = oldticket; } } } } return(oldopenprice);}//+------------------------------------------------------------------+int FindLastOrderType(){ for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber()== Magic) return(OrderType()); } } return(-1);}//+------------------------------------------------------------------+int CountTrades(){ int count = 0; for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber()==Magic) count++; } } return(count);}//+------------------------------------------------------------------+ И ещё сделал кое-какие поправки.Ввёл две переменные ask и bid.Нужны они для того,что-бы заменить OrderOpenPrice().Потому что OrderOpenPrice() сначала нужно выбрать с помощью OrderSelect(). Изменено 14 июля, 2015 пользователем Konstebl 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Алексей7779000 Опубликовано 18 июля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 июля, 2015 Здраствуйте, есть индикатор рисующий переходные зоны "Transient_Zones" но он без исходника, нашёл идентичный с исходником "AG_TZX". Хочу его вставить в советник. Нужно чтоб он передавал ценовые значения не сформировавшейся зоны, Верхнее и нижнее, при чём индикатор может рисовать сразу несколько не сформировавшихся переходных зон. Нужно чтоб советник видел их все, в порядке появления, с верхними и нижними значениями ценового уровня. Как это сделать, в индикаторе нет ни каких буферов для iCostom() 1.JPG2.JPGAG_TZX.mq4 Изменено 18 июля, 2015 пользователем Алексей7779000 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 18 июля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 июля, 2015 Индикатор рисует графические объекты. Надо перебирать их по маске (общему названию), находить нужный объект по цвету и брать его значения цены (верхнее и нижнее) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Алексей7779000 Опубликовано 18 июля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 июля, 2015 Может кто нибудь сможет изменить код советника, добавив туда буфера с верхними и нижними границами несформировавшихся переходных зон. Причём зоны постоянно меняються, и их сразу может быть несколько, пока не знаю, работать от последней, или со всеми зонами. Суть стратегии советника: Вероятность того что не сформировавшаяся зона разрушиться, больше 90% . Мы ждём пока начнётся формироваться такая зона, когда она началась формироваться ждем отката от неё на"Step" пунктов, и ствим ТейкПрофит на эту зону. Идей много, можно ещё прикрутить сетку с мартингейлом. Всё упираеться в индикаор. Нужно именно изменить код индикатора, прикрепить туда буфера: один чтоб показывал, наличие того что зона началась формироваться, и два как минимум, которые показывали верхнюю и нижнюю ценовые граници, последней формирующийся зоны. Если работать именно от графических объектов, то советник не будет работать без визуализации, и его невозможно будет оптимизировать. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 18 июля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 июля, 2015 Если работать именно от графических объектов, то советник не будет работать без визуализации, и его невозможно будет оптимизировать.Ошибаетесь - будет работать в тестере. Вкрутить в индюк буфера гораздо сложнее, чем выкрутить индюшиную логику и вкрутить её непосредственно в сову. Работа большая, может найдётся энтузиаст... Ссылка на сообщение Поделиться на другие сайты More sharing options...
baton51reg Опубликовано 19 июля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 июля, 2015 Всем привет!!! Прошу помощи. Выполняя задание 4 го урока, встала такая проблема: при выполнении цикла перебора ордеров для подсчета их количества, весь процесс тестирования резко замедляется. Хотя в видео на уроках все циклы выполняются без затруднений. По моему это не нормально. Как от этого избавиться?Прошу прощения!!! Разобрался. Была ошибка в цикле. Вместо i-- было i++ . Изменено 19 июля, 2015 пользователем baton51reg Ссылка на сообщение Поделиться на другие сайты More sharing options...
remir Опубликовано 24 июля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 июля, 2015 Добрые люди, подскажите как вшить в советник такие функции как:1. включение и выключение советника по дате и времени (задается в настройках совы) - с зактырием всех сделок и (как опция) выключением терминала2. выключение советника и закрытие всех сделок по достижению позитивного или негативного значения (задается в настройках совы) equity.Спасибо за помощь Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sharovik Опубликовано 25 июля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 июля, 2015 Добрый день, может кто подсказать как сделать отсрочку ордера на определенное число баров после появления сигнала на вход ? допустим появился сигнал на вход а войти нужно через 10 свечей.? спасибо. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 25 июля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 июля, 2015 Здесь просто, после получения сигнала открытия:1. Вычисляем время входа datetime dtOpen = TimeCurrent() + 10 * _Period * 60;2. Вход по истечению времени: if (TimeCurrent() > dtOpen ) SendOrder(...); 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sharovik Опубликовано 25 июля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 июля, 2015 спасибо, решил для себя проще, просто сдвиг в индикаторе сделал 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
big13 Опубликовано 26 июля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 июля, 2015 Доброго времени суток!!!Не судите строго мой первый советник, еще и на индикаторе с закрытым кодом, при компиляции выдает 2 ошибки в журнале, 2 день с ними борюсь, помогите!'}' - unexpected end of program ultra-signal.mq4 137 1'{' - unbalanced parentheses ultra-signal.mq4 63 1 ultra-signal.mq4 Изменено 26 июля, 2015 пользователем big13 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Konstebl Опубликовано 27 июля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 июля, 2015 Доброго времени суток!!!Не судите строго мой первый советник, еще и на индикаторе с закрытым кодом, при компиляции выдает 2 ошибки в журнале, 2 день с ними борюсь, помогите!'}' - unexpected end of program ultra-signal.mq4 137 1'{' - unbalanced parentheses ultra-signal.mq4 63 1 Вроде компилятор просит ещё какие-то параметры в функцию iCustom() Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 27 июля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 июля, 2015 big13- После return() надо ставить ";"- небыло 1 закрывающей скобки "}"- "Count" не то-же самое, что "count"- при декларации глобальных переменных индюк вызывать не надо - смысла нет, тем более эти переменные Вы 2 раза задекларировали.Konstebl при вызове индюка без параметров действуют параметры по умолчанию - читал где-то...ultra-signal.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Konstebl Опубликовано 27 июля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 июля, 2015 big13- После return() надо ставить ";"- небыло 1 закрывающей скобки "}"- "Count" не то-же самое, что "count"- при декларации глобальных переменных индюк вызывать не надо - смысла нет, тем более эти переменные Вы 2 раза задекларировали.Konstebl при вызове индюка без параметров действуют параметры по умолчанию - читал где-то... Извиняюсь!Скобку закрывающую просмотрел. Ссылка на сообщение Поделиться на другие сайты More sharing options...
big13 Опубликовано 27 июля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 июля, 2015 Спасибо, за ответ, проверку ордеров я воротил и так и этак, да все не мог исправить до конца, может внимания не хватает, писал его в основном по ночам, когда с работы приходил, и исправлял также по ночам, вчера весь день над ним просидел, а потом всплыло отчаяние, решил попросить уже помощи, сравню 2 варианта, на своих ошибках попробую научиться!!!Теперь, когда основа заработала буду его дальше крутить и исследовать! Добавлено: 28-07-2015 12:53:41Еще 1 вопрос, в 2 строках OrderModify(ticket, OrderOpenPrice(), SL, TP, 0); и OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); выдает вот такую фразу: return value of 'OrderModify' should be checked ultra-signal.mq4 75 9 при этом все строки были написаны по видео и сверял несколько раз, но пишет 4 варнинга и при тесте не может оставить 1 ордер, постоянно висит buy и sell одновременно Изменено 28 июля, 2015 пользователем big13 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 28 июля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 июля, 2015 Еще 1 вопрос, в 2 строках OrderModify(ticket, OrderOpenPrice(), SL, TP, 0); и OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); выдает вот такую фразу: return value of 'OrderModify' should be checked ultra-signal.mq4 75 9 при этом все строки были написаны по видео и сверял несколько раз, но пишет 4 варнинга и при тесте не может оставить 1 ордер, постоянно висит buy и sell одновременно"варнинг" это просто компилятор обращает Ваше внимание на то, что Вы не проверяете значения, возвращаемые указанными функциями. Для тестера это не критично - забудь.То, что висит 2 ордера: при открытии ордера нужно проверять наличие открытого и если есть - закрывать. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти