alex202 Опубликовано 15 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 ноября, 2017 Здравствуйте! Подскажите как в программе приостановить торговлю, при достижении профита до следующего дня? Изменено 15 ноября, 2017 пользователем alex202 Ссылка на сообщение Поделиться на другие сайты More sharing options...
vening Опубликовано 15 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 ноября, 2017 Здравствуйте. Возник вопрос с советником мартингейлом. По урокам написал советник, точнее сваял его из кусочков чужих кодов. Блок мартина из вашего урока. В тестере торгует нормально. Но вопрос в увеличении лота - при коэффициенте 1.5 или 2 всё нормально умножает, но как только ставлю коэффициент ниже 1.5, то перестаёт увеличивать лоты и торгует только минимальным лотом 0.01. Подскажите, как привести это в порядок. ADR5_SL_TP_Sovetnik.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 15 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 ноября, 2017 alex202 можете сделать так: int stopday = 0; // на глобальном уровнеOnTick()... // где-то в основной программе if ( Day() == stopday ) return; else stopday = 0; // если торговля выключена - выход, иначе чистим переменную... if ( TodayProfit >= TargetProfit ) stopday = Day(); // выключаем торги сегодняvening всё дело в способе расчёта лота и округлении. В тестере попробуйте мин лот 0,1 и всё будет вычисляться нормально. Если хотите исправить ошибку, то надо по другому вычислять лот - не от предыдущего ордера!Самое простое: объявите ещё переменную double lottmp;и вычисляйте лот в ней, типа: lottmp *= Martin;потом округляйте до 2 знака: lot = ((int)(lottmp*100))/100; // NormalizeDouble - лучше не использоватьпроверяем на мин лот: lot = MathMax( lot, 0.01 );Конечно может не работать на некоторых счетах или инструментах - это для общего понимания, есть и другие методы расчёта, более сложные. Если будет интерес то и это обсудим. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
alex202 Опубликовано 16 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 ноября, 2017 Спасибо! Буду пробовать. Ссылка на сообщение Поделиться на другие сайты More sharing options...
zhab3r Опубликовано 18 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 ноября, 2017 В ходе работы понадобилось некое подобие событий, для начала, просто сигнал о том что цена дошла до опеределенного уровня. В результате получился приведенный ниже код, который предлагаю к обсуждению- возможно мной не учтены какие то особенности... :) //+------------------------------------------------------------------+//| Event.mqh |//| Copyright 2014, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright "Copyright 2014, MetaQuotes Software Corp."#property link "http://www.mql5.com"#property strict#include //+------------------------------------------------------------------+//| *************************************************************** |//| CEvent |//+------------------------------------------------------------------+enum EEventState { esSuspended, esActive, esWaitConditions};//+------------------------------------------------------------------+class CEvent : public CObject{private:protected: EEventState m_state; bool m_signal; datetime m_signal_time; datetime m_bar_time; virtual void Set() { m_signal=true; m_signal_time=TimeCurrent(); m_bar_time=Time[0]; }public: CEvent(const EEventState state=esSuspended) : m_state(state), m_signal(false), m_signal_time(0), m_bar_time(0) {} ~CEvent() {} virtual void Refresh(void) {} EEventState State(void) const { return(m_state); } virtual void State(const EEventState state) { if (m_state != state) return; m_state=state; Reset(); } bool Signal(void) const { return(m_state == esActive && m_signal); } virtual void Reset(void) { m_signal=false; m_signal_time=0; m_bar_time=0; } datetime SignalTime(void) const { return(m_state == esActive ? m_signal_time : 0); } datetime BarTime(void) const { return(m_state == esActive ? m_bar_time : 0); }};//+------------------------------------------------------------------+enum EOnPriceMode { opmCheckAsk, opmCheckBid};//+------------------------------------------------------------------+class COnPrice : public CEvent{private: double m_last_ask; double m_last_bid;protected: double m_price; double m_deviation; EOnPriceMode m_mode; double m_pt_scale;public: COnPrice(const EEventState state=esSuspended) : CEvent(state), m_last_ask(Ask), m_last_bid(Bid), m_price(0), m_deviation(0), m_mode(opmCheckBid), m_pt_scale(((Digits == 5) || (Digits == 3)) ? 10 : 1) {} ~COnPrice() {} virtual void Refresh(void); double Price(void) const { return(m_price); } virtual void Price(const double price) { m_price=price; Reset(); } double Deviation(void) const { return(m_deviation); } virtual void Deviation(const double deviation) { m_deviation=deviation; Reset(); } EOnPriceMode Mode(void) const { return(m_mode); } virtual void Mode(const EOnPriceMode mode) { m_mode=mode; Reset(); }};//+------------------------------------------------------------------+void COnPrice::Refresh(void){ do { if (m_state != esActive) break;; double old_price=m_mode == opmCheckAsk ? m_last_ask : m_last_bid; double new_price=m_mode == opmCheckAsk ? Ask : Bid; if (MathAbs(m_price-new_price) { Set(); break; } if (((new_price ((new_price >= m_price) && (m_price >= old_price))) { if (MathAbs(new_price-m_price) { Set(); break; } } Reset(); } while (false); m_last_ask=Ask; m_last_bid=Bid; CEvent::Refresh();}//+------------------------------------------------------------------+//| / CEvent / |//| *************************************************************** |//+------------------------------------------------------------------+ Ссылка на сообщение Поделиться на другие сайты More sharing options...
alex202 Опубликовано 20 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 ноября, 2017 Здравствуйте! Подскажите как считать показание цены стрелки индикатора с окна графика (буфер цену не возвращает)? Например в этом индикаторе. Можно даже ссылку, где посмотреть решение. Добавлено: 20-11-2017 17:47:48Сам дам на свой вопрос ответ: В индикаторе был параметр при выставление стрелы SetIndexEmptyValue(1,0.0); - просто удалил его и всё за работало #:-s21_iZZSR.mq4 Изменено 20 ноября, 2017 пользователем alex202 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Александр_F Опубликовано 20 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 ноября, 2017 Здравствуйте трейдеры. У меня вопрос касательно языка MQL4 для бинарных опционов. Суть заключается в том что-бы написать функцию мартингейла, но, отображая значение int вместо doble (Т.к. торговля идет в валюте депозита, а не в лоте). Но, функция изложенная ниже попросту не хочет работать, возможны, вы видите причину( //+------------------------------------------------------------------+extern int Lots= 1; extern int LotExponent = 2; //в настройках советника добавляем: input bool Martin=true; // использовать увеличения лота если были убытки input int MaxMartin=4; // макс. кол-во применения Мартингейл int Lots() { int ret=Lots; // размер лота по-умолчанию if (Martin) // если включен мартингейл { // инициализация переменных int trade = OrdersHistoryTotal()-1; // количество сделок в истории int i=0; // счетчик перебора истории сделок int n=0; // количество непрерывных убыточных сделок // рассматриваем исторические сделки от последней к первой for (i=trade; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderSymbol() == Symbol() && OrderMagicNumber()==Magic && (OrderType() == OP_BUY || OrderType()==OP_SELL)) { // считаем кол-во непрерывных убытков if (OrderProfit()+OrderSwap()+OrderCommission() else break; // сделка в "+" или в ноль - выходим } } // если были убытки и количество случаев не больше MaxMartin - пересчитать размер лота if (n>0 && n { ret=(Lots*MathPow(LotExponent, n)); } } return(ret); } //+------------------------------------------------------------------+ Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 21 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 ноября, 2017 Попробуй: if (n>=0 && n { ret=(int)(Lots*MathPow(LotExponent, n)); } Ссылка на сообщение Поделиться на другие сайты More sharing options...
Александр_F Опубликовано 21 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 ноября, 2017 Не помогло //+------------------------------------------------------------------+extern int Lots= 1; extern int LotExponent = 2; //в настройках советника добавляем: input bool Martin=true; // использовать увеличения лота если были убытки input int MaxMartin=4; // макс. кол-во применения Мартингейл int Lots() { int ret=Lots; // размер лота по-умолчанию if (Martin) // если включен мартингейл { // инициализация переменных int trade = OrdersHistoryTotal()-1; // количество сделок в истории int i=0; // счетчик перебора истории сделок int n=0; // количество непрерывных убыточных сделок // рассматриваем исторические сделки от последней к первой for (i=trade; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderSymbol() == Symbol() && OrderMagicNumber()==Magic && (OrderType() == OP_BUY || OrderType()==OP_SELL)) { // считаем кол-во непрерывных убытков if (OrderProfit() else break; // сделка в "+" или в ноль - выходим } } // если были убытки и количество случаев не больше MaxMartin - пересчитать размер лота if (n>=0 && n { ret=(int)(Lots*MathPow(LotExponent, n)); } } return(ret); } //+------------------------------------------------------------------+ Ссылка на сообщение Поделиться на другие сайты More sharing options...
sniv Опубликовано 21 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 ноября, 2017 { ret=(int)(Lots*MathPow(LotExponent, n)); } int==int*double?? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Александр_F Опубликовано 21 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 ноября, 2017 Т.е. код должен выглядеть следующим образом? if (n>=0 && n { ret=(int)(Lots*LotExponent); } Добавлено: 21-11-2017 22:45:10В принципе, есть еще один вариант использовать мартингейл. Через функцию поиска последнего убыточного ордера в истории, а уже потом прописать новые условия на открытие сделки. Т.е.//+------------------------------------------------------------------+ Ищем последний убыточный ордер в истории (Почему-то не работает ~x( ~x( ~x()int Count_H() { int LossCount = 0; int total = OrdersHistoryTotal(); for (int i = 0; i { OrderSelect(i, SELECT_BY_POS, MODE_HISTORY); if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderProfit() { LossCount++; } } } return(LossCount);}//+------------------------------------------------------------------+И уже прописываем условия if (Count_H() == 1) { if (OrderSend (Symbol(), OP_SELL, Lots_2, Bid, Slippage, 0, 0, IntegerToString (Expiration), Magic, 0, clrRed) { Print ("Ошибка открытия ордер на продажу"); } }Где сейчас ошибка??? Буду Очень благодарен любому совету Изменено 21 ноября, 2017 пользователем Александр_F Ссылка на сообщение Поделиться на другие сайты More sharing options...
asdfx Опубликовано 22 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 ноября, 2017 Ребят открыл счет в альпари , и в терминале , при сделках стали выводиться комментарии типо таких 1[0] . Советники ни какие не висят , а счет стал комментироваться , что за ерунда , не отслеживает ли или не копирует ли сделки брокер ? хрень какая то ... Няшный альпари таким образом пишет тебе проскальзывания в комент. Я туда еще и размер спреда добавляю. Жаль редактировать нельзя. Ссылка на сообщение Поделиться на другие сайты More sharing options...
sniv Опубликовано 22 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 ноября, 2017 Ребят открыл счет в альпари , и в терминале , при сделках стали выводиться комментарии типо таких 1[0] . Советники ни какие не висят , а счет стал комментироваться , что за ерунда , не отслеживает ли или не копирует ли сделки брокер ? хрень какая то ... Няшный альпари таким образом пишет тебе проскальзывания в комент. Я туда еще и размер спреда добавляю. Жаль редактировать нельзя. Не знаю что именно пишеться, но левые комменты вообще не должны попадать в общий просмотр, т.к это режим дебага Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 22 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 ноября, 2017 Александр_F пишите точнее, что именно не работает. сделки открывает, хоть одну? если идут лоси, а лот не увеличивается, то проверьте всю цепочку расчёта лота - пишите Print("№N - значение=", хз); и потом смотрите логи, ищите место где возникает баг.В последнем фрагменте Вы считаете количество лосей с начала, а не с конца списка, хотя пишите о поиске последнего ордера... Там должна быть логика такая: рыночных ордеров нет, цикл по истории с конца, нашли последний свой ордер, выход через брейк, если профит 0 - начальный лот. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
4er58 Опубликовано 22 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 ноября, 2017 Ребят открыл счет в альпари , и в терминале , при сделках стали выводиться комментарии типо таких 1[0] . Советники ни какие не висят , а счет стал комментироваться , что за ерунда , не отслеживает ли или не копирует ли сделки брокер ? хрень какая то ... Няшный альпари таким образом пишет тебе проскальзывания в комент. Я туда еще и размер спреда добавляю. Жаль редактировать нельзя. Не знаю что именно пишеться, но левые комменты вообще не должны попадать в общий просмотр, т.к это режим дебага Да , звонил в альпари , проскальзывание комментируется , исправляется путем убирания галочки в настройках счета . Имхо -лишняя муть . Еще сделали кучу настроек по проскальзыванию , активировать объем дробно или целиком , вообщем лишний засер мозга . Ссылка на сообщение Поделиться на другие сайты More sharing options...
alex202 Опубликовано 23 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 ноября, 2017 Удалено Добавлено: 23-11-2017 09:42:04Если вам надо в валюте депозита то всё делается через AccountBalance(). Изменено 23 ноября, 2017 пользователем alex202 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 23 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 ноября, 2017 Функция, делающая активным последний закрытый ордер:void activ_last_ord() { for ( int i = OrdersHistoryTotal()-1; i >= 0; i-- ) { if ( OrderSelect( i, SELECT_BY_POS, MODE_HISTORY ) && OrderSymbol() == _Symbol && OrderMagicNumber() == Magic ) break; }}Далее можно анализировать параметры ордера, типа:if ( OrderProfit() Ссылка на сообщение Поделиться на другие сайты More sharing options...
Pol131 Опубликовано 27 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 ноября, 2017 Всем привет! Просмотрел первых пять уроков по программированию и я понял что ничего не понял :). Все разжевывается хорошо, но открываю я код советника и ступор. Хрен знает с чего начинать и чем заканчивать, а мысль автоматизировать работу все свербит и свербит. Знаю как должен советник работать, а как это прописать не знаю. Хотел скопировать из уроков, так индюки разные и задачи разные. Короче ребята помогите никак не соображу я что впихнуть и как впихнуть в прикрепленный советник (советник составлял естественно не сам).Советник основан на индикаторе Parabolic SAR, работает для моей ТС идеально за исключением отсутствия ММ и взятия профита.Сперва хотел спросить по профиту. Профит хотел бы чтоб устанавливался не ТР, а просто советник закрывал бы сделку при достижении определенной суммы. Расстояние, которое должна пройти цена для закрытия сделки в плюс должно равняться расстоянию от открытия ордера (бай или сел) до первой перескочившей точки параболика (см. приложение).Надеюсь на помощь. Если кого заинтересовало готов вместе поработать чтоб довести робота до ума по моей ТС. В благодарность за проделанную работу робот заработает очень много денег :)) Добавлено: 27-11-2017 06:43:58Забыл прикрепить пример расчета входа.EA_Parabolic_SAR.mq4Пример_расчета_входа.jpg Ссылка на сообщение Поделиться на другие сайты More sharing options...
alekskopach Опубликовано 28 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 ноября, 2017 Доброго всем, подскажите пожалуйста где ошибка при написании советника, рисования линий с помощью фракталов. линии.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
djiga Опубликовано 29 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 ноября, 2017 Добрый день! Хотел попробовать написать советник по дивергенциям по OsMa. И даже че-то сварганил по урокам на сайте. Минимум, максимум вроде нашел на истории, только вот свечку которая на минимуме или максимуме найти не могу. Объясните новичку пжл. Спойлер int j = 0; int m = 0; int k = 0; ArrayResize(Hyst, 300); ArrayInitialize(Hyst, 0); ArrayResize(NewHyst, 300); ArrayInitialize(NewHyst, 0); ArrayResize(NewHystMax, 300); ArrayInitialize(NewHystMax, 0); for (int i = 0; i { double Osma = iOsMA(NULL, 0, 24, 26, 9, PRICE_CLOSE, i); Hyst[j] = Osma; j++; } for(int i=0; i { if ( Hyst[ i ] != 0) m++; } ArrayResize(Hyst, m); for(int i=0; i { NewHyst[k] = Hyst[ArrayMinimum(Hyst, WHOLE_ARRAY, 0)]; k++; } m = 0; for(int i=0; i { if(NewHyst != 0) m++; } ArrayResize(NewHyst, m); for(int i=0; i { Print("Osma Minimum " + DoubleToStr(NewHyst [ i ], 7)); } Изменено 29 ноября, 2017 пользователем 0ll Ссылка на сообщение Поделиться на другие сайты More sharing options...
asdfx Опубликовано 29 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 ноября, 2017 Ребят открыл счет в альпари , и в терминале , при сделках стали выводиться комментарии типо таких 1[0] . Советники ни какие не висят , а счет стал комментироваться , что за ерунда , не отслеживает ли или не копирует ли сделки брокер ? хрень какая то ... Няшный альпари таким образом пишет тебе проскальзывания в комент. Я туда еще и размер спреда добавляю. Жаль редактировать нельзя. Не знаю что именно пишеться, но левые комменты вообще не должны попадать в общий просмотр, т.к это режим дебага Да , звонил в альпари , проскальзывание комментируется , исправляется путем убирания галочки в настройках счета . Имхо -лишняя муть . Еще сделали кучу настроек по проскальзыванию , активировать объем дробно или целиком , вообщем лишний засер мозга . Этот лишний засер иногда неплохо помогает. Да и собственно какая разница что там в коменты валится, лишь бы толк был. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 29 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 ноября, 2017 Добрый день! Хотел попробовать написать советник по дивергенциям по OsMa. И даже че-то сварганил по урокам на сайте. Минимум, максимум вроде нашел на истории, только вот свечку которая на минимуме или максимуме найти не могу. Объясните новичку пжл.Сожалею, но здесь ни кто свечку не найдёт...Значения индюка пишите в массив и индекс массива совпадает с номером свечи, потом считаете не нулевые значения и обрезаете массив, затем заполняете второй массив одним и тем-же минимумом, затем и его обрезаете - в этом нет логики, я не знаю как Вы хотите найти дивер, но это явно не то.Попробуйте так:- переписали индюк в массив- ищите индекс минимума (= номеру свечки), типа: int nom = ArrayMinimum(Hyst, WHOLE_ARRAY, 0);- сохраняете минимум double min = Hyst[nom];- выводим результат Print("Minimum = ", min," in bar #", nom); Ссылка на сообщение Поделиться на другие сайты More sharing options...
mrJack Опубликовано 7 декабря, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 декабря, 2017 Добрый вечер коллеги трейдеры!Подскажите пожалуйста - можно ли написать индикатор отображения вот этого параметра Спойлер с сайта investing для инструмента EUR/USD в терминале МТ4? Если да, то как это реализуется? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 7 декабря, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 декабря, 2017 Если параметр текстовый, то советник читает сайт с заданной периодичностью, находит параметр и отображает.Если графический, то сложнее, но тоже возможно. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Leery Опубликовано 8 декабря, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 декабря, 2017 Господа программисты, при определенном размере массива если он полностью заполнен и поступает новое значение - выдаст ошибку или перепишет самое старое? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти