0ll Опубликовано 25 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 октября, 2015 Oll, но в твоем примере не сработает отследить что нужные бары идут подряд (а это именно то, что нужно) или я чего-то не понял Если не подряд, то счётчик обнуляется. O0chistaia-rodina это время компиляции, а не прогона. Для чего оно нужно - не знаю, ибо на одном и том-же коде может быть сильно разным из-за доп. нагрузок на процессор.Добавлено: 25-10-2015 16:04:56Всем привет! Не могу понять почему ордера не открываются) В этом деле новичок, нужна помощь.Здесь просто: нужно код перенести из start() в OnTick() (старт потом удалить) Изменено 25 октября, 2015 пользователем 0ll 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 25 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 октября, 2015 0ll, ок, спс. На будущее... счетчики быстрее чем циклы? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 25 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 октября, 2015 0ll, ок, спс. На будущее... счетчики быстрее чем циклы?В сотни раз. Цикл тоже на счётчике + вычисления внутри цикла и т.д. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 25 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 октября, 2015 Сложно сказать... в журнале пишет чего-нибудь. Если хотите чтоб проблема решалась нужно сову целиком выкладывать - ведь в тестере не запустишь кусочек...ПС: это: if (OrderProfit()*(-1) > Zamok) можно писать более понятно: if (OrderProfit() Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 25 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 октября, 2015 JR не нормальная. Цикл вообще не нужен. Просто счётчик баров с фильтром размера. Логика:Если размер бара больше Х - счетчикБаровБай++ иначе =0Если размер бара меньше -Х - счётчикБаровСелл++ иначе =0Если счетчикБаровБай больше N - кодЕсли счётчикБаровСелл больше N - кодПС: Естественно запускать счётчики на открытии бара.ППС: после исполнения кода можно обнулить счётчик или нет - тебе решать. Строго говоря, счетчикБаровБай надо обнулить, если последняя свеча медвежья - а счетчикБаровСэлл если последняя свеча бычья.Вне зависимости от размера свечи.В довольно странном :) учебном задании также выбраковываются все свечи меньше BarPipsMin (в абсолютном выражении).то есть, по логике, при барну и, имхо, лучше работать в абсолютных выражениях, чтобы не запутаться в знаках результатов опен-клоуз и/или клоуз-опен - уж какой вариант определения размера бара будет выбран при реализации.Тогда что-то типа: Если abs(клоуз-опен)Иначе Если клоуз>опен счетчикБаровБай++; счетчикБаровСэлл=0 иначе счетчикБаровСэлл++; счетчикБаровБай=0Да? 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
ni349 Опубликовано 25 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 октября, 2015 Oll большое спасибо. Дешево и сердито. Вроде бы как работает. Одной проблемой меньше. Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 25 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 октября, 2015 В довольно странном :) учебном задании также выбраковываются все свечи меньше BarPipsMin (в абсолютном выражении). Немного разъясню (раскрою страшную тайну), чего я вас тут терроризирую )))В качестве хобби и зарядки для ума изучаю MQL и пишу своего супер-сеточника. Как основу (пример) взял ApMGrid. Многое оттуда удалось повторить, кое-что не смог, в силу отсутствия времени и знаний, кое-что привнес свое. В частности изучаю разные режимы работы для сеточника-мартингейла. Индикаторый вход на базе болинджера+стохастик+рси повторить не составило труда, но захотелось добавить свои режимы.Так вот например заметил, что на некоторых парах, после приведенного в качестве примера выше паттерна (2-4 свечи одного направления и не меньше X-пунктов) случается неплохой откат. Почему-бы не взять такой паттерн в качестве индикаторного входа для советника на мартингейле? Неточности как всегда закроем сеткой :)Чтобы не быть голословным - картинка теста во вложении на AUDUSD. Это не грааль, но при мультивалютной торговле может показать неплохие результаты.Собственно сов в активной стадии допиливания и тестирования, при согласии модераторов конечно планирую выложить для безвозмездного пользования форумчанам. Если оно им надо будет:)TesterGraph1.gif 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 25 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 октября, 2015 JR, в Лаборатория ProfitFX вход абсолютно свободный и всячески приветствуется!Ограничение только одно - код должен быть собственной разработки или кого-то из форумчан или по заказу кого-то из форумчан.Созреете - выкладывайте бота безоговорочно.Что касается задуманной вами опции, то она уже реализована в безиндикаторном входе в [EA][Qj] - Setka v1.23, параметр ReversSignalToOpen1Order.Код открыт - можете посмотреть. Ссылка на сообщение Поделиться на другие сайты More sharing options...
_Ugin_ Опубликовано 25 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 октября, 2015 Спасибо за -Zamok Вот цельный код. Добавлено: 25-10-2015 21:47:59в журнале есть ошибка но не знаю как ее исправить "OrderSend error 130" везде уже вставил MarketInfo ошибка сохраняется.MAX.mq4 Изменено 25 октября, 2015 пользователем _Ugin_ Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 25 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 октября, 2015 Что касается задуманной вами опции, то она уже реализована в безиндикаторном входе в [EA][Qj] - Setka v1.23, параметр ReversSignalToOpen1Order.Код открыт - можете посмотреть. Да я отдаю себе отчет, что во многих случаях "изобретаю велосипед" :) Просто, как уже писал, для меня это лишняя практика, тренинг и обучение, приносящее удовольствие ))) Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 25 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 октября, 2015 Там у Вас с общей логикой не лады. Сначала выставляете отложки, при этом вычисляете СтопЛосс, а когда дело доходит до рыночных ордеров стоп не вычисляете и пытаетесь открыть ордер со стопом от другого ордера. MarketInfo можно убрать. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 25 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 октября, 2015 Что касается задуманной вами опции, то она уже реализована в безиндикаторном входе в [EA][Qj] - Setka v1.23, параметр ReversSignalToOpen1Order.Код открыт - можете посмотреть. v:) v:) v:)JR не смотри ни в коем случае!!! если посмотришь, то не говори, что я тебя не предупреждал...Просто живёшь спокойно, своего бота ковыряешь, а потом вот такое посмотришь и всё, писец, как дальше жить? ПС: я смотрел (валерьянка не помогает)ППС: Qj без обид - я в восхищении. 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 25 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 октября, 2015 Что касается задуманной вами опции, то она уже реализована в безиндикаторном входе в [EA][Qj] - Setka v1.23, параметр ReversSignalToOpen1Order.Код открыт - можете посмотреть. Да я отдаю себе отчет, что во многих случаях "изобретаю велосипед" :) Просто, как уже писал, для меня это лишняя практика, тренинг и обучение, приносящее удовольствие ))) JR, в принципе, я сторонник обучения на чужих ботах.Берешь действительно серьезную программу, изучаешь её до буковки, пока не поймешь абсолютно всё - и потом пробуешь её улучшить хоть немного.Это обычно хорошая школа.Вариант самостоятельной разработки любого бота с нуля тоже приемлем, но, имхо, хуже.Проблема в том, что с опытом у программиста (особенно в общении с программистами) нарабатываются навыки оптимальной обработки неких стандартных ситуаций, использования инструментов и возможностей языка - а со временем набирается и наработанный проверенный код.В обычном пеньке обычные люди видят лишь дрова - а столяр 2 табуретки. Видит и делает - потому что знает как, имеет навыки.Обучаясь самостоятельно, не поработав подмастерьем у столяра, ты со временем станешь видеть и уметь больше - но даже просто табуретки быстро самостоятельно ты делать не научишься.Но код от Qj я тоже не рекомендую - сложен для начинающих. Хорош - но сложен!Кстати, код широко известного KimIV тоже, как по мне, сложен для начинающих: каждый блок прост - а в целом воспринимается сложно.Ну а вообще программирование в удовольствие ничуть не хуже, чем писать прозу, рисовать или музицировать.Вполне творческое и приносящее удовольствие занятие для тех, у кого есть к этому хоть какой-то талант. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Delirious Опубликовано 26 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 октября, 2015 Всех приветствую , не могу понять каким образом можно сохранить сигнал индюка не перебирая каждый раз бары. Задача состоит в том , чтобы при появлении сигнала индикатора, в советнике хранилось булевое значение в переменной и при необходимости через n-ное количество свечей можно было обратиться к этой переменной. Подскажите пожалуйста способ. Наверное есть какой либо способ забуферить значение , чтобы позволяло держать его там после каждого выполнения кода советника Изменено 26 октября, 2015 пользователем Delirious Ссылка на сообщение Поделиться на другие сайты More sharing options...
Qj Опубликовано 26 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 октября, 2015 Что касается задуманной вами опции, то она уже реализована в безиндикаторном входе в [EA][Qj] - Setka v1.23, параметр ReversSignalToOpen1Order.Код открыт - можете посмотреть. v:) v:) v:) JR не смотри ни в коем случае!!! если посмотришь, то не говори, что я тебя не предупреждал...Просто живёшь спокойно, своего бота ковыряешь, а потом вот такое посмотришь и всё, писец, как дальше жить? ПС: я смотрел (валерьянка не помогает)ППС: Qj без обид - я в восхищении. Извиняюсь за оффтоп, но это только начало :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
st2050 Опубликовано 26 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 октября, 2015 Глобальные переменные, сохранны даже после перезапуска терминала.Вот Вам пример из моей торговой панели. Для обеспечения уникальности имени переменной для каждой пары используется префикс GVNamePrefix.Имею смутное предположение, что они пишутся чуть ли не в реестр.[SPOILER]//---------------------------------------------------------------------------------------------// Expert initialization function//---------------------------------------------------------------------------------------------int OnInit(){ ... GVNamePrefix=GVNamePrefix0+Symbol()+"_"; GlobalVarablesRead(); ...//--- return(INIT_SUCCEEDED);}//---------------------------------------------------------------------------------------------// Чтение глобальных переменных//---------------------------------------------------------------------------------------------void GlobalVarablesRead(){ double _OrdersCount; if (GlobalVariableGet(GVNamePrefix+"OrdersCount", _OrdersCount)) OrdersCount = _OrdersCount; else OrdersCount = 0; if (!GlobalVariableGet(GVNamePrefix+"LotSize", LotSize)) LotSize = 0; if (!GlobalVariableGet(GVNamePrefix+"CurrTrend", CurrTrend)) CurrTrend = 0;}//---------------------------------------------------------------------------------------------// Запись глобальных переменных//---------------------------------------------------------------------------------------------void GlobalVarablesWrite(){ GlobalVariableSet(GVNamePrefix+"OrdersCount", OrdersCount); GlobalVariableSet(GVNamePrefix+"LotSize", LotSize); GlobalVariableSet(GVNamePrefix+"CurrTrend", CurrTrend);} Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 26 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 октября, 2015 Delirious сохранить можно любое значение. Вам какое? зачем нужно обращаться к сигналу, который остался в прошлом? а если будет другой сигнал, переписываем или все сигналы хранить будем? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Delirious Опубликовано 27 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 октября, 2015 Глобальные переменные, сохранны даже после перезапуска терминала.Вот Вам пример из моей торговой панели. Для обеспечения уникальности имени переменной для каждой пары используется префикс GVNamePrefix.Имею смутное предположение, что они пишутся чуть ли не в реестр.[SPOILER]//---------------------------------------------------------------------------------------------// Expert initialization function//---------------------------------------------------------------------------------------------int OnInit(){ ... GVNamePrefix=GVNamePrefix0+Symbol()+"_"; GlobalVarablesRead(); ...//--- return(INIT_SUCCEEDED);}//---------------------------------------------------------------------------------------------// Чтение глобальных переменных//---------------------------------------------------------------------------------------------void GlobalVarablesRead(){ double _OrdersCount; if (GlobalVariableGet(GVNamePrefix+"OrdersCount", _OrdersCount)) OrdersCount = _OrdersCount; else OrdersCount = 0; if (!GlobalVariableGet(GVNamePrefix+"LotSize", LotSize)) LotSize = 0; if (!GlobalVariableGet(GVNamePrefix+"CurrTrend", CurrTrend)) CurrTrend = 0;}//---------------------------------------------------------------------------------------------// Запись глобальных переменных//---------------------------------------------------------------------------------------------void GlobalVarablesWrite(){ GlobalVariableSet(GVNamePrefix+"OrdersCount", OrdersCount); GlobalVariableSet(GVNamePrefix+"LotSize", LotSize); GlobalVariableSet(GVNamePrefix+"CurrTrend", CurrTrend);} Спасибо! ОпробуюДобавлено: 27-10-2015 07:14:21Delirious сохранить можно любое значение. Вам какое? зачем нужно обращаться к сигналу, который остался в прошлом? а если будет другой сигнал, переписываем или все сигналы хранить будем? Я писал , значение булевого типа. Суть в чём, предположим имеется канал и по идее должен произойти отбой от этого канала, но перед тем как это произойдёт цена может и дальше уходить за линию канала , так вот мы храним в переменной состояние , которое , грубо говоря, определяло бы перекупленность/перепроданность(в данном конкретном случае 2 переменных orderbuy = FALSE/TRUE, ordersell = TRUE/FALSE). Но входить в сделку мы будем, в тандеме с другим индикатором, более медленным, когда он будет подтверждать движение в интересующую нам сторону, что пора входить в сделки, но пока это произойдёт пройдёт n-ое количество свечей перед тем как оба индикатора будут показывать сигналы на покупку/продажу Изменено 27 октября, 2015 пользователем Delirious Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 27 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 октября, 2015 Ну это просто. Объявите переменную bool уровня программы (сразу после внешних переменных). Только не забудьте сбрасывать её в фальсе после использования. Глобальные переменные уровня терминала здесь в принципе не нужны. имхо. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
st2050 Опубликовано 27 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 октября, 2015 Ну это просто. Объявите переменную bool уровня программы (сразу после внешних переменных). Только не забудьте сбрасывать её в фальсе после использования. Глобальные переменные уровня терминала здесь в принципе не нужны. имхо. Согласен с Вами. Касаемо торгующего советника при реконнекте/включении терминала лучше пересчитать во избежание.Правильно заданный вопрос - залог правильного ответа. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Delirious Опубликовано 27 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 октября, 2015 Премного благодарен! Помогло. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sany2912 Опубликовано 27 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 октября, 2015 Друзья, здравствуйте! Помогите советом: есть робот, который работает так как и нужно, когда на счете только он один и на одной паре. Но как только стоит его же запустить на другую пару этого же счета, то все начинает глючить - выдает ошибку "не правильных параметров" (err 3). Хотя, магики разные... даже, специально сделал для каждой пары своего, отдельного, чтоб он не путался, но не помогло... Кто знает, как можно это исправить???? Цель - один робот на одном счете работает на разных параз. Заранее, благодарю. Ссылка на сообщение Поделиться на другие сайты More sharing options...
grave Опубликовано 28 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 октября, 2015 Вобщем принцып такой если на графике по валютной паре нет селстопа или байстопа он его открывает, они ни к чему не привязаны просто если их нет на графике он их открывает. Уже третий день сижу голову ломаю как это сделать :(( пробовал вот так но он всеравно открывает их до бесконечности , а как сделать чтоб открывался только один сел и один бай стоп ? int _GetLastError=0,_OrdersTotal=OrdersTotal(); for(int z=_OrdersTotal-1; z>=0; z --) { if(OrderSelect(z,SELECT_BY_POS)==true) { //---- если позиция открыта не по текущему инструменту, пропускаем её if(OrderSymbol()!=Symbol()) continue; //---- если MagicNumber не равен Expert_ID, пропускаем эту позицию if(OrderMagicNumber()!=Magic) continue; Print("ok"); } else { order=OrderSend(Symbol(),OP_SELLSTOP,Lots*0.1,Bid-Otstup*Point,3,0,0,Magic+" "+Symbol(),Magic,0,Green); } Sleep(20000); } Ссылка на сообщение Поделиться на другие сайты More sharing options...
st2050 Опубликовано 28 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 октября, 2015 int order_type;// это делаем после того, как ордер выбранorder_type=OrderType();// вот проверка что ордер отложенныйif (order_type==OP_BUYSTOP || order_type==OP_BUYLIMIT || order_type==OP_SELLSTOP || order_type==OP_SELLLIMIT) break; // сами же говорили, чтоб открывался только один*** На всякий случай документация по типам ордеров _docs.mql4.com/ru/trading/ordertype Изменено 29 октября, 2015 пользователем st2050 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 29 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 октября, 2015 grave Вы открытие ордера не туда поместили... Логика Вашей программы сейчас такова:- Цикл по ордерам- Если ордер выделен успешно (select), то проверяем символ и магик. и дальше ничего!? если ордер не выбран, то открываем новый! - это не правильно.Поправьте общую логику. и согласен с st2050 нужна сортировка по типу и вот тогда, если данного типа нет - открытие.: //сначала (до цикла) определяем счётчики: int countSS=0, countBS=0; //туда, где Print("ok") пишем:if (order_type==OP_BUYSTOP) countBS++;if (order_type==OP_SELLSTOP) countSS++; //после выхода из цикла туда где Sleep(20000) (а лучше вместо):if (countBS == 0) //открываем БайСтопif (countSS == 0) //открываем СеллСтопПС: зачем Вам Sleep(20000);? 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти