einshtein Опубликовано 10 августа, 2013 Поделиться Доработка советников: общая тема Опубликовано 10 августа, 2013 Ну магик-то лучше вводимым пользователем задавать.Первый, "пусковой" ордер (в т.ч. отложку) можно и лучше задавать скриптом с указанием маджика (равным 0 тоже можно задавать).Не дело, когда бот будет хватать все подряд ордера на графике с нулевым мэджиком - всяко бывает, может и другие ордера понадобится пользователю открыть...Все, что можно в боте указать однозначно - всегда лучше указать однозначно. Мне не нужно других ордеров, и магик не нужен.Добавлено: 10-08-2013 11:54:30Ежели по какой другой причине ордер попадет в историю ордеров, то советник будет находится в поиске открытой позиции руками. Что если сов будет (при достижении плавающего профита)сразу открывать противоположную позицию, а на следующем тике закрывать - ранее открытую позицию, чтобы он всегда мог видеть, нужную инфу. Так бы было надежнее, так - как после закрытия позы, сов просто не сможет знать, куда была ранее открытая поза, и куда собственно открывать новую. Изменено 10 августа, 2013 пользователем einshtein Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 10 августа, 2013 Поделиться Доработка советников: общая тема Опубликовано 10 августа, 2013 Мне не нужно других ордеров, и магик не нужен. einshtein_01.mq4 Изменено 10 августа, 2013 пользователем Vorchunozavr Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 10 августа, 2013 Поделиться Доработка советников: общая тема Опубликовано 10 августа, 2013 Мне не нужно других ордеров, и магик не нужен. Мы на форуме, разработка открытая.Бот может пригодится еще кому-то, кому магик нужен.И вообще - любой бот должен "узнавать" минимум ордеров и точно только свои. Ссылка на сообщение Поделиться на другие сайты More sharing options...
talliy Опубликовано 10 августа, 2013 Поделиться Доработка советников: общая тема Опубликовано 10 августа, 2013 .....а на следующем тике закрывать - ранее открытую позицию, чтобы он всегда мог видеть, нужную инфу.... Он не теряет инфу.... Загляни в код.......И вообще - любой бот должен "узнавать" минимум ордеров и точно только свои. Согласен, но чем открытие в ручную не "свой ордер".... Любой ордер открытый руками имеет магик 0 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 10 августа, 2013 Поделиться Доработка советников: общая тема Опубликовано 10 августа, 2013 Добавил своп: einshtein_02.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
talliy Опубликовано 10 августа, 2013 Поделиться Доработка советников: общая тема Опубликовано 10 августа, 2013 ....Бот может пригодится еще кому-то, кому магик нужен..... Заходим в код Revers.mq4, сразу после функции start() находим строчку:.......//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start() {//---- int total=OrdersTotal(); if(total>0&&S==0&&M!=1) { for(int i = total;i { if(OrderSelect(i,SELECT_BY_TICKET)==true) { if(OrderSymbol()==Symbol()&&OrderMagicNumber()==0) {............. И в строчке:if(OrderSymbol()==Symbol()&&OrderMagicNumber()==0)Меняем 0 на любой магик первого ордера..... Ссылка на сообщение Поделиться на другие сайты More sharing options...
einshtein Опубликовано 10 августа, 2013 Поделиться Доработка советников: общая тема Опубликовано 10 августа, 2013 Спасибо Большое Господа... Буду тестить - отпишу, что как... Ссылка на сообщение Поделиться на другие сайты More sharing options...
Дмитрий211 Опубликовано 10 августа, 2013 Поделиться Доработка советников: общая тема Опубликовано 10 августа, 2013 и в чем секрет этой "второй версии" если код полностью идентичен сове, выложенной в ранее созданной теме? в комментариях автора поменяли да название?))Пробуй и узнаешь в чем разница Ссылка на сообщение Поделиться на другие сайты More sharing options...
LeonWAP Опубликовано 10 августа, 2013 Поделиться Доработка советников: общая тема Опубликовано 10 августа, 2013 Не так давно столкнулся с этой гадостью при переработке старого декомпилированного робота и при этом прежде работающего без особых проблем.Кто в курсе где копать и как зарыть? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 10 августа, 2013 Поделиться Доработка советников: общая тема Опубликовано 10 августа, 2013 Дмитрий211, корректно используйте цитирование.Форумчане не обязаны разгадывать где в вашем посте цитируется чужой текст и какого хрена вы сами с собой на форуме разговариваете.на некоторых приличных форумах за кривое цитирование банят.дают 15 минут на исправление поста - и банят, если цитата так и будет оформлена некорректно.Кривое цитирование рассматривается как грубейшее нарушение правил форума.По топику.Вы выложили неизвестно кем неизвестно как доработанного бота без описания и предлагаете всем тестировать и угадывать в чем отличия в версиях бота?!Я правильно понимаю ваши действия?Вообще-то топики с такими непонятками надо просто удалять сразу после открытия... Изменено 10 августа, 2013 пользователем Старик Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 10 августа, 2013 Поделиться Доработка советников: общая тема Опубликовано 10 августа, 2013 talliy, проверь корректность применения переменных циклов.Если в каждом не вложенном цикле использовать новую переменную, то риск ошибки их применения резко возрастает.Минимум одна ошибка вроде есть. Ссылка на сообщение Поделиться на другие сайты More sharing options...
talliy Опубликовано 11 августа, 2013 Поделиться Доработка советников: общая тема Опубликовано 11 августа, 2013 ....Минимум одна ошибка вроде есть. Спасибо)))) есть одна... Так же не там была расставлена статика и при перезагрузке терминала бот бы терял свои ордера.Исправлено...Revers.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Дмитрий211 Опубликовано 12 августа, 2013 Поделиться Доработка советников: общая тема Опубликовано 12 августа, 2013 RubiconHelper_V2. выкладывали в индикаторах,советник работает на основе индикатора Rubicon....в чем отличия,я и сам не знаю,я выложил чтоб помогли люди доделать.!Можете удалить ветку вам если она мешает! Добавлено: 12-08-2013 10:56:45Советник ставит отложенные ордера на машках. как я думаю ему не хватает трейлинг стоп привязать и прибавить тейк профит в 3 или 2 раза больше стоп лоса.уважаемые программисты помогите доделать совуДобавлено: 12-08-2013 11:17:31 Изменено 12 августа, 2013 пользователем Дмитрий211 Ссылка на сообщение Поделиться на другие сайты More sharing options...
t0xigen Опубликовано 12 августа, 2013 Поделиться Доработка советников: общая тема Опубликовано 12 августа, 2013 чтобы декомпил работал, надо все переменные ( в виде непонятного набора букв и цифр: типа il_11 ...) переименовать в "человеческие" ;) Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 13 августа, 2013 Поделиться Доработка советников: общая тема Опубликовано 13 августа, 2013 RubiconHelper_V2. выкладывали в индикаторах,советник работает на основе индикатора Rubicon....в чем отличия,я и сам не знаю,я выложил чтоб помогли люди доделать.!Можете удалить ветку вам если она мешает! Добавлено: 12-08-2013 10:56:45Советник ставит отложенные ордера на машках. как я думаю ему не хватает трейлинг стоп привязать и прибавить тейк профит в 3 или 2 раза больше стоп лоса.уважаемые программисты помогите доделать совуДобавлено: 12-08-2013 11:17:31 сравни код одной совы и другой, он свободно открывается в метаэдиторе. отличий НОЛЬ. отсюда вопрос риторический: зачем создавать топик с темой, популярно разжеванной и чутка допиленной в другом топике??? причем разжеваны не только казусы, которые должна решать сова, но и те глюки, которые есть у самого индикатора. Ссылка на сообщение Поделиться на другие сайты More sharing options...
loopsider Опубликовано 14 августа, 2013 Поделиться Доработка советников: общая тема Опубликовано 14 августа, 2013 Не так давно столкнулся с этой гадостью при переработке старого декомпилированного робота и при этом прежде работающего без особых проблем.Кто в курсе где копать и как зарыть? Проще всего откомпилировать в старом билде и использовать ex4.Новые декомпиляторы расставляют строчки с произвольными комментариями типа// 7DDD94BB0BD953B7D27032514AC4DC6Fперед каждой функцией. Вроде бы этого достаточно, можно поэкспериментировать.Ну или действительно убирать подчеркивания из названия переменных. Ссылка на сообщение Поделиться на другие сайты More sharing options...
nixxer Опубликовано 14 августа, 2013 Поделиться Доработка советников: общая тема Опубликовано 14 августа, 2013 md5 хеш перед каждой функцией никак не влияет на результат компиляции. Влияет только неоднократные вхождения знака _ в именах переменных, особенно если в начале имени есть l или g. Для тех кто совсем не шарит достаточно воспользоваться старым компилятором. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Lexuz77 Опубликовано 14 августа, 2013 Поделиться Доработка советников: общая тема Опубликовано 14 августа, 2013 В метаэдиторе ctrl+H - меняем все l_ на L_ тоже самое с g_ на G_ в начале кода убираем все упоминания про декомпилер - все компилится в любом билде. Ссылка на сообщение Поделиться на другие сайты More sharing options...
00000 Опубликовано 16 августа, 2013 Поделиться Доработка советников: общая тема Опубликовано 16 августа, 2013 Кто может, гляньте плиз код.. Почему то не хочет тралить - терминал как бы зависает... Где я накосячил? :((ЗЫ. Должно ставить ордера согласно шагу и тралить по МА :-b Спойлер /+------------------------------------------------------------------+//| Догонялки |//| //| //+------------------------------------------------------------------+#property copyright "Copyright 2013, MetaQuotes Software Corp."#property link "http://www.metaquotes.net"extern double Lots = 0.1; // лотextern int StopLoss = 50; // профитextern int Step = 50; // шаг сеткиextern double Multipller = 1.0; // множительextern int Slippage = 5; // проскальзывание в пунктахextern int Magic = 123; // магикextern int Peri = 14; // периодextern int Otstup = 10; // отступextern int Otstup2 = 24; // отступextern int TrallingStep = 10;int ticket; // для модификации ордеровdouble price, SL, lastlot; // цена для расчёта, ТР для расчёта (определяем)//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int init(){ if (Digits == 3 || Digits == 5) // проверка если либо 3 либо 5 после запятой - то... { StopLoss *= 10; // ... мы умножаем ТР на 10... Step *= 10; // ... и тоже самое с Шагом сетки Slippage *= 10; // ... и для проскальзывания Otstup *= 10; // отступ Otstup2 *= 10; // отступ TrallingStep *= 10; } return(0);}//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start() // начало работы совы{ Tralling(); if (CountTrades() == 0) // если кол-во ордеров = нулю, то ... { double ima = iMA(Symbol(), PERIOD_M30, Peri, 0, MODE_SMA, PRICE_CLOSE, 1); // МА символ, период, сдвиг вид, по ценам закрытия, прошлая свеча if (Ask > ima) // если цена выше ма. то { ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic, 0, Blue); // открываем ордер на покупку на паре,опенбай, лотом, по цене аск if (ticket > 0) // если ордеров больше 0, то... { SL = NormalizeDouble(ima, Digits); // ... вычисляем стоп лосс.... OrderModify(ticket, OrderOpenPrice(), SL, 0, 0); // ... и модифицируем ордер. } } else if (Bid { ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "", Magic, 0, Red); // открываем ордер на покупку на паре,опенбай, лотом, по цене аск if (ticket > 0) // если ордеров больше 0, то... { SL = NormalizeDouble(ima, Digits); // ... вычисляем стоп лосс.... OrderModify(ticket, OrderOpenPrice(), SL, 0, 0); // ... и модифицируем ордер. } } } else // если нужно доливать { int order_type = FindLastOrderType(); if (order_type == OP_BUY) { price = FindLastPrice(OP_BUY); if (Ask >= price + Step * Point) { lastlot = FindLastLots(OP_BUY); lastlot = NormalizeDouble(lastlot * Multipller, 2); ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, Slippage, 0, 0, "", Magic, 0, Blue); if (ticket > 0) ModifyOrders(OP_BUY); } } else if (order_type == OP_SELL) { price = FindLastPrice(OP_SELL); if (Bid { lastlot = FindLastLots(OP_SELL); lastlot = NormalizeDouble(lastlot * Multipller, 2); ticket = OrderSend(Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, 0, "", Magic, 0, Red); if (ticket > 0) ModifyOrders(OP_SELL); } } } return(0);}//+------------------------------------------------------------------+void Tralling(){ double ima1 = iMA(Symbol(), PERIOD_M30, Peri, 0, MODE_SMA, PRICE_CLOSE, 1); for (int i=0; 0 { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType()) { SL = NormalizeDouble(ima1, Digits); if (OrderStopLoss() != SL) OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0); } } }}//+------------------------------------------------------------------+void ModifyOrders(int otype){ double avgprice = 0, order_lots = 0, ima2 = iMA(Symbol(), PERIOD_M30, Peri, 0, MODE_SMA, PRICE_CLOSE, 1); price = 0; for (int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype) { price += OrderOpenPrice() * OrderLots(); order_lots += OrderLots(); } } } avgprice = NormalizeDouble(ima2, Digits); if (otype == OP_BUY) SL = NormalizeDouble(avgprice, Digits); if (otype == OP_SELL) SL = NormalizeDouble(avgprice, Digits); for (i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype) OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0); } }}//+------------------------------------------------------------------+double FindLastLots(int otype){ double oldlots; int oldticket; ticket = 0; for(int i = OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype) { oldticket = OrderTicket(); if (oldticket > ticket) { oldlots = OrderLots(); ticket = oldticket; } } } } return(oldlots);}//+------------------------------------------------------------------+double FindLastPrice(int otype){ double oldopenprice; int oldticket; ticket = 0; for(int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype) { oldticket = OrderTicket(); if (oldticket > ticket) { oldopenprice = OrderOpenPrice(); ticket = oldticket; } } } } return(oldopenprice);}//+------------------------------------------------------------------+int FindLastOrderType(){ for (int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) return(OrderType()); } } return(-1);}//+------------------------------------------------------------------+int CountTrades() // описываем саму функцию CountTrades{ int count = 0; // пока ордеорв у нас нет, переменная каунт=0 for (int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) // проверяем выбрани ли ордер { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) // проверяем наш ли это ордер по паре и магику count++; // если да то добавляем 1 } } return(count); // возвращаем изменённую переменную каунт}//+------------------------------------------------------------------+ Ссылка на сообщение Поделиться на другие сайты More sharing options...
talliy Опубликовано 16 августа, 2013 Поделиться Доработка советников: общая тема Опубликовано 16 августа, 2013 Мне кажется в первую очередь с логикой команд машине надо цепочку выстроить....Весь код не смотрел но первое что заметил... if (Ask > ima) // если цена выше ма. то { ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic, 0, Blue); // открываем ордер на покупку на паре,опенбай, лотом, по цене аск if (ticket > 0) // если ордеров больше 0, то... { SL = NormalizeDouble(ima, Digits); // ... вычисляем стоп лосс.... OrderModify(ticket, OrderOpenPrice(), SL, 0, 0); // ... и модифицируем ордер. } } По мне, так получение Стоп Лоса должно быть вне условия ticket!=0 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Alex1821 Опубликовано 19 августа, 2013 Поделиться Доработка советников: общая тема Опубликовано 19 августа, 2013 советник из этой темы http://tlap.com/forum/sovetniki-foreks/11/sovetnik-stw/4467Нужно убрать ограничение на лот(больше 0.1 или 0.2 не идет), вынести переменные во внешние и добавить новостной фильтр. Возможно, получится хороший трендовик. STW.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
serge1759 Опубликовано 20 августа, 2013 Поделиться Доработка советников: общая тема Опубликовано 20 августа, 2013 Нужно убрать ограничение на лот(больше 0.1 или 0.2 не идет) количество лотов можете поменять себе здесь:void f0_2() {... Gd_300 = 2.0 * Gd_356;...размер 1 лота лота берётся минимальный из маркета, в следующем ордере он умножается в данном случае на 2.0Вы можете умножить на сколько пожелаете, если Вам это чем-то поможет :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
ZahvatkiN Опубликовано 20 августа, 2013 Поделиться Доработка советников: общая тема Опубликовано 20 августа, 2013 serge1759 раз уж вы так понимаете в этом, не могли бы вы как-то очеловечить советник, вынести в свойства, а то ведь не все программисты) И я так понимаю можно только коэффициент умножения изменить, а стартовый лот нельзя? Или переменная Gd_356 это и есть стартовый лот? Изменено 20 августа, 2013 пользователем ZahvatkiN Ссылка на сообщение Поделиться на другие сайты More sharing options...
serge1759 Опубликовано 21 августа, 2013 Поделиться Доработка советников: общая тема Опубликовано 21 августа, 2013 Данный советник выставляет ордер оглядываясь на предыдущую торговлю. Если не нашел ордеров в истории, то стартовый размер лотов берётся минимально возможный на данном инструменте в данном ДЦ.В последующих прибыльных ордерах размер лотов умножается на 2. переменная Gd_356 содержит данные, считанные с сервера в ДЦ.Как вы хотели, я поискал где Вы его можете умножить хоть на 99, например Gd_300 = 99 * Gd_356; получите 99 * 0.1=9.9 LotsЭто поможет быстрей слить депозит, т.к. единственное достоинство этого "медленного сливатора" - манименеджмент (который Вы хотите угробить). x_x Моё мнение: невозможно получить "хороший трендовик", используя для входа/выхода только скользящие средние и осцилляторы (да ещё вырубив управление риском). Поэтому возиться с ним никто не будет. Тему ф топку <:-p> Изменено 21 августа, 2013 пользователем serge1759 Ссылка на сообщение Поделиться на другие сайты More sharing options...
00000 Опубликовано 23 августа, 2013 Поделиться Доработка советников: общая тема Опубликовано 23 августа, 2013 Сдаёццо мне что мои корявые ручки тут чето накосячили - ибо если этот трал ставлю на другую сову то картина таже - первый ордер - стоп и зависание >:dvoid Tralling(){ double ima1 = iMA(Symbol(), PERIOD_M30, Peri, 0, MODE_SMA, PRICE_CLOSE, 1); for (int i=0; 0 { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType()) { SL = NormalizeDouble(ima1, Digits); if (OrderStopLoss() != SL) OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0); } } }}где косяк?? :(( Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти