ademen Опубликовано 3 февраля, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 февраля, 2021 7 часов назад, elavr сказал: Хмм, если рассматривать МТ5(как правило спред для мт4 и мт5 одинаковых счетов у одного брокера сопоставим ), то есть ли смысл делать такую панель когда можно получить эту информацию из котировок? Просто делал такого советника для теста Да, ваш вариант отличный. Но к сожалению у ффю нет мт5 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Gamakiv Опубликовано 3 февраля, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 февраля, 2021 4 часа назад, Alexnik90 сказал: через dll какую ни будь Да. Это возможно - https://docs.mql4.com/ru/runtime/imports 4 часа назад, Alexnik90 сказал: Например хотелось стакан ордеров научится выводить на мт4 Хех... интересная задачка. Я работаю в этом направлении)) Возможно вам пригодятся мои наработки, так как идеи схожи. Но только не Стакан ордеров, а открытые позиции от сюда - https://tlap.com/indikator-otkryityih-pozitsiy/ Да простят меня отцы основатели этого форума! Именно в этом примере скрипт отдает не html, а json. Раз запрашивать его из MetaTrader я не смог, а вернее не хотел тратить время на изучение, пошел следующим путем - написал скрипт на питоне, который распарит json и положит в папочку терминала в нужном мне формате - ИНСТРУМЕНТ : %ПОКУПАТЕЛЕЙ : %ПРОДАВЦОВ, чтобы потом его обработать внутри индикатора. В общем парсер то сделал, а до индикатора, пока руки не доходят - времени крайне не хватает. p.s. Ребята из администрации, кто отвечает за https://tlap.com/indikator-otkryityih-pozitsiy/, черканите в ЛС. Я не выкладываю ссылок на свой код, ибо возможно скрипты которые отдают JSON не должны торчать наружу и обращение множества клиентов к ним, плохо скажется на работоспособности вашего сервиса. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Alexnik90 Опубликовано 3 февраля, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 февраля, 2021 39 минут назад, Gamakiv сказал: Да. Это возможно - https://docs.mql4.com/ru/runtime/imports Я знаю что можно импортировать dll. Меня волнует непосредственно код, а лучше готовый код, чтобы можно было скачать файл в директорию доступную mql программам. А все остальное я сам сделаю, mql4 языком не плохо овладел, а что в плане других языков и интернета - для меня пока темный лес. А будет готовый код, пример, смогу его разобрать и понять как и что там работает. Так и учимся.)) 46 минут назад, Gamakiv сказал: Именно в этом примере скрипт отдает не html, а json. Значит ключ в json, знать бы что это такое и как его получать.)) Значит буду копать в этом направлении, спасибо за наводку. Но вопрос выше остался.)) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Alexnik90 Опубликовано 3 февраля, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 февраля, 2021 51 минуту назад, Gamakiv сказал: Раз запрашивать его из MetaTrader я не смог, а вернее не хотел тратить время на изучение, пошел следующим путем - написал скрипт на питоне Получается скрипт этот будет работать не на мт4 а на пк? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 3 февраля, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 февраля, 2021 11 минут назад, Alexnik90 сказал: А все остальное я сам сделаю, mql4 языком не плохо овладел, а что в плане других языков и интернета - для меня пока темный лес. Как я понял, тебе нужен не этот файлик, а сам календарь https://www.myfxbook.com/forex-economic-calendar Я не шарю особо в html, но на 90% уверен, что эта данные хранятся в формате .php на их сайте, либо на сайте, где они берут информацию. Попроси разбирающихся людей найти тебе эту ссылку. Если ты ей завладеешь, то перевести в читабельный формат mql сможешь через эту библиотеку https://www.mql5.com/ru/code/13663 Инструкции к ней особо нет, нужно прочитать все ветки на форуме том и понять, как ей пользоваться. Далее все нужные данные переводишь в массив и строишь свой новостной индикатор, раз тебя не устраивают те, что есть в свободном доступе ) 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Alexnik90 Опубликовано 3 февраля, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 февраля, 2021 2 минуты назад, Rever27 сказал: Как я понял, тебе нужен не этот файлик, а сам календарь https://www.myfxbook.com/forex-economic-calendar Не совсем так, календарь то я уже написал, достаю информацию из HTML страницы. Но увидел, что можно проще все эти данные достать и надежнее, вот и задался вопросом, а как это сделать. Плюс мне на будущее, мало ли еще какую инфу таким способом смогу доставать, многие позволяют скачивать такие таблицы. 7 минут назад, Rever27 сказал: Я не шарю особо в html, но на 90% уверен, что эта данные хранятся в формате .php на их сайте Хорошо бы научиться самому находить такое. В коде все пересматриваю, во все ссылки захожу и ничего.. Заметил сейчас все через скрипты делают, это осложняет задачу. 9 минут назад, Rever27 сказал: Если ты ей завладеешь, то перевести в читабельный формат mql сможешь через эту библиотеку https://www.mql5.com/ru/code/13663 Спасибо, буду разбираться. Я уже понял что надо в этом направлении копать. 10 минут назад, Rever27 сказал: раз тебя не устраивают те, что есть в свободном доступе ) Дело не в этом, хотя когда не сам написал, всегда что то может не хватать или не так как хочется реализовано. Да и своим всегда приятнее пользоваться, даже если ущербнее.)) Но тут больше спортивный интерес и саморазвитие в этом направлении. Ссылка на сообщение Поделиться на другие сайты More sharing options...
The NorD Опубликовано 3 февраля, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 февраля, 2021 1 час назад, Gamakiv сказал: p.s. Ребята из администрации, кто отвечает за https://tlap.com/indikator-otkryityih-pozitsiy/, черканите в ЛС. Я не выкладываю ссылок на свой код, ибо возможно скрипты которые отдают JSON не должны торчать наружу и обращение множества клиентов к ним, плохо скажется на работоспособности вашего сервиса. Мы их не скрываем, данные у нас заранее подготовленны и закэшированы, либо лежат в таких же json файлах, поэтому множественное обращение к ним не вызовет проблем. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
diodio Опубликовано 8 февраля, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 февраля, 2021 Всем доброго времени. У меня вопрос насчет переключателя сделок. В моем понятии нужно завести две переменные, например buy_flag и sell_flag. Начало положено) Теперь чтоб они переключались по булевому типу, им нужно задать изначально разные значения, например: bool buy_flag=true; bool sell_flag=false; Теперь когда подходит момент войти в сделку например по sell, то булевое условие нам говорит о том что "нет", значит ждем сделки на buy. Сделка случается. А теперь вопрос, чтоб мне переключить значения, мне нужно сделать выборку из истории? и только по баю? Мы находим этот ордер с конца и тут уже ставим значения: buy_flag=false; sell_flag=true; Теперь у нас активные только sell сделки. Ну и т.д. Я правильно мыслю? Спасибо. Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 8 февраля, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 февраля, 2021 Меняй значение переменных, если OrderSend отработал без ошибки. И зачем тебе две переменные, если они не бывают в одном состоянии одновременно? Оставь одну или, для удобства восприятия сделай ее int Ссылка на сообщение Поделиться на другие сайты More sharing options...
Gamakiv Опубликовано 9 февраля, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 февраля, 2021 Господа приветствую! Имею вопрос собственно: Итак есть код индикатора vinin_lrma_color_sound(лежит в паке машек на форуме: Спойлер //+------------------------------------------------------------------+ int start() { int limit; double tmp1,tmp2,tmp3; int tmpBar, tmpTime; int counted_bars=IndicatorCounted(); int i; if(counted_bars<0) return(-1); if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; int cmd; for (i = limit; i>=0; i--) { tmp1=iMA(Symbol(),0,period,0,MODE_SMA,price,i); tmp2=iMA(Symbol(),0,period,0,MODE_LWMA,price,i); tmp3=3.0*tmp2-2.0*tmp1; BufferGreen[i] = tmp3; BufferYellow[i] = tmp3; BufferRed[i] = tmp3; if (BufferYellow[i]>BufferYellow[i+1]) { BufferRed[i]=EMPTY_VALUE; } else if (BufferYellow[i]<BufferYellow[i+1]) { BufferGreen[i] =EMPTY_VALUE; } else { BufferRed[i]=EMPTY_VALUE; BufferGreen[i] =EMPTY_VALUE; } } if (bPlaySound &&alertTag!=Time[0]) { if (BufferRed[CheckBar+1]==EMPTY_VALUE && BufferRed[CheckBar]!=EMPTY_VALUE ) PlaySound(SoundName); if (BufferGreen[CheckBar+1]==EMPTY_VALUE && BufferGreen[CheckBar]!=EMPTY_VALUE) PlaySound(SoundName); alertTag=Time[0]; } Мне не ясен смысл этого: for (i = limit; i>=0; i--) Как понимать? Я вижу так: Делаем цикл ОТ Количество баров на текущем графике ОТНЯТЬ количество баров, не измененных после последнего вызова индикатора, пока счетчик не станет большие и равен 0, отнимая от счетчика единицу. Прошу помощь описать словами этот цикл. Изменено 9 февраля, 2021 пользователем Gamakiv Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 9 февраля, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 февраля, 2021 41 минуту назад, Gamakiv сказал: Прошу помощь описать словами этот цикл. В первый раз после запуска индикатора limit равно количеству баров и цикл проходит по всем барам в истории, чтобы построить данные индикатора. На следующий тик IndicatorCounted() уже пересчитывается и limits будет равен 0 или 1. Соответственно цикл уже не будет гонять историю, а будет проходить только по последнему (текущему бару) и строить по нему нужные данные. Это устойчивая форма, которая есть в справке. https://docs.mql4.com/ru/customind/indicatorcounted Проставь принтов и сам поймешь, как изменяется limit по тикам. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Alexfm2000 Опубликовано 14 февраля, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 февраля, 2021 Здравствуйте уважаемые господа программисты! Столкнулся со следующей проблемой: пишу скрипт по нахождению треугольника / отрисовки треугольника. Есть 4 фрактальных точки по которым создаются трендовые линии и по их пересечению образуется формация треугольника, так вот 4 точки я нахожу. а вот пятую точку то есть где происходит пересечение, нужно найти путём вычисления и вот с этим проблема. То есть нужно найти цену и дату пересечения в будущем. У меня нашло например на графике USDCHF треугольник, цену в пятой точке пришлось заполнить в ручную, а вот временную точку вроде нашел правда не уверен что формула будет дальше работать на других формациях. Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 14 февраля, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 февраля, 2021 @Alexfm2000 Приветствую. Как вариант функция "ObjectGetValueByShift" тебе поможет. Вычисляешь цены для каждой линии для определенного бара и сравниваешь с ценами предыдущего бара. Если цены изменили состояние, были одна внизу другая вверху а наследующем баре состояние поменялось стало одна вверху другая внизу, то вот оно пересечение между этими барами. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Alexfm2000 Опубликовано 14 февраля, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 февраля, 2021 2 минуты назад, MikR0ReR сказал: @Alexfm2000 Приветствую. Как вариант функция "ObjectGetValueByShift" тебе поможет. Вычисляешь цены для каждой линии для определенного бара и сравниваешь с ценами предыдущего бара. Да можно было бы воспользоваться этой функцией если бы уже были цены для последней точки. То есть цену которую нужно найти находиться в будущем бары со знаком минус. Я использовал ObjectGetValueByShift для нахождения прорывов. Первоначально я тоже подумал найти при помощи этой функции, но к сожалению так не получится. Нужна формула для вычисления по отрезкам чтобы найти цену пересечения в будущем Я пробовал таким образом: - но пока что не получается как надо if(P2 > P4 && P2 > P1 && P4 < P3) // если цена верхней точки начала тр-ка P2 выше начала нижней точки P4 // если P2 выше первой верхней точки, и P4 ниже нижней второй точки P3 { double speed_up = (MathAbs(P2-P1)/(i2-i1)); //скорость цены верхней линии double speed_dn = (MathAbs(P3-P4)/(i4-i3)); //скорость цены нижней линии double start_price = P2 - speed_up * (i4-i2); //стартовая цена i4, i2 индексы фрактальных точек double start_pricedn = P4; //ищем точку пересечения for (int i = 1; i<=50; i++) { price_up[i] = start_price - speed_up * i; //minus скорость падения price_dn[i] = start_pricedn + speed_dn * i; // плюс скорость подъёма if (price_up[i] <= price_dn[i]) { apex = i; // индекс пятой точки P5 = price_up[apex]; Print ("price P5 ", P5, "apex ", i); } } Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 14 февраля, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 февраля, 2021 @Alexfm2000 Я с планеты " Я Вас не понимаю" Цена уже известна и даже время. Вон Вы даже метку поставили П5 и Т5. Курсором наведите и терминал Вам скажет эти данные. Сомневаюсь, что терминал Вам ответит "ЗДЕСЬ НЕТ НАННЫХ чет от меня хочешь". Это напоминает "Ты ведешь суслика, нет. А он есть". Для этого и сделана функция ObjectGetValueByShift что бы определять цены трендовых линей. Если я не прав прошу объясните мне конструктивно. И что значит 40 минут назад, Alexfm2000 сказал: но к сожалению так не получится Разверните Ваше выражение. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Alexfm2000 Опубликовано 14 февраля, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 февраля, 2021 15 минут назад, MikR0ReR сказал: Цена уже известна и даже время. Вон Вы даже метку поставили П5 и Т5. Курсором наведите и терминал Вам скажет эти данные. Так я извиняюсь, возможно вы и правы просто, я не когда не пробовал использовать эту функцию в обратном направлении то есть когда бары ещё не были сформированы. Вот только как делать проверку пересечения? В цикле for перебирать к примеру от -50 и до нулевого бара если пересечение либо совпадают ли цены трендовых линий? Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 14 февраля, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 февраля, 2021 @Alexfm2000 Так 19 минут назад, Alexfm2000 сказал: Вот только как делать проверку пересечения? Поправка Я с планет "Немых". Печально, что на этой планете ты говоришь, а тебя не слышат. Я в первом посте дал ответ на этот вопрос. 2 часа назад, MikR0ReR сказал: то вот оно пересечение между этими барами. Далее 26 минут назад, Alexfm2000 сказал: В цикле for перебирать к примеру от -50 и до нулевого бара Я бы начал перебор от начала линий, от точек П4Т4 и Т2П2 т.к. мы незнаем где это пересечение, до 0 бара или после. Далее, я не понял, что дальше написано, одним словом каша. 30 минут назад, Alexfm2000 сказал: если пересечение либо совпадают ли цены трендовых линий? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Gamakiv Опубликовано 17 февраля, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 февраля, 2021 В 09.02.2021 в 23:36, Rever27 сказал: В первый раз после запуска индикатора limit равно количеству баров и цикл проходит по всем барам в истории, чтобы построить данные индикатора. На следующий тик IndicatorCounted() уже пересчитывается и limits будет равен 0 или 1. Соответственно цикл уже не будет гонять историю, а будет проходить только по последнему (текущему бару) и строить по нему нужные данные. Благодарю! Очень доходчиво, я вас понял! И у меня получился один очень интересный момент. Суть такова - в индикаторе этот код работает: int counted_bars=IndicatorCounted(); int i; // if(counted_bars<0) return(-1); if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; Print("Limit = ", limit, " | Bars = ", Bars, " | Counter Bars = ", counted_bars); Результат верный, согласно вашим словам: Но если я пытаюсь перенести этот код в советника, int limit; int counted_bars = IndicatorCounted(); if(counted_bars>0) counted_bars--; limit = Bars - counted_bars; Print("Limit = ", limit, " | Bars = ", Bars, " | Counter Bars = ", counted_bars); То он дает результат, что counted_bars равен -1 Почему? IndicatorCounted не работает в советниках? Его нельзя там использовать? Как быть? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 17 февраля, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 февраля, 2021 6 часов назад, Gamakiv сказал: Его нельзя там использовать? IndicatorCounted нельзя использовать в советниках. Это же написано в справке. Если нужно, чтобы в первый тик после установки советников учитывались все бары, а во все следующие уже нет, то можно сделать простой bool переключатель. Спойлер #property copyright "Copyright (c) Trade Llike a Pro" #property link "https://www.tlap.com/" #property version "1.00" #property strict //--- input parameters bool switcher = false; int limit = 0; //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if(!switcher) { //подсчет, который нужно выполнить только 1 раз limit = Bars switcher = true; } else { limit = 2; } Print(limit); //дальнейшая работа с limit. } //+------------------------------------------------------------------+ Либо же вообще выполнять все расчеты по нужным свечам в функции обработки событий OnInit, а в OnTick уже только за последние n свечей. Изменено 17 февраля, 2021 пользователем Rever27 1 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
diodio Опубликовано 21 февраля, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 февраля, 2021 Всем привет, не могу найти индикатор который оставляет после сделки точку входа и выхода и чтоб между ними линия была, и чтоб это все не стиралось. У кого есть такой, можете поделиться? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 21 февраля, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 февраля, 2021 4 часа назад, diodio сказал: Всем привет, не могу найти индикатор который оставляет после сделки точку входа и выхода и чтоб между ними линия была, и чтоб это все не стиралось. У кого есть такой, можете поделиться? Попробуй этот, код открытый, сможешь сам поправить как нужно Show history on chart.mq4 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Gamakiv Опубликовано 22 февраля, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 февраля, 2021 17 часов назад, diodio сказал: Всем привет, не могу найти индикатор который оставляет после сделки точку входа и выхода и чтоб между ними линия была, и чтоб это все не стиралось. У кого есть такой, можете поделиться? Есть тут https://tlap.com/forum/klassicheskie-indikatory/35/info-nabor-informacionnyh-indikatorov/7444/ Раздел - ИНДИКАТОРЫ ИНФОРМАЦИИ ПО ОРДЕРАМ HistoryOrders Спойлер VisualOrders Спойлер 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Gamakiv Опубликовано 22 февраля, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 февраля, 2021 Господа, подскажите. Тестирую советника в mt4. Хочу чтобы при определенных событиях, он записывал нужную информацию в файлик. Но чего-то не записывает.Это особенности тестера? Что при работе из под него(тестера), нет возможности записывать файлы? В другом скрипте этот код отрабатывает нормально. Код: void Loger(string strComment) { int hFile = FileOpen("LogOrger.txt", FILE_TXT | FILE_READ | FILE_WRITE, '\t'); FileSeek(hFile, 0, SEEK_END); FileWriteString(hFile, strComment, StringLen(strComment)); FileClose(hFile); } Передаю вот это: Loger(StringConcatenate("Close BUY order #", OrderTicket(), " was ", LogDealStatus)); В журнале пишется нормально: Print(StringConcatenate("Close BUY order #", OrderTicket(), " was ", LogDealStatus)); Проверил по следующим каталогам: Спойлер Что делал: 1. Ставил флаг FILE_COMMON 2. Создавал пустой файл руками PS. На реальном графике запустить не могу, потому что нужные мне условия наступают довольно редко, а данные хочется получить сейчас Ссылка на сообщение Поделиться на другие сайты More sharing options...
Gamakiv Опубликовано 23 февраля, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 февраля, 2021 В 22.02.2021 в 21:24, Gamakiv сказал: Это особенности тестера? По всей видимости так и есть. Ибо на реальном графике, нужное мне событие наступило и лог записался. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 24 февраля, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 февраля, 2021 В 22.02.2021 в 17:24, Gamakiv сказал: Тестирую советника в mt4. Хочу чтобы при определенных событиях, он записывал нужную информацию в файлик. Но чего-то не записывает. Все он записывает. Вот пример кода, который раз в свечу пишет данные цена Bid и Ask в .csv файл как при реальной торговле, так и при тестировании. Файл тестирования хранится в директории \tester\files WriteCSVFile.mq4 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти