0ll Опубликовано 11 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 мая, 2014 Что с запятой, что без запятой компилируется и выводится на экран. OP_BUY==0; OP_SELL==1; здесь можно ставить Константу(OP_BUY или OP_SELL) или цифровое значение(0 или1) для AUTO- значения нет, поэтому мы можем поставить любое==-1 ?? Про запятую - спасибо.Можно-ли использовать константу в описании enum? - не знаю, я бы использовал - код становится читабельным, но если компилятор выдаст ошибку - тогда цифрой. Про AUTO = -1. можно любое, какое назначите с тем и будем работать. Ссылка на сообщение Поделиться на другие сайты More sharing options...
С_е_р_г_у_й Опубликовано 11 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 мая, 2014 Цитата Цитата: 0ll от Мая 10, 2014, 01:01:05 pm- В функции start() Выведешь Alert() где расскажешь что за скрипт, координаты - где его бросили на экран графика, под ценой или над (Справка Операции с графиками), текущую пару. В (Справка Операции с графиками) есть две функции:ChartTimePriceToXY(Преобразует координаты графика из представления время/цена в координаты по оси X и Y)ChartXYToTimePrice (Преобразует координаты X и Y графика в значения время и цена) Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 11 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 мая, 2014 В (Справка Операции с графиками) есть две функции:ChartTimePriceToXY(Преобразует координаты графика из представления время/цена в координаты по оси X и Y)ChartXYToTimePrice (Преобразует координаты X и Y графика в значения время и цена)Нам на выходе время и цена важны. Ссылка на сообщение Поделиться на другие сайты More sharing options...
С_е_р_г_у_й Опубликовано 11 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 мая, 2014 OLL Не знаю, что наделал, вставил функцию: ChartXYToTimePrice(0,x,y,window,dt,price) и объявил переменныекомпилировал, вроде не ругается.Если честно, что сделал, не понял Спойлер #property version "1.00"#property description "Частичное закрытие Buy , Sell, Auto ордеров"#property strictextern int x =0;//(int)lparam;extern int y =0;//(int)dparam;extern datetime dt =0;extern double price =0;extern int window=0;extern int Magic = 123;//Уникальный номер;extern int Delta = -10;//мимнимальный процент профита от депозита;//+------------------------------------------------------------------+#property script_show_inputs//--- с какими ордерами работаемenum general_direction { ordersBUY = OP_BUY, ordersSELL = OP_SELL, AUTO = -1 };//--- input parametersinput general_direction Direct = ordersSELL;//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+void OnStart(){ //--- преобразуем координаты X и Y в терминах дата/время if(ChartXYToTimePrice(0,x,y,window,dt,price)) { Alert ("Window=%d X=%d Y=%d => Time=%s Price=%G",window,x,y,TimeToString(dt),price); //--- сделаем обратное преобразование: (X,Y) => (Time,Price) if(ChartTimePriceToXY(0,window,dt,price,x,y)) Alert ("Time=%s Price=%G => X=%d Y=%d",TimeToString(dt),price,x,y); else Alert("ChartTimePriceToXY return error code: ",GetLastError()); //--- зададим координату времени для вертикальной линии перекрестия ObjectSetInteger(0,"V Line",OBJPROP_TIME,dt); //--- зададим координату цены для горизонтальной линии перекрестия ObjectSetDouble(0,"H Line",OBJPROP_PRICE,window,price); ChartRedraw(0); } else Alert("ChartXYToTimePrice return error code: ",GetLastError()); Alert("+--------------------------------------------------------------+"); Alert(" Магик =" + IntegerToString(Magic) + "\nСимвол =" + Symbol() + "\nПериод =" + IntegerToString(Period())); return; }//+------------------------------------------------------------------+ Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 11 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 мая, 2014 OLL Не знаю, что наделал, вставил функцию: ChartXYToTimePrice(0,x,y,window,dt,price) и объявил переменныекомпилировал, вроде не ругается.Если честно, что сделал, не понялПонятно, что не понятно... Вы дочитайте справку, там есть более понятные функции, напр. ChartPriceOnDropped(). Вы же взяли функцию преобразования координат XY в дату/цену, а ей координаты нужны - где-ж Вы их возьмете?Не заморачивайтесь с координатами XY - они вообще не понадобятся. Ссылка на сообщение Поделиться на другие сайты More sharing options...
С_е_р_г_у_й Опубликовано 11 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 мая, 2014 OLLТогда вроде так Спойлер #property version "1.00"#property description "Частичное закрытие Buy , Sell, Auto ордеров"#property strictextern int Magic = 123;//Уникальный номер;extern int Delta = -10;//мимнимальный процент профита от депозита;//+------------------------------------------------------------------+#property script_show_inputs//--- с какими ордерами работаемenum general_direction { ordersBUY = OP_BUY, ordersSELL = OP_SELL, AUTO = -1 };//--- input parametersinput general_direction Direct = ordersSELL;//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+void OnStart(){ double p=ChartPriceOnDropped(); Alert(" Магик =" + IntegerToString(Magic) + "\nСимвол =" + Symbol() + "\nПериод =" + IntegerToString(Period()) + "\nКоординаты = " ,p); return; }//+------------------------------------------------------------------+ Изменено 11 мая, 2014 пользователем С_е_р_г_у_й Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 11 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 мая, 2014 С_е_р_г_у_й Всё так. Работает? Вы сразу запускайте в МТ после компиляции.По поводу алгоритма AUTO что думаете? Ссылка на сообщение Поделиться на другие сайты More sharing options...
С_е_р_г_у_й Опубликовано 11 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 мая, 2014 По поводу алгоритма AUTO что думаете? Я думаю надо объявить переменную ТР, найти ордера с ТР+В AUTO необходимо прописать OP_BUY и OP_SEL. ??Посчитать все ордера , задать какие ордера будут закрываться ВАЙ, закрывать ВАЙ ордераДля СЕЛЛ считаем все ордера , определяем какие закрываем СЕЛЛ, закрываем СЕЛЛДля АВТО считаем ордера , определяем какие закрываем, закрываемГде то так??? Изменено 11 мая, 2014 пользователем С_е_р_г_у_й Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 11 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 мая, 2014 С_е_р_г_у_й. Когда пользователь выбирает Бай или Селл с этим всё понятно, но если Авто, то нам с Вами в скрипте надо вычислить какую корзину хочет закрыть пользователь. Я вам писал ранее возможные варианты - как это делать. От Вас нужно решение, а может оба варианта сделаем? - не будем искать лёгких путей. Ссылка на сообщение Поделиться на другие сайты More sharing options...
С_е_р_г_у_й Опубликовано 11 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 мая, 2014 Конечно оба варианта.Нам с Вами в скрипте надо вычислить какую корзину хочет закрыть пользователь, вот и давайте вычислим. Для этого нам надо посчитать все ордера, определить какие ордера открыты??? for (int i = 0; i Изменено 11 мая, 2014 пользователем С_е_р_г_у_й Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 11 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 мая, 2014 Ну, значит, поехали - этап 2.Предисловие. Мне бы как трейдеру не понравилось то, что скрипт в автоматическом режиме творит чудеса на моём реальном счёте, а Вам? Поэтому план такой: нужно вывести окно подтверждения с кнопочками "Да"(или ОК) и "Отмена". В окно вывести максимум информации для принятия решения, а именно: на какой паре какие ордера будем работать, текущее количество ордеров по сове, по направлению, текущая просадка по сове и направлению, сколько пунктов до безубытка по рабочей корзине, сколько ордеров будем закрывать и сколько останется.Все эти данные мы вычислим на 3 этапе, а пока окно подтверждения (может это: http://docs.mql4.com/ru/common/messagebox)Что-то очень простое задание... Усложним: если пользователь выбрал ОК то Алерт "закрываем", если отмена Алерт "пока!" Ссылка на сообщение Поделиться на другие сайты More sharing options...
С_е_р_г_у_й Опубликовано 11 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 мая, 2014 OLL Не теряйте меня, исчезаю на пару дней, приношу извинения. Добавлено: 12-05-2014 13:52:10OII День добрый, Цитата окно подтверждения Что-то очень простое задание... Усложним: если пользователь выбрал ОК то Алерт "закрываем", если отмена Алерт "пока!" Спойлер //+------------------------------------------------------------------+//| Скрипт частичного закрытия ордеров.mq4 |//| Copyright 2014, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright "Copyright 2014, MetaQuotes Software Corp."#property link "http://www.mql5.com"#property version "1.00"#property description "Частичное закрытие Buy , Sell, Auto ордеров"#property strictextern int Magic = 123;//Уникальный номер;extern int Delta = -10;//мимнимальный процент профита от депозита;//+------------------------------------------------------------------+#property script_show_inputs//--- с какими ордерами работаемenum general_direction { ordersBUY = OP_BUY, //Ордера на покупку ordersSELL = OP_SELL, //Ордера на продажу AUTO = -1, //В автоматичуском режиме };//--- input parametersinput general_direction Direct = ordersSELL;//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+void OnStart() { int rat=MessageBox("закрытие ордеров ","Скрипт частичного закрытия ордеров", MB_OKCANCEL); if(rat == IDOK)Alert ("закрываем "); if(rat == IDCANCEL)Alert("пока"); double p=ChartPriceOnDropped(); Alert(" Магик =" + IntegerToString(Magic) + "\nСимвол =" + Symbol() + "\nПериод =" + IntegerToString(Period()) + "\nкоординаты = " ,p); return; }//+------------------------------------------------------------------+ Изменено 12 мая, 2014 пользователем С_е_р_г_у_й 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 12 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 мая, 2014 С_е_р_г_у_й Добрый день.MessageBox надо-бы после определения ценыПосле Алерта "пока" - завершение работы.Но это мелочи, теперь 3 этап:Вы как трейдер хотите совершить частичное закрытие - какая информация Вам нужна? - подумайте надосуге, я Вам уже писал примерный перечень, что-то можно выкинуть, что-то добавить.Итак, пользователь запустил скрипт и МТ начал исполнять процедуру старт(). Нам же надо действовать в соответствии с пожеланиями пользователя. Здесь надо вставить "логическое дерево". В нашем случае видимо лучше использовать switch для выбора дальнейшего действия http://docs.mql4.com/ru/basis/operators/switch в зависимости от направления сделки.Задание: в старт() сначала идет определение цены, потом switch, затем MessageBox в свиче для например для case OP_BUY: направте в функцию пересчета ордеров с параметром Директ.а для Авто - решим позже. Ссылка на сообщение Поделиться на другие сайты More sharing options...
С_е_р_г_у_й Опубликовано 13 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 мая, 2014 OII День добрый, тяжело даются знания, без наводящих вопросов мне не справится, " определение цены"?,Смотрю Скрипт закрытия ордеров CloseAllOrders_v5.mq4, сравниваю. Может не стоит смотреть на другие советники, а то из за этого каша в голове. Изменено 13 мая, 2014 пользователем С_е_р_г_у_й Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 13 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 мая, 2014 OII День добрый, тяжело даются знания, без наводящих вопросов мне не справится, Прости, может я плохо объяснил. Цену Вы уже определили по точке загрузки скрипта. Далее будут ещё более сложные вопросы и, чтобы улучшить взаимопонимание, я думаю перейти непосредственно в текст скрипта, т.е. там внутри давать задания и писать объяснения. Давайте Ваш последний текст (прикрепите в формате mq4) и попробуем. Ссылка на сообщение Поделиться на другие сайты More sharing options...
С_е_р_г_у_й Опубликовано 13 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 мая, 2014 Хорошо, давайте, только я и этого не знаю как сделать (прикрепить в формате mq4). Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 13 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 мая, 2014 Наверно все таки откройте новый топик.Разбор написания скрипта с нуля дело точно полезное, но это не должно мешать другим людям осваивать азы языка по урокам, подготовленным топикстартером.Надо понимать, что топикстартером выполнялась и выполняется большая работа по обучению людей программированию и не стоит нарушать учебный процесс написанием безусловно полезного, но постороннего для уроков топикстартера скрипта.Как по мне, все нормально - но создайте новый топик, а в старом пусть люди изучают и обсуждают видеоуроки. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 13 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 мая, 2014 Хорошо, давайте, только я и этого не знаю как сделать (прикрепить в формате mq4).Когда пишите на форуме ответ внизу (под окошком) есть кнопка "Вложения и другие параметры". Там есть кнопка "выбрать файл". Находите наш скрипт в дебрях МТ (для этого в редакторе нажмите файл-сохранить как... он Вам покажет где находится папка с файлом (при этом сохранять не обязательно)) и всё он прикрепился к письму.С_е_р_г_у_й в общем разделе "Уголок программиста" создайте "Новая тема" назовите как нибудь "Пишу скрипт с нуля", может быть Старик туда перенесёт нашу переписку, а может нет - неважно. Ссылка на сообщение Поделиться на другие сайты More sharing options...
SpyRF Опубликовано 13 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 мая, 2014 И снова я за помощью к господам программистам. Хочу в своем советнике использовать индикатор HMA Arrows, который читает инфу с HMA Color. Но у меня не получается использовать iCustom. Искал причину и вот решил посмотреть какую же инфу мне выдает iCustom. ВТФ?!!! Как и почему? я в ступоре? подскажите в чем у меня проблема. Прикладываю скрин, индикаторы, советник, в котором я прописал тупо iCustom и Print. Помогите получить нормальные данные. Добавлено: 13-05-2014 11:34:29Форум не дает "сову" прикрепить, поэтому код сюда кину, извиняйте и не ругайтесь сильно...extern double Lots = 0.01;extern int TakeProfit = 10;extern int StopLoss = 14; // Стоплосс, 0 - не используетсяextern int Slippage = 0;extern string Indicator_HMA = "Данные индикатора HMA_arrows";extern int HMA_Period = 7;extern int HMA_PriceType = 0;extern int HMA_Method = 3;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() { return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason) { }//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick() {double arrow_down=iCustom(Symbol(), 0, "HMA Arrows", HMA_Period, HMA_PriceType, HMA_Method, 0,0); Print("arrow_down"," ",arrow_down);double arrow_up=iCustom(Symbol(), 0, "HMA Arrows", HMA_Period, HMA_PriceType, HMA_Method, 1,0); Print("arrow_up"," ",arrow_up); }//+------------------------------------------------------------------+icustom.JPGHMA_Arrows.mq4HMA_Arrows.ex4HMA_Color.mq4HMA_Color.ex4 Изменено 13 мая, 2014 пользователем SpyRF Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 13 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 мая, 2014 double arrow_down=iCustom(Symbol(), 0, "HMA Arrows", HMA_Period, HMA_PriceType, HMA_Method, 0,0); Пробуй так:double arrow_down=iCustom(Symbol(), 0, "HMA Arrows", HMA_Period, HMA_PriceType, HMA_Method, 0,1);Поясню: индюк HMA Arrows не рассчитывает значения для 0-бара, только начиная с 1. А Вы его о 0-баре спрашиваете - вот он и отвечает... Ссылка на сообщение Поделиться на другие сайты More sharing options...
SpyRF Опубликовано 13 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 мая, 2014 double arrow_down=iCustom(Symbol(), 0, "HMA Arrows", HMA_Period, HMA_PriceType, HMA_Method, 0,0); Пробуй так:double arrow_down=iCustom(Symbol(), 0, "HMA Arrows", HMA_Period, HMA_PriceType, HMA_Method, 0,1);Поясню: индюк HMA Arrows не рассчитывает значения для 0-бара, только начиная с 1. А Вы его о 0-баре спрашиваете - вот он и отвечает... Огромное спасибо. Ссылка на сообщение Поделиться на другие сайты More sharing options...
geugene Опубликовано 18 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 мая, 2014 Народ, кто смотрел 2-й урок по MQL? _http://tradelikeapro.ru/izuchaem-mql-urok-n-2-tsiklyi-funktsii-i-ordera-v-sovetnike/Все написал по видео. Но, сова открывает ордера только buylimit. Почему? Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 18 мая, 2014 Автор Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 мая, 2014 Народ, кто смотрел 2-й урок по MQL? _http://tradelikeapro.ru/izuchaem-mql-urok-n-2-tsiklyi-funktsii-i-ordera-v-sovetnike/Все написал по видео. Но, сова открывает ордера только buylimit. Почему? я смотрел, но ответить почему не смогу пока Вы свой вариант не предъявите :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
geugene Опубликовано 18 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 мая, 2014 Народ, кто смотрел 2-й урок по MQL? _http://tradelikeapro.ru/izuchaem-mql-urok-n-2-tsiklyi-funktsii-i-ordera-v-sovetnike/Все написал по видео. Но, сова открывает ордера только buylimit. Почему? я смотрел, но ответить почему не смогу пока Вы свой вариант не предъявите :) Нет у меня своего варианта (пока что). Я просто хочу понять, почему открывает только buylimit? Если закрыть вызов buylimit, то никаких ордеров не открывает. Игнорит полностью вызов selllimit.int start(){ if(HourEnd == TimeHour(TimeCurrent())) { DeleteOrdes(); } 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 + TakeProfit*Point,Digits); OrderSend(Symbol(),OP_BUYLIMIT, Lots, minprice, Slippage, SL, TP, comment, Magic, 0, Blue); SL = NormalizeDouble(maxprice + StopLoss*Point,Digits);SL = NormalizeDouble(maxprice - TakeProfit*Point,Digits); OrderSend(Symbol(),OP_SELLLIMIT, Lots, maxprice, Slippage, SL, TP, comment, Magic, 0, Red); } return(0);}UPDATE: нашел ошибку. В вызове OrderSend для selllimit два SL определено. Исправил нужный на ТР. ЗАРАБОТАЛО. Изменено 18 мая, 2014 пользователем geugene Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 18 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 мая, 2014 Господин xbms в уроке с классами описал унивирсальную функцию для закрытия ордеров.Возьми ее на вооружение и тебе ее будет достаточно,только единственное она без обработки на ошибки.ну там на реквоты и все такое. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти