Mighty Mouse 243 Posted January 19 15.01.2019 в 03:07, Ugar68 сказал: Да, конечно Имеется дата, время некоего бара, можно узнать его OHLC не вычисляя сдвиг относительно края, что требуется для iOpen, iClose и тд? Есть ли более простое и элегантное решение? Share this post Link to post Share on other sites
Ugar68 331 Posted January 19 36 минут назад, Mighty Mouse сказал: Имеется дата, время некоего бара, можно узнать его OHLC не вычисляя сдвиг относительно края, что требуется для iOpen, iClose и тд? Есть ли более простое и элегантное решение? Я не знаю такого. А что iBarShift это не простое и элегантное решение? Мне кажется это очень удобный инструмент. Похоже не только мне, если его добавили в MQL5. Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.Чужие программы не переделываю. Share this post Link to post Share on other sites
Mighty Mouse 243 Posted January 19 50 минут назад, Ugar68 сказал: А что iBarShift это не простое и элегантное решение? Мне кажется это очень удобный инструмент. Спасибо, не знал. Share this post Link to post Share on other sites
torgf 0 Posted January 23 10.01.2019 в 20:09, Ugar68 сказал: Написал упрощенный вариант (бюджетный) функции. Не проверял. Разбирайтесь. Справочник в помощь. Спасибо. Самостоятельно до такого, мне ни кода бы не дойти Share this post Link to post Share on other sites
torgf 0 Posted January 23 Как можно записать в цикл следующее? int coun=2; bool bul=false; if(coun==1) { if( iAC(NULL,0,2)<iAC(NULL,0,3)&&Open[1]<Close[1]) bul=true; } if(coun==2) { if(iAC(NULL,0,2)<iAC(NULL,0,3)&&Open[1]<Close[1]&& iAC(NULL,0,3)<iAC(NULL,0,4)&&Open[2]<Close[2]) bul=true; } if(coun==3) { if(iAC(NULL,0,2)<iAC(NULL,0,3)&&Open[1]<Close[1]&& iAC(NULL,0,3)<iAC(NULL,0,4)&&Open[2]<Close[2]&& iAC(NULL,0,4)<iAC(NULL,0,5)&&Open[3]<Close[3]) bul=true; } чтобы не дописывать условие для coun=4 и т.д. Share this post Link to post Share on other sites
Ugar68 331 Posted January 23 17 минут назад, torgf сказал: Как можно записать в цикл следующее? int coun=2; bool bul=false; if(coun==1) { if( iAC(NULL,0,2)<iAC(NULL,0,3)&&Open[1]<Close[1]) bul=true; } if(coun==2) { if(iAC(NULL,0,2)<iAC(NULL,0,3)&&Open[1]<Close[1]&& iAC(NULL,0,3)<iAC(NULL,0,4)&&Open[2]<Close[2]) bul=true; } if(coun==3) { if(iAC(NULL,0,2)<iAC(NULL,0,3)&&Open[1]<Close[1]&& iAC(NULL,0,3)<iAC(NULL,0,4)&&Open[2]<Close[2]&& iAC(NULL,0,4)<iAC(NULL,0,5)&&Open[3]<Close[3]) bul=true; } чтобы не дописывать условие для coun=4 и т.д. Надо инвертировать условия. Как то так: int coun=4, i; bool bul=true; for(i=0;i<coun;i++) { if(iAC(NULL,0,i+2)>=iAC(NULL,0,i+3) || Open[i+1]>=Close[i+1]) { bul=false; break; } } 1 Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.Чужие программы не переделываю. Share this post Link to post Share on other sites
Mighty Mouse 243 Posted February 6 (edited) Есть ли способ во входящих параметрах советника в одной переменной определить в какую сторону открываться? Так чтобы в выпадающем списке можно было выбрать только что-то одно Buy или Sell. Пока что приходится использовать две переменных: input bool OpenBuy = true; input bool OpenSell = false; Edited February 6 by Mighty Mouse Share this post Link to post Share on other sites
Ugar68 331 Posted February 6 (edited) 1 час назад, Mighty Mouse сказал: Есть ли способ во входящих параметрах советника в одной переменной определить в какую сторону открываться? Так чтобы в выпадающем списке можно было выбрать только что-то одно Buy или Sell. Пока что приходится использовать две переменных: input bool OpenBuy = true; input bool OpenSell = false; Использовать перечисление enum open_direction(Buy=0,Sell=1); input open_direction OpenType=0; Edited February 6 by Ugar68 1 Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.Чужие программы не переделываю. Share this post Link to post Share on other sites
Mighty Mouse 243 Posted February 6 (edited) 24 минуты назад, Ugar68 сказал: Использовать перечисление enum open_direction(Buy=0,Sell=1); input open_direction OpenType=0; Ругается на второй строке 'open_direction' - declaration without type PS При копировании через буфер добавились лишние символы, вопрос решен, спасибо. Edited February 6 by Mighty Mouse Share this post Link to post Share on other sites
Ugar68 331 Posted February 6 21 минуту назад, Mighty Mouse сказал: Ругается на второй строке 'open_direction' - declaration without type enum open_direction{Buy=0,Sell=1}; input open_direction OpenType=0; Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.Чужие программы не переделываю. Share this post Link to post Share on other sites
Mighty Mouse 243 Posted February 6 2 часа назад, Ugar68 сказал: enum open_direction{Buy=0,Sell=1}; input open_direction OpenType=0; А можно ли то же самое сделать с тикетами? Бывают ситуации когда вручную открыто несколько позиций по одной паре, а советнику нужно дать дотралить только одну. Как при запуске совы выбрать нужную позицию? Share this post Link to post Share on other sites
Ugar68 331 Posted February 6 1 час назад, Mighty Mouse сказал: А можно ли то же самое сделать с тикетами? Бывают ситуации когда вручную открыто несколько позиций по одной паре, а советнику нужно дать дотралить только одну. Как при запуске совы выбрать нужную позицию? Для задания тикетов используется внешняя переменная int или uint. input uint Ticket=567463578; Это по простому. Если же хочется сложностей и надо менять значение оперативно и без инициализации, можно использовать окошко редактирования на чарте. В него вписать тикет. Можно так же использовать клик мыши по ордеру на чарте. Можно на чарте соорудить из графических объектов аналог перечисления. Интерактивная менюшка. Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.Чужие программы не переделываю. Share this post Link to post Share on other sites
sviter 0 Posted February 8 Здраствуйте! делаю скриншот экрана через функцию:WindowScreenShot ("Screenshotname.png",1280,720); но оно все сохраняет в папку Files, а мне надо указать путь в другую папку что бы сохрняло! как это сделать? Share this post Link to post Share on other sites
Ugar68 331 Posted February 8 1 час назад, sviter сказал: Здраствуйте! делаю скриншот экрана через функцию:WindowScreenShot ("Screenshotname.png",1280,720); но оно все сохраняет в папку Files, а мне надо указать путь в другую папку что бы сохрняло! как это сделать? Никак. В целях безопасности функции MQL ограничены песочницей. Для использования путей вне песочниц придётся использовать функции из DLL на других языках. Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.Чужие программы не переделываю. Share this post Link to post Share on other sites
sviter 0 Posted February 8 какой путь короткий, ато не могу подобрать? "\\Files\\Screenshotname.PNG" ??? Share this post Link to post Share on other sites
Ugar68 331 Posted February 9 10 часов назад, sviter сказал: какой путь короткий, ато не могу подобрать? "\\Files\\Screenshotname.PNG" ??? Можно длиннее. Например задать имя файла Name=StringConcatenate(WindowExpertName(),"\\Screen\\Screenshotname.PNG"); Будет путь с соответствующими подпапками Files\имя программы\Screen\Screenshotname.PNG. Но за пределы Files без DLL не выйти. Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.Чужие программы не переделываю. Share this post Link to post Share on other sites
laxander 89 Posted February 12 Тестирую мультивалютника на MQL5. Столкнулся со странным поведением CopyRates. Код: MqlRates bars[1]; datetime yesterday = TimeCurrent() - PeriodSeconds(PERIOD_D1); if(CopyRates("EURSGD", PERIOD_D1, yesterday, 1, bars) != 1) { Print(" CopyRates of EURSGD failed, no history"); } for (int i = 0; i < ArraySize(bars); i++) { PrintFormat("EURSGD Open: %f Close: %f", bars[i].open, bars[i].close); } if(CopyRates("EURNOK", PERIOD_D1, yesterday, 1, bars) != 1) { Print(" CopyRates of EURNOK failed, no history"); } for (int i = 0; i < ArraySize(bars); i++) { PrintFormat("EURNOK Open: %f Close: %f", bars[i].open, bars[i].close); } В журнал пишет: 2019.02.12 23:00:50.300 Core 01 2018.01.01 00:00:00 EURSGD Open: 1.194140 Close: 1.201360 2019.02.12 23:00:50.300 Core 01 2018.01.01 00:00:00 EURNOK Open: 1.194140 Close: 1.201360 Т.е. оно копирует данные по символу, на котором запущено тестирование (в данном случае я его запускал на EURUSD), а не по тому, что я явно указываю первым параметром CopyRates. Что за х? Почему? Самое странное, что еще неделю назад все работало, как надо. Рейты брались те, которые указаны в символе. Share this post Link to post Share on other sites
sviter 0 Posted February 12 Как сделать разницу между двумя датами??.... То есть к примеру 10.02.19 и к примеру текущую 12.02.19 и что бы выдавало 0 лет, 0 месяцев, 2 дня Share this post Link to post Share on other sites
AntFX 6,451 Posted February 12 (edited) 35 минут назад, sviter сказал: Как сделать разницу между двумя датами??.... То есть к примеру 10.02.19 и к примеру текущую 12.02.19 и что бы выдавало 0 лет, 0 месяцев, 2 дня (( TimeCurrent() - date ) / 86400 ) = число дней между датами // 86400 - число секунд внутри любого 1 дня Edited February 12 by AntFX 1 Share this post Link to post Share on other sites
torgf 0 Posted February 14 23.01.2019 в 06:24, Ugar68 сказал: Надо инвертировать условия. Как то так: Спасибо. Как, в индикаторе,получать сигнал только на открытии бара? Открылся бар красным цветом, а потом стал зелёным цветом. Нужно сигналить только если открылся зелёным. if(iAC(NULL,0,i+1)<iAC(NULL,0,i)){...} пыталась так if(timeeeS==Time[i])continue; timeeeS=Time[i]; if(iAC(NULL,0,i+1)<iAC(NULL,0,i)) и volume<=1 Не работает Share this post Link to post Share on other sites
AntZ 2 Posted February 14 (edited) Здравствуйте. Устанавливаю новостной индикатор *** п.8 *** в коде ошибка (видно на скрине) , подскажите что не так? Может подскажете хороший проверенный новостной индикатор? Edited February 14 by AntFX п. 8 Share this post Link to post Share on other sites
AntFX 6,451 Posted February 14 Не увлекайтесь, пожалуйста, ссылками на "независимые" (в кавычках) ресурсы - на них практически всегда идет реклама конкурентных брокеров, а это строго запрещено правилами форума Альпари. 1 Share this post Link to post Share on other sites
AntZ 2 Posted February 14 3 минуты назад, AntFX сказал: Не увлекайтесь, пожалуйста, ссылками на "независимые" (в кавычках) ресурсы - на них практически всегда идет реклама конкурентных брокеров, а это строго запрещено правилами форума Альпари. ок, удаляйте там сообщения, а индикатор посоветуйте Share this post Link to post Share on other sites
AntFX 6,451 Posted February 14 8 минут назад, AntZ сказал: ок, удаляйте там сообщения, а индикатор посоветуйте Я не спец по новостным индикаторам, может кто-то посоветует. 1 Share this post Link to post Share on other sites
Ugar68 331 Posted February 14 5 часов назад, torgf сказал: Спасибо. Как, в индикаторе,получать сигнал только на открытии бара? Открылся бар красным цветом, а потом стал зелёным цветом. Нужно сигналить только если открылся зелёным. if(iAC(NULL,0,i+1)<iAC(NULL,0,i)){...} пыталась так if(timeeeS==Time[i])continue; timeeeS=Time[i]; if(iAC(NULL,0,i+1)<iAC(NULL,0,i)) и volume<=1 Не работает АС работает по ценам закрытия баров. На истории все бары уже сформированы. Получается что индикатор на истории нарисует что было в момент закрытия бара, а не открытия. Если надо показания в момент открытия, то и индикаторы должны быть применены, работающие по открытию. Кстати тогда ничего не нужно будет придумывать что бы индикатор не перерисовывался на текущем баре, ведь цена открытия бара не меняется. Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.Чужие программы не переделываю. Share this post Link to post Share on other sites