Ttomas Опубликовано 7 сентября, 2013 Поделиться Доработка советников: общая тема Опубликовано 7 сентября, 2013 Если уж что то делаешь, то предусматривай все варианты, у меня сейчас достаточно обширная собрание разных готовых функций, поэтому для написания советника мне нужно переписать всего 3 функции, собрать необходимый функционал и немного его подкорректировать, общих делов минимум, так что это твой скелет функции трала и ты его будешь использовать во многих своих роботах, поэтому неполенись \M/ Ссылка на сообщение Поделиться на другие сайты More sharing options...
ss1975 Опубликовано 19 сентября, 2013 Поделиться Доработка советников: общая тема Опубликовано 19 сентября, 2013 Парни помогите пожалуйста нужна строчка к сове, нужно чтоб ПЛЮСОВАЯ сделка закрывалась по индикатору а не по тейкпрофиту.Вот код открытия первой сделки. //========================================================= Открытие первого Buy ==============================================double StartLot ; int ticketbuy=0, ticketsell=0 ; if (TradeBuy && totalbuy==0){ if (ticketbuy ==0){ if (Signal > 0 ) { DeleteObject() ; StartLot = NormalizeDouble(Lot,dig); if(Info) Print("Команда на открытие первого BUY"); comment=StringConcatenate("1-й ордер Buy, ","Magic : ",MagicNumber) ; ticketbuy = SendOrder(OP_BUY , StartLot, 0, 0, MagicNumber, comment, Error); if (!IsTesting() || IsVisualMode() || !IsOptimization()){ if (Info) PlaySound("alert.wav"); Sleep(1000); // если это не тестирование - "засыпаем" на 1 секунду.; } } } } Сигнал на покупку даёт строчка (Signal > 0 )Добавлено: 19-09-2013 03:34:15вроде нашёл код,но надо теперь чтоб только плюсовые закрывалif (OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicNumber) { if (OrderType() == OP_BUY) { if (Signal OrderClose(OrderTicket(),OrderLots(),Bid,1); // закрываем позицию } } //--------------------------------------------------------if (OrderType() == OP_SELL) { if (Signal > 0 ){ OrderClose(OrderTicket(),OrderLots(),Ask,1); // закрываем позицию } } } Изменено 19 сентября, 2013 пользователем ss1975 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ttomas Опубликовано 19 сентября, 2013 Поделиться Доработка советников: общая тема Опубликовано 19 сентября, 2013 Ну можно просто добавить немного условий. Спойлер if (OrderType()==OP_BUY) { if (OrderOpenPrice() { Функция закрытия данного ордера } }if (OrderType()==OP_SELL) { if (OrderOpenPrice()>Ask) { Функция закрытия данного ордера } } ну это примерный алгоритм, сам подкорректируешь как тебе надо Ссылка на сообщение Поделиться на другие сайты More sharing options...
ss1975 Опубликовано 19 сентября, 2013 Поделиться Доработка советников: общая тема Опубликовано 19 сентября, 2013 Спасибо.но немного сделал по другому, if (OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicNumber) { if (OrderType() == OP_SELL) { if (Signal > 0 ){ if (SumProfit >0){ OrderClose(OrderTicket(),OrderLots(),Ask,1); // закрываем позицию } }}}} вроде работает)эт я над интегрой изголяюсь))Добавлено: 20-09-2013 04:00:19Помогите доделать сигнального советника. сдаётся мне что я не то делаюextern string Sound = "alert.wav"; //-- звуковой файл//-------------------------------------------------------------------int Bar_Count;int Signal;//-------------------------------------------------------------------int init(){ Bar_Count = iBars(Symbol(), Period()); return(0);}//-------------------------------------------------------------------int start(){ GetSignal(); if(Bar_Count { if (Signal { PlaySound(Sound); } Bar_Count = iBars(Symbol(), Period()); }} /////////////////////////////////////////////////////////////////////////// if(Bar_Count { if (Signal > 0 ){ { PlaySound(Sound); } Bar_Count = iBars(Symbol(), Period()); }} ///////////////////////////////////////////////////////////////////////// return(0);}//------------------------------------------------------------------//+-------------------------------------------------------------------------------------+//| Генерация сигналов покупки и продажи по значениям двух стохастиков |//+-------------------------------------------------------------------------------------+void GetSignal(){ Signal = 0;// - 1 - == Получение показаний индикатора ============================================== double main1 = iCustom(NULL, 0, "Trend", 0, 1); double main2 = iCustom(NULL, 0, "Trend", 0, 2); double sign1 = iCustom(NULL, 0, "Trend", 1, 1); double sign2 = iCustom(NULL, 0, "Trend", 1, 2);// - 1 - == Окончание блока =============================================================// - 2 - == Генерация сигнала покупки =================================================== if (main1 != EMPTY_VALUE && main2 != EMPTY_VALUE// Линия сменила цвет с красного на.. && sign1 == EMPTY_VALUE && sign2 != EMPTY_VALUE)// ..голубой Signal = 1; // - 2 - == Окончание блока =============================================================// - 3 - == Генерация сигнала продажи =================================================== if (sign1 != EMPTY_VALUE && sign2 != EMPTY_VALUE// Линия сменила цвет с голубого на.. && main1 == EMPTY_VALUE && main2 != EMPTY_VALUE)// .. красный Signal = -1; // - 3 - == Окончание блока ============================================================= return(0); Добавлено: 20-09-2013 07:22:27Вроде сделал) Спойлер //+------------------------------------------------------------------+//| MA_Gudok.mq4 |//+------------------------------------------------------------------+extern string Sound = "ss.wav"; //-- звуковой файл//-------------------------------------------------------------------int Signal;int text;int Bar_Count;//-------------------------------------------------------------------int init(){Bar_Count = iBars(Symbol(), Period()); return(0);}//-------------------------------------------------------------------int start(){ CheckMACross(); if(Bar_Count { if (Signal PlaySound(Sound); //Alert (text+"SELL"); // Есть пересечение Comment("ПОРА В SELL-УДАЧИ "); Sleep(1000); } Bar_Count = iBars(Symbol(), Period()); } ////////////////////////////////////////////////////// { if (Signal > 0 ){ PlaySound(Sound); Comment("ПОРА В BAY-УДАЧИ "); //Alert (text+"BAY"); // Есть пересечение Sleep(1000); } Bar_Count = iBars(Symbol(), Period()); } return(1);}//------------------------------------------------------------------int CheckMACross(){ Signal = 0;// - 1 - == Получение показаний индикатора ============================================== double main1 = iCustom(NULL, 0, "Trend", 0, 1); double main2 = iCustom(NULL, 0, "Trend", 0, 2); double sign1 = iCustom(NULL, 0, "Trend", 1, 1); double sign2 = iCustom(NULL, 0, "Trend", 1, 2);// - 1 - == Окончание блока =============================================================// - 2 - == Генерация сигнала покупки =================================================== if (main1 != EMPTY_VALUE && main2 != EMPTY_VALUE// Линия сменила цвет с красного на.. && sign1 == EMPTY_VALUE && sign2 != EMPTY_VALUE)// ..голубой Signal = 1; // - 2 - == Окончание блока =============================================================// - 3 - == Генерация сигнала продажи =================================================== if (sign1 != EMPTY_VALUE && sign2 != EMPTY_VALUE// Линия сменила цвет с голубого на.. && main1 == EMPTY_VALUE && main2 != EMPTY_VALUE)// .. красный Signal = -1; // - 3 - == Окончание блока ============================================================= return(0);} Изменено 20 сентября, 2013 пользователем ss1975 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Evgen1 Опубликовано 25 сентября, 2013 Поделиться Доработка советников: общая тема Опубликовано 25 сентября, 2013 Вопрос все еще актуален, нужные функции есть в MT4i - TradeCopy декомпил обеих сов прилагаю. Возможно, кому-то удастся доработать советник. Цитата IncludeSymbols If not blank, a comma-separated list of symbols to include in themessages to the receiver. This must exactlymatch the broker’snames, including upper/lower case such asEURUSDfx,GBPUSDfx. Trades for symbols which are not onthis list are not included.IncludeMagicNumbers If not blank, a comma-separated list of EA magic numbers toinclude in the messages to the receiver. For example,0,1234,6789 will include manual orders (which have magicnumber 0), plus orders from the EA(s) which use the magicnumbers 1234 and 6789 AccountExport-EA.mq4MT4i_-_TradeCopy_Sender.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Daletar Опубликовано 3 октября, 2013 Поделиться Доработка советников: общая тема Опубликовано 3 октября, 2013 вот здесь мне нужно сделать подсчет сколько баров "живет" открытый ордер... а то я уже себе голову сломал))) straightforward.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
SNZHikari Опубликовано 3 октября, 2013 Поделиться Доработка советников: общая тема Опубликовано 3 октября, 2013 Выбираем ордер, потом(TimeCurrent() - OrderOpenTime())/Таймфрейм*60Таймфрейм в минутах. Если у тебя определенный можно написать PERIOD_M15 например.Как автаматом узнать ТФ хз, сделай внешнию переменную пусть пользователь сам введет. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
nicholas Опубликовано 3 октября, 2013 Поделиться Доработка советников: общая тема Опубликовано 3 октября, 2013 Выбираем ордер, потом(TimeCurrent() - OrderOpenTime())/Таймфрейм*60Таймфрейм в минутах. Если у тебя определенный можно написать PERIOD_M15 например.Как автаматом узнать ТФ хз, сделай внешнию переменную пусть пользователь сам введет. текущий таймфрейм возвращает функция Period()таким образом получим:bars = MathFloor((TimeCurrent() - OrderOpenTime())/Period()*60.0);Можно также рассчитать с помощью функции iBarShift, которая возвращает номер бара по времени.Только нужно учитывать, что нумерация обратная - тоесть нужно от более раннего отнимать познее время:bars = iBarShift(NULL, 0, OrderOpenTime()) - iBarShift(NULL, 0, TimeCurrent()); 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
msm Опубликовано 4 октября, 2013 Поделиться Доработка советников: общая тема Опубликовано 4 октября, 2013 помогите, плз, прикрутить трал к советнику. Не знаю куда вставлять изменение ордера,чтобы проверял и корректировал 1 раз за свечу. Заранее благодарен Expert_PSAR.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
nicholas Опубликовано 7 октября, 2013 Поделиться Доработка советников: общая тема Опубликовано 7 октября, 2013 помогите, плз, прикрутить трал к советнику. Не знаю куда вставлять изменение ордера,чтобы проверял и корректировал 1 раз за свечу. Заранее благодарен У Вас уже есть контроль открытия нового бара, и мне кажеться, что лучше всего вставить в блок 5 в оператор else для if (Signal != 0)...Таким образом, если на текущем баре не было сигнала для открытия ордеров, то можем модифицировать существующие.Также можно вынести функцию FindOrders(); из Trade и поставить ее перед оператором if: она нужна и для открытия ордеров и для трала, поэтому чтобы не дублировать вызов, лучше это сделать заранее. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ttomas Опубликовано 17 октября, 2013 Поделиться Доработка советников: общая тема Опубликовано 17 октября, 2013 Подскажите пожалуйста, где я допустил ошибку или я ее недопустил? Уже несколько часов безуспешно бьюсь над этим незамысловатым наполнением массива, удалось локализовать баг в данном куске кода. Для проверки этого прописал в начале функции цикл вывода массива. Но в результате в журнале говорится, что каждое значение массива равно 0. Непомогли ни перевод переноса значений в основной цикл, ни даже перевод всей структуры на Bool значения. Спойлер extern int Kd1=1;extern int Kd2=0;extern int Kd3=0;extern int Kd4=0;extern int Kd5=1;extern int Kd6=1;extern int Kd7=1;extern int Kd8=0;extern int Kd9=0;extern int Kd10=0;static int Order[];int init() { Order[0]=Kd1; Order[1]=Kd2; Order[2]=Kd3; Order[3]=Kd4; Order[4]=Kd5; Order[5]=Kd6; Order[6]=Kd7; Order[7]=Kd8; Order[8]=Kd9; Order[9]=Kd10; return(0); }int start() { for (int i=0; i { Print ("Значение буфера ",i, " ", Order); } //.... return(0); } А жестко прописывать в условиях каждый вариант нехотелось бы. Буду благодарен за подсказки. Ссылка на сообщение Поделиться на другие сайты More sharing options...
nicholas Опубликовано 17 октября, 2013 Поделиться Доработка советников: общая тема Опубликовано 17 октября, 2013 Подскажите пожалуйста, где я допустил ошибку или я ее недопустил? Уже несколько часов безуспешно бьюсь над этим незамысловатым наполнением массива, удалось локализовать баг в данном куске кода. Для проверки этого прописал в начале функции цикл вывода массива. Но в результате в журнале говорится, что каждое значение массива равно 0. Непомогли ни перевод переноса значений в основной цикл, ни даже перевод всей структуры на Bool значения. Спойлер extern int Kd1=1;extern int Kd2=0;extern int Kd3=0;extern int Kd4=0;extern int Kd5=1;extern int Kd6=1;extern int Kd7=1;extern int Kd8=0;extern int Kd9=0;extern int Kd10=0;static int Order[];int init() { Order[0]=Kd1; Order[1]=Kd2; Order[2]=Kd3; Order[3]=Kd4; Order[4]=Kd5; Order[5]=Kd6; Order[6]=Kd7; Order[7]=Kd8; Order[8]=Kd9; Order[9]=Kd10; return(0); }int start() { for (int i=0; i { Print ("Значение буфера ",i, " ", Order); } //.... return(0); } А жестко прописывать в условиях каждый вариант нехотелось бы. Буду благодарен за подсказки. Массив хоть и указан без размера, но он не динамический как в некоторых языках.Нужно перед использованием масива установить его размер с помощью ArrayResize(Order, 10);и модификатор static там бесполезен: массив и так объявлен как глобальная переменная. Изменено 7 декабря, 2017 пользователем Pavel888 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
alex379 Опубликовано 22 октября, 2013 Поделиться Доработка советников: общая тема Опубликовано 22 октября, 2013 Прошу помощи у программистов!Требуется конвертировать советника с mql4 в C# для cAlgo APIСоветник не коммерческий. Писал его программист с соседнего форума.Буду очень признателен! EA.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
YEEAAAH Опубликовано 24 октября, 2013 Поделиться Доработка советников: общая тема Опубликовано 24 октября, 2013 Сова привязана к счету, можно открутить как нибудь?) чтобы использовать с другими счетами experts.rar 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
mzk_3om6u Опубликовано 24 октября, 2013 Поделиться Доработка советников: общая тема Опубликовано 24 октября, 2013 но я бы обиделся, если бы с моим экспертом так поступили. experts.rar 4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
machetos Опубликовано 24 октября, 2013 Поделиться Доработка советников: общая тема Опубликовано 24 октября, 2013 Делись уж теперь, чо за сова, какие ТФ, пары? )) Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 24 октября, 2013 Поделиться Доработка советников: общая тема Опубликовано 24 октября, 2013 Сова привязана к счету, можно открутить как нибудь?) чтобы использовать с другими счетами в советнике нет привязки к счету...accountNumber = 0;пусть так и остаётся... Ссылка на сообщение Поделиться на другие сайты More sharing options...
mzk_3om6u Опубликовано 24 октября, 2013 Поделиться Доработка советников: общая тема Опубликовано 24 октября, 2013 Сова привязана к счету, можно открутить как нибудь?) чтобы использовать с другими счетами в советнике нет привязки к счету...accountNumber = 0;пусть так и остаётся... Ну так правильно, я уже убрал привязку. В оригинале там стоял номер счёта. Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 24 октября, 2013 Поделиться Доработка советников: общая тема Опубликовано 24 октября, 2013 Цитата Ну так правильно, я уже убрал привязку. В оригинале там стоял номер счёта. упс... :)пора спать! Ссылка на сообщение Поделиться на другие сайты More sharing options...
Eric Опубликовано 5 ноября, 2013 Поделиться Доработка советников: общая тема Опубликовано 5 ноября, 2013 Друзья, взгляните в свободное время, плиз.Вроде, как интересный советник для M1, на демо (Alpari, ECN) неплохо торгует. Ключ в архиве, работает до 9 ноября. expert.rar Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 5 ноября, 2013 Поделиться Доработка советников: общая тема Опубликовано 5 ноября, 2013 Убрал ограничение по времени...Рекомендую оформить тему как положено для советников... Trio_Dancer.ex4 Изменено 5 ноября, 2013 пользователем xbms Ссылка на сообщение Поделиться на другие сайты More sharing options...
sabsan Опубликовано 15 ноября, 2013 Поделиться Доработка советников: общая тема Опубликовано 15 ноября, 2013 Помогите пожалуйста доработать советник e-News-Lucky , которым с нами великодушно поделился Павел, что бы коэффициент лота к депозиту был постоянный. При росте депозита - рос и лот.Депозит 1000 - лот 0,70; Депозит 1500 - лот 1,05; Депозит 2000 - лот 1,40; и пример на понижение: Депозит 500 - лот 0,35.Только чтобы лот плавно рос в след за плавно растущим депозитом, и также плавно уменьшался при уменьшении депозита. Ну и чтобы была возможность выставить первоначальный лот не только 0,7 к 1000, но и другие значения.Только если кто возьмется сделать такое, пожалуйста другие параметры советника не трогайте, не изменяйте. e-News-Lucky$.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 15 ноября, 2013 Поделиться Доработка советников: общая тема Опубликовано 15 ноября, 2013 держи... e-News-Lucky$_lots.mq4 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Yura Vakulenko Опубликовано 16 ноября, 2013 Поделиться Доработка советников: общая тема Опубликовано 16 ноября, 2013 Друзья! У меня при компиляции одного советника компилятор выдал 3 предупреждения. Советник был декомпилирован. Вот они:'f0_1' - comparison expression expected (93, 14)'f0_4' - comparison expression expected (380, 14)'f0_4' - comparison expression expected (491, 8)В чем причина? Как их убрать и влияют ди они на функционал советника. Вот код к которому относятся ошибкиж ( строки с ошибками помечены комментариями // ЭТА СТРОКА)'f0_1' - comparison expression expected (93, 14) error_92 = GetLastError(); if (error_92 == 128/* TRADE_TIMEOUT */ || error_92 == 142 || error_92 == 143) { Sleep(66000); if (f0_1(A_symbol_0, A_cmd_8, A_magic_44, datetime_64)) { // ЭТА СТРОКА PlaySound("expert.wav"); return; } Print("Error(", error_92, ") set order: ", ErrorDescription(error_92), ", try ", Li_96); } else { --------------------------------------------------------'f0_4' - comparison expression expected (380, 14)if (error_84 == 128/* TRADE_TIMEOUT */ || error_84 == 142 || error_84 == 143) { Sleep(66666.0); if (f0_4(A_symbol_0, A_cmd_8, A_magic_36, datetime_52)) { // ЭТА СТРОКА PlaySound("alert2"); break; } } --------------------------------------'f0_4' - comparison expression expected (491, 8)if (f0_4("", -1, MagicNumber)) { // ЭТА СТРОКА if (a1(Ld_0, TrailingStop, TrailingStart, AccountBalance())) { if (a2(Gd_196, Ld_0, TrailingStop, TrailingStep, AccountEquity())) { Gd_196 = Ld_0 - TrailingStop; Alert(AccountCompany(), " Достигнут новый уровень профита." + DoubleToStr(Gd_196, 0)); } } } else Gd_196 = -999999999; Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ttomas Опубликовано 17 ноября, 2013 Поделиться Доработка советников: общая тема Опубликовано 17 ноября, 2013 Возможно стоит проверить как объявлены эти функции. По тому как их используют они должны иметь Тип bool и для того чтобы уж наверняка исключить, в условия их использования стоит вписать сравнение по типу if (f0_1(A_symbol_0, A_cmd_8, A_magic_44, datetime_64)==True) или if (f0_1(A_symbol_0, A_cmd_8, A_magic_44, datetime_64)==1) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти