0ll Опубликовано 8 октября, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 октября, 2019 @diodio а почему бай сетку не в цикле закрываете? ордер-же не один. Хотел помочь с алгоритмом, но пока не могу - сама идея не ясна. Если просадка по бай небольшая она всегда меньше закрытых (за какой период?) селл, НО зачем закрывать сетку с малой просадкой? если просадка большая, то и сравнивать с закрытыми селл ордерами зачем? - Вы же депозит спасаете, какая разница был ранее профит или нет? или депозит-неудачник в продажах подлежит сливу? ))) Ссылка на сообщение Поделиться на другие сайты More sharing options...
diodio Опубликовано 9 октября, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 октября, 2019 22 часа назад, 0ll сказал: @diodio а почему бай сетку не в цикле закрываете? ордер-же не один. Хотел помочь с алгоритмом, но пока не могу - сама идея не ясна. Если просадка по бай небольшая она всегда меньше закрытых (за какой период?) селл, НО зачем закрывать сетку с малой просадкой? если просадка большая, то и сравнивать с закрытыми селл ордерами зачем? - Вы же депозит спасаете, какая разница был ранее профит или нет? или депозит-неудачник в продажах подлежит сливу? ))) Да тут идея проста, например идет просадка по покупкам, но в то же время отработывают сетки на продажу, закрываясь в профит. Мы суммируем профит этих сеток на продажу с условием что они открылись после просадочной сетки по времени, и вот наработанным профитом закрываем потихоньку ордера в просадке по баю при циклическом переборе. Вроде по коду все просто и ошибок тестер не выдал, значит логическая ошибка. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 9 октября, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 октября, 2019 @diodio давай реально посмотрим: сетка бай растёт с увеличением лота, сетки селл короткие 1-2 ордера - лот практически начальный. Следовательно прибыль селл сеток в сумме будет не больше чем просадка 1-го и максимум 2-го ордера бай сетки. Далее: закрыли 1 ордер бай сетки за счёт почти всей прибыли селл сеток, нужно уменьшить сумму прибыли и смотреть возможность закрытия 2 ордера. Далее прибыли не хватило (кончилась), что делать? стоило-ли огород городить? Есть другой алгоритм: периодически суммируются PL всех ордеров (открытых и закрытых) с момента старта зависшей сетки сетки. Сначала 1 ордер закрывают за счёт прибыли встречных сеток, затем на откатах выходят в прибыль старшие ордера и за счёт этой прибыли закрываются другие ордера зависшей сетки, начиная с младших. Затем цена опять идёт против зависшей сетки и нужно открывать только-что закрытое колено только уже пересчитанной лотностью. Короче: всё это "суета и томленье духа", Старик показал, что любое частичное закрытие ордеров сетки - ненужная Ненормативная лексика, нужно точнее просчитать саму сетку и включать проскальзывание открытия колен от рыночных условий. Ссылка на сообщение Поделиться на другие сайты More sharing options...
diodio Опубликовано 10 октября, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 октября, 2019 В 09.10.2019 в 22:05, 0ll сказал: давай реально посмотрим: сетка бай растёт с увеличением лота, лот стабилен и не увеличивается что на бай и что на селл В 09.10.2019 в 22:05, 0ll сказал: Далее: закрыли 1 ордер бай сетки за счёт почти всей прибыли селл сеток, тем самым условие по просадке больше не исполняется, а это значит что бай сетка может сама себя вытянуть в лучшем случае, тем временем селл сетки наращивают профит и опять таки если необходимо то закрывают следующий ордер. Да, согласен, прибыль небольшая, но она есть в итоге. Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 11 октября, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 октября, 2019 @diodio в блоке где ты подсчитываешь профит закрытых ордеров на продажу есть строка "cSellProfitClose[i - 1] = OrderProfit();". Это не правильное выражение "i - 1". При первом цикле "i" будет равно "0", и получается что будем обращаться в первом цикле к "-1" элементу массива, так как "0 - 1 = -1". Такого нет. Полюбасу когда кидаешь этот советник на график у тя лог кричит "Алё, у тя не правильное обращение к массиву". И там к стати говоря, лог говорит нам в каком месте ошибка, прям тычет пальцем. Вывод, нужно смотреть логи. Такая же байда и здесь "cBuyProfitOpen[i - 1] = OrderProfit() + OrderCommission() + OrderSwap();" 14 часов назад, diodio сказал: Все настолько просто я написал и это я думаю должно работать, тестер ошибок не выдал, журнал единственное написал что массив вне диапазона (array out of range), ну вообщем сижу 2 недели непонимая где ошибка. Ну ты!... ВООБЩЕ!... Почему это критичная ошибка! И действительно, все настолько просто. Вот представь инкассацию банка, положим ее в массив "inkassacija[]", едет три машины. Посчитали профит первой машины и надо куда то это положить. В первом цикле, так получается что обращаемся к элементу -1 в массиве, потому что 0 - 1 = -1, но такого нет. Счетные машинки не виноваты что они такие, они всего лишь строго выполняют алгоритм. Поэтому первая машина идет ... ! С второй машиной все совсем другое дело, второй цикл и обращение идет элементу 0, так как 1 - 1 = 0. Подсчитали и третью машину 2 -1 = 1. Теперь два банка сверяют приход расход, тут выясняется ... ! Аналогично "cSellProfitClose[b-1]=+SellProfitClose; //суммируем профит" на первом цикле обращение к -1 элементу. Здесь те же ..., только в профиль. "cBuyProfitOpen[t-1]=+BuyProfitOpen; // так-же суммируем профит" на последней итерации обращение в пустоту. Вывод: смотреть логи! в личке и на форме код разный, выложи актуальный. Мания величия магии выражения "-1" переоценена. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
diodio Опубликовано 13 октября, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 октября, 2019 Вах, вот это я дал , вообще грубая ошибка!!! При первой же итерации идет подстановка нуля, как я это пропустил не понимаю, машинально наверное, конечно там ничего считаться не будет. Так же и при переборе того же массива cSellProfitClose[b-1]=+SellProfitClose, думалось что сначала должен быть ноль а не еденица. Все верно MikR0ReR, спасибо. Выкладываю последнюю версию кода если кому надо: Спойлер { //закрытие покупок OrderProfitSellClose(cSellProfitClose);// Профит уже закрытых ордеров на продажу for(int b=0; b < ArraySize(cSellProfitClose); b++) { cSellProfitClose=+SellProfitClose; } OrderProfitBuy(cBuyProfitOpen); // Профит еще не закрытых ордеров на покупку for(int t=ArraySize(cBuyProfitOpen)-1; t>=0; t--) { cBuyProfitOpen[t]=+BuyProfitOpen; if(MathAbs(BuyProfitOpen) <= SellProfitClose) { if(OrderType() == OP_BUY) bool close_profit_buy = OrderClose(OrderTicket(), OrderLots(), Bid, Slippage); } } } //+---------------------Профит уже закрытых ордеров на продажу----------------------+ void OrderProfitSellClose(double &cSellProfitClose[]) { int counter=0,size=OrdersHistoryTotal(); ArrayResize(cSellProfitClose,size); for(int i=0; i<OrdersHistoryTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) { if(OrderType()==OP_SELL) { cSellProfitClose=OrderProfit()+OrderCommission()+OrderSwap(); counter++; } } } ArrayResize(cSellProfitClose,counter); return; } //+---------------------Профит еще не закрытых ордеров на покупку----------------------+void OrderProfitBuy(double &cBuyProfitOpen[]) { int counter=0,size=OrdersTotal(); ArrayResize(cBuyProfitOpen,size); for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderType()==OP_BUY) { cBuyProfitOpen=OrderProfit()+OrderCommission()+OrderSwap(); counter++; } } } ArrayResize(cBuyProfitOpen,counter); return; } Теперь работает, не все условия по закрытию проверял, но хотя бы уже закрывает. Изменено 13 октября, 2019 пользователем diodio 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
szln Опубликовано 17 октября, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 октября, 2019 Добрый день! Речь про статью на блоге Павла "MQL4: Пишем советник по индикатору открытых позиций трейдеров" http://tlap.com/mql4-ea-po-indiky-otkryt-pozitsij/ Автор: Silentspec Но почему то ему в личку писать нельзя ) А ссылка на обсуждение темы ведет в эту ветку форума... Есть 2 вопроса (вопросы как бы к Silentspec, но если кто то за него в курсе, и он не может или не хочет отвечать, то просьба ответить): 1. Есть ли файлик с приличным накоплением данных. Для анализа так сказать... 3. В статье про написание GimmeYaMoneyMan сделки проводяться не против, а ПО данным толпы. Это задумка такая? или так получилось? Мне кажется тема перспективная для изучения... Но поскольку стандартно на истории не проверишь... то надо придумать приблуду и наложить данные за период на график, для наглядности. Eсли нет в планах, чего то подобного - отметки на графике участков, где например > 80%, сам наверное смогу накрапать... а вот данные за приличный период долго копить... Так что если вдруг пишется в файлик фоном... а ты в статье писал: "начну собирать статистику для того, чтобы позже продолжить анализ" был бы рад если презентуешь )) Формат txt как пишет GimmeYaMoneyMan вполне устроит. Извини если чего лишнего попросил, что дорого как память... )) Ссылка на сообщение Поделиться на другие сайты More sharing options...
molot_1 Опубликовано 17 октября, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 октября, 2019 Здравствуйте !!! Подскажите пожалуйста , где я сделал ошибку!!! SELL_STOP.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 17 октября, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 октября, 2019 @molot_1 если выбрали OP_SELLSTOP приказ то цена должна быть ниже текущей текущей. А у вас по Ask+Distance*Point она выше. цену price тоже нужно нормализовать "NormalizeDouble()". Вывод: Проверьте ваши знания, что такое STOP и LIMIT ордера по каким ценам открываются бай и сел ордера и закрываются тоже 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
molot_1 Опубликовано 17 октября, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 октября, 2019 Спасибо, но в уроке "Как написать форекс скрипт на MQL'' не нормализовывают цену price. Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 17 октября, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 октября, 2019 @molot_1 Но там и цену брали без обработок, напрямую bid ask. Вы к ней прибавляете профит. Можно конечно и без нормалайза, только где гарантии что такая цена понравится брокеру и не будет у вас ошибки? Вообщем смотрите логи терминала, они полезны при типичных, распространенных ошибках. Изменено 30 октября, 2019 пользователем MikR0ReR 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Александр 1939 Опубликовано 30 октября, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 октября, 2019 В 17.10.2019 в 19:44, MikR0ReR сказал: Но там и цену брали без обработок, напрямую bid ask. Вы к ней прибавляете профит. Можно конечно и без нормалайза, только где гарантии что такая цена понравится брокеру и не будет у вас ошибки? Вообщем смотрите логи терминала, они полезны при типичных, распространенных ошибках. вопрос по индикаторам BufferC инди рисует по ценам закрытия каждой свечи.как сделать считалку по BarLine1 = 3;(по BarLine1 по доступным барам ) { for (int i=0; i<=Bars; i++)//цикл по доступным барам от 0 { BufferC= Close; //extern int BarLine1 = 3; BufferOC=NormalizeDouble (((Open+ Close)/2),5) ;//NormalizeDouble(((Open+ Close)/2 } return(rates_total); }//OnCalculate Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 30 октября, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 октября, 2019 @Александр 1939 Ничего не понял! 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Александр 1939 Опубликовано 31 октября, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 октября, 2019 https://www.mql5.com/ru/charts/10881402/cadjpy-h1-alpainternational подробно тут Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 31 октября, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 октября, 2019 @Александр 1939 input int BarLine1 = 3;//сколько баров принимают в расчете индикатора double BufferC[],//буфер индикатора summ;//сумма цен по рассчитываемым барам int bar;//сколько баров рассчитывать для отрисовки индикатора //считаем сколько баров нужно обработать //если кол-во всех баров совпадает с обработанными, пересчитываем только текущий бар if(prev_calculated == rates_total) bar = 0; else //если кол-во обработанных баров больше 0 и не равно общему кол-во баров, пересчитываем все не отрисовываем бары if(prev_calculated != rates_total && prev_calculated > 0) bar = prev_calculated; else //если кол-во обработанных баров равно 0, это первый запуск и нам надо пересчитать все бары //и корректируем с учетом BarLine1 и то, что нумерация начинается с 0, для того чтобы не выйти за рамки массива if(prev_calculated == 0) bar = rates_total - 1 - BarLine1; //считаем среднюю для каждого бара for(int i = bar; i >= 0; i--) { summ = 0; //суммируем цены за нужное кол-во баров for(int q = i; i + BarLine1 < q; q++) { //то самое суммирование цен за нужное кол-во баров summ += Close[q]; } //считаем среднюю и передаем ее индикатору, т.е в массив индикатора BufferC[i] = summ / BarLine1; } Изменено 31 октября, 2019 пользователем MikR0ReR 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Александр 1939 Опубликовано 1 ноября, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 ноября, 2019 Спасибо!Но не получается график остаётся чистым.Загрузил инди посмотрите может получится.Спасибо ItestOC.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 1 ноября, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 ноября, 2019 @Александр 1939 Вот то что у Вас не получилось, вот этот код мне нужен. Увидеть как Вы старались. Ссылка на сообщение Поделиться на другие сайты More sharing options...
batmanuyga Опубликовано 12 ноября, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 ноября, 2019 Всем привет. Ребята, подскажите. Знаю, как сделать, чтоб сова начинала и заканчивала работу в определенные часы : if(TimeHour(TimeCurrent())>=HourStart && TimeHour(TimeCurrent())<= HourStop ) А вот как сделать, чтоб еще и в определенные минуты? Начало в 0.30 и конец в 23.30. Изменено 12 ноября, 2019 пользователем batmanuyga Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 12 ноября, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 ноября, 2019 @batmanuyga TimeMinute() 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
batmanuyga Опубликовано 13 ноября, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 ноября, 2019 14 часов назад, MikR0ReR сказал: TimeMinute() Спасибо, очень исчерпывающе... Это я первым делом и хотел написать : if(TimeHour(TimeCurrent())>=HourStart && TimeMinute(TimeCurrent() )>=MinuteStart && TimeHour(TimeCurrent())<= HourStop && TimeMinute(TimeCurrent() )<=MinuteStop) Ерунда тогда какая то получается. Он тогда каждый час только после 30 минуты начнет работать. Изменено 13 ноября, 2019 пользователем batmanuyga Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 13 ноября, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 ноября, 2019 2 часа назад, batmanuyga сказал: Спасибо, очень исчерпывающе... Ок, можно так: double tTime = TimeHour(TimeCurrent()) + TimeMinute(TimeCurrent() ) / 100; // получится текущее время = 23 + 0.30 = 23.30 теперь сравниваем с tTime > TimeStart && tTime < TimeEnd Только TimeStart нужно задавать double, типа 0,30 Изменено 13 ноября, 2019 пользователем 0ll дописал 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 13 ноября, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 ноября, 2019 @batmanuyga Я вас понял! Разбираем! Точнее, по просчетам в моей голове, если поставить одинаковые минуты то вообще не будет работать. Допустим торгуем с 12.30 до 18.30, что поучится. рассмотрим время 13.20 13 часов больше или ровно 12 часам разрешенного торгового времени? Да! 20 минут больше или ровно 30 минутам разрешенного торгового времени? Нет! 13 часов меньше или ровно 18 часам разрешенного торгового времени? Да! 20 минут меньше или ровно 30 минутам разрешенного торгового времени? Да! рассмотрим время 13.40 13 часов больше или ровно 12 часам разрешенного торгового времени? Да! 40 минут больше или ровно 30 минутам разрешенного торгового времени? Да! 13 часов меньше или ровно 18 часам разрешенного торгового времени? Да! 40 минут меньше или ровно 30 минутам разрешенного торгового времени? Нет! По расчетам мы видим что оба условия не выполняются. Торговли не будет. Поправка в моих расчетах составляет лишь тот факт что будет торговля всего 1 минуту, это в 30 минут каждого часа. При условиях, что в выражении будет стоять знак равно (=) например (>=) или (<=) и одинаковые минуты. Теперь, если поставить разные минуты, то выпадет торговля за их пределами. Допустим торгуем с 12.15 до 18.45, что поучится. рассмотрим время 13.10 13 часов больше или ровно 12 часам разрешенного торгового времени? Да! 10 минут больше или ровно 15 минутам разрешенного торгового времени? Нет! 13 часов меньше или ровно 18 часам разрешенного торгового времени? Да! 10 минут меньше или ровно 45 минутам разрешенного торгового времени? Да! рассмотрим время 13.50 13 часов больше или ровно 12 часам разрешенного торгового времени? Да! 50 минут больше или ровно 15 минутам разрешенного торгового времени? Да! 13 часов меньше или ровно 18 часам разрешенного торгового времени? Да! 50 минут меньше или ровно 45 минутам разрешенного торгового времени? Нет! По расчетам мы видим что оба условия не выполняются. Торговля будет только с 15 до 45 минут каждого часа. С 45 до 15 нет торговли. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
batmanuyga Опубликовано 13 ноября, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 ноября, 2019 Ок, можно так: double tTime = TimeHour(TimeCurrent()) + TimeMinute(TimeCurrent() ) / 100; // получится текущее время = 23 + 0.30 = 23.30 Гениально ! Спасибо.. Вот ведь, и так и этак пробовал, всю голову изломал. Изменено 13 ноября, 2019 пользователем batmanuyga Ссылка на сообщение Поделиться на другие сайты More sharing options...
Владимир Стариков Опубликовано 13 ноября, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 ноября, 2019 При тестировании возникает ошибка 4108. Вопросы: 1. Как вылечить эту ошибку? 2. Насколько она критична? 3. Может ли быть так, что она есть в тестере, а в торговле ее не будет? Спасибо за ответы. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 13 ноября, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 ноября, 2019 1 час назад, Владимир Стариков сказал: При тестировании возникает ошибка 4108. Ошибка 4108 - неверный номер тикета. т.е. Вы пытаетесь что-то сделать с ордером при этом указываете другой тикет - наверное... Я-б сказал, что очень критическая ошибка... Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти