mobidik Опубликовано 11 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 апреля, 2017 Я пробую к примеру int Total = OrderCount(-1, 0, "USDCHF"); только по паре.но у меня не определяется OrderCount, пишет ошибку Еще бы, все верно, ф-ция OrdersTotal() является терминальной, Вам нужно самому написать, что, как я понимаю, мало вероятно, тогда поройтесь по другим кодам советников у которых есть подсчет ордеров установленных самим советником, посмотрите как там сделано и повторите в своем коде, как-то так. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Levis_rock Опубликовано 11 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 апреля, 2017 OrderCount, Я пробую к примеру int Total = OrderCount(-1, 0, "USDCHF"); только по паре.но у меня не определяется OrderCount, пишет ошибку Еще бы, все верно, ф-ция OrdersTotal() является терминальной, Вам нужно самому написать, что, как я понимаю, мало вероятно, тогда поройтесь по другим кодам советников у которых есть подсчет ордеров установленных самим советником, посмотрите как там сделано и повторите в своем коде, как-то так. я про OrderCount, а не OrdersTotal()Добавлено: 11-04-2017 22:35:108 часов шуршания на различных форумах и вот что собрал:Перед открытием позиций бай и селл : { // Buy //----------------------------------------------------------------------------------- for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderType() return(0); { } } } //------------------------------------------------------------------------------------ И аналогично в селл только с переменной "i1".total убрал, если символ и магик совпадает, то всё открывается как нужно, так же при тесте менял в коде пару и магик, и бот начинает открывать тысячи ордеров, значит всё должно быть в порядке.Всем спасибо ! Изменено 11 апреля, 2017 пользователем Levis_rock Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vasiliy Pupkin Опубликовано 12 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 апреля, 2017 То что тормозит, то тут нет ничего удивительного. Тормозить может, и скорее всего, из-за тяжелых алгоритмов самих индикаторов. Не факт, что индикаторы какие-то кривые, просто Вы используете 4 индикатора (8 буферов). При этом Вы на каждом тике проверяете все 8 буферов. При каждом обращении к буферу производятся вычисления в индикаторах. Вот и представьте себе объем этих вычислений. Если ТС не требует проверки показателей индикаторов на каждом тике, то можно тут оптимизировать (например, проверять с интервалом от нескольких секунд, а может и раз в минуту). Возможно не нужно следить за индикаторами, когда позиция в рынке... Ну и т.д. Все зависит от стратегии.В конце тестирования в режиме визуализации на графике рисуются все индикаторы, которые используются - это норма. Здравствуйте!Разобрался со своим вопросиком. Мой косяк был в том, что я брал данные из комплексного индикатора, который, в свою очередь, брал данные из исходных индикаторов.Когда взял исходные индикаторы, все получилось. Если кому будет интересно, выкладываю советник и индикаторы. Советник простенький, делал только для проверки стратегии. Стратегия отличается от классической Genesis Matrix, в ней используются только сигналы матрицы Genesis на таймфреймах М5 и Н1. Если все 8 сигналов на покупку - покупаем, если на М5 все сигналы на продажу - выходим из покупки. Для продажи - аналогично. Добавлено: 13-04-2017 06:42:58Здравствуйте!Кто подскажет, как выставить время на закрытие ордера на следующий день после открытия? В текущий день - понятно, а вот на следующий что-то не соображу.Genesis_Generic.mq4GannHiLo-Histo.mq4T3_2ColorHisto.mq4TVI.mq4 Изменено 13 апреля, 2017 пользователем Vasiliy Pupkin 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 14 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 апреля, 2017 Здравствуйте!Кто подскажет, как выставить время на закрытие ордера на следующий день после открытия? В текущий день - понятно, а вот на следующий что-то не соображу. Здравствуйте! Примерно так можно.datetime TimeClose=D'2017.02.01 00:00';//время, когда необходимо закрыть int orderTicket=12345;//тикет закрываемого ордера if(TimeCurrent()>=TimeClose) { if(OrderSelect(orderTicket,SELECT_BY_TICKET)) { OrderClose(OrderTicket(),OrderLots(),Bid,100,clrNONE); } } 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
sniv Опубликовано 15 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 апреля, 2017 Помогите плз с кодом пина для дашборда.Есть условие:int pin( int i ) { if (ExtRedBuffer>ExtLimeBuffer>ExtBlueBuffer) // это условие нужно записать в зависимости от symbols[] return(2); if (ExtRedBuffer) //и это условие нужно записать в зависимости от symbols[] return(1);return( 0 );}string symbols[] = { "AUDCAD","AUDCHF","AUDJPY"};Так вот - каким макаром возвращять условие по каждой паре из symbols[] в pin() + return 1 или 2 от пары и выполненных условий??Заранее спасибо................. Изменено 15 апреля, 2017 пользователем sniv Ссылка на сообщение Поделиться на другие сайты More sharing options...
SilverKZ Опубликовано 16 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 апреля, 2017 Можно сделать так: int pin( int i ) { double ExtRedBuffer = iCustom(symbols,0,"SampleInd",13,0,1); double ExtLimeBuffer = iCustom(symbols,0,"SampleInd",13,1,1); double ExtBlueBuffer = iCustom(symbols,0,"SampleInd",13,2,1); if (ExtRedBuffer>ExtLimeBuffer>ExtBlueBuffer) return(2); if (ExtRedBuffer return(1); return(0);}string symbols[] = { "AUDCAD","AUDCHF","AUDJPY"}; Ссылка на сообщение Поделиться на другие сайты More sharing options...
sniv Опубликовано 16 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 апреля, 2017 Можно сделать так: int pin( int i ) { double ExtRedBuffer = iCustom(symbols,0,"SampleInd",13,0,1); double ExtLimeBuffer = iCustom(symbols,0,"SampleInd",13,1,1); double ExtBlueBuffer = iCustom(symbols,0,"SampleInd",13,2,1); if (ExtRedBuffer>ExtLimeBuffer>ExtBlueBuffer) return(2); if (ExtRedBuffer return(1); return(0);}string symbols[] = { "AUDCAD","AUDCHF","AUDJPY"}; Пасиб)когда пишу так -ExtBlueBuffer=iMA(symbols,timeframe,InpJawsPeriod,0,MODE_SMMA,PRICE_MEDIAN,InpLipsShift); ExtRedBuffer=iMA(symbols,timeframe,InpTeethPeriod,0,MODE_SMMA,PRICE_MEDIAN,InpLipsShift); ExtLimeBuffer=iMA(symbols,timeframe,InpLipsPeriod,0,MODE_SMMA,PRICE_MEDIAN,InpLipsShift); if (ExtRedBuffer>ExtLimeBuffer>ExtBlueBuffer) return(2); if (ExtRedBuffer) return(1); получаю 100% вылет из массива, т.к symbols[] ессессенно за ним((и еще: c iCustom понятно, но вписываю код в сам индикатор, поэтому не понятно как возвращать return именно для конкретной symbols[] Ссылка на сообщение Поделиться на другие сайты More sharing options...
pisarev28 Опубликовано 17 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 апреля, 2017 Всю ветку еще не прочел. Подскажите как закрыть ордер по профиту учитывая накопившийся своп? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sergey Forex Опубликовано 17 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 апреля, 2017 Всю ветку еще не прочел. Подскажите как закрыть ордер по профиту учитывая накопившийся своп? Если совсем кратко, то рассчитать профит с учетом свопа так:double profit = (OrderProfit()+OrderSwap());а если еще и с учетом комиссии, то так:double profit = (OrderProfit()+OrderSwap()+OrderCommission());А если подробно, то надо сначала выбрать нужный ордер, а потом уже его закрыть. Примерно так:for(int i=OrdersTotal()-1; i>=0; i--){ if(OrderSelect(i,SELECT_BY_POS)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && (OrderType() == OP_BUY || OrderType() == OP_SELL))//какой тип выбирайте сами { double profit=(OrderProfit()+OrderSwap()+OrderCommission()); if(profit > 0)// или больше какого-то порога { //закрываете с помощью функции OrderClose() } } }} Изменено 17 апреля, 2017 пользователем Sergey Forex 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
samail13666 Опубликовано 17 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 апреля, 2017 Всем здравствуйте! Я тут как-то скачивал видео-уроки(у меня очень плохая память на имена существительные, так что имя автора уроков я не помню), и уже, где-то недели три занимаюсь и стараюсь научиться языку программирования MQL4. Сложновато. Но учиться надо однозначно. Скопировал из уроков себе советника на основе Мартингейла(на мой взгляд это самый, что ни на есть, прибыльный ход развивающихся событий). И в данный момент нахожусь в состоянии познания. Только что прочитал статью, о графике ADX. Статья понравилась и я подумал:"А не прицепить мне к своему Мартингейлу график ADX. Подумал и прицепил. И что получилось?! А получилось следующее, раньше по валютной паре EUR/USD, с начальным депозитом 1000 долларов, лотом 0.1 и удвоением ставки на 1.5, он давал прибыль за прошедший год 6000 тысяч долларов с небольшим перевесом в плюс. И только что проверил его с графиком ADX, прибыль уменьшилась до 5500 долларов. Но увеличилось количество правильных сделок, то есть, в сторону тренда. И заметно уменшилось волнение за слив депозита, так как советник открывал правильные сделки. Значит можно увеличить лот(скорей всего). Программирование - штука хорошая, интересная. А еще интересна она тем, что тут(в программировании), еще нет женщин - им пока это не интересно, то есть, их эмоциональное мышление плохо подчиняется логическому мышлению. Так что программирование - это своего рода рыбалка будущего. Повар - мужского рода, но за плитой на кухне, обычно руководят женщины. Ссылка на сообщение Поделиться на другие сайты More sharing options...
sniv Опубликовано 17 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 апреля, 2017 Или хоть в этом---есть:какие-то параметрыstring symbols[] = { "AUDCAD","AUDCHF","AUDJPY"}int aa;int bb;у каждой валютной пары аа и bb разныеи я хочу написать условие от Symbols() т.е к примеру int blabla( int i ) {if (aa>bb) //Как проверять это условие в зависимости от Symbols()??return(1);elsereturn(4);return(0);} вот так:if (aa>bb && Symbols()==symbols) не работает Изменено 17 апреля, 2017 пользователем sniv Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vasiliy Pupkin Опубликовано 17 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 апреля, 2017 Здравствуйте!Кто подскажет, как выставить время на закрытие ордера на следующий день после открытия? В текущий день - понятно, а вот на следующий что-то не соображу.Здравствуйте! Примерно так можно.Код: [Выделить]datetime TimeClose=D'2017.02.01 00:00';//время, когда необходимо закрыть int orderTicket=12345;//тикет закрываемого ордера if(TimeCurrent()>=TimeClose) { if(OrderSelect(orderTicket,SELECT_BY_TICKET)) { OrderClose(OrderTicket(),OrderLots(),Bid,100,clrNONE); } } Спасибо за ответ!Не догнал, что можно было бы просто "TimeCurrent()>=TimeClose", еще никак не привыкну к машинной логике :-) Ссылка на сообщение Поделиться на другие сайты More sharing options...
SilverKZ Опубликовано 18 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 апреля, 2017 Добрый день, коллега!Если у каждой валютной пары aa и bb разные, то так: string symbols[] = {"AUDCAD","AUDCHF","AUDJPY"};int aa[] = {3, 5, 6}; int bb[] = {4, 9, 8}; и далее сама функция:int blabla(int i) // где, i - индекс валютной пары в массиве{ if (aa > bb && Symbols() == symbols) return(1); else return(4); return(0);} 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
ANDRON74 Опубликовано 19 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 апреля, 2017 Здравствуйте! Может кто подскажет, как написать функцию подсчёта профита сетки локирующих ордеров? Ссылка на сообщение Поделиться на другие сайты More sharing options...
kofesutra Опубликовано 20 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 апреля, 2017 Здравствуйте все! Подскажите, пожалуйста, как решить вот такую засаду:вставил в советник рисование стрелок вот так ArrowUpCreate(0,"ArrowUp"+(string)TimeCurrent(),0,0,0,ANCHOR_TOP,clrTeal,STYLE_SOLID,3,false,false,true,0); Во время тестирования с визуализацией они исправно рисуются там где надо, но после тестирования (когда закрою окно визуализатора) в окне графика видны только сделки (открытие и закрытие), но нет моих стрелок. Нет их и после тестирования без визуализации.Вопрос: как сделать отображение моих стрелок на графике безусловно? Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 20 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 апреля, 2017 Чет не совсем понимаю. Вы хотите, чтобы после прогона советника в тестере у вас появлялись стрелки на реальном графике инструмента? Ссылка на сообщение Поделиться на другие сайты More sharing options...
kofesutra Опубликовано 20 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 апреля, 2017 Вы хотите, чтобы после прогона советника в тестере у вас появлялись стрелки на реальном графике инструмента? Ну, да. Как после прогона в тестере появляется отображение сделок. Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 20 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 апреля, 2017 Ну, да. Как после прогона в тестере появляется отображение сделок. Когда вы прогоняете в тестере в режиме визуализации, то естественно стрелки рисуются на графике, где этот тест визуализируется. Тест никак не связан с реальным текущим открытым графиком (-ми) инструмента. Поэтому стрелки, которые были нарисованы в режиме визуализации не отображаются на реальном графике. Чтобы перенести стрелки, нарисованные в тестере, на реальный график нужны танцы с бубном. Можно, например, данные этих стрелок ( время, цена и т.п.) во время тестирования сохранять в файл. А уже после теста из файла переносить скриптом на нужный график. Ссылка на сообщение Поделиться на другие сайты More sharing options...
kofesutra Опубликовано 20 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 апреля, 2017 Чтобы перенести стрелки, нарисованные в тестере, на реальный график нужны танцы с бубном Спасибо, DreamWorks!Я уж тоже понял, что так просто не получится :( Ссылка на сообщение Поделиться на другие сайты More sharing options...
well72 Опубликовано 23 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2017 Привет, коллеги!Как и многие здесь, тоже начал изучать язык по урокам с сайта. В домашке к третьему уроку столкнулся с задачей: не открывает отложку с ошибкой 130 (неверный стоп). Даже при стопе = 0. Уже и MarketInfo() подключил - все равно пишет ошибку в тестере. При компиляции все нормально. Вот код: case 2: // работаем отложками//--- получим минимальное значение Stop level minstoplevel=MarketInfo(Symbol(),MODE_STOPLEVEL); Print("Minimum Stop Level=",minstoplevel," points"); MSL = NormalizeDouble (minstoplevel*Point, Digits); BuyStop = NormalizeDouble(PriceHigh + PipStop*Point, Digits) + MSL; SellStop = NormalizeDouble(PriceLow - PipStop*Point, Digits) - MSL; if (CountBuy() == 0 && Bid >= PriceHigh) { SL = NormalizeDouble(TMACentr - minstoplevel*Point - indent*Point, Digits); TP = NormalizeDouble(PriceHigh + (PriceHigh - PriceLow)*Point, Digits); ticket = OrderSend(Symbol(), OP_BUYSTOP, Lot, BuyStop, Slippage, SL, TP, "TMA Fair", Magic, 0, Blue); if (ticket Print ("Не удалось открыть отложенный ордер на покупку"); } if (CountSell() == 0 && Ask { SL = NormalizeDouble(TMACentr + minstoplevel*Point + indent*Point, Digits); TP = NormalizeDouble(PriceHigh + (PriceHigh - PriceLow)*Point, Digits); ticket = OrderSend(Symbol(), OP_SELLSTOP, Lot, SellStop, Slippage, SL, TP, "TMA Fair", Magic, 0, Red); if (ticket Print ("Не удалось открыть отложенный ордер на продажу"); } break;Подскажите, что не так? Ссылка на сообщение Поделиться на другие сайты More sharing options...
ANDRON74 Опубликовано 23 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2017 На Sell тейкпрофит меньше цены открытия, т. е. нужно отнимать. И не от хая, а от лоу. По моему так. Изменено 23 апреля, 2017 пользователем ANDRON74 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
well72 Опубликовано 23 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2017 На Sell тейкпрофит меньше цены открытия, т. е. нужно отнимать. И не от хая, а от лоу. По моему так. Спасибо за указанную ошибку - глаз замылился, наверное) Исправил. Но все равно дает 130 ошибку... Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sergey Forex Опубликовано 23 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2017 well72, Вы задаете ТП TP = NormalizeDouble(PriceHigh + (PriceHigh - PriceLow)*Point, Digits);насколько я понимаю PriceHigh, PriceHigh, PriceLow это все цена. Не надо умножать ее на пункты:TP = NormalizeDouble(PriceHigh + (PriceHigh - PriceLow), Digits); а здесь: MSL = NormalizeDouble (minstoplevel*Point, Digits);BuyStop = NormalizeDouble(PriceHigh + PipStop*Point, Digits) + MSL;SellStop = NormalizeDouble(PriceLow - PipStop*Point, Digits) - MSL; я бы сделал так: MSL = NormalizeDouble (minstoplevel*Point, Digits);BuyStop = NormalizeDouble(PriceHigh + PipStop*Point + MSL, Digits);SellStop = NormalizeDouble(PriceLow - PipStop*Point - MSL, Digits); или, чтобы советник не ругался на счет неправильных стопов из-за стоплевела, то так лучше сделать так:if(PipStop if(indent Изменено 23 апреля, 2017 пользователем Sergey Forex 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
well72 Опубликовано 23 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2017 Спасибо, Сергей! Все заработало. Надо будет в case 3 еще сделать так, чтобы бот удалял не отработавшую страховочную отложку, если сработал маркет. Или сделать выбор во внешних - удалять или нет.А лучше, думаю, буде удалять отложку при закрытии маркета тейком.Кстати, вопрос: в уроках ведущий то использует скобки в операторе if, то не использует. Так и не могу определиться: нужны они или нет? Изменено 23 апреля, 2017 пользователем well72 Ссылка на сообщение Поделиться на другие сайты More sharing options...
d1w4m3 Опубликовано 26 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 апреля, 2017 Добрый день, начал обучение Mql4, прошел уроки и дом. зд., начал писать советник на индикаторе Slope Direction Line!Идея в том, чтобы сова открывала ордер на 2й свече после перекрашивания индикатора. С моими знаниями написал это (во вложение), объясните пожалуйста в чем ошибка? slope2.ex4slope2.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти