0ll Опубликовано 14 марта, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 марта, 2015 Deymos если сова только в селл ходит, значит с индюком не дружит. если что-то другое - здесь не телепаты. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Deymos Опубликовано 14 марта, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 марта, 2015 Делаю третий урок из видео) советник по ТМА. Переписал как в видео от и до. Но советник теперь открывает ордера на покупку и продажу из любой позиции, из какой он хочет. А не четко от границ канала ТМА 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 14 марта, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 марта, 2015 Deymos надеюсь Вы в курсе, что ТМА перерисовывается? попробуйте заменить на Енвелопс и посмотрите... 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Deymos Опубликовано 14 марта, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 марта, 2015 возможно вы правы и причина в этом. попробую поэксперементировать с другими индикаторами Ссылка на сообщение Поделиться на другие сайты More sharing options...
oleguitar Опубликовано 15 марта, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 марта, 2015 возможно вы правы и причина в этом. попробую поэксперементировать с другими индикаторами Deymos, попробуй вот такой индикатор, если тебе нужен не перерисовывающийся каналHalfLength - период канала (как MA)PRICE_MODE - точно не знаю, скорее всего к какой цене применять, можно стандартно, по ценам закрытия, т.е. значение "0"ATR_PERIOD - Период индикатора ATR, который KC берет для своих расчетовK - коэффициент для значения ATRТо есть принцип работы такой: берем среднюю цену за N свечей(HalfLength) и строим от нее канал. Границей будет сдвиг от средней цены за N свечей на значение индикатора ATR с периодом (ATR_PERIOD), умноженное на коэф. (K) (вверх и вниз)Поэкспериментируй, гибкий инструмент достаточноДобавлено: 15-03-2015 15:06:29oleguitar переписал для 600 билда. изучай пользуйся.Добавил дельту (отступ) от графика, а то за стрелками его не видно+ исправил логику вместо: open1-low1 - close1-low1. Oll, я тут пытаюсь менять индикатор, в данном случае хочу заложить в него разные свечные паттерны, но вот на графике индикатор ведет себя совсем "не по правилам"Пытался так же проверять, является ли максимум i-той свечи максимумом за период N свечей, так же неудачно...В чем ошибка? (хотя бы касательно паттернов) Спойлер Спойлер #property copyright "-"#property link "-"#property strict //---- отрисовка индикатора в главном окне #property indicator_chart_window //---- количество индикаторных буфферов #property indicator_buffers 2 //---- цвета индикатора #property indicator_color1 Blue #property indicator_color2 Red //---- входные параметры индикатора// input int ma_period = 48; input int atr_period = 100; input int bars = 50; input int delta = 150; int MA_Slow = 260; //---- индикаторные буфферы double buf_1[]; double buf_2[]; //+------------------------------------------------------------------+ //| Функция инициализации, запускается один раз | //+------------------------------------------------------------------+int OnInit(){ //---- 2 индикаторных буффера использованы для счёта SetIndexBuffer(0, buf_1); SetIndexBuffer(1, buf_2); //---- Стиль исполнения графика //---- DRAW_ARROW - стрелки(символы) SetIndexStyle (0, DRAW_ARROW, STYLE_SOLID, 2); SetIndexStyle (1, DRAW_ARROW, STYLE_SOLID, 2); SetIndexArrow (0, 233); SetIndexArrow (1, 234); //---- установка значений индикатора, которые не будут видимы на графике SetIndexEmptyValue(0,0.0); SetIndexEmptyValue(1,0.0); //---- установка номера бара, начиная с которого будет отрисовываться индикатор SetIndexDrawBegin(0,MA_Slow); SetIndexDrawBegin(1,MA_Slow); //---- завершение инициализацииreturn(INIT_SUCCEEDED);}//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+int OnCalculate ( const int rates_total, const int prev_calculated, const datetime &time[],const double &open[],const double &high[], const double &low[], const double &close[], const long &tick_volume[],const long &volume[],const int &spread[]){ int i = (prev_calculated if (i while(i > 0) { //Здесь все расчёты// double atr = iATR(_Symbol, 0, atr_period, i);// double highest = iHighest(Symbol(), 0, MODE_HIGH, bars, i-1);// double lowest = iLowest (Symbol(), 0, MODE_LOW, bars, i-1); double outside_bar_buy = 0; double outside_bar_sell = 0;if(Open[i ]Close[i-1] && High[i ]>High[i-1] && Low[i ]if(Open[i ]>Close[i ] && Open[i-1]High[i-1] && Low[i ] // if(High[i-1]>highest) condition_highest = 1; // if(Low[i-1] >lowest) condition_lowest = 1; buf_2[i ] = outside_bar_sell ==1 ? High[i ] + delta*_Point : 0.0; buf_1[i ] = outside_bar_buy ==1 ? Low[i ] - delta*_Point : 0.0; //----------------- i--; }return(rates_total);}//+------------------------------------------------------------------+ KC.mq4KC.ex4 Изменено 15 марта, 2015 пользователем oleguitar Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 16 марта, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 марта, 2015 oleguitar1. Это условие: High[i ]>High[i-1] && Low[i ]2. [i-1] этот индекс на 0-баре заглядывает в будущее. Вообще нужно i+1.3. Если Вы делаете сравнение: outside_bar_sell ==1, а тип double, то может некорректно работать, надо int.4. Про максимум я не понял, но Вы-то поняли, что в цикле мы проходим от 1-бара до N (в обратную сторону) и даст-ли Вам что-то Ваш максимум при этом? Пробуйте через iHighest. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
oleguitar Опубликовано 16 марта, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 марта, 2015 oleguitar1. Это условие: High[i ]>High[i-1] && Low[i ]2. [i-1] этот индекс на 0-баре заглядывает в будущее. Вообще нужно i+1.3. Если Вы делаете сравнение: outside_bar_sell ==1, а тип double, то может некорректно работать, надо int.4. Про максимум я не понял, но Вы-то поняли, что в цикле мы проходим от 1-бара до N (в обратную сторону) и даст-ли Вам что-то Ваш максимум при этом? Пробуйте через iHighest. 1. Ну да, поглощение же2. Так вон оно как... попробую3. Да, по привычке double поставил, а вообще, обычно работает4. Упростит картину мне. Я же просто тоже индекс брал [i-1], поэтому не работало вероятноДобавлено: 16-03-2015 09:27:58Максимум не определяет... даже не знаю прямТ.е. я понимаю, что это не должно выглядеть как индикатор фракталов, мне просто нужно, чтобы индикатор знал, является ли High текущей свечи максимумом за N баров... Спойлер input int bars = 50; double highest = iHighest(Symbol(), 0, MODE_HIGH, bars, i); double lowest = iLowest (Symbol(), 0, MODE_LOW, bars, i); int condition_highest = 0; int condition_lowest = 0; if(High[i ]>highest) condition_highest = 1; if(Low[i ] buf_2[i ] = condition_highest == 1 ? High[i ] + delta*_Point : 0.0; buf_1[i ] = condition_lowest == 1 ? Low[i ] - delta*_Point : 0.0; Спойлер Изменено 16 марта, 2015 пользователем oleguitar Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 16 марта, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 марта, 2015 oleguitar Вы хоть справку читали? int iHighest - Возвращает индекс наибольшего найденного значения (смещение относительно текущего бара) соответствующего графика. А Вы индекс с ценой сравниваете.И если Вы сравниваете хай от i бара с хаем нескольких баров начиная с i - нормально ? и хотите чтоб условие выполнилось?Надо так: int highest = iHighest(Symbol(), 0, MODE_HIGH, bars, i+1); if(High[i ]>High[highest]) condition_highest = 1; 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
oleguitar Опубликовано 16 марта, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 марта, 2015 oleguitar Вы хоть справку читали? int iHighest - Возвращает индекс наибольшего найденного значения (смещение относительно текущего бара) соответствующего графика. А Вы индекс с ценой сравниваете.И если Вы сравниваете хай от i бара с хаем нескольких баров начиная с i - нормально ? и хотите чтоб условие выполнилось?Надо так: int highest = iHighest(Symbol(), 0, MODE_HIGH, bars, i+1); if(High[i ]>High[highest]) condition_highest = 1; Точно, индекс же)Спасибо, вроде сработало Ссылка на сообщение Поделиться на другие сайты More sharing options...
asbets Опубликовано 17 марта, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 марта, 2015 Помогите пожалуйста с кодом функции работающий 4 знаком. Суть функции такова.Чтоб советник открыл сделку на покупку когда цена направляется на вверх на определенный тик без отката (например 4 или 5 пункта без возврата, нужна чтоб можно указать в параметрах) и соответственно на продажу, если цена направляется вниз, и чтоб ордер был только одним т.е. чтоб не открывал пока не закроется другой. И нужно добавить трейлинг стоп в пунктах, чтоб можно было изменить в параметрах. СЛ и ТП думаю добавлю сам как то.Спасибо! Был бы рад помочь, но загружен своими задачами выше крыши.Могу только подсказать.Там необходимо еще много всяких параметров, т.к. ситуаций много разных:1. Могут быть безоткатные движения но по малым сдвигам и недалеко, например ночью :есть движение, но короткое на малых объёмах тиков. Будет ловить лоси. т.к. спреды ночью большие.2. Могут быть такие движения возле уровней - "тестирование уровня" .3. Ограничивать (отделять) открытие одного ордера от другого, а то может на одной минуте несколькоордеров, причем в разные стороны открыть.ну и т.д. Изменено 24 ноября, 2017 пользователем Pavel888 Ссылка на сообщение Поделиться на другие сайты More sharing options...
serge1759 Опубликовано 18 марта, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 марта, 2015 Помогите пожалуйста с кодом функции работающий 4 знаком. Суть функции такова.Чтоб советник открыл сделку на покупку когда цена направляется на вверх на определенный тик без отката (например 4 или 5 пункта без возврата, нужна чтоб можно указать в параметрах) и соответственно на продажу, если цена направляется вниз, и чтоб ордер был только одним т.е. чтоб не открывал пока не закроется другой. И нужно добавить трейлинг стоп в пунктах, чтоб можно было изменить в параметрах. СЛ и ТП думаю добавлю сам как то.Спасибо! не совсем понятно намеренье. Советник просто должен следить за ценой на каждом тике? В чём проблема то? Следи за ценой, а не за свечками Изменено 24 ноября, 2017 пользователем Pavel888 Ссылка на сообщение Поделиться на другие сайты More sharing options...
rva7171 Опубликовано 21 марта, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 марта, 2015 Всем доброго времени суток.У меня проблема с 8 уроком по открытию и модификации ордеров.В первой части по OrderSendX у меня в новом билде выдает ошибку.Функцию Start() подставляю в void OnTick() чтобы было похоже на старый билд.Далее вроде все по видео но выдает ошибку.Может кто нибудь объяснить, что не так? Test_8_ошибка.pngTest_8.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
chistaia-rodina Опубликовано 22 марта, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 марта, 2015 rva7171, перед последней скобкой, для возобновления общего цикла работы кода, нужно добавить return(0); . Изменено 22 марта, 2015 пользователем chistaia-rodina 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
rva7171 Опубликовано 22 марта, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 марта, 2015 rva7171, перед последней скобкой, для возобновления общего цикла работы кода, нужно добавить return(0); . Работает. Благодарю. Ссылка на сообщение Поделиться на другие сайты More sharing options...
AVE-Tip Опубликовано 22 марта, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 марта, 2015 Всем привет, это мой первый советник, так-что просьба тапки не кидать.Сов работает, но не так. Помогите понять почему :-/ Изменено 22 марта, 2015 пользователем AVE-Tip Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гриня Опубликовано 22 марта, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 марта, 2015 Deymos . При компиляции увидел ошибку в твоём коде, пропущено return(0); и скобки фигурныеint init(){ { //Проверка брокера на пятизнак if (Digits ==3 || Digits == 5) TakeProfit *=10; StopLoss *=10; Slippage *=10; } return(0);} Добавлено: 22-03-2015 14:10:57Делаю третий урок из видео) советник по ТМА. Переписал как в видео от и до. Но советник теперь открывает ордера на покупку и продажу из любой позиции, из какой он хочет. А не четко от границ канала ТМА Действительно в уроке Сергей (xbms) в конце упомянул что необходимо в условия добавить ещё индикатор , например RSI. Чтоб убедиться что цена двинулась от границ канала TMA и одновременно из зон перекупленности или перепроданности индикатора RSI. Вот строка кода с условиями как добавить RSI в неё ??? if (Bid >= PriceHight && CountSell() == 0) Где указать что будут использоваться оба индикатора??? Изменено 22 марта, 2015 пользователем Гриня Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 22 марта, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 марта, 2015 Действительно в уроке Сергей (xbms) в конце упомянул что необходимо в условия добавить ещё индикатор , например RSI. Чтоб убедиться что цена двинулась от границ канала TMA и одновременно из зон перекупленности или перепроданности индикатора RSI. Вот строка кода с условиями как добавить RSI в неё ??? if (Bid >= PriceHight && CountSell() == 0) Где указать что будут использоваться оба индикатора??? Вам нужно описать РСИ: rsi = iRSI(NULL,0,RSIPeriod,PRICE_CLOSE,1); и в условие на вход дописать:if (Bid >= PriceHight && rci && CountSell() == 0) ...Вместо 70 можно писать RSI_Up и вывести его во внешние настройки (вместе с RSI_Down) 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 22 марта, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 марта, 2015 AVE-Tip сожалею, но код не рабочий. некоторые ошибки:- что такое просадка ? по балансу, эквити или какого-то ордера? (есть подозрение что эта задача решается проще)- "Определяет если ордер закрылся по стопу" - для этого достаточно проверить OrderProfit() > 0- Эту строку: Pros =+ OrderLots()/2; надо писать так Pros += OrderLots()/2; - см. справку.- заканчивать цикл можно: break; Ваш вариант тоже рабочий.- Здесь тоже самое: Pros =- Pros / Drob;- ф-ция CountTrades() будет только в тестере работать. Вы сами её написали или взяли где-то? ужасно кривая. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
AVE-Tip Опубликовано 22 марта, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 марта, 2015 0ll, большое спасибо >:d1. В данном случае просадка (сумма всех OrderLots()) закрытых по стопу минус отработанная часть.2. Спасибо, не знал, но и так тоже работает :)3. Исправил4. Исправил5. Исправил6. Функцию взял в видео уроке ___http://tradelikeapro.ru/category/uroki-po-mql/ (помним первый советник) Ну и главное (код нерабочий) подправил, суть проблемы изменилась:Суть ошибки, пока сделки закрываются по стопу, он всё делает правильно, после тейка забывает общую просадку.Например первую сделку открывает лотом 0.7, при Drob = 1 Удваивает или Drob >1 увеличивает. Но после тейка может открыть сделку лотом 0.01 что меньше стартового лота и забыть весь Pros :(Всё, разобрался, спасибо :)Добавил варианты входа, стало семпотнее :d EURUSD_2014.gif Изменено 22 марта, 2015 пользователем AVE-Tip Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 22 марта, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 марта, 2015 1. В данном случае просадка (сумма всех OrderLots()) закрытых по стопу минус отработанная часть.Вдумайтесь! То что Вы хотите есть в МТ нужно только взять. Например, запоминаем стартовый баланс. На каком-то ордере текущий баланс Потом если текущий > стартового, то стартовый = текущий и так далее. Ссылка на сообщение Поделиться на другие сайты More sharing options...
AVE-Tip Опубликовано 22 марта, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 марта, 2015 Еще раз спасибо!!!Но... баланс общий для всех инструментов и советников. В любом случае, с ММ вроде ПОКА* разобрался, теперь над более правильными входами сижу.*ПОКА - Pros придётся потом скорее всего в ini пихать, т.к. это будет мультивалютник с входами от силы валюты и он должен быть общим для всех (что кстати неплохо как вы предлагаете сделать), но опять же другие совы на счету и все пойдет не так. Пока сижу, учусь с ini работать. Изменено 22 марта, 2015 пользователем AVE-Tip Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 22 марта, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 марта, 2015 Пока сижу, учусь с ini работать.С .ini? файлы инициализации виндовс? если да, то как Вы учитесь - чераз АПИ Виндовс или через текстовый файл средствами мкл? Ссылка на сообщение Поделиться на другие сайты More sharing options...
AVE-Tip Опубликовано 22 марта, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 марта, 2015 Через текстовый файл средствами мклini символически можно и без расширения, нужно несколько параметров от сова на одном инструменте передать сову на другом, копаюсь в библиотеке, но пока ничего не понял... Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 23 марта, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 марта, 2015 AVE-Tip если Вы раньше занимались программированием - то справитесь. Это (передача через файл) не такая лёгкая задача, например вопросы: как 2 сова узнает, что 1 что-то написала в файл? а если обе совы одновременно захотят что-то написать - что будет?Если Вы только начинаете программировать, то лучше не тратить на это время. Тем более передать параметры внутри одного терминала можно через глобальные переменные, а если в разных терминалах - скачайте сову копировщик с открытым кодом и смотрите как совы общаются. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sany2912 Опубликовано 24 марта, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 марта, 2015 Здравствуйте! Помогите пожалуйста разобраться со вторым уроком: код написал как на видео, только у меня в тестере почему то не работает, а на видео все норм. Ошибка в журнале "OrderSend error 130", и условие "if (_TimeStart == TimeHour(TimeCurrent()) && CountBayLimit () == 0 && CountSellLimit () == 0)" не работает, по моему... Не могу понять из-за чего? Ошибок при компиляции нет... Тест_3.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти