Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
До 1 000% процентов так и не смог разогнать))) Всего лишь 453% за полгода!
Или вот ещё варьянт без функции сохранения депозита правда 546% но это за год!:
А мне нравится этот сливатор))) Такой же непредсказуемый как сам форекс.
В общем фрахт прикрутил.
AccountBalance() + AccountProfit() = AccountEquity();
Там автолот расчитывается через AccountFreeMargine(), если баланс понятно из чего состоит - депо + AccountProfit(), то AccountFreeMargin() я кажись обидел фрахтом)) Не совсем там корректно конечно получилось (интуиция).
Возьми калькулятор и посчитай. Или скрипт напиши:
Специально наоткрывал убыточных ордеров, близок СтопОут - а формула показывает возможность еще ордер открыть...
AccountBalance() + AccountProfit()
Я извиняюсь, но я изменил формулу. Подумал что нагородил лишнего. Там я исправил на последний вариант. Давайте глянем что с ним будет - приведёт он к убытку ниже зарезервированной суммы на депо? И насколько это будет критично, интересно. Если там на 10-20% уйдёт в минус за 100 баксов зафрахтованного депозита, то не страшно наверное. Ведь это относится в основном к тому чтобы аварийные ордера, открытые одновременно на нескольких графиках не вызвали СтопАут и не слили бы депо. Подслить - это допустимо)))
Файл с кодом - последний вариант. Заодно может глянете на ошибки, хотя потестил старые тесты и они повторились. Надо как вы правильно сделали - вызывать отработку аварийного лота. И сранивать чтобы на фрахте 100% картинка была одинаковой примерно с фрахтом 50% (при условии что и там и там автолот одинаково отработал). Вот из-за некорректной работы автолота с AccountFreeMargin() и выходит небольшая разница. На большее меня не хватило в общем. Завтра к 1С возвращаюсь, а то 2 дня тестил этот фрахт. Но функция полезная согласитесь. Мультиторговля на одном счёте. То что надо.
Непонятно только вот что.
Если суммарный профит по закрытым позициям превысит 1000 долларов, получается что
(((акаунт баланс "2000" - акаунт профит"1000")*процент фрахта"10/100")+(возвращаем акаунт профит обратно в акаунт баланс "1000");
Итого 1100. Получается ерунда какая-то. Советник при депо 1000, профите 1000 и фрахте 10% будет работать как с 1100, то есть почти 50% от акаунт баланса... Похоже на ошибку в формуле.
А если акаунт профит будет 100. Итог будет (((1 100 - 100) * 10/100) + 100) = 200. Это явно не 10% фрахта от 1 100.
Ладно придётся ещё подумать походу. Получается что общий акаунт профит будет советника сбивать с толку. Похоже вот где косяк. Завтра придётся разбираться.
ab = баланс * фрахт, хм, но я же так делал с самого начала. Поэтому и график менялся, что при фрахте 100% советник работает с балансом в 130, а на депо 200 при фрахте 50% советник получается захватывает только ту часть профита, который пропорционален проценту фрахта. Отсюда все и отклонения. Ладно, с этим понятно.
Действующая формула не годится.
Получается тест при фрахте 100% всегда будет отличаться от теста с фрахтом, отличным от 100%.
Я чо-то не вижу возможности тут обыграть это.
Вывод: Настраивать советника под определённый процент фрахта надо отдельно.
Совпадения графиков является частным случаем , так как я опирался на соотношение депозита 1000, аккаунт профита 30, фрахта 10% и ошибочно принятая на вооружение формула справедлива лишь для такого сочетания переменных.
А справедливая формула ab = AccountBalance()* FreightMoneyAccountPercent/100.
Лан, утро вечере мудренее))) Правильно я мыслю то? Или уже шиза? Мне программирование противопоказано походу))
ab = баланс * фрахт, хм, но я же так делал с самого начала. Поэтому и график менялся, что при фрахте 100% советник работает с балансом в 130, а на депо 200 при фрахте 50% советник получается захватывает только ту часть профита, который пропорционален проценту фрахта. Отсюда все и отклонения. Ладно, с этим понятно.
Действующая формула не годится.
Получается тест при фрахте 100% всегда будет отличаться от теста с фрахтом, отличным от 100%.
Я чо-то не вижу возможности тут обыграть это.
Вывод: Настраивать советника под определённый процент фрахта надо отдельно.
Совпадения графиков является частным случаем , так как я опирался на соотношение депозита 1000, аккаунт профита 30, фрахта 10% и ошибочно принятая на вооружение формула справедлива лишь для такого сочетания переменных.
А справедливая формула ab = AccountBalance()* FreightMoneyAccountPercent/100.
Лан, утро вечере мудренее))) Правильно я мыслю то? Или уже шиза? Мне программирование противопоказано походу))
В общем сделал откат к первому решению. Получается что практически при каждом изменении фрахта, необходимо тестировать настройки. По другому советник не хочет. Но в принципе цель достигнута. Советник никогда не отличался стабильной торговлей. А фрахт теперь с учётом вывода из всей этой истории работает корректно.
// Если открыто 3 ордера: 1 Buy и 2 Sell
if(cn==3 && CountBuy()==1 && CountSell()==2 && DepositSaving==true && DepositSavingPercent<50)
{
lot=NormalizeDouble(AccountFreeMargin()*FreightMoneyAccountPercent/100*AccountLeverage()/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE)*0.75,2); // расчёт авто-лота для DepositSaving с учётом фрахта средств торгового счёта
if(op<=AccountBalance()*FreightMoneyAccountPercent/100/(-100/(DepositSavingPercent-0.1)))
{
if(OrderSend(Symbol(),OP_BUY,lot,Ask,Slippage,0,0,"",Magic,0,Blue)>1)// Открытие контр-ордера lot-кратным объёмом
Print("Deposit Saving - Открыт аварийный ордер на покупку");
SendMail("EA BJH","Deposit Saving - Открыт аварийный ордер на покупку");
}
}
// Если открыто 3 ордера: 1 Sell и 2 Buy
else if(cn==3 && CountSell()==1 && CountBuy()==2 && DepositSaving==true && DepositSavingPercent<50)
{
lot=NormalizeDouble(AccountFreeMargin()*FreightMoneyAccountPercent/100*AccountLeverage()/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE)*0.75,2); // расчёт авто-лота для DepositSaving с учётом фрахта средств торгового счёта
if(op<=AccountBalance()*FreightMoneyAccountPercent/100/(-100/(DepositSavingPercent-0.1)))
{
if(OrderSend(Symbol(),OP_SELL,lot,Bid,Slippage,0,0,"",Magic,0,Red)>1)// Открытие контр-ордера lot-кратным объёмом
Print("Deposit Saving - Открыт аварийный ордер на продажу");
SendMail("EA BJH","Deposit Saving - Открыт аварийный ордер на продажу");
}
}
// Если открыто 4 ордера: 2 Buy и 2 Sell
if(cn==4 && CountBuy()==2 && CountSell()==2)
{
if(op>=0)
{
CloseAll();
Print("Deposit Saving успешно завершён");
SendMail("EA BJH","Deposit Saving успешно завершён");
}
if(op<=AccountBalance()*FreightMoneyAccountPercent/100/(-100/DepositSavingPercent))
{
CloseAll();
Print("Deposit Saving завершён в результате контр-движения рынка");
SendMail("EA BJH","Deposit Saving завершён в результате контр-движения рынка");
// ExpertRemove();// Снять советник с графика
}
}
Потестил. Нормально.
Торговля контр-ордерами: $ 100 Lots 0.01 Фрахт 100% за полгода
Торговля контр-ордерами: $ 200 Lots 0.01 Фрахт 50% ( с немного другой настройкой) за полгода
Торговля 1 ордером: $ 100 Lots 0.04 Фрахт 100% за полгода
Торговля 1 ордером: $ 200 Lots 0.01 Фрахт 50% за полгода
Кому интересно, ЗДЕСЬ советник и инструкция.
«Функция контроля исчерпания фрахта»:
Контроль исчерпания фрахта ведётся по текущей разности между AccountBalance() и величины стартового депозита «StartMoneyOnDeposit», значение которого также необходимо продублировать и в настройках параметров советника.
Проверка осуществляется по следующей формуле:
// Проверка исчерпания фрахта
if(FreightMoneyAccountPercent<100 && -StartMoneyOnDeposit*FreightMoneyAccountPercent/100>AccountBalance()-StartMoneyOnDeposit)
{
Print("Советник исчерпал фрахт и завершил работу");
SendMail("EA BJH","Советник исчерпал фрахт и завершил работу");
ExpertRemove();
}
При работе с несколькими советниками на одном торговом счёте, необходимо учитывать что текущее значение AccountBalance() может увеличиваться или уменьшаться в зависимости от прибыльности / убыточности работы других советников, ведущих торговые операции на одном графике / торговом счёте. Таким образом данный контроль «плавающий». Это означает что при стартовом депозите «StartMoneyOnDeposit» в $ 200 и «FreightMoneyAccountPercent» 50%, советник продолжит работу с графиком несмотря на убытки более $ 100 за счёт компенсации таких убытков прибылью от работы других советников на графике / торговом счёте.
Нарекания к такому решению будет? Или может что поумнее придумать, например счётчик всех ордеров бай/селл по данному конкретному советнику и потом уже ... потом начинается трабла на счёт того что с чем сравнивать и из чего вычитать. Полюбому как-то некорректно происходит вроде
if("MODE_HISTORY" + "MODE_TRADES" < -StartMoneyOnDeposit * FreightMoneyAccountPercent/100)
где ("MODE_HISTORY" + "MODE_TRADES") - это СуммаПрофита советника по закрытым и открытым позициям
То есть, если сумма профитов данного советника будет меньше фрахта со знаком минус (допустим -200 (баланс) * 50(фрахт)/100 = -100), тогда закрытие всех позиций и выход из графика.
Как только сумма профитов -101, а это меньше -100, то советник выйдет из торговли с закрытием позиций.
Такое решение пойдёт? Я уже в Ексель пытался отследить формулу, но пока только путаницы больше становилось.