Mighty Mouse 244 Share Posted January 19, 2019 50 минут назад, Ugar68 сказал: А что iBarShift это не простое и элегантное решение? Мне кажется это очень удобный инструмент. Спасибо, не знал. Quote Link to post Share on other sites
torgf 0 Share Posted January 23, 2019 10.01.2019 в 20:09, Ugar68 сказал: Написал упрощенный вариант (бюджетный) функции. Не проверял. Разбирайтесь. Справочник в помощь. Спасибо. Самостоятельно до такого, мне ни кода бы не дойти Quote Link to post Share on other sites
torgf 0 Share Posted January 23, 2019 Как можно записать в цикл следующее? 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 и т.д. Quote Link to post Share on other sites
Ugar68 372 Share Posted January 23, 2019 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 Quote Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку. Чужие программы не переделываю. Link to post Share on other sites
Mighty Mouse 244 Share Posted February 6, 2019 (edited) Есть ли способ во входящих параметрах советника в одной переменной определить в какую сторону открываться? Так чтобы в выпадающем списке можно было выбрать только что-то одно Buy или Sell. Пока что приходится использовать две переменных: input bool OpenBuy = true; input bool OpenSell = false; Edited February 6, 2019 by Mighty Mouse Quote Link to post Share on other sites
Ugar68 372 Share Posted February 6, 2019 (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, 2019 by Ugar68 1 Quote Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку. Чужие программы не переделываю. Link to post Share on other sites
Mighty Mouse 244 Share Posted February 6, 2019 (edited) 24 минуты назад, Ugar68 сказал: Использовать перечисление enum open_direction(Buy=0,Sell=1); input open_direction OpenType=0; Ругается на второй строке 'open_direction' - declaration without type PS При копировании через буфер добавились лишние символы, вопрос решен, спасибо. Edited February 6, 2019 by Mighty Mouse Quote Link to post Share on other sites
Ugar68 372 Share Posted February 6, 2019 21 минуту назад, Mighty Mouse сказал: Ругается на второй строке 'open_direction' - declaration without type enum open_direction{Buy=0,Sell=1}; input open_direction OpenType=0; Quote Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку. Чужие программы не переделываю. Link to post Share on other sites
Mighty Mouse 244 Share Posted February 6, 2019 2 часа назад, Ugar68 сказал: enum open_direction{Buy=0,Sell=1}; input open_direction OpenType=0; А можно ли то же самое сделать с тикетами? Бывают ситуации когда вручную открыто несколько позиций по одной паре, а советнику нужно дать дотралить только одну. Как при запуске совы выбрать нужную позицию? Quote Link to post Share on other sites
Ugar68 372 Share Posted February 6, 2019 1 час назад, Mighty Mouse сказал: А можно ли то же самое сделать с тикетами? Бывают ситуации когда вручную открыто несколько позиций по одной паре, а советнику нужно дать дотралить только одну. Как при запуске совы выбрать нужную позицию? Для задания тикетов используется внешняя переменная int или uint. input uint Ticket=567463578; Это по простому. Если же хочется сложностей и надо менять значение оперативно и без инициализации, можно использовать окошко редактирования на чарте. В него вписать тикет. Можно так же использовать клик мыши по ордеру на чарте. Можно на чарте соорудить из графических объектов аналог перечисления. Интерактивная менюшка. Quote Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку. Чужие программы не переделываю. Link to post Share on other sites
sviter 0 Share Posted February 8, 2019 Здраствуйте! делаю скриншот экрана через функцию:WindowScreenShot ("Screenshotname.png",1280,720); но оно все сохраняет в папку Files, а мне надо указать путь в другую папку что бы сохрняло! как это сделать? Quote Link to post Share on other sites
Ugar68 372 Share Posted February 8, 2019 1 час назад, sviter сказал: Здраствуйте! делаю скриншот экрана через функцию:WindowScreenShot ("Screenshotname.png",1280,720); но оно все сохраняет в папку Files, а мне надо указать путь в другую папку что бы сохрняло! как это сделать? Никак. В целях безопасности функции MQL ограничены песочницей. Для использования путей вне песочниц придётся использовать функции из DLL на других языках. Quote Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку. Чужие программы не переделываю. Link to post Share on other sites
sviter 0 Share Posted February 8, 2019 какой путь короткий, ато не могу подобрать? "\\Files\\Screenshotname.PNG" ??? Quote Link to post Share on other sites
Ugar68 372 Share Posted February 9, 2019 10 часов назад, sviter сказал: какой путь короткий, ато не могу подобрать? "\\Files\\Screenshotname.PNG" ??? Можно длиннее. Например задать имя файла Name=StringConcatenate(WindowExpertName(),"\\Screen\\Screenshotname.PNG"); Будет путь с соответствующими подпапками Files\имя программы\Screen\Screenshotname.PNG. Но за пределы Files без DLL не выйти. Quote Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку. Чужие программы не переделываю. Link to post Share on other sites
laxander 103 Share Posted February 12, 2019 Тестирую мультивалютника на 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. Что за х? Почему? Самое странное, что еще неделю назад все работало, как надо. Рейты брались те, которые указаны в символе. Quote Link to post Share on other sites
sviter 0 Share Posted February 12, 2019 Как сделать разницу между двумя датами??.... То есть к примеру 10.02.19 и к примеру текущую 12.02.19 и что бы выдавало 0 лет, 0 месяцев, 2 дня Quote Link to post Share on other sites
AntFX 6,474 Share Posted February 12, 2019 (edited) 35 минут назад, sviter сказал: Как сделать разницу между двумя датами??.... То есть к примеру 10.02.19 и к примеру текущую 12.02.19 и что бы выдавало 0 лет, 0 месяцев, 2 дня (( TimeCurrent() - date ) / 86400 ) = число дней между датами // 86400 - число секунд внутри любого 1 дня Edited February 12, 2019 by AntFX Quote 1 Link to post Share on other sites
torgf 0 Share Posted February 14, 2019 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 Не работает Quote Link to post Share on other sites
AntZ 2 Share Posted February 14, 2019 (edited) Здравствуйте. Устанавливаю новостной индикатор *** п.8 *** в коде ошибка (видно на скрине) , подскажите что не так? Может подскажете хороший проверенный новостной индикатор? Edited February 14, 2019 by AntFX п. 8 Quote Link to post Share on other sites
AntFX 6,474 Share Posted February 14, 2019 Не увлекайтесь, пожалуйста, ссылками на "независимые" (в кавычках) ресурсы - на них практически всегда идет реклама конкурентных брокеров, а это строго запрещено правилами форума Альпари. Quote 1 Link to post Share on other sites
AntZ 2 Share Posted February 14, 2019 3 минуты назад, AntFX сказал: Не увлекайтесь, пожалуйста, ссылками на "независимые" (в кавычках) ресурсы - на них практически всегда идет реклама конкурентных брокеров, а это строго запрещено правилами форума Альпари. ок, удаляйте там сообщения, а индикатор посоветуйте Quote Link to post Share on other sites
AntFX 6,474 Share Posted February 14, 2019 8 минут назад, AntZ сказал: ок, удаляйте там сообщения, а индикатор посоветуйте Я не спец по новостным индикаторам, может кто-то посоветует. Quote 1 Link to post Share on other sites
Ugar68 372 Share Posted February 14, 2019 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 Не работает АС работает по ценам закрытия баров. На истории все бары уже сформированы. Получается что индикатор на истории нарисует что было в момент закрытия бара, а не открытия. Если надо показания в момент открытия, то и индикаторы должны быть применены, работающие по открытию. Кстати тогда ничего не нужно будет придумывать что бы индикатор не перерисовывался на текущем баре, ведь цена открытия бара не меняется. Quote Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку. Чужие программы не переделываю. Link to post Share on other sites
Ugar68 372 Share Posted February 14, 2019 Поправка: АС строится по медианной цене. Но сути это не меняет. Quote Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку. Чужие программы не переделываю. Link to post Share on other sites
sviter 0 Share Posted February 14, 2019 Кто знает какую нибудь библиотеку dll для отправки е-mail через терминал? Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.