Arius777 Опубликовано 27 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 января, 2017 Цитата double CandleHigh = iHigh(Symbol(), 0, 0); Nikavl, ну вы же неправильно используете эти функции - нуля в конце там не должно быть, получается, что Вы берете значение High на нулевой (текущей) свече, как только пришел первый тик на свечу, у вас High=Low=Close=Open, поэтому и ноль выходит. Лучше конечно второй вариант, но тут опять же, хотите получать правильные данные, нужно брать High[1] и Low[1].Еще, я далее не знаю как Вы считаете, ищете среднее значение вашего АТР, или нет, но в котировках часто проскакивают неполноценные свечи, поэтому для правильной работы нужно сравнивать if(CandleATR==0) break; если вы используете цикл, если вы используете только значения одной свечи, то либо return, либо берем следующую - High[2] и Low[2] и так далее, пока не будут нормальные значения 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Silentspec Опубликовано 27 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 января, 2017 Вы когда нибудь видели дневную свечу полностью нулевую? Ну, чтоб open=high=low=close? Я ни разу нигде не видел. Не понимаю, зачем if(CandleATR==0) break;А я б вот так написал:double CandleHigh = iHigh(_Symbol, _Period, 1);double CandleLow = iLow(_Symbol, _Period, 1);double CandleATR = (CandleHigh - CandleLow) / Point;Или даже период вывел бы во внешние переменные, чтоб можно было указать, с какого таймфрейма брать данные, типа такого:input ENUM_TIMEFRAMES SLPeriod = PERIOD_D1;double CandleHigh = iHigh(_Symbol, SLPeriod, 1);double CandleLow = iLow(_Symbol, SLPeriod, 1);double CandleATR = (CandleHigh - CandleLow) / Point;Вот так повеселей бы было ;)А еще прикольней было б так:input ENUM_TIMEFRAMES SLPeriod = PERIOD_D1; // Период для анализа данных для стопаextern int SearchSLHistory = 3; // Сколько свечей брать в расчетdouble CandleHigh = iHigh(_Symbol, SLPeriod, iHighest(_Symbol, SLPeriod, MODE_HIGH, SearchSLHistory, 1)); //Ищем максимальный хай за последние SearchSLHistory свечиdouble CandleLow = iLow(_Symbol, SLPeriod, iLowest(_Symbol, SLPeriod, MODE_LOW, SearchSLHistory, 1)); //Ищем минимальный лой за последние SearchSLHistory свечиdouble CandleATR = (CandleHigh - CandleLow) / Point; Диапазон за последние SearchSLHistory свечи.Одна свеча может же и флетовой быть, типа доджи, и стоп получится мизерный. А если диапазон - меньше вероятности. А почему для этих целей собсна атр не хотите использовать? Изменено 27 января, 2017 пользователем Silentspec 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
rostislavis Опубликовано 28 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 января, 2017 Всем здравствуйте!Копирую свой пост из этой темы: http://tlap.com/forum/indikatory/7/urovni-indikator-adr-kak-sredstvo-borby-s-zhadnostyu/6604Вкратце, ADR (Average Daily Range) - индикатор, расчитывающий средний дневной диапазон цены за последние N дневных баров, и на этом основании строящий внутридневные уровни предполагаемого диапазона текущего дня.В общем, возникла у меня одна "граальная" идея с этим индюком, но для её адекватного тестирования нужно, чтобы ADR мог строить свои уровни на истории! А этого, к сожалению, текущая версия делать не умеет - рисует их только на последнем дне.Поэтому я прошу всех заинтересовавшихся программеров написать такой индикатор, благо что алгоритм здесь предельно простой и понятный. (Меня боженька, к (не)счастью, не наградил способностями к кодингу :(() Думаю многие, не только я, будут вам очень благодарны.Итак, алгоритм:1. Считаем относительно каждого дня(!) расстояние в пунктах от High до Low последних "N" дневных свечей и складываем их.2. Полученную сумму делим на кол-во дней "N", получаем среднее значение "S".3. "S" делим на 2, получаем "Q"4. Сверху и снизу от цены открытия рассчитываемого дня, на расстоянии равном "Q", рисуем уровни предполагаемых High и Low на этот день. Это и есть те самые уровни, который строит оригинальный ADR! Спойлер Пример.Допустим, нам надо рассчитать ADR за последние 5 дней для 16 декабря 2016 на паре EURUSD.1. Считаем и складываем расстояние High-Low за 9,12,13,14,15 декабря: 99+126+63+174+172=6342. Общую сумму делим на 5 дней: 634/5=126,8 пункта ("S").3. 126,8/2=63,4 ("Q")4. От цены открытия 16 декабря 1,0412 на расстоянии в 63 пункта сверху и снизу рисуем по уровню: Спойлер Сосбственно, - и всё! Также ADR рисует и средние недельные уровни, но там немного по-другому нужно считать, и я не буду об этом заикаться, пока кто-то не осилит программу-минимум по дневным уровням ))Пару слов о том, зачем все это нужно, об идее. Дело в том, что все рекомендуют использовать этот индюк в качестве ориентира по тейк-профиту внутри дня. Я же заметил другое: при первом(!) подходе цены к этим уровням, она почти всегда делает хотя бы небольшой, но - откат. Следовательно, хотелось бы на истории посмотреть как можно больше примеров и оптимизировать этот подход. Пока же я вручную считал и смотрел разные рандомные периоды у евробакса и фунтобакса, и предварительные результаты весьма и весьма обнадеживающие (Например, при определенных параметрах за ноябрь по фунту набирается 14 сделок в среднем по 15-20п без единого стопа!). Проблема в том, что ручками считать это все очень утомительно и долго, поэтому и обращаюсь к сообществу с такой просьбой. Возможно, коллективно придумаем что-то толковое.Оригинальный индикатор - во вложении.Спасибо за внимание!Average_Daily_Range_Pro_Calculator.ex4Average_Daily_Range_Pro_Calculator.mq4 Изменено 29 января, 2017 пользователем rostislavis 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
ilnur17021992 Опубликовано 29 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 января, 2017 благо что алгоритм здесь предельно простой и понятный А код тут на 845 строчек, все переменные зашифрованы, без единого комментария, да еще с применением двумерных массивов :-W.Не завидую тому, кто возьмется :). Ссылка на сообщение Поделиться на другие сайты More sharing options...
rostislavis Опубликовано 29 января, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 января, 2017 А код тут на 845 строчек, все переменные зашифрованы, без единого комментария, да еще с применением двумерных массивов. Не завидую тому, кто возьмется. Спасибо за отзыв, но вы, кажется, не так меня поняли. Не стоит задачи скопировать для истории весь функционал оригинального индикатора, т.к., например, инфо-панель и недельные уровни (которых там штук 10) нам пока не нужны. Думаю, именно они занимают 90% кода. Может, я ошибаюсь, но сделать индюк по той формуле что я предложил, должно быть не сложнее чем написать какой-нибудь примитивный рисовальщик дневных пивот-уровней. 3 переменные, один раз сложил, 2 раза поделил, 2 линии нарисовал - всё! Ссылка на сообщение Поделиться на другие сайты More sharing options...
Cleric Опубликовано 1 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 февраля, 2017 Привет!Может кто подскажет, как заставить сову закрывать сделку при получении противоположного сигнала с индикатора, на котором она открывалась? Желательно иметь возможность выбора ТФ для этого индикатора.Сейчас стоит так extern bool oppositeclose=true; // close the orders on an opposite signalextern bool reversesignals=false; // reverse the signals, long if short, short if longextern bool usefilter3=true;extern int filter3tf=240;extern int mamethod7=2;extern int maperiod7=6;extern int mamethod8=3;extern int maperiod8=2;extern int trendshift3=1;extern int maxtrades=100; Потом под int start(){if(usefilter3) double f3ha1=iCustom(Symbol(),filter3tf,"Heiken_Ashi_Smoothed",mamethod7,maperiod7,mamethod8,maperiod8,2,trendshift3); double f3ha2=iCustom(Symbol(),filter3tf,"Heiken_Ashi_Smoothed",mamethod7,maperiod7,mamethod8,maperiod8,3,trendshift3); if((oppositeclose && sell))closebuy(); if((oppositeclose && buy))closesell(); } Компилятор ошибок не выдает, но ничего не работает.P.S. Сам не кодер, нашел сову в нете, в ней все работает, кроме этого.Заранее спасибоHeiken_Ashi_MTF_EA.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
geugene Опубликовано 1 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 февраля, 2017 Привет! Хочу немного украсить оформление настройки параметров индикатора. Решил некоторые переменные вписать в выпадающий список, чтобы не прописывать их руками.С численными переменными все ок. К примеру:enum ENUM_TPO_DATAPERIOD{ ENUM_TPO_DATAPERIOD_M1 = 1, // M1 ENUM_TPO_DATAPERIOD_M5 = 5, // M5 ENUM_TPO_DATAPERIOD_M15 = 15, // M15 ENUM_TPO_DATAPERIOD_M30 = 30, // M30 };input ENUM_TPO_DATAPERIOD DataPeriod = ENUM_TPO_DATAPERIOD_M1;Но вот со строковыми не пойму как приручить enum. Есть параметр string со значением "tf+m1". Я хочу создать такой же выпадающий список со значениями "tf+m5", "tf+m15" и т.д.Ругается компилятор. Я уже пробовал EnumToString. Но, по ходу неправильно его использую, либо не понимаю как это реализовать. Ссылка на сообщение Поделиться на другие сайты More sharing options...
spoiltboy Опубликовано 1 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 февраля, 2017 Приветствую.Подскажите, пожалста, зачем, в данном примере при использовании на графике с тремя знаками идет умножение на 10 равно как на графике с пятью?int OnInit() { if (Digits==3 || Digits==5){ TakeProfit*=10; StopLoss*=10; Slippage*=10;} return(INIT_SUCCEEDED); } Ссылка на сообщение Поделиться на другие сайты More sharing options...
Alexandrkas Опубликовано 2 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 февраля, 2017 Приветствую.Подскажите, пожалста, зачем, в данном примере при использовании на графике с тремя знаками идет умножение на 10 равно как на графике с пятью?int OnInit() { if (Digits==3 || Digits==5){ TakeProfit*=10; StopLoss*=10; Slippage*=10;} return(INIT_SUCCEEDED); } Для того чтобы перевести старые пункты в новые. Это позволяет использовать советник с любыми котировками, хоть с 4 знаками после запятой, хоть 5. Для пар с JPY соответственно с 2 или 3 знаками. Ссылка на сообщение Поделиться на другие сайты More sharing options...
spoiltboy Опубликовано 2 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 февраля, 2017 Для того чтобы перевести старые пункты в новые. Я правильно понимаю что по этой логике получается что "старые" пункты имеют разницу в сто раз с "новыми"? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Alexandrkas Опубликовано 2 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 февраля, 2017 Я правильно понимаю что по этой логике получается что "старые" пункты имеют разницу в сто раз с "новыми"? В этой статье все подробно написано о старых и новых пунктах. http://tradelikeapro.ru/chto-takoe-novyie-i-staryie-punktyi/ 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
shrike74 Опубликовано 3 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 февраля, 2017 Здравствуйте уважаемые кодеры!Обращаюсь за помощью.Суть в следующем: есть бот который выставляет корзины ордеров, 1 корзина- все ордера в ней с одним магиком, вторая и так далее с другими, у каждой корзины свой уровень перевода в БУ и дальнейший трал. Но хотелось бы чтобы при достижении общего бу+n пунктов по всем ордерам отключался трал и перевод в бу по отдельным корзинам и все переводилось в общий БУ, и последующий трал. При всем при этом, после перевода всех ордеров в общий бу, новые корзины учитывались бы уже отдельно и работали по этой же схеме.Так вот, просьба подсказать логику всего этого действа, ну и если есть кусок кода реализующий такой вариант то будет вообще круто.Спасибо. Ссылка на сообщение Поделиться на другие сайты More sharing options...
iket Опубликовано 8 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 февраля, 2017 Написал свой первый советник для торговли на Форекс в Metatrader 4 .Использовал для этого его MetaEditor.Помоги,пожалуйста, разобраться.Советник в тестере «по ценам открытия» работает хорошо. Но на Демо счете, на контрольных точках и всех тиках в тестере — выставляет до 500 ордеров за несколько секунд, а за день — 2-3 пачки таких ордеров.Как сделать, чтобы на Демо и реальном счете он выставлял 1 ордер на Д1? DMB.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Romhacker Опубликовано 8 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 февраля, 2017 У тебя в коде нет проверки на наличии уже выставленных отложенных и открытых ордеров. Ты должен сначала проверить есть ли уже открытые ордера или нет. Ссылка на сообщение Поделиться на другие сайты More sharing options...
ilnur17021992 Опубликовано 8 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 февраля, 2017 Написал свой первый советник для торговли на Форекс в Metatrader 4 .Использовал для этого его MetaEditor.Помоги,пожалуйста, разобраться.Советник в тестере «по ценам открытия» работает хорошо. Но на Демо счете, на контрольных точках и всех тиках в тестере — выставляет до 500 ордеров за несколько секунд, а за день — 2-3 пачки таких ордеров.Как сделать, чтобы на Демо и реальном счете он выставлял 1 ордер на Д1? Добавьте в коде подсчет количества ордеров: //Подсчет Sell и Buy ордеров int CountSell=0, CountBuy=0; for(int i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { if(OrderType()==OP_BUY) CountBuy++; if(OrderType()==OP_SELL) CountSell++; } И проверку: if(CountBuy==0 и есть сигнал на покупки) {открываем ордер buy} if(CountSell==0 и есть сигнал на продажи) {открываем ордер sell} Ссылка на сообщение Поделиться на другие сайты More sharing options...
slavahl Опубликовано 9 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 февраля, 2017 Всем доброго времени суток!У меня следующая проблема - не могу разобраться как сделать, чтобы на открытие каждой свечи открывались ордера. не важно какие, условие смогу прописать. А вот именно, чтоб на открытии - у меня не получается. Буду очень признателен за помощь! Ссылка на сообщение Поделиться на другие сайты More sharing options...
fotograf14 Опубликовано 9 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 февраля, 2017 Всем привет! У меня есть глобальный вопрос. Месяца три назад начал изучать MQL4 по учебнику Ковалёва, но после обновления некоторые моменты не совпадают. расскажите мне пожалуйста на людском языке как надо правильно писать функцию OnInit? OnDeinit,OnTick и где надо ставить void,где после return надо скобки, где ноль в скобках, короче у меня такая каша в голове. С учебника просто повторял код , там конечно int start() и всё в таком духе, перевёл на On Init и всё хана куча ошибок. Помогите!!!!! Добавлено: 09-02-2017 20:49:30как сюда вложить скриншот? Изменено 9 февраля, 2017 пользователем fotograf14 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Alexandrkas Опубликовано 10 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 февраля, 2017 Цитата расскажите мне пожалуйста на людском языке как надо правильно писать функцию OnInit? OnDeinit,OnTick и где надо ставить void,где после return надо скобки, где ноль в скобках, короче у меня такая каша в голове. Если бы вы посмотрели первый пост этой темы, то вопрос отпал бы сам собой. В видео курсе все подробно объясняется. http://tradelikeapro.ru/programmirovanie-na-mql-kurs/ Цитата как сюда вложить скриншот? В FAQ по форуму написано как это сделать. Ответ здесь http://tlap.com/forum/forum-trade-like-a-pro/14/bolshoe-faq-po-forumu/2421/?do=findComment&comment=31714 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Бешеный хомяк Опубликовано 10 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 февраля, 2017 Помогите пожалуйста реализовать в код следующие:1. Ищем на графике элемент по имени, в пределах дня (горизонтальная линия).2. Получаем цену уровня. Ссылка на сообщение Поделиться на другие сайты More sharing options...
SilverKZ Опубликовано 10 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 февраля, 2017 Добрый день!Реализация и пример использования: int start(){ string name_obj = "HLine_Name"; Comment(GetPriceObject(name_obj)); //----------------------------------------------------------------- return(0);}double GetPriceObject(string name_obj){ double price = -1; if(ObjectFind(0, name_obj) != -1) { price = ObjectGet(name_obj, OBJPROP_PRICE1); } return(price);} Поставьте прививку, помогает ) 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
fotograf14 Опубликовано 10 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 февраля, 2017 Спасибо тебе добрый человек! Не совсем ещё хорошо ориентируюсь сдесь. :-H 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Бешеный хомяк Опубликовано 10 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 февраля, 2017 Подскажите, направьте на путь истинный, как реализовать следующие: Ссылка на сообщение Поделиться на другие сайты More sharing options...
miass2811 Опубликовано 10 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 февраля, 2017 Уважаемые форумчане, по видео _https://www.youtube.com/watch?v=63REtIKc4gQ (это написание советника на TMA_Fair, написал свой и имею сейчас такую непоняткуticket=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,vSpread,0,0,"TMA_BB",MagicNumber,0,Red); if(ticket>0) { SL=NormalizeDouble(Bid+StopLoss*Point,Digits); TP=NormalizeDouble(Bid-TakeProfit*Point,Digits); if(OrderSelect(ticket,SELECT_BY_TICKET)) OrderModify(ticket,OrderOpenPrice(),SL,TP,0); }Код взят из урока. У одного брокера идет модификация ордеров, у другого ошибка 130. Подскажите, как разрулить такую ситуацию? Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 10 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 февраля, 2017 Если правильно понял вопрос, то нужно найти разницу во времени между ближайшей вертикальной линией и последним баром. Имена линий меняются и непостоянны. Задача именно в том, чтобы определить ближайшую к нулевому бару вертикальную линию, получить её временнУю координату и вычислить расстояние от нулевого бара до этой самой линии. Т.к. из задачи неясно в каких именно единицах мы будем измерять дистанцию между последним баром и вертикальной линией, то будем измерять ее в стандартных для программирования, применительно ко времени, единицах, т.е. в секундах. Пишем скрипт, который будет выводить это расстояние в виде алерта. Поехали. void OnStart(){ string dist=IntegerToString(TimeToLineDistance()); Alert("Дистанция до ближайшей вертикальной линии ",dist); } long TimeToLineDistance(){ //зададим переменной значение побольше, в даннном случае в секундах равное примерно одному году long timeDistance=32000000; //сюда будем запоминать имя исомой линии (вдруг пригодится) string objName="lineName"; //получим количество всех графических объектов на графике int objTotal=ObjectsTotal(); //в цикле проверим каждый объект for(int i=0;i { //получаем сюда имя обрабатываемого объекта string oName=ObjectName(i); //если выбраный объект является горизонтальной линией if(ObjectType(oName)==OBJ_VLINE) { //получаем её временную координату long objTime=ObjectGetInteger(0,oName,OBJPROP_TIME); //если время линии больше времени последнего бара if(objTime>Time[0]) { //высчитаем расстояние между временем линии и последним баром long t_distance=objTime-Time[0]; //если временнАя разница с последним баром наименьшая if(t_distance { objName=oName;//то запоминаем имя этой линии timeDistance=t_distance;//и запоминаем искомое раастояние } } } } return(timeDistance); } Теперь мы получили искомую дистанцию в секундах. Что с этим делать дальше уже зависит от Ваших задач. 4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Николай78 Опубликовано 10 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 февраля, 2017 и тишина в ветке...либо всё понятно и погнали дальше, либо тема нафиг не нужна и желание научиться чему-то было сиюминутным? У меня проблема, перестали работать файлы с расширением mq вв терминале МТ4, и от этого индикаторы не видны в списке всех индикаторов. Есть ли какие нибудь специалисты которые могли бы помочь? Помогите буду очень блогодарен. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти