Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Добрый день!! Пробую сову - обнаружил, что после открытия позиции в 10 лотов ТП выставляет очень далеко. Похоже, что прибавляет 100 пунктов.
Советник обновлен (новый советник прикреплен внизу комментария)
Исправлено:
1. Сделано два советника для торговли и для теста. Разница в входном параметре "Usd_per_Rub" (ранее Rub_per_Usd) - это стомиость доллара в рублях. Этот параметр нужен только для комментария на графике. В торговом советнике этот параметр не входной, а автоматический, берется и обновляется от пары USDRUB по цене Bid. На тестовом советнике при визуализации автоматом не работает, поэтому нужно вводить вручную.
Старый код:
Торговый новый код:
Тестовый новый код:
2. Неправильно работала функция, которая включает своп и комиссию в прибыль. Теперь советник отодвигает тейкпрофит чтоб покрыть своп и комиссию.
Старый код:
Новый код:
3. "Косметика" для комментария на графике.
Старый код:
Новый код:
... if (Balance != AccountBalance() || OrdTot != OrdersTotal()) { DateTime = TimeCurrent(); ordprof1 = 0; ordprof2 = 0; ordprof3 = 0; Deposit1 = 0; Withdraw1 = 0; Deposit2 = 0; Withdraw2 = 0; Deposit3 = 0; Withdraw3 = 0; for (cnt = 0; cnt<OrdersHistoryTotal(); cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY); if (OrderCloseTime() < TimeCurrent() - 2629800) continue; if (StringFind(OrderComment(),"Deposit") >= 0) Deposit3 += OrderProfit() + OrderCommission(); if (StringFind(OrderComment(),"Withdraw") >= 0) Withdraw3 += OrderProfit() + OrderCommission(); ordprof3 += OrderProfit() + OrderCommission() + OrderSwap(); if (OrderCloseTime() < TimeCurrent() - 604800) continue; if (StringFind(OrderComment(),"Deposit") >= 0) Deposit2 += OrderProfit() + OrderCommission(); if (StringFind(OrderComment(),"Withdraw") >= 0) Withdraw2 += OrderProfit() + OrderCommission(); ordprof2 += OrderProfit() + OrderCommission() + OrderSwap(); if (OrderCloseTime() < TimeCurrent() - 86400) continue; if (StringFind(OrderComment(),"Deposit") >= 0) Deposit1 += OrderProfit() + OrderCommission(); if (StringFind(OrderComment(),"Withdraw") >= 0) Withdraw1 += OrderProfit() + OrderCommission(); ordprof1 += OrderProfit() + OrderCommission() + OrderSwap(); } ordprof1 = ordprof1 - Deposit1 - Withdraw1; ordprof2 = ordprof2 - Deposit2 - Withdraw2; ordprof3 = ordprof3 - Deposit3 - Withdraw3; Balance = AccountBalance(); OrdTot = OrdersTotal(); } ... if (Comment_for_cent == true) { Comment(" Баланс: ", DoubleToString(NormalizeDouble(AccountBalance() * Usd_per_Rub / 100, 2), 2), "р., Средства: ", DoubleToString(NormalizeDouble(AccountEquity() * Usd_per_Rub / 100, 2), 2), "р., Прибыль: ", DoubleToString(NormalizeDouble(AccountProfit() * Usd_per_Rub / 100, 2), 2), "р., Свободно: ", DoubleToString(NormalizeDouble(AccountFreeMargin() * Usd_per_Rub / 100, 2), 2), "р., Lot: ", l, ", ", bl, ", ", sl, ", Всего ордеров: ", OrdersTotal(), ", Ордеров по символу: ", CountTrades(), "\n Дата обновления: ", TimeToStr(TimeCurrent()), "\n\n История счета\n ", " ------------------------------------------------------------------------------------------------", "\n Сегодня: ", DoubleToString(NormalizeDouble(ordprof1 * Usd_per_Rub / 100, 2), 2), "р., Пополнение: ", DoubleToString(NormalizeDouble(Deposit3 * Usd_per_Rub / 100, 2), 2), "р. (за месяц)\n Неделя: ", DoubleToString(NormalizeDouble(ordprof2 * Usd_per_Rub / 100, 2), 2), "р., Снятие: ", DoubleToString(NormalizeDouble(Withdraw3 * Usd_per_Rub / 100, 2), 2), "р. (за месяц)\n Месяц: ", DoubleToString(NormalizeDouble(ordprof3 * Usd_per_Rub / 100, 2), 2), "р., Дата обновления: ", TimeToStr(DateTime)); } if (Comment_for_cent == false) { Comment(" Баланс: ", DoubleToString(NormalizeDouble(AccountBalance() * Usd_per_Rub, 2), 2), "р., Средства: ", DoubleToString(NormalizeDouble(AccountEquity() * Usd_per_Rub, 2), 2), "р., Прибыль: ", DoubleToString(NormalizeDouble(AccountProfit() * Usd_per_Rub, 2), 2), "р., Свободно: ", DoubleToString(NormalizeDouble(AccountFreeMargin() * Usd_per_Rub, 2), 2), "р., Lot: ", l, ", ", bl, ", ", sl, ", Всего ордеров: ", OrdersTotal(), ", Ордеров по символу: ", CountTrades(), "\n Дата обновления: ", TimeToStr(TimeCurrent()), "\n\n История счета\n ", " ------------------------------------------------------------------------------------------------", "\n Сегодня: ", DoubleToString(NormalizeDouble(ordprof1 * Usd_per_Rub, 2), 2), "р., Пополнение: ", DoubleToString(NormalizeDouble(Deposit3 * Usd_per_Rub, 2), 2), "р. (за месяц)\n Неделя: ", DoubleToString(NormalizeDouble(ordprof2 * Usd_per_Rub, 2), 2), "р., Снятие: ", DoubleToString(NormalizeDouble(Withdraw3 * Usd_per_Rub, 2), 2), "р. (за месяц)\n Месяц: ", DoubleToString(NormalizeDouble(ordprof3 * Usd_per_Rub, 2), 2), "р., Дата обновления: ", TimeToStr(DateTime)); } ...убийца депозитов )
Сам то чужие депозиты за деньги слил "Homunculus"(сова)
так тоже на мартингале был, рано или поздно...
а бот на самом деле неплох, по крайней мере в тестере, удачная реализация, кол-во сделок доставляет )
В конце тренда после разворота происходят такие скачки этого советника. Там и рассчитывается максимальная просадка. Здесь она больше чем начальный депозит. Так что этот тест идеален только если торговать с того дня(даты начала теста) с данными вход. параметрами. С любой другой даты, особенно перед этим трендом с такими параметрами обязательно будет слив(депо просто не хватит на эту просадку).
Если посмотреть по тесту, то начало самого большого тренда будет по первой открытой сделки в той группе сделок, от которых произошел такой большой скачек - это 2016.05.03 06:30(заканчивается вместе с разворотом, где происходит закрытие этой группы сделок с прибылью - 2016.06.01 03:35). С этой даты(перед трендом!) можно проводить оптимизацию не обращая внимания на просадку, пока не появиться еще больше тренд. И то мало вероятно, т.к. в этом моменте советник уже увеличил начальный лот в 2 раза, а значит и лоты всех след. сделок этой группы.
В конце тренда после разворота происходят такие скачки этого советника. Там и рассчитывается максимальная просадка. Здесь она больше чем начальный депозит. Так что этот тест идеален только если торговать с того дня(даты начала теста) с данными вход. параметрами. С любой другой даты, особенно перед этим трендом с такими параметрами обязательно будет слив(депо просто не хватит на эту просадку).
Если посмотреть по тесту, то начало самого большого тренда будет по первой открытой сделки в той группе сделок, от которых произошел такой большой скачек - это 2016.05.03 06:30(заканчивается вместе с разворотом, где происходит закрытие этой группы сделок с прибылью - 2016.06.01 03:35). С этой даты(перед трендом!) можно проводить оптимизацию не обращая внимания на просадку, пока не появиться еще больше тренд. И то мало вероятно, т.к. в этом моменте советник уже увеличил начальный лот в 2 раза, а значит и лоты всех след. сделок этой группы.
Советник обновлен (новый советник прикреплен внизу комментария)
Исправлено:
1. Тепер советник не определяет минимальный тейкпрофит и интервал по стоп уровню, а прибавляет стоп уровень к назначенным тейкпрофиту и интервалу.
Старый код:
Новый код:
2. Чтоб не возникало ошибки типа 130, когда советник пытается выставить тейкпрофит сделок близкий к текущему курсу, что запрещает стоп уровень.
Старый код:
... } if (OrderTakeProfit() != PriceBuyTarget) OrderModify(OrderTicket(), OrderOpenPrice(), 0, NormalizeDouble(PriceBuyTarget, Digits), 0, Yellow); ... } if (OrderTakeProfit() != PriceSellTarget) OrderModify(OrderTicket(), OrderOpenPrice(), 0, NormalizeDouble(PriceSellTarget, Digits), 0, Yellow); ...Новый код:
... } if (PriceBuyTarget - Bid < MarketInfo(Symbol(), 14) * Point) continue; if (OrderTakeProfit() != PriceBuyTarget) OrderModify(OrderTicket(), OrderOpenPrice(), 0, NormalizeDouble(PriceBuyTarget, Digits), 0, Yellow); ... } if (Ask - PriceSellTarget < MarketInfo(Symbol(), 14) * Point) continue; if (OrderTakeProfit() != PriceSellTarget) OrderModify(OrderTicket(), OrderOpenPrice(), 0, NormalizeDouble(PriceSellTarget, Digits), 0, Yellow); ...P.S. этот советник может работать не правильно на счетах с плавающим спредом, где стоп уровень отсутствует.