0ll Опубликовано 21 апреля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 апреля, 2016 dermitay уже придумал 1-проходный алгоритм. только надо решить: по одному символу в разные стороны торговля разрешена? если да и открыты разные ордера, то это считать или локи не считаются? А если в разных символах есть лок по валюте, то как? Короче надо вводить строгий/не_строгий режим по локам.Суть: нам для анализа нужны только 2 валюты, в цикле по ордерам сразу выделяем валюты, если не наши - пропускаем, если хоть 1 наша - счетчик бай/селл +1. И всё. на выходе из цикла у тебя будут 4 счётчика - 1 валюта бай и селл и 2 валюта бай и селл.единственный нюанс: ты записываешь новый символ в строку для его дальнейшего пропуска, а если торговля разрешена в обе стороны,то надо иметь 2 строки для бай и селл и в зависимости от типа ордера писать символы.ПС: если что код накидаю.Вот код, который выделяет 2 валюты из символа с учётом префиксов и суффиксов: // GBPUSD sym1 = SymbolInfoString( Symbol(), SYMBOL_CURRENCY_BASE ); //GBP sym2 = SymbolInfoString( Symbol(), SYMBOL_CURRENCY_PROFIT ); //USD Изменено 21 апреля, 2016 пользователем 0ll 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 21 апреля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 апреля, 2016 по одному символу в разные стороны торговля разрешена? да Цитата если да и открыты разные ордера, то это считать или локи не считаются? нет, лок игноритсясчитаются ордера вне лока( >1 в возврате CountOrders(...)). но как ты понимаешь - лок тут это два ордера одинакового объема смотрящие в разные стороны. анализа объемов и т.д. тут нет и в помине(это я про сложные составные локи) Цитата А если в разных символах есть лок по валюте, то как? хм... такого в моем коде нет... хотя логически так-то есть. грубо говоря у меня реализвано что не больше двух(переменная NumMaxCur ) сеток в бай по GBP например (при этом учитывается и EURGBP в селл - то есть будет запрет на вход по построению сетки в селл по этой паре если существует уже две другие пары GBP### в бай или другой пример на запрет по конкретному EURGBP в селл - если сущесвует уже две пары по которым строится сетка в селл и эти пары имеют вид EUR###). то есть - именно это и реализовано. Цитата Суть: нам для анализа нужны только 2 валюты, в цикле по ордерам сразу выделяем валюты, если не наши - пропускаем, если хоть 1 наша - счетчик бай/селл +1. И всё. на выходе из цикла у тебя будут 4 счётчика - 1 валюта бай и селл и 2 валюта бай и селл. именно это у меня и реализовано Цитата единственный нюанс: ты записываешь новый символ в строку для его дальнейшего пропуска, а если торговля разрешена в обе стороны,то надо иметь 2 строки для бай и селл и в зависимости от типа ордера писать символы. посмотри внимательней, у меня при нахождении символа идет полная проверка на все(я парсю как пару входящую в функцию, так и сам символ текущего перебираемого ордера в цикле, а дальше проверяю как на прямую корреляцию так и на обратную), и на это тоже. поэтому в дальнейшем символ и исключается. Цитата Вот код, который выделяет 2 валюты из символа с учётом префиксов и суффиксов: // GBPUSD sym1 = SymbolInfoString( Symbol(), SYMBOL_CURRENCY_BASE ) ); //GBP sym2 = SymbolInfoString( Symbol(), SYMBOL_CURRENCY_PROFIT ) ); //USD не знал, спасибо \M/ >000ЗЫ: так-то код у меня крутится уже двое суток и пока все работает именно так как задумано, я поэтому его и выложил. Изменено 21 апреля, 2016 пользователем dermitay 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 21 апреля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 апреля, 2016 Вот накидал код 1 проходного алгоритма ( не проверял ) Спойлер bool CheckFree(string para, int sd){ int s1cnt[2]={0,0}, s2cnt[2]={0,0}, dir = -1; string s1str = SymbolInfoString( para, SYMBOL_CURRENCY_BASE ); string s2str = SymbolInfoString( para, SYMBOL_CURRENCY_PROFIT ); string s1tmp = "", s2tmp = ""; string name[2]; for ( int no = OrdersTotal()-1; no >= 0; no-- ) { if ( !OrderSelect(no, SELECT_BY_POS, MODE_TRADES) || OrderSymbol() == para || OrderMagicNumber() != Magic || OrderType() > 1 ) continue; dir = OrderType(); if (StringFind(name[dir], OrderSymbol(), 0) >= 0) continue; name[dir] += OrderSymbol() + ","; s1tmp = SymbolInfoString( OrderSymbol(), SYMBOL_CURRENCY_BASE ); s2tmp = SymbolInfoString( OrderSymbol(), SYMBOL_CURRENCY_PROFIT ); if ( s1str == s1tmp ) s1cnt[dir]++; else if ( s1str == s2tmp ) s1cnt[1-dir]++; if ( s2str == s1tmp ) s2cnt[dir]++; else if ( s2str == s2tmp ) s2cnt[1-dir]++; } //В строгом случае - лок всё равно запрет return( !(s1cnt[sd] >= NumMaxCur || s2cnt[1-sd] >= NumMaxCur) );} ПС: исправил - исключил отложки. Изменено 21 апреля, 2016 пользователем 0ll 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
pavlus777 Опубликовано 21 апреля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 апреля, 2016 Обновлен урок по написанию сеток:http://tradelikeapro.ru/mql-pishem-setochnyiy-sovetnik/ 6 Ссылка на сообщение Поделиться на другие сайты More sharing options...
paberu Опубликовано 21 апреля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 апреля, 2016 Делаю 2-й урок. а у меня выходит ошибка '{' - function definition unexpected, хотя все копирую как в видео.можете глянуть, в чем дело.[SPOILER]void OnTick(); { GetMinPrice(); GetMaxPrice(); Comment("MinPrice: " + DoubleToStr(minprice, 5) + "\n" + "Maxprice: " + DoubleToStr(maxprice, 5)); }void GetMinPrice(); { for(int i=0; i ( mp = iLow(Symbol(),PERIOD_CURRENT,i); if(mp minprice = mp; ) return; }void GetMaxPrice(); { for(int i=0; i ( mp = iHigh(Symbol(),PERIOD_CURRENT,i); if(mp > maxprice) maxprice = mp; ) return; } А ты перед "{" убери ";". Точка с запятой ставится только если ты вызвал функцию откуда-то и после этого завершил написание действия. Т.е. void Shalom(){ Bla bla; if (aleichem()) Bla bla; else Shabat(4, 33);}bool aleichem(){ Bla bla; return (false) ;}Shabat(int a, int b){ Bla bla;}спасибо. все скомпилировалось теперь без ошибок. Ссылка на сообщение Поделиться на другие сайты More sharing options...
SVS696 Опубликовано 23 апреля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2016 Собственно эта тема и заставила меня создать эту. Также там мне понравилась идея с неиспользуемой переменной, так это сильно повышает шанс рефакторинга чем простой коммент.А вот вы как помечайте костыли? Ссылка на сообщение Поделиться на другие сайты More sharing options...
boovood Опубликовано 23 апреля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2016 Вопрос по второму уроку:-Как задать время жизни отложенного ордера, скажем на несколько часов?это по какой то причине не объяснили в уроке :(( :(( Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 23 апреля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2016 -Как задать время жизни отложенного ордера, скажем на несколько часов?А чем не устраивает datetime expiration=0, // срок истечения ордера в функции OrderSend? или справку не читаем в принципе? 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 23 апреля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2016 Старый бородатый анекдот в тему:Подходит сын к отцу-программисту и спрашивает:- Папа, а почему солнце всходит на востоке, а садиться на западе?- Сынок, а оно точно всходит на востоке?- Да.- А точно садится на западе?- Да папа.- И так каждый день работает?- Конечно - Сынок, оставь все как есть и ничего не трогай! 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
kofesutra Опубликовано 23 апреля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2016 А вот вы как помечайте костыли? В коде "// ----- пометка"а в шапке так: "// сделать то-то, строки 123-150" Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 23 апреля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2016 У меня вопрос по поводу OnChartEvent(...) в тестере с включенной визуализацией. Бьюсь уже часа два, в тестере не происходит обработка этого события(вообще, принтами обозначаю вход в событие и в итоге по нулям, без единой ошибки, принты НЕ выводятся). На реальном в пятницу все работало(это я к тому что я не дуб и в курсе как работать с OnChartEvent()).При этом я знаю что тот же Протрейдер обработку клавиш в тестере каким-то образом обрабатывает(через dll скорее всего но нахера так изгаляться?). Толи лыжи не едут толи я...Есть идеи почему такая дребедень и как это корректно обернуть в тестере?Пример: Спойлер buy и sell - уже созданные кнопки. нажатие по ним и пытаюсь делать в тестере но нифига не происходит.void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam) { if(id==CHARTEVENT_OBJECT_CLICK) { Print("123"); if(sparam=="buy") { Print(">>>>>>>>>>"); Openord(0); ObjectSetInteger(0,"buy",OBJPROP_STATE,0); return; } //----------------------------------------------------------------------------------------------------------------- if(sparam=="sell") { Openord(1); ObjectSetInteger(0,"sell",OBJPROP_STATE,0); return; }} Добавлено: 23-04-2016 09:39:15вопрос снимается... пустил обработку нажания клавиш в обход OnChartEvent() путем проверки нажатия через ObjectGetInteger(0,имя_кнопки,OBJPROP_STATE) Изменено 23 апреля, 2016 пользователем dermitay 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
boovood Опубликовано 23 апреля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2016 Цитата: boovood от Сегодня в 09:04:21 am-Как задать время жизни отложенного ордера, скажем на несколько часов?А чем не устраивает datetime expiration=0, // срок истечения ордера в функции OrderSend? или справку не читаем в принципе?Умник покажи мне в справке где вообще описано как задавать время жизни отложенного ордера! Желательно с примером реализации!!! я буквально вчера начал изучать язык программирования и столкнулся с проблемой - вот её и выкладыаю Ссылка на сообщение Поделиться на другие сайты More sharing options...
SVS696 Опубликовано 23 апреля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2016 А вот вы как помечайте костыли? В коде "// ----- пометка"а в шапке так: "// сделать то-то, строки 123-150" Ну номера строк имеют саоюство иногда смещаться Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 23 апреля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2016 Цитата: boovood от Сегодня в 09:04:21 am-Как задать время жизни отложенного ордера, скажем на несколько часов?А чем не устраивает datetime expiration=0, // срок истечения ордера в функции OrderSend? или справку не читаем в принципе?Умник покажи мне в справке где вообще описано как задавать время жизни отложенного ордера! Желательно с примером реализации!!! я буквально вчера начал изучать язык программирования и столкнулся с проблемой - вот её и выкладыаю батенька, вы приперлись за советом на форум а уже выеживаетесь. вас в гугле забанили?на тупые вопросы а что такое datetime в expiration ответ найдете там же - в официальной справке mql4https://docs.mql4.com/ru/trading/ordersend 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
kofesutra Опубликовано 23 апреля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2016 Ну номера строк имеют саоюство иногда смещаться Согласен, бывает.Но главное - записи в шапке: как только открываю код - сразу вижу. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
boovood Опубликовано 23 апреля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2016 Согластно справке я написал tiket=OrderSend(Symbol(),OP_BUYSTOP, Lots, maxprice,3,SL,TP,"",magik,D'22:59:00',Blue);но ордера живут бесконечно а не заканчивают жизнь в 22:59:00 каждого дня.как мне это исправить?я раньше спрашивал меня послали в справку и вобще накинулись вые....какие мы крутые чтоб мы нашли эту информацию в справке.Что нашёл в справке то не работает прошу помощи Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 23 апреля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2016 в expiration вбивается время, которое ордер будет жить в секундах а не время в которое он должен удаляться. для примера вбей туда 3600 и ордер удалится через час после выставления(если не заденет его ценой).пиши функцию удаления ордеров в нужное время. по-другому никак. не, ну можно заморочиться с вычислением кол-ва секунд между нужным временем для удаления и текущим, и пихать эту разницу в expiration.ЗЫ: ордера не живут бесконечно. они живут ровно столько секунд, сколько задано(даже если это при переводе на года будет хоть 30 лет). Спойлер ЗЫЫ: по поводу твоих эмоций - ты перепутал ресурс, здесь в основном сидят взрослые люди(которым в принципе абсолютно побарабану на мнение кого-то там ноунейма в онлайне), и то что знания и опыт ресурса ты видишь как "вые..." и типа "какие мы крутые", то это только твои проблемы, здесь этого нет. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
boovood Опубликовано 23 апреля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2016 в expiration вбивается время, которое ордер будет жить в секундах а не время в которое он должен удаляться.пиши функцию удаления ордеров в нужное время. по-другому никак.не, ну можно заморочиться с вычислением кол-ва секунд между нужным временем для удаления и текущим, и пихать эту разницу в expiration.ЗЫ: ордера не живут бесконечно. они живут ровно столько секунд, сколько задано(даже если это при переводе на года будет хоть 30 летОгромное спасибо что подсказали как закрывать отложенные ордера через функцию. Вот что получилось(весь советник по стратегии пять пипсов от верха и низа предыдущего дня) test2.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 23 апреля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2016 boovood спасибо за умника :dЧуток поправил Вашу сову - код оптимизировал, можешь посмотреть, даже в профит работает...test2.mq4 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Дмитрий_2008 Опубликовано 23 апреля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2016 всем привет.сделал домашнее задание по Уроку "Построение Индикаторов". все работает)) приятных выходных!!!! indtest.mq4GBPUSDDaily.png 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
boovood Опубликовано 23 апреля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2016 boovood спасибо за умника :dЧуток поправил Вашу сову - код оптимизировал, можешь посмотреть, даже в профит работает...* test2.mq4 (2.77 кБ - загружено 2 раз.)Ни х... себе оптимизировал что аж на один экран влазить стал!Что скажешь - Умник он и есть умник! Ссылка на сообщение Поделиться на другие сайты More sharing options...
boovood Опубликовано 24 апреля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 апреля, 2016 довёл свой советник до прибыльности! кстати написанного после просмотра второго урока! Спасибо автору уроков :d test2.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
boovood Опубликовано 25 апреля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 апреля, 2016 Народ купил советник, декомпильнул его. Не могу дописать на то что бы он выставлял ордера две ошибки появляются. Я понял что на место print вписывается проверка на выставленные ордера и ordersend а как правильно вписать не могу понять и ещё как написать чтоб он в обе стороны ордера открывал. помогите или советом или сами программируйте но допишите в коде что вы сделали чтоб можно было понять. Заранее благодарен. Забиваем_гвозди_Buy_Only~.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 25 апреля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 апреля, 2016 Народ купил советник, декомпильнул его. Не могу дописать на то что бы он выставлял ордера две ошибки появляются. Я понял что на место print вписывается проверка на выставленные ордера и ordersend а как правильно вписать не могу понять и ещё как написать чтоб он в обе стороны ордера открывал. помогите или советом или сами программируйте но допишите в коде что вы сделали чтоб можно было понять. Заранее благодарен. условие входа составлено крайне криво и дико. либо это декомпил так постарался, либо хз.что в твоем понимании "открывать ордер"? в тестере, даже в текущей версии он шпарит сигналы на вход чуть ли не каждые пять минут. и что с этим делать? каждые пять минут открывать ордер? а стопы какие? а ограничения? короче, имхо, слишком много белых пятен, тратить на это свое время... а смысл? вопросов слишком много а ответов нет.к тому же, в коде предоставлены условия только на бай. чтобы переписать для селл недостаточно применять противоположные значения(ибо их там реально дохрена), к тому же большинство из них непонятны вообще.ЗЫ: это дело не пяти минут. это нужно воткнуть полностью в алгоритм, но, как мне кажется, ты сам не знаешь логики этого кода.ЗЫЫ: не знаешь куда пихнуть ордерсенд - запихни его перед алертом или после - без разницы.ЗЫЫЫ: не, ну может и найдется добрая душа, которая перелопатит весь код. это я к тому, чтобы ты сильно не обижался, если такая добрая душа здесь не найдется)) Изменено 25 апреля, 2016 пользователем dermitay 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
boovood Опубликовано 25 апреля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 апреля, 2016 Я и не обижаюсь но нашёл ещё лучше советник халявный он много зарабатывает за день но на следующий день сливает так же успешно.Выкладываю его он хорош но выше описанный минус всё портит.может у кого есть какие соображения что с ним можно сделать.Буду рад даже совету. Добавлено: 25-04-2016 09:35:14 Кому надо красоту на график качаемпо ней можно торговать а не только смотретьНо я не пойму как всё это можно впихнуть в один файл индюкау кого будут мысли поделитесь.AGGRESSION_BAR_~.mq4Indicators.rar Изменено 25 апреля, 2016 пользователем Старик Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти