Ghost Quotes (Котировки-привидения) - страница 2

 

До 1 000% процентов так и не смог разогнать))) Всего лишь 453% за полгода! 

Или вот ещё варьянт без функции сохранения депозита правда 546% но это за год!:


А мне нравится этот сливатор))) Такой же непредсказуемый как сам форекс.

В общем фрахт прикрутил. 

 
Alekseu Fedotov:
AccountBalance()  +  AccountProfit()  = AccountEquity();

Там автолот расчитывается через AccountFreeMargine(), если баланс понятно из чего состоит - депо + AccountProfit(), то AccountFreeMargin() я кажись обидел фрахтом)) Не совсем там корректно конечно получилось (интуиция).

 
STARIJ:

Возьми калькулятор и посчитай. Или скрипт напиши:

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

AccountBalance()  +  AccountProfit()


Я извиняюсь, но я изменил формулу. Подумал что нагородил лишнего. Там я исправил на последний вариант. Давайте глянем что с ним будет - приведёт он к убытку ниже зарезервированной суммы на депо? И насколько это будет критично, интересно. Если там на 10-20% уйдёт в минус за 100 баксов зафрахтованного депозита, то не страшно наверное. Ведь это относится в основном к тому чтобы аварийные ордера, открытые одновременно на нескольких графиках не вызвали СтопАут и не слили бы депо. Подслить - это допустимо)))


Файл с кодом - последний вариант. Заодно может глянете на ошибки, хотя потестил старые тесты и они повторились.  Надо как вы правильно сделали - вызывать отработку аварийного лота. И сранивать чтобы на фрахте 100% картинка была одинаковой примерно с фрахтом 50% (при условии что и там и там автолот одинаково отработал). Вот из-за некорректной работы автолота с AccountFreeMargin() и выходит небольшая разница. На большее меня не хватило в общем. Завтра к 1С возвращаюсь, а то 2 дня тестил этот фрахт. Но функция полезная согласитесь. Мультиторговля на одном счёте. То что надо.

Файлы:
 

Непонятно только вот что.


Если суммарный профит по закрытым позициям превысит 1000 долларов, получается что


(((акаунт баланс "2000" - акаунт профит"1000")*процент фрахта"10/100")+(возвращаем акаунт профит обратно в акаунт баланс "1000");  


Итого   1100. Получается ерунда какая-то. Советник при депо 1000, профите 1000 и фрахте 10% будет работать как с 1100, то есть почти 50% от акаунт баланса... Похоже на ошибку в формуле.

ab=(((AccountBalance()-AccountProfit())*FreightMoneyAccountPercent/100)+AccountProfit());//расчёт баланса для DepositSaving & Emergency Closure с учётом фрахта средств торгового счёта
 

А если акаунт профит будет 100. Итог будет (((1 100 - 100) * 10/100) + 100) = 200. Это явно не 10% фрахта от 1 100.

Ладно придётся ещё подумать походу. Получается что общий акаунт профит будет советника сбивать с толку. Похоже вот где косяк. Завтра придётся разбираться.

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
депо баланс профит (входит в баланс) фрахт итог
1000 2000 1000 10% 200
1000 1100 100 10% 110
200 230 30 50% 115
1000 1030 30 10% 103
100 130 30 100% 130



ab = баланс * фрахт, хм, но я же так делал с самого начала. Поэтому и график менялся, что при фрахте 100% советник работает с балансом в 130, а на депо 200 при фрахте 50% советник получается захватывает только ту часть профита, который пропорционален проценту фрахта. Отсюда все и отклонения. Ладно, с этим понятно.

Действующая формула не годится.

Получается тест при фрахте 100% всегда будет отличаться от теста с фрахтом, отличным от 100%.

Я чо-то не вижу возможности тут обыграть это.

Вывод: Настраивать советника под определённый процент фрахта надо отдельно.

Совпадения графиков является частным случаем , так как я опирался на соотношение депозита 1000, аккаунт профита 30, фрахта 10%  и ошибочно принятая на вооружение формула справедлива лишь для такого сочетания переменных.

А справедливая формула ab = AccountBalance()* FreightMoneyAccountPercent/100.

Лан, утро вечере мудренее))) Правильно я мыслю то? Или уже шиза? Мне программирование противопоказано походу))

 
geratdc:
депо баланс профит (входит в баланс) фрахт итог
1000 2000 1000 10% 200
1000 1100 100 10% 110
200 230 30 50% 115
1000 1030 30 10% 103
100 130 30 100% 130



ab = баланс * фрахт, хм, но я же так делал с самого начала. Поэтому и график менялся, что при фрахте 100% советник работает с балансом в 130, а на депо 200 при фрахте 50% советник получается захватывает только ту часть профита, который пропорционален проценту фрахта. Отсюда все и отклонения. Ладно, с этим понятно.

Действующая формула не годится.

Получается тест при фрахте 100% всегда будет отличаться от теста с фрахтом, отличным от 100%.

Я чо-то не вижу возможности тут обыграть это.

Вывод: Настраивать советника под определённый процент фрахта надо отдельно.

Совпадения графиков является частным случаем , так как я опирался на соотношение депозита 1000, аккаунт профита 30, фрахта 10%  и ошибочно принятая на вооружение формула справедлива лишь для такого сочетания переменных.

А справедливая формула ab = AccountBalance()* FreightMoneyAccountPercent/100.

Лан, утро вечере мудренее))) Правильно я мыслю то? Или уже шиза? Мне программирование противопоказано походу))

 ab=(((AccountBalance()-AccountProfit())*FreightMoneyAccountPercent/100)+AccountProfit());

// можно так

ab=(AccountBalance()+AccountProfit())*FreightMoneyAccountPercent/100;

// еще проще

ab=AccountEquity()*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%  за полгода

Кому интересно, ЗДЕСЬ советник и инструкция.

BLACKJACK&HOOKERS.rar
BLACKJACK&HOOKERS.rar
  • yadi.sk
Посмотреть и скачать с Яндекс.Диска
 
Спасибо всем!
 

«Функция контроля исчерпания фрахта»:

Контроль исчерпания фрахта ведётся по текущей разности между 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, то советник выйдет из торговли с закрытием позиций.

Такое решение пойдёт? Я уже в Ексель пытался отследить формулу, но пока только путаницы больше становилось.


Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
  Мне такой нравится