Перейти к содержанию

Доработка советников: общая тема


Рекомендуемые сообщения

Доработка советников: общая тема Опубликовано


Ну магик-то лучше вводимым пользователем задавать.

Первый, "пусковой" ордер (в т.ч. отложку) можно и лучше задавать скриптом с указанием маджика (равным 0 тоже можно задавать).
Не дело, когда бот будет хватать все подряд ордера на графике с нулевым мэджиком - всяко бывает, может и другие ордера понадобится пользователю открыть...

Все, что можно в боте указать однозначно - всегда лучше указать однозначно.



Мне не нужно других ордеров, и магик не нужен.



Добавлено: 10-08-2013 11:54:30


Ежели по какой другой причине ордер попадет в историю ордеров, то советник будет находится в поиске открытой позиции руками.



Что если сов будет (при достижении плавающего профита)сразу открывать противоположную позицию, а на следующем тике закрывать - ранее открытую позицию, чтобы он всегда мог видеть, нужную инфу. Так бы было надежнее, так - как после закрытия позы, сов просто не сможет знать, куда была ранее открытая поза, и куда собственно открывать новую. Изменено пользователем einshtein
Ссылка на сообщение
Поделиться на другие сайты

  • Ответов 2,5k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Версия с правками. Я немного свернул код, чтобы не перебирались ордера попусту и чтобы проверка красной/синей зоны делалась в одном месте. Прогнал в тесте с настройками по умолчанию. Ожидаемо лье

Перейти

Нате 1_2_3 _Fraktal.mq4

Перейти

Система маятника, или попрыгунчика, или фиг ее знает как ее еще назвать не намного младше сетки мартингейла. Мы в далеком 2017 писали по ней сов с индикатором на вход: https://tlap.com/forum/labo

Перейти
Доработка советников: общая тема Опубликовано


Мне не нужно других ордеров, и магик не нужен.

einshtein_01.mq4

Изменено пользователем Vorchunozavr
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано


Мне не нужно других ордеров, и магик не нужен.


Мы на форуме, разработка открытая.
Бот может пригодится еще кому-то, кому магик нужен.
И вообще - любой бот должен "узнавать" минимум ордеров и точно только свои.
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано


.....а на следующем тике закрывать - ранее открытую позицию, чтобы он всегда мог видеть, нужную инфу....



Он не теряет инфу.... Загляни в код...


....
И вообще - любой бот должен "узнавать" минимум ордеров и точно только свои.



Согласен, но чем открытие в ручную не "свой ордер".... Любой ордер открытый руками имеет магик 0
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано


....
Бот может пригодится еще кому-то, кому магик нужен.
....



Заходим в код 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 на любой магик первого ордера.....
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Спасибо Большое Господа... Буду тестить - отпишу, что как...

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

и в чем секрет этой "второй версии" если код полностью идентичен сове, выложенной в ранее созданной теме? в комментариях автора поменяли да название?))
Пробуй и узнаешь в чем разница

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Не так давно столкнулся с этой гадостью при переработке старого декомпилированного робота и при этом прежде работающего без особых проблем.
Кто в курсе где копать и как зарыть?

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
Дмитрий211, корректно используйте цитирование.
Форумчане не обязаны разгадывать где в вашем посте цитируется чужой текст и какого хрена вы сами с собой на форуме разговариваете.

на некоторых приличных форумах за кривое цитирование банят.
дают 15 минут на исправление поста - и банят, если цитата так и будет оформлена некорректно.
Кривое цитирование рассматривается как грубейшее нарушение правил форума.


По топику.
Вы выложили неизвестно кем неизвестно как доработанного бота без описания и предлагаете всем тестировать и угадывать в чем отличия в версиях бота?!
Я правильно понимаю ваши действия?

Вообще-то топики с такими непонятками надо просто удалять сразу после открытия... Изменено пользователем Старик
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
talliy, проверь корректность применения переменных циклов.
Если в каждом не вложенном цикле использовать новую переменную, то риск ошибки их применения резко возрастает.
Минимум одна ошибка вроде есть.
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано


....
Минимум одна ошибка вроде есть.



Спасибо)))) есть одна... Так же не там была расставлена статика и при перезагрузке терминала бот бы терял свои ордера.

Исправлено...

Revers.mq4

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

RubiconHelper_V2. выкладывали в индикаторах,советник работает на основе индикатора Rubicon....в чем отличия,я и сам не знаю,я выложил чтоб помогли люди доделать.!Можете удалить ветку вам если она мешает!


Добавлено: 12-08-2013 10:56:45

Советник ставит отложенные ордера на машках. как я думаю ему не хватает трейлинг стоп привязать и прибавить тейк профит в 3 или 2 раза больше стоп лоса.уважаемые программисты помогите доделать сову

Добавлено: 12-08-2013 11:17:31

Изменено пользователем Дмитрий211
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

чтобы декомпил работал, надо все переменные ( в виде непонятного набора букв и цифр: типа il_11 ...) переименовать в "человеческие" ;)

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано


RubiconHelper_V2. выкладывали в индикаторах,советник работает на основе индикатора Rubicon....в чем отличия,я и сам не знаю,я выложил чтоб помогли люди доделать.!Можете удалить ветку вам если она мешает!


Добавлено: 12-08-2013 10:56:45

Советник ставит отложенные ордера на машках. как я думаю ему не хватает трейлинг стоп привязать и прибавить тейк профит в 3 или 2 раза больше стоп лоса.уважаемые программисты помогите доделать сову

Добавлено: 12-08-2013 11:17:31


сравни код одной совы и другой, он свободно открывается в метаэдиторе. отличий НОЛЬ.
отсюда вопрос риторический: зачем создавать топик с темой, популярно разжеванной и чутка допиленной в другом топике??? причем разжеваны не только казусы, которые должна решать сова, но и те глюки, которые есть у самого индикатора.
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано


Не так давно столкнулся с этой гадостью при переработке старого декомпилированного робота и при этом прежде работающего без особых проблем.
Кто в курсе где копать и как зарыть?


Проще всего откомпилировать в старом билде и использовать ex4.

Новые декомпиляторы расставляют строчки с произвольными комментариями типа
// 7DDD94BB0BD953B7D27032514AC4DC6F
перед каждой функцией. Вроде бы этого достаточно, можно поэкспериментировать.

Ну или действительно убирать подчеркивания из названия переменных.
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

md5 хеш перед каждой функцией никак не влияет на результат компиляции. Влияет только неоднократные вхождения знака _ в именах переменных, особенно если в начале имени есть l или g. Для тех кто совсем не шарит достаточно воспользоваться старым компилятором.

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

В метаэдиторе ctrl+H - меняем все l_ на L_ тоже самое с g_ на G_ в начале кода убираем все упоминания про декомпилер - все компилится в любом билде.

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Кто может, гляньте плиз код.. Почему то не хочет тралить - терминал как бы зависает... Где я накосячил? :((

ЗЫ. Должно ставить ордера согласно шагу и тралить по МА :-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); // возвращаем изменённую переменную каунт
}
//+------------------------------------------------------------------+

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Мне кажется в первую очередь с логикой команд машине надо цепочку выстроить....

Весь код не смотрел но первое что заметил...



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
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

советник из этой темы http://tlap.com/forum/sovetniki-foreks/11/sovetnik-stw/4467

Нужно убрать ограничение на лот(больше 0.1 или 0.2 не идет), вынести переменные во внешние и добавить новостной фильтр. Возможно, получится хороший трендовик.

STW.mq4

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано


Нужно убрать ограничение на лот(больше 0.1 или 0.2 не идет)



количество лотов можете поменять себе здесь:

void f0_2() {
...
Gd_300 = 2.0 * Gd_356;
...

размер 1 лота лота берётся минимальный из маркета, в следующем ордере он умножается в данном случае на 2.0
Вы можете умножить на сколько пожелаете, если Вам это чем-то поможет :)
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
serge1759 раз уж вы так понимаете в этом, не могли бы вы как-то очеловечить советник, вынести в свойства, а то ведь не все программисты) И я так понимаю можно только коэффициент умножения изменить, а стартовый лот нельзя? Или переменная Gd_356 это и есть стартовый лот? Изменено пользователем ZahvatkiN
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Данный советник выставляет ордер оглядываясь на предыдущую торговлю. Если не нашел ордеров в истории, то стартовый размер лотов берётся минимально возможный на данном инструменте в данном ДЦ.
В последующих прибыльных ордерах размер лотов умножается на 2.
переменная Gd_356 содержит данные, считанные с сервера в ДЦ.
Как вы хотели, я поискал где Вы его можете умножить хоть на 99, например

Gd_300 = 99 * Gd_356;
получите 99 * 0.1=9.9 Lots


Это поможет быстрей слить депозит, т.к. единственное достоинство этого "медленного сливатора" - манименеджмент (который Вы хотите угробить). x_x
Моё мнение: невозможно получить "хороший трендовик", используя для входа/выхода только скользящие средние и осцилляторы (да ещё вырубив управление риском). Поэтому возиться с ним никто не будет.
Тему ф топку <:-p>

Изменено пользователем serge1759
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Сдаёццо мне что мои корявые ручки тут чето накосячили - ибо если этот трал ставлю на другую сову то картина таже - первый ордер - стоп и зависание >:d
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);
}
}
}
}


где косяк?? :((

Ссылка на сообщение
Поделиться на другие сайты

  • idinesh changed the title to Assae Elite Pro tlap version source code need i have plan convert this mt4 to mt5 and it possible mt4 dll file modified mt5 version
  • Pavel888 pinned this тема

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • ×
    ×
    • Создать...