d1w4m3 Опубликовано 9 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 сентября, 2021 Добрый день, подзабыл за 2 года вплотную mql4( объясните пожалуйста почему алерт не работает #property copyright "Copyright © 2013" #property link "http://www.google.com" #property indicator_separate_window #property indicator_buffers 4 #property indicator_color1 Blue #property indicator_color2 Red #property indicator_color3 Green #property indicator_color4 Red extern int FastEMA = 12; extern int SlowEMA = 26; extern int SignalEMA = 9; extern int SoundON=1; // 0 = false 1 = true static datetime lastbar; bool NewBar; double g_ibuf_88[]; double g_ibuf_92[]; double g_ibuf_96[]; double g_ibuf_100[]; int init() { IndicatorDigits(MarketInfo(Symbol(), MODE_DIGITS) + 1.0); SetIndexStyle(0, DRAW_LINE, STYLE_SOLID); SetIndexBuffer(0, g_ibuf_88); SetIndexDrawBegin(0, SlowEMA); SetIndexStyle(1, DRAW_LINE, STYLE_SOLID); SetIndexBuffer(1, g_ibuf_92); SetIndexDrawBegin(1, SignalEMA); SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID); SetIndexBuffer(2, g_ibuf_96); SetIndexStyle(3, DRAW_HISTOGRAM, STYLE_SOLID); SetIndexBuffer(3, g_ibuf_100); IndicatorShortName("MACD(" + FastEMA + "," + SlowEMA + "," + SignalEMA + ")"); SetIndexLabel(0, "MACD"); SetIndexLabel(1, "Signal"); SetIndexLabel(2, "HistogramUP"); SetIndexLabel(3, "HistogramDOWN"); return (0); } int start() { double ld_4; int li_12 = IndicatorCounted(); if (li_12 < 0) return (-1); if (li_12 > 0) li_12--; int li_0 = Bars - li_12; for (int li_16 = 0; li_16 < li_0; li_16++) g_ibuf_88[li_16] = iMA(NULL, 0, FastEMA, 0, MODE_EMA, PRICE_CLOSE, li_16) - iMA(NULL, 0, SlowEMA, 0, MODE_EMA, PRICE_CLOSE, li_16); for (li_16 = 0; li_16 < li_0; li_16++) g_ibuf_92[li_16] = iMAOnArray(g_ibuf_88, Bars, SignalEMA, 0, MODE_EMA, li_16); for (li_16 = 0; li_16 < li_0; li_16++) { g_ibuf_96[li_16] = 0; g_ibuf_100[li_16] = 0; ld_4 = g_ibuf_88[li_16] - g_ibuf_92[li_16]; if (ld_4 >= 0.0) g_ibuf_96[li_16] = ld_4; else g_ibuf_100[li_16] = ld_4; } return (0); bool NewBar=isNewBar(); if (SoundON==1 && g_ibuf_96[1] != 0 && g_ibuf_100[2] != 0 && NewBar) { PlaySound("alert..wav"); } if (SoundON==1 && g_ibuf_100[1] != 0 && g_ibuf_96[2] != 0 && NewBar) { PlaySound("alert.wav"); } return(0); } bool isNewBar() { datetime curbar = Time[0]; if(lastbar!=curbar) { lastbar=curbar; return (true); } else { return(false); } } MACD 2Line.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 9 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 сентября, 2021 21 минуту назад, d1w4m3 сказал: ( объясните пожалуйста почему алерт не работает int start() { double ld_4; int li_12 = IndicatorCounted(); if (li_12 < 0) return (-1); if (li_12 > 0) li_12--; int li_0 = Bars - li_12; for (int li_16 = 0; li_16 < li_0; li_16++) g_ibuf_88[li_16] = iMA(NULL, 0, FastEMA, 0, MODE_EMA, PRICE_CLOSE, li_16) - iMA(NULL, 0, SlowEMA, 0, MODE_EMA, PRICE_CLOSE, li_16); for (li_16 = 0; li_16 < li_0; li_16++) g_ibuf_92[li_16] = iMAOnArray(g_ibuf_88, Bars, SignalEMA, 0, MODE_EMA, li_16); for (li_16 = 0; li_16 < li_0; li_16++) { g_ibuf_96[li_16] = 0; g_ibuf_100[li_16] = 0; ld_4 = g_ibuf_88[li_16] - g_ibuf_92[li_16]; if (ld_4 >= 0.0) g_ibuf_96[li_16] = ld_4; else g_ibuf_100[li_16] = ld_4; } return (0); // здесь всегда происходит предывание функции start() bool NewBar=isNewBar(); if (SoundON==1 && g_ibuf_96[1] != 0 && g_ibuf_100[2] != 0 && NewBar) { PlaySound("alert..wav"); } if (SoundON==1 && g_ibuf_100[1] != 0 && g_ibuf_96[2] != 0 && NewBar) { PlaySound("alert.wav"); } return(0); } Ошибка выделена комментарием п.с. 1. код нужно оформлять через тэги код: 2. у Вас переменная bool NewBar объявлена на глобальном уровне и на локальном. 3. Самого не напрягает разбираться с декомпилированным кодом, где переменные обозваны абы как? 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
d1w4m3 Опубликовано 9 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 сентября, 2021 Спасибо, это все от невнимательности, просто опять решил залезть в код, с нес винду и забыл скопировать все наработки( еще раз спасибо Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 9 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 сентября, 2021 6 минут назад, d1w4m3 сказал: Спасибо, это все от невнимательности, "А для этого у нас есть багор и ведро с песком"(с) День радио 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
VitChel Опубликовано 13 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 сентября, 2021 Помогите разобраться: #property copyright "My" #property link "https://www" #property version "1.00" #property strict struct Sign { int Period_MA; double Step; double Delta; }; Sign Signal[15]; input Sign Signal[1].Period_MA = 150; input Sign Signal[1].Step = 10; input Sign Signal[1].Delta = 20; input Sign Signal[2].Period_MA = 300; и т.д. Объявляю структуру Sign, затем массив Signal с типом Sign. Данный массив надо заполнить вручную при запуске советника. При компиляции выдает ошибку: '.' - semicolon expected, на строках, где идет присвоение input Sign Signal[1].Period_MA = 150; и т.д. Если делаю так: input int Period_MA1 = 150; input double Step1 = 10; input double Delta1 = 20; input int Period_MA2 = 300; А затем в функцииOnInit(): Signal[1].Period_MA = Period_MA1; Signal[1].Step = Step1; и т.д. То все работает, ошибок нет. Как можно не используя лишних переменных, присвоить значения массиву Signal? Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 13 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 сентября, 2021 1 час назад, VitChel сказал: Как можно не используя лишних переменных, присвоить значения массиву Signal? можете в OnInit() непосредственно задать значения всех переменных массива. А если все таки нужно в input- переменных задавать, то попробуйте объявить три переменные, типа: input string MA_period = "150,300,....."; Далее в OnInit() через функцию StringSplit() преобразовать строку в массив значений. И в цикле заполнить массив структур 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
diodio Опубликовано 14 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 сентября, 2021 Всем доброго времени! Вопрос, функция OrdersTotal() возвращает кол-во открытых и отложенных ордеров у конкретной валютной пары? Или же если один и тот же советник на одном счете торгует несколькими парами, то зацепятся все ордера суммарно этой функцией? И так и так работает? Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 14 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 сентября, 2021 3 часа назад, diodio сказал: Вопрос, функция OrdersTotal() возвращает кол-во открытых и отложенных ордеров у конкретной валютной пары? ХЕЛП: Цитата OrdersTotal Возвращает общее количество открытых и отложенных ордеров. int OrdersTotal(); Возвращаемое значение Общее количество открытых и отложенных ордеров. какое место из справки вызывает сомнение? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Lexa000 Опубликовано 15 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 сентября, 2021 Как сделать так, чтобы и в тесте можно было прогнать и на графике посмотреть? В данный момент Close All в тесте не работает Ссылка на сообщение Поделиться на другие сайты More sharing options...
Lexa000 Опубликовано 15 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 сентября, 2021 +------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- //--- обработка нажатия кнопки "CLOSE ALL" if(sparam=="CLOSE_ALL") { Sleep(50); //--- удаление графических объектов ObjectDelete(0,"CLOSE_ALL"); //--- создание графических объектов CreateButton("CLOSE_YES",156,17,30,20,ColorYES,BORDER_RAISED,"YES", "Arial",8,clrBlack,CORNER_LEFT_UPPER,false,false,false,true,1,false); //---- CreateButton("CLOSE_NO",187,17,30,20,ColorNO,BORDER_RAISED,"NO", "Arial",8,clrBlack,CORNER_LEFT_UPPER,false,false,false,true,1,false); //---- return; } //--- обработка кнопки завершена //--- обработка нажатия кнопки "CLOSE NO" if(sparam=="CLOSE_NO") { Sleep(50); //--- удаление графических объектов ObjectDelete(0,"CLOSE_YES"); ObjectDelete(0,"CLOSE_NO"); //--- создание графических объектов CreateButton("CLOSE_ALL",156,17,61,20,ButtonColorBack,BORDER_RAISED,"Close All", "Arial",8,ButtonColorText,CORNER_LEFT_UPPER,false,false,false,true,1,false); //---- return; } //--- обработка кнопки завершена //--- обработка кнопки удаления/закрытия всех ордеров if(sparam=="CLOSE_YES") { Sleep(50); //--- удаление графических объектов ObjectDelete(0,"CLOSE_YES"); ObjectDelete(0,"CLOSE_NO"); //--- создание графических объектов CreateButton("CLOSE_ALL",156,17,61,20,ButtonColorBack,BORDER_RAISED,"Close All", "Arial",8,ButtonColorText,CORNER_LEFT_UPPER,false,false,false,true,1,false); //--- удаление и закрытие ордеров while(true) { bool find_order=false; int slipp; //---- for(int pos=OrdersTotal()-1;pos>=0;pos--) if(OrderSelect(pos,SELECT_BY_POS)==true) if(OrderSymbol()==_Symbol) { find_order=true; //---- if(OrderType()==OP_BUY) { RefreshRates(); slipp=(int)(((Ask-Bid)/Point)*2); if(OrderClose(OrderTicket(),OrderLots(),Bid,slipp,clrBlue)==false){} } //---- if(OrderType()==OP_SELL) { RefreshRates(); slipp=(int)(((Ask-Bid)/Point)*2); if(OrderClose(OrderTicket(),OrderLots(),Ask,slipp,clrRed)==false){} } //---- if(OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT) if(OrderDelete(OrderTicket(),clrRed)==false){} //---- if(OrderType()==OP_SELLSTOP || OrderType()==OP_SELLLIMIT) if(OrderDelete(OrderTicket(),clrBlue)==false){} } if(find_order==false) { Alert("Все ордера закрыты!");break; } } } //--- обработка кнопки завершена //---- } //+------------------------------------------------------------------+ //| Создает объект кнопка | //+------------------------------------------------------------------+ void CreateButton(string name,int xd,int yd,int xs,int ys,color color_back, ENUM_BORDER_TYPE border_type,string text,string font, int font_size,color color_text,int corner,bool back, bool selectable,bool selected,bool hidden,int zorder,bool state) { ObjectCreate(0,name,OBJ_BUTTON,0,0,0,0); ObjectSetInteger(0,name,OBJPROP_XDISTANCE,xd); ObjectSetInteger(0,name,OBJPROP_YDISTANCE,yd); ObjectSetInteger(0,name,OBJPROP_XSIZE,xs); ObjectSetInteger(0,name,OBJPROP_YSIZE,ys); ObjectSetInteger(0,name,OBJPROP_BGCOLOR,color_back); ObjectSetInteger(0,name,OBJPROP_BORDER_TYPE,border_type); ObjectSetString(0,name,OBJPROP_TEXT,text); ObjectSetString(0,name,OBJPROP_FONT,font); ObjectSetInteger(0,name,OBJPROP_FONTSIZE,font_size); ObjectSetInteger(0,name,OBJPROP_COLOR,color_text); ObjectSetInteger(0,name,OBJPROP_CORNER,corner); ObjectSetInteger(0,name,OBJPROP_BACK,back); ObjectSetInteger(0,name,OBJPROP_SELECTABLE,selectable); ObjectSetInteger(0,name,OBJPROP_SELECTED,selected); ObjectSetInteger(0,name,OBJPROP_HIDDEN,hidden); ObjectSetInteger(0,name,OBJPROP_ZORDER,zorder); ObjectSetInteger(0,name,OBJPROP_STATE,state); Loop сама кнопка Ссылка на сообщение Поделиться на другие сайты More sharing options...
diodio Опубликовано 15 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 сентября, 2021 20 часов назад, usver73 сказал: какое место из справки вызывает сомнение? Счет один, пары разные, вот в чем сомнение. По всем парам возвращает общее кол-во? На каждую пару стоит один и тот же советник и в нем присутствует эта функция. Так вот вопрос, эта функция вернет общее кол-во позиций по одному счету или для каждой пары будет возвращено то кол-во которое открыто на данной паре? Изменено 15 сентября, 2021 пользователем diodio Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 15 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 сентября, 2021 Только что, diodio сказал: По всем парам возвращает общее кол-во? ведь в справке не оговорено про пары? Значит все ордера в рынке. Ведь в функции подсчета "своих" ордеров советника практически всегда откидываем ордера "чужого" инструмента и "чужого" магика. А цикл идет по всем OrdersTotal() Ссылка на сообщение Поделиться на другие сайты More sharing options...
diodio Опубликовано 15 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 сентября, 2021 2 минуты назад, usver73 сказал: ведь в справке не оговорено про пары? Значит все ордера в рынке. Ведь в функции подсчета "своих" ордеров советника практически всегда откидываем ордера "чужого" инструмента и "чужого" магика. А цикл идет по всем OrdersTotal() ну значит нужно сделать проще, не использовать эту функцию для подсчета по конкретной паре, заменяем ее на свой подсчет Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 15 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 сентября, 2021 1 минуту назад, diodio сказал: ну значит нужно сделать проще, не использовать эту функцию для подсчета по конкретной паре, заменяем ее на свой подсчет помнится в личке мы об этом говорили. И типовую функцию подсчета ордеров я тоже давал Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 15 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 сентября, 2021 1 час назад, Lexa000 сказал: В данный момент Close All в тесте не работает После нажатия на кнопку происходит ее удаление и рисование кнопок "CLOSE_YES" и "CLOSE_NO". А потом происходит выход из функции. Вынесите код закрытия ордеров в отдельную функцию, типа CloseAllOrders() и вставьте ее вызов перед return. Читать код и искать ошибки будет легче Ссылка на сообщение Поделиться на другие сайты More sharing options...
diodio Опубликовано 15 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 сентября, 2021 11 минут назад, usver73 сказал: помнится в личке мы об этом говорили. И типовую функцию подсчета ордеров я тоже давал Да, я все исправил по твоим правкам, работает, мне само определение в справке было не понятно. Сейчас попробовал сделать мультивалютник по той же стратегии и снова использовал эту функцию, а теперь сомневаюсь будет ли корректно работать. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Евгений72 Опубликовано 15 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 сентября, 2021 Всем доброго времени суток!!! Подскажите пожалуйста в коде сеточного советника прописал отображение средней цены на графике. Всё бы ничего но не корректно удаляется линия после закрытия сетки то есть средой цены нет. пожалуйста подскажите что я сделал не так. Вот код и картинка. //+----------------------------------------------------------------------------+ //| Модификация групповых ордеров | //+----------------------------------------------------------------------------+ void ModifyOrders(int otype) { double avg_price, AveragePriceBuy, AveragePriceSell, 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() ; } } } avg_price = NormalizeDouble(price / order_lots, Digits); AveragePriceBuy = NormalizeDouble(avg_price + Spread, Digits); AveragePriceSell = NormalizeDouble(avg_price - Spread, Digits); { ObjectDelete(0, "AveragePriceLine"); ObjectCreate("AveragePriceLine" ,OBJ_HLINE, 0, 0 ,AveragePriceBuy); ObjectCreate("AveragePriceLine" ,OBJ_HLINE, 0, 0 ,AveragePriceSell); ObjectSet("AveragePriceLine",OBJPROP_COLOR,Blue); } if ((otype == OP_BUY) && (Drawdown <= DrawdownClosingTakeprofitZero)) tp = NormalizeDouble (AveragePriceBuy + TakeProfitGroupOrder*Point, Digits); if ((otype == OP_SELL) && (Drawdown <= DrawdownClosingTakeprofitZero)) tp = NormalizeDouble (AveragePriceSell - TakeProfitGroupOrder*Point, Digits); if ((otype == OP_BUY) && (Drawdown > DrawdownClosingTakeprofitZero)) tp = NormalizeDouble (AveragePriceBuy, Digits); if ((otype == OP_SELL) && (Drawdown > DrawdownClosingTakeprofitZero)) tp = NormalizeDouble (AveragePriceSell, Digits); for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype) { if(OrderModify(OrderTicket(), OrderOpenPrice(), 0, tp, 0)) Print("Ордера успешно модифицированы!"); else Print("Ошибка модификации ордеров!"); } } } } Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 15 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 сентября, 2021 54 минуты назад, Евгений72 сказал: Подскажите пожалуйста в коде сеточного советника прописал отображение средней цены на графике. У Вас наверняка есть функция подсчета ордеров в сетке. В конце можно дописать if(countBUY+countSELL==0 && ObjectFind("AveragePriceLine")!=-1) ObjectDelete("AveragePriceLine"); Ссылка на сообщение Поделиться на другие сайты More sharing options...
Евгений72 Опубликовано 16 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 сентября, 2021 21 час назад, usver73 сказал: У Вас наверняка есть функция подсчета ордеров в сетке. В конце можно дописать if(countBUY+countSELL==0 && ObjectFind("AveragePriceLine")!=-1) ObjectDelete("AveragePriceLine"); Спасибо за ответ но это не помогло Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 16 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 сентября, 2021 42 минуты назад, Евгений72 сказал: Спасибо за ответ но это не помогло почему не помогло? Разбирались? п.с. описанный способ сам применял в сеточнике. Валяется в ветке Spring, поищите, если не лень разбираться Ссылка на сообщение Поделиться на другие сайты More sharing options...
VitChel Опубликовано 17 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 сентября, 2021 Еще заинтересовал такой вопрос. Из статьи https://tlap.com/zapazdyvayushhie-indikatory/: На рисунке выше к StDev добавлена скользящая средняя с периодом 20; чтобы ее отобразить, перетащите Moving Average «в подвал» и выберите пункт расчета «Previous Indicator’s Data». Как можно получить в MQL4 показания такого индикатора: StdDev(18) -> MA(20) ? Изменено 17 сентября, 2021 пользователем VitChel Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 17 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 сентября, 2021 53 минуты назад, VitChel сказал: Как можно получить в MQL4 показания такого индикатора: StdDev(18) -> MA(20) ? Вам нужно получить 20 последних значений индикатора StdDev, поместить их в массив и передать в функцию расчета МА. У меня в тереме в папке Inqlude есть MovingAverages.mqh, в нем есть эти функции. Думаю, это из стандартной поставки /+------------------------------------------------------------------+ //| Simple Moving Average | //+------------------------------------------------------------------+ double SimpleMA(const int position,const int period,const double &price[]) { //--- double result=0.0; //--- check position if(position>=period-1 && period>0) { //--- calculate value for(int i=0;i<period;i++) result+=price[position-i]; result/=period; } //--- return(result); } 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
diodio Опубликовано 20 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 сентября, 2021 Доброго времени всем. Возник вопрос правильного написания торговой валютной пары: например я объявляю символ extern string Symbol1 = "AUDCAD"; и в дальнейшем название этого символа должно попасть в функцию OrderSymbol() Правильно ли будет такое представление написания торгового инструмента, или же лучше писать как extern string Symbol1 = "audcad"; т.е. я меняю регистр написания чтоб советник понял какую пару брать. В справочнике ничего про регистр не сказано. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ent Опубликовано 20 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 сентября, 2021 26 минут назад, diodio сказал: Доброго времени всем. Возник вопрос правильного написания торговой валютной пары: например я объявляю символ extern string Symbol1 = "AUDCAD"; и в дальнейшем название этого символа должно попасть в функцию OrderSymbol() Правильно ли будет такое представление написания торгового инструмента, или же лучше писать как extern string Symbol1 = "audcad"; т.е. я меняю регистр написания чтоб советник понял какую пару брать. В справочнике ничего про регистр не сказано. Регистр имеет значение. Поэтому в данном случае либо строчные преобразуете в прописные, либо оставляете вариант с прописными буквами, т.е. AUDCAD. И пару функций в помощь: //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 01.09.2005 | //| Описание : Возвращает строку в ВЕРХНЕМ регистре | //+----------------------------------------------------------------------------+ string StringUpper(string s) { int c, i, k=StringLen(s), n; for (i=0; i<k; i++) { n=0; c=StringGetChar(s, i); if (c>96 && c<123) n=c-32; // a-z -> A-Z if (c>223 && c<256) n=c-32; // а-я -> А-Я if (c==184) n=168; // ё -> Ё if (n>0) s=StringSetChar(s, i, n); } return(s); } //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 01.09.2005 | //| Описание : Возвращает строку в нижнем регистре | //+----------------------------------------------------------------------------+ string StringLower(string s) { int c, i, k=StringLen(s), n; for (i=0; i<k; i++) { n=0; c=StringGetChar(s, i); if (c>64 && c<91) n=c+32; // A-Z -> a-z if (c>191 && c<224) n=c+32; // А-Я -> а-я if (c==168) n=184; // Ё -> ё if (n>0) s=StringSetChar(s, i, n); } return(s); } Изменено 20 сентября, 2021 пользователем Ent 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Евгений72 Опубликовано 20 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 сентября, 2021 Доброго времени суток!!! Подскажите пожалуйста Вот счетчик и идентификатор ордеров //+----------------------------------------------------------------------------+ //| Счетчик ордеров | //+----------------------------------------------------------------------------+ int CountTrade() { int count = 0; for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType() == OP_BUY || OrderType() == OP_SELL) count++; } } } return(count); } Далее эта функция всплывает в начале советника if (CountTrade() == 0) И далее идут условия для открытия первого ордера. Вопрос заключается в том что нужно написать в коде чтобы выполнялось условие "Если в терминале есть хоть один ордер, любого символа, любого типа. любого магика) то тогда ордер не открывать! Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти