denis77515 Опубликовано 6 апреля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 апреля, 2014 Приветик всем,господа подскажите пожалуйста как мне посчитать количество пунктов от цены открытия до стоп лосса. т.е у меня ставится отложенный ордер, стоп лосс ставится по машке с не большим отступом от нее.ema_stop_2=iMA(Symbol(),NULL,10,0,MODE_EMA,PRICE_LOW,1); SL=NormalizeDouble(ema_stop_2-Stoploss*Point,Digits); так вот количество пунктов я не знаю,мне нужно их посчитать,умножить на 2 для установки тейк профита. Изменено 6 апреля, 2014 пользователем denis77515 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Slava2007 Опубликовано 8 апреля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 апреля, 2014 Здравствуйте уважаемый xbms и остальные форумчане.Может кто сталкивался с такой проблемой. Написал индикатор, и он жрет у меня 900 мб. памяти. Я решил выяснить какой именно элемент кода дает такую утечку, нашел (обозначено Суть кода: он закачивает с истории из (BarsNomber) свечей цены O, C, H, L. Но чего он потом не выгружает эту информацию из памяти??????????!!!!!!!!! Посмотрел последний вебинар от Вас, уважаемый xbms (отдельное спасибо, уроки очень толковые, очень помогают), Вы рассказывали про классы. В справке написано, что через классы как-то решается проблема с освобождением памяти. Подскажите, как можно решить обозначенную проблему. Заранее спасибо. P.S. Я запускал индикатор в WinXP и Win7. Так в XP все нормально (что-то около 5 mb), а в Win7 - 900 mb. Спойлер int init() { int TimeFrame [8]; TimeFrame TimeFrame [0] = PERIOD_M1; TimeFrame [1] = PERIOD_M5; TimeFrame [2] = PERIOD_M15; TimeFrame [3] = PERIOD_M30; TimeFrame [4] = PERIOD_H1; TimeFrame [5] = PERIOD_H4; TimeFrame [6] = PERIOD_D1; TimeFrame [7] = PERIOD_W1; for (int i = 0; i { Ever = MX(TimeFrame ,UpOrDown); if (Ever == 0)Comment(i); } return(0); }//+------------------------------------------------------------------+double MX(int TimeFrameMines, int UP_DOWN) { for (int i = 1; i { H[i-1] = iHigh(NULL,TimeFrameMines,i); // L[i-1] = iLow(NULL,TimeFrameMines,i); // O[i-1] = iOpen(NULL,TimeFrameMines,i); // C[i-1] = iClose(NULL,TimeFrameMines,i); // if (O[i-1] if (O[i-1]>C[i-1] && UP_DOWN == 1) {EverX += (H[i-1]-L[i-1]);Count++;} } if (Count == 0)return(0); return(EverX/Count); } Изменено 8 апреля, 2014 пользователем Slava2007 Ссылка на сообщение Поделиться на другие сайты More sharing options...
35aleks Опубликовано 8 апреля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 апреля, 2014 может кто подсказать нужно что бы после каждой убыточной сделки следующий лот увеличивался а у меня когда бай и селл только после этого увеличивает лот BBstop_bot.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
baksik99 Опубликовано 9 апреля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 апреля, 2014 Исправьте кто то ошибку ....не могу скомпилировать... MA-V1.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Slava2007 Опубликовано 10 апреля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 апреля, 2014 Исправьте кто то ошибку ....не могу скомпилировать... ДержиMA-V1.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
NickWelder Опубликовано 15 апреля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 апреля, 2014 Всем доброго вечера. Подскажите пожалуйста, где я ошибся. В домашнем задании к 3 уроку при создании стоп-ордеров стабильно выдаётся "OrderModify ошибка 130"(неправильные стопы).Также выкладываю задание к второму уроку. Там при удалении некоторых ордеров выскакивает ошибка "OrderDelete ошибка 4108" (некорректный номер тикета). Файл SampleExpert1 - задание к второму уроку.Файл Test3(Indicator) - задание к третьему уроку. Test3Indicator.mq4SampleExpert1.mq4 Изменено 15 апреля, 2014 пользователем NickWelder Ссылка на сообщение Поделиться на другие сайты More sharing options...
vlad1476 Опубликовано 15 апреля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 апреля, 2014 ЗдравствуйтеМожете подсказать как обьявлять и заполнять массив классов? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Alekseevich Опубликовано 16 апреля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 апреля, 2014 Доброго времени суток всем! Подскажите по уроку № 3. Как добавить в код советника переменные : extern int StartHour = 10; // час начала работы extern int StartMinute = 0; // минуты начала работы extern int EndHour = 14; // час окончания extern int EndMinute = 0; // минуты окончания Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 16 апреля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 апреля, 2014 Например во так: Спойлер [/ if(HourStart == TimeHour(TimeCurrent()))иif(HourEnd == TimeHour(TimeCurrent()))] это при целых значениях времени ,если нужны минуты,то условие надо писать другое. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Alekseevich Опубликовано 16 апреля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 апреля, 2014 Например во так: Спойлер [/ if(HourStart == TimeHour(TimeCurrent()))иif(HourEnd == TimeHour(TimeCurrent()))] это при целых значениях времени ,если нужны минуты,то условие надо писать другое. Будте добры! подскажите как прописать что б советник торговал в определенное время? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 16 апреля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 апреля, 2014 Alekseevich, на форуме тьма советников, торгующих в разное время.Изучайте чужих ботов, смотрите что как другие люди делали.Учитесь исключительно самостоятельно.Даже и не думайте, что кто-то вместо вас будет писать за вас программы или искать ваши ошибки.На форуме 1 программист на 3000-5000 торгующих и все программисты крайне заняты. Ссылка на сообщение Поделиться на другие сайты More sharing options...
NickWelder Опубликовано 16 апреля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 апреля, 2014 Всем добрый вечер. Во время выполнения домашнего задания к 4 уроку столкнулся с трудностью: при тестировании советника появляется ошибка "деление на ноль" и соответственно тестирование завершается. Алгоритм функции ModifyOrders() проверял, на первый взгляд всё верно. У самого не получается найти ошибку, поэтому прошу Вашей помощи. Выкладываю файл с выполненным домашним заданием из пункта 1. Martin.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
vlad1476 Опубликовано 16 апреля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 апреля, 2014 ЗдравствуйтеМожете подсказать как обьявлять и заполнять массив классов? Ссылка на сообщение Поделиться на другие сайты More sharing options...
fv2500 Опубликовано 16 апреля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 апреля, 2014 А еще сть хорошая кнопочка F1. А там закладка содержание. А там ищите интересующую тему. Справка очень хорошая и есть примеры....может кто-то уже говорил такое... :-$ Добавлено: 16-04-2014 19:29:05 8-> не зря начинают обучение с блок-схем.... язык программирования - это уже инструмент.... Изменено 16 апреля, 2014 пользователем fv2500 Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 17 апреля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 апреля, 2014 Например во так: Спойлер [/ if(HourStart == TimeHour(TimeCurrent()))иif(HourEnd == TimeHour(TimeCurrent()))] это при целых значениях времени ,если нужны минуты,то условие надо писать другое. Будте добры! подскажите как прописать что б советник торговал в определенное время? extern bool Hvkl = true;вот держи: if ((Hvkl == true && (Hour() >= HaurStart && Hour() Ссылка на сообщение Поделиться на другие сайты More sharing options...
Alekseevich Опубликовано 17 апреля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 апреля, 2014 extern bool Hvkl = true;вот держи: if ((Hvkl == true && (Hour() >= HaurStart && Hour() Не получается, где ошибка?extern bool Hvkl = true; // включение проверки времениextern int StartHour = 5; // час начала времениextern int EndHour = 9; // час окончания времениint ticket, otype;double TP, SL, price, PriceHigh, PriceLow ;//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int init() { // Если брокер работает с 5-ю цифрами if (Digits == 3 || Digits == 5) { TakeProfit *= 10; StopLoss *= 10; } return(0); }//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+int deinit() { return(0); }//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start() { if ((Hvkl == true && (Hour() >= StartHour && Hour() PriceHigh = iCustom(Symbol(), 0, "TMA with Distances", TimeFrame, HalfLength, Price,ATRMultiplier,ATRPeriod,Interpolate, 1, 0); //значение верхней линии PriceLow = iCustom(Symbol(), 0, "TMA with Distances", TimeFrame, HalfLength, Price,ATRMultiplier,ATRPeriod,Interpolate, 2, 0); //значение нижней линии // покупка if (Ask { SL = NormalizeDouble(Ask - StopLoss * Point, Digits); TP = NormalizeDouble(Ask + TakeProfit * Point, Digits); ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, comment, Magic, 0, Blue); if(ticket > 0) { if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)== true) OrderModify(ticket, OrderOpenPrice(), SL, TP, 0); } } // продажа if (Bid >= PriceHigh && CountSell()== 0 ) { SL = NormalizeDouble(Bid + StopLoss * Point, Digits); TP = NormalizeDouble(Bid - TakeProfit * Point, Digits); ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, comment, Magic, 0, Red); if (ticket > 0) { if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true) OrderModify(ticket, OrderOpenPrice(), SL, TP, 0); } } return(0); } //+------------------------------------------------------------------+int CountBuy(){ int count = 0; for(int trade =OrdersTotal()-1; trade >= 0; trade--) { OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); // 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); // MODE_TRADES - ьюцэю эх яшёрЄ№ if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY || OrderType() == OP_SELL) count++; } } return(count);} Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 17 апреля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 апреля, 2014 Сейчас маловато времени вникать в твой код,бегло посмотрел.я делал что то на подобие этого.попробуй переменные индикаторов вынести под старт,потом все остальное,если это весь код,то есть еще пара ошибок,посмотри сам код внимательно. Ссылка на сообщение Поделиться на другие сайты More sharing options...
iGirl Опубликовано 17 апреля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 апреля, 2014 Добрый день!Помогите найти ошибку - не модифицируется ордер. ;;)В журнале ошибка 130P.S. Всё перепроверила несколько раз и не могу понять в чем причина! 17.04_raschet_sl.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 18 апреля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 апреля, 2014 Добрый день!Помогите найти ошибку - не модифицируется ордер. ;;)В журнале ошибка 130P.S. Всё перепроверила несколько раз и не могу понять в чем причина!Не модифицируется из за вот этой строчки TP = NormalizeDouble(SL*1.5, Digits);нужно посчитать количество пунктов от цены открытия до стоп лосса ,а потом только умножить на некое число.к сожалению я сам не знаю как это сделать.Пока не кто не подсказал. Ссылка на сообщение Поделиться на другие сайты More sharing options...
ApMSoft Опубликовано 18 апреля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 апреля, 2014 Добрый день!Помогите найти ошибку - не модифицируется ордер. ;;)В журнале ошибка 130P.S. Всё перепроверила несколько раз и не могу понять в чем причина! Ордер на продажу (OP_SELL), SL = dHigh, а вы хотите ТП сделать выше SL. Само собой такой приказ сервер принять не может. Так-же желательна проверка не слишком ли близко SL к текущей цене. Ссылка на сообщение Поделиться на другие сайты More sharing options...
iGirl Опубликовано 19 апреля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 апреля, 2014 Спасибо большое за помощь!!! =d> (такая глупая ошибка!)Исправила. Всё работает. Ссылка на сообщение Поделиться на другие сайты More sharing options...
kamolkurbonov Опубликовано 21 апреля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 апреля, 2014 ПриветПомогите мне решить задачуона такая:1. Когда RSI()>=Х (установленного уровня) - поставить SELLLIMIT Y пункт выше тек. или наоборот2. Когда RSI()extern double Lots = 0.01;extern double StopLoss = 100;extern double TakeProfit = 300;extern int Distance = 50;extern int Slippage = 3;extern string comment = "Alert_RSI_Bot";extern int magic = 777;extern double BuyRSIPoint = 15;extern double SellRSIPoint = 85;extern int InpRSIPeriod = 14;int i=0;int ticket;double price, BL_Price, SL_Price, TP, SL;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() { if(Digits==3||Digits==5) { Slippage *=10; Distance *=10; StopLoss *=10; TakeProfit *=10; } return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason) { }//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick() { if(BuyRSIPoint >=iCustom(Symbol(),0,"RSI",InpRSIPeriod,0,i) && CountBuyLimit()==0) { BL_Price = Ask - Distance; ticket = OrderSend(Symbol(), OP_BUYLIMIT, Lots, BL_Price, Slippage, 0, 0, comment, magic, 0, Blue); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET, MODE_TRADES)==true) { SL = NormalizeDouble(OrderOpenPrice()-StopLoss*Point,Digits); TP = NormalizeDouble(OrderOpenPrice()+TakeProfit*Point,Digits); OrderModify(ticket,OrderOpenPrice(),SL,TP,0,0); } } //Alert ("BUY"); //Print("Buy", Symbol(), "RSI }//+--------------------------- if(SellRSIPoint { SL_Price = Bid+Distance; ticket=OrderSend(NULL,OP_SELLLIMIT,Lots,SL_Price,Slippage,0,0,comment,magic,0,Red); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)==true) { SL = NormalizeDouble(OrderOpenPrice()+StopLoss*Point,Digits); TP = NormalizeDouble(OrderOpenPrice()-TakeProfit*Point,Digits); OrderModify(ticket,OrderOpenPrice(),SL,TP,0,0); } } } //Alert ("BUY"); //Print("Buy", Symbol(), "RSI }//+------------------------------------------------------------------+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); }//+------------------------------------------------------------------+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_SELLLIMIT) count++; } return(count); } Ссылка на сообщение Поделиться на другие сайты More sharing options...
pagatr Опубликовано 23 апреля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2014 kamolkurbonov, на первый взгляд, CountBuyLimit у тебя считает SellLimit-ы.А так в чём требуется помощь? Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 23 апреля, 2014 Автор Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2014 kamolkurbonov, на первый взгляд, CountBuyLimit у тебя считает SellLimit-ы.А так в чём требуется помощь? копи-паст рулит...ничего страшного, так часто бывает :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Analitik Опубликовано 25 апреля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 апреля, 2014 Добрый день, как обойти максимальный объем лотов установленный в ДЦ, спасибо!Общий объем нужно дробить на объемы которые позволяет устанавливать ДЦ, но как это написать не понимаю, новичек, если это бональщина то извините :d Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти