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

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


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

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

Единственное, что подправить: значение прироста депозита на мин.лот округлять не до десятых, а до сотых долей процента для более гибкой настройки(просто в большинстве сделок этих ботов прибыль в % прироста депозита не превышает 0.1% на мин.лот 0.01).



Логика закрытия по проценту от депозита (как это работает):
Если стоит true , т.е. разрешено закрытие ордеров по проценту от депозита, то запускается две функции. 1-ая рассчитывает общий профит по всем ордерам относительно валюты и магика. 2-ая рассчитывает сумму в валюте депозита относительно указанного процента. Процент указывается пользователем с диапазоном от 0.01% до 100%(стоит защита от "дурака"- нельзя указать больше 100 или меньше 0.01). Все расчеты не зависят от объема открытых позиций.
Или я не понимаю задачу, или Вы ее не правильно поставили.


Добавлено: 21-10-2018 12:23:49

Единственное - остался открытым вопрос по ФорсТрейдеру и Черепахам: стоит ли там оставлять открытие позиции 2-мя ордерами.


По поводу кода: "копаться" в коде мной не созданном трудно и не хочется. Единственное, что хотелось бы отметить, много там не понятного, например две функции закрытия всех ордеров, которые для моей задачи не работают. Пришлось добавить еще одну (в конце кода) :-b
Проще говоря, постарайтесь разобрать в логике самостоятельно. Изменено пользователем loveЦ
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Перейти

Нате 1_2_3 _Fraktal.mq4

Перейти

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

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

Извините, что запутал своим неточным выражением мыслей. Сам сейчас поразмыслил - закрытие по % прироста депозита на мин лот 0.01 и оптимизация по этому параметру - то же самое, что и оптимизация по ТП. Так что спасибо за доработку. Думаю что всё вы сделали правильно. Пока нет возможности и времени потестировать доработку.


Добавлено: 22-10-2018 07:39:12

Добрый день, уважаемые программисты форума! Может кто помочь с доработкой? Нужно к 2-м ботам прикрутить фильтр времени(простой, по дням недели: в пн торгуем, во вт - нет и т.д.). Сам пробовал доработать, но т.к. в программировании не силён, просто пробовал выдернуть планировщик из другого бота с открытым кодом. По факту код ошибок не даёт, а планировщик не работает. Исходники ботов прикрепляю к посту. Мои "доработки" выложены в посте №1020 выше.

PS. Вот ради чего все эти попытки подружить ботов с тайм-фильтром(вл. картинка)

Force_Trader_v1.0%_Profit.mq4
Turtles_v1.0%_Profit.mq4
Новый_точечный_рисунок.jpg

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

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

Народ хочу в советник добавить функцию, которая через 50 пунктов прибыли будет переводить открытый ордер в безубыток.
Написал код ниже приведенный, но в тестере иногда переводит в безубыток при меньшем количестве пунктов прибыли.
Можете сказать где где ошибка?

Спойлер

void ChekOrderProfit()
{
if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS, MODE_TRADES))
{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
{
pips = OrderProfit();
if(pips > 50)
{
EditOrder(OrderOpenPrice(), OrderTakeProfit(), OrderOpenPrice()); // эта функция цену открытия подставляет в стоплос
}
}
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
{
pips = OrderProfit();
if(pips > 50)
{
EditOrder(OrderOpenPrice(), OrderTakeProfit(), OrderOpenPrice()); // эта функция цену открытия подставляет в стоплос
}
}
}
}



Добавлено: 30-10-2018 16:35:46

Блин, я понял в чем была ошибка.
Здесь pips = OrderProfit(); я получаю значение прибыли, а не количество пунктов.
Пока я ставил лот 0.1 все было хорошо, а как только я поставил 0.5, то и значение прибыли увеличилось и функция срабатывала раньше необходимого.
Теперь у меня следующий вопрос, а как грамотно написать код для получения количества пунктов?

Добавлено: 30-10-2018 16:47:39

В общем решил я эту проблему вместе с гуглом)
Спойлер

void ChekOrderProfit()
{
if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS, MODE_TRADES))
{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
{
double pips = 0;
pips = NormalizeDouble((Bid-OrderOpenPrice())/Point, 0);
if(pips > 50)
{
EditOrder(OrderOpenPrice(), OrderTakeProfit(), OrderOpenPrice());
}
}
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
{
double pips = 0;
pips = NormalizeDouble((OrderOpenPrice()-Ask)/Point, 0);
if(pips > 50)
{
EditOrder(OrderOpenPrice(), OrderTakeProfit(), OrderOpenPrice());
}
}
}
return;
}

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

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

Господа Доктора отзовитесь хоть кто нибудь

Ваш вопрос не простой, логические ошибки самые сложные.
Ссылка на сообщение
Поделиться на другие сайты

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

Привет Всем, есть ли здесь программисты ? Очень нужна Ваша помощь, работы как мне кажется на пять минут , сделайте пожалуйста закрытие ордеров в пятницу за час до закрытия рынка тоесть в 23.00 ^:)^

Highlow_EA_5.20.mq4

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

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


Привет Всем, есть ли здесь программисты ? Очень нужна Ваша помощь, работы как мне кажется на пять минут , сделайте пожалуйста закрытие ордеров в пятницу за час до закрытия рынка тоесть в 23.00 ^:)^



Проверьте, я не тестировал. В настройках ставите СloseAll = true (закрыть все сделки в пятницу). Сделки будут закрываться в пятницу в 23-00 по времени терминала

Highlow_EA_5.20.mq4

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

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


Добрый день, уважаемые программисты форума! Может кто помочь с доработкой? Нужно к 2-м ботам прикрутить фильтр времени(простой, по дням недели: в пн торгуем, во вт - нет и т.д.). Сам пробовал доработать, но т.к. в программировании не силён, просто пробовал выдернуть планировщик из другого бота с открытым кодом. По факту код ошибок не даёт, а планировщик не работает. Исходники ботов прикрепляю к посту. Мои "доработки" выложены в посте №1020 выше.

PS. Вот ради чего все эти попытки подружить ботов с тайм-фильтром(вл. картинка)




Force_Trader_v1.0%_Profit.mq4

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

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

PS. Вот ради чего все эти попытки подружить ботов с тайм-фильтром(вл. картинка)


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

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


PS. Вот ради чего все эти попытки подружить ботов с тайм-фильтром(вл. картинка)


Не понял в чем проблема или вопрос?

хм...ему нужно чтобы советник распознавал какой сегодня день недели и не торговал например в понедельник или пятницу, чтобы не слить профит, а в остальные дни зарабатывал профит, как еще пояснить.
私はあなたの事が大 好きです。
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

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


Уважаемый vitek01! Была конкретная задача "... сделайте пожалуйста закрытие ордеров в пятницу за час до закрытия рынка тоесть в 23.00...", что было сделано. Советник закрывает ордера в пятницу, за час до закрытия рынка, тоесть в 23.00!!!
Я, думаю, человек сам разберется, что ему надо и отпишится
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

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

Спойлер


// Открытие ордера
int NewOrder(int Cmd,double lot,double pr,double tp=0,double sl=0)
{int tick=0;
for(int er=0;er {while(!IsTradeAllowed()) Sleep(100);
tick=OrderSend(Symbol(),Cmd,lot,pr,Slippage,sl,tp,StrategyName,Magic,0, CLR_NONE);
if(tick>0) break;
Print("#",OrderTicket()," Error: ",GetLastError()," Function: NewOrder(",Cmd,",",lot,",",pr,",",tp,",",sl,") №",er);
Sleep(1000);}
return(tick);}


Так я вызываю функцию:
Спойлер


NewOrder(OP_BUY, Lot, Ask, mTakeProfit, mStopLoss);

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

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



Добрый день, уважаемые программисты форума! Может кто помочь с доработкой? Нужно к 2-м ботам прикрутить фильтр времени(простой, по дням недели: в пн торгуем, во вт - нет и т.д.). Сам пробовал доработать, но т.к. в программировании не силён, просто пробовал выдернуть планировщик из другого бота с открытым кодом. По факту код ошибок не даёт, а планировщик не работает. Исходники ботов прикрепляю к посту. Мои "доработки" выложены в посте №1020 выше.

PS. Вот ради чего все эти попытки подружить ботов с тайм-фильтром(вл. картинка)




Благодарю за доработку! А в этого бота такой же планировщик получится вписать?

Turtles_v1.0%Prof.mq4

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

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

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


В конце этой строчки
tick=OrderSend(Symbol(),Cmd,lot,pr,Slippage,sl,tp,StrategyName,Magic,0, CLR_NONE);

Т.Е.
CLR_NONE - заменить на цвет, например на синий Blue (заменить CLR_NONE на Blue)

P.S. Ваша функция универсальна, а открываете своим вызовом рыночный ордер на бай. Если вы будете вызывать ордер на сел то он тоже будет синий. Тут надо делать проверку на тип открываемого ордера и менять цвет в зависимости от этого. Или менять саму функцию и вызов ее)))
Если будет не понятно, присылайте код. Если надо подробней объяснить, буду объяснять.Удачи!
Изменено пользователем loveЦ
Ссылка на сообщение
Поделиться на другие сайты

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

Хотелось чтобы при вызове функции я указал к примеру Blue, и функция подставляла вместо CLR_NONE мой цвет.
Но делать в самой функции проверку на ордер и выставлять соответствующий цвет тоже идея.
Но все же есть возможность при вызове функции указывать свой цвет при помощи переменной?
Например так:

Спойлер

NewOrder(OP_BUY, Lot, Ask, mTakeProfit, mStopLoss, Blue);

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

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

Хотелось чтобы при вызове функции я указал к примеру Blue, и функция подставляла вместо CLR_NONE мой цвет.
Но делать в самой функции проверку на ордер и выставлять соответствующий цвет тоже идея.
Но все же есть возможность при вызове функции указывать свой цвет при помощи переменной?


Честно, не понимаю зачем такие тогда сложности просто вместо всего этого:
1. Удалите функцию
2. Вместо вызова функции откройте сразу ордер с цветом,т.е. вместо вызова вставить например на BUY
OrderSend(Symbol(), OP_BUY, Lot, Ask, Slippage, mTakeProfit, mStopLoss, "", 0, 0, Blue);
на SELL
OrderSend(Symbol(), OP_SELL, Lot, Bid, Slippage, mTakeProfit, mStopLoss, "", 0, 0, Red);

Проверьте, попробуйте, так быстрей и проще))) Иногда микросекунды играют роль на открытие ордера, а с функцией сов теряет очень много времени, если правда эта функция не нужна для чего то еще)

Добавлено: 20-11-2018 18:11:43

Например так:


а можно и так
поменяйте int NewOrder(int Cmd,double lot,double pr,double tp=0,double sl=0) на int NewOrder(int Cmd,double lot,double pr,double tp=0,double sl=0, color clr)

a строчку tick=OrderSend(Symbol(),Cmd,lot,pr,Slippage,sl,tp,StrategyName,Magic,0, CLR_NONE); на tick=OrderSend(Symbol(),Cmd,lot,pr,Slippage,sl,tp,StrategyName,Magic,0, clr);

и вызывайте функцию как хотели
NewOrder(OP_BUY, Lot, Ask, mTakeProfit, mStopLoss, Blue); Изменено пользователем loveЦ
Ссылка на сообщение
Поделиться на другие сайты

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

с функцией сов теряет очень много времени

Вот здесь я не согласен, в нашей ветке мы не ищем лёгких путей и решений для тестера, в реальной торговле возникают ошибки открытия, которые нужно обрабатывать, функция всё равно будет быстрее чем у некоторых пинг до сервера.
Короче: функции открытия ордеров с обработкой ошибок нужны. Ваш второй пример с передачей цвета в функцию - то что необходимо. Спасибо.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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


с функцией сов теряет очень много времени

Вот здесь я не согласен, в нашей ветке мы не ищем лёгких путей и решений для тестера, в реальной торговле возникают ошибки открытия, которые нужно обрабатывать, функция всё равно будет быстрее чем у некоторых пинг до сервера.
Короче: функции открытия ордеров с обработкой ошибок нужны. Ваш второй пример с передачей цвета в функцию - то что необходимо. Спасибо.

Наверно я не так выразился))) Попытаюсь оправдаться. Считаю, что открытие ордера можно использовать и без функции, а вот выставление стопов и тейка - через функцию с обработчиком ошибок, т.к. ошибки обычно там.
Простой пример для BUY
// Получаем сигнал на покупку
BuySignal = iCustom(_____________________________________);

// если есть сигнал индикатора
if (BuySignal > 0)
{

// Open buy order
// открываем ордер на покупку
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, comment, Magic, 0, Blue);

// если ордер был успешно открыт,
if (ticket > 0)
{
// то его необходимо выбрать, для дальнейшей установки ему StopLoss и TakeProfit
if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
{
// рассчитываем StopLoss и нормализуем цену
SL = NormalizeDouble(Ask-StopLoss*Point, Digits);

// рассчитываем TakeProfit и нормализуем цену
TP = NormalizeDouble(Ask+TakeProfit*Point, Digits);

// попытаемся установить ордеру рассчитанные уровни StopLoss и TakeProfit
res = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0);
if (!res)
// и если не удалось, то выведем сообщение в журнал регистрации для дальнейшего анализа причин
Print("Ошибка модификации ордера на покупку, ASK=" + DoubleToStr(Ask) + ", SL=" + DoubleToStr(SL) + ", TP=" + DoubleToStr(TP));
}
}
}
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Благодарю за доработку! А в этого бота такой же планировщик получится вписать?




Мне кажется неудобно постояно перегружать советник если нужно изменить день торговли.Простое решение небольшая панелька с кнопками управления,
если зеленый цвет- торгуем, желтый сидим на заборе и не дергаемся.

Turtles_v1.0%Prof.mq4

Изменено пользователем vitek01
  • Лайк 1
  • Хм... 1
Ссылка на сообщение
Поделиться на другие сайты

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

можно и так
поменяйте int NewOrder(int Cmd,double lot,double pr,double tp=0,double sl=0) на int NewOrder(int Cmd,double lot,double pr,double tp=0,double sl=0, color clr)

a строчку tick=OrderSend(Symbol(),Cmd,lot,pr,Slippage,sl,tp,StrategyName,Magic,0, CLR_NONE); на tick=OrderSend(Symbol(),Cmd,lot,pr,Slippage,sl,tp,StrategyName,Magic,0, clr);

и вызывайте функцию как хотели
NewOrder(OP_BUY, Lot, Ask, mTakeProfit, mStopLoss, Blue);


Вот это и нужно было, я не знал что есть тип переменной color.
Ссылка на сообщение
Поделиться на другие сайты

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

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

Бывают следующие ошибки открытия, на которые я пишу обработку:
- Нет связи с торговым сервером
- Брокер или Торговый сервер занят или Подсистема торговли занята
- Цена изменилась или Новые цены или Нет цен
Другие ошибки или игнорируются или (если например, деньги кончились) сова останавливается.
Считаете, что это лишнее? - Ваше право!
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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

Бывают следующие ошибки открытия, на которые я пишу обработку:


Уважаемый Oll!
Здесь на форуме я пытаюсь выполнять точно поставленные задачи и показать как это сделать проще. Писать функции с различными защитами от ошибок, ради цвета, считаю не целесообразно. Skytype просил цвет открытых ордеров, я ему предложил через основную функцию OrderSend(), чтобы начать с простого. В итоге мы нашли то что ему надо.
Я не сомневаюсь в Ваше компетентности в программировании, впредь попытаюсь меньше комментировать свои поправки, чтобы очередной раз не быть не понятым))))
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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

А советник может видеть мои линии (Trendline) ?


может.
int ObjectFind(
string object_name // имя объекта
);
Ссылка на сообщение
Поделиться на другие сайты

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

Здравствуйте!

Может адресом ошибся, тема "Доработка советников"..У меня есть хороший сов, мартин..Хотел найти специалистов доработать, сам не в теме, но, как позже выяснилось исполнительного кода mql4 нет, программист дает обертку в EX4. Заказывал сова по моему сценарию, хотел переделать...Завёл две темы..в конце приглушил: "с таким объемом работы не ко мне."
http://zakaz.opentraders.ru/47398.html#comment140952
http://zakaz.opentraders.ru/48344.html
Советника задумал как помощника по ТС "ОРАКУЛ", чтобы сов выставлял шаблон с линиями, и эти линии можно было перетаскивать к уровням..Короче 2.5 месяца объяснял, чего я хочу добиться, не получилось...Если у кого возникнет желание просмотреть темы с ТЗ, по ссылкам, то WELCOMЕ...
Спасибо!

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

  • 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 тема

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

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

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

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

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

Войти

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

Войти

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


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