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

 

1. Объясните пожалуйста почему у меня прогонка в тесте по одному и тому же периоду совпадает до 55 сделки, а с 55 данные по сделкам сбиваются? Как это возможно?))

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

Например, есть депо 200 баксов, пользователь решил на EURUSD и GPBUSD советника повесить. Соответственно он фрахтует по 50% от депозита за каждым советником в их настройках и они работают исходя из выделенного им бюджета. Или депо 1000 баксов и пользователь решает на 10 графиках работать с минимальным лотом, тогда надо будет просто указать в настройках фрахт 10%. Советник будет калькулировать исходя из депо в 100 баксов, а не 1 000. Может такая идея есть уже? Мне представляется что эту идею на 100% корректно нереально сделать из-за того что авто-лот для аварийного ордера опирается на AccountFreeMargin()...

Предположим с самим вызовом функции защиты по убыткам, я кажись справился:

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

где ab - скорректированный на фрахт баланс счёта, op - сумма условных профитов/убытков по открытым позициям.

То есть смотрите, если акаунт баланс 1 000 баксав, фрахт 10%, а AccountProfit()=30, тогда (((1 030 - 30) * 0,1) + 30) =130. Итого сумма условных убытков рассчитывается корректно, а не от 1 030 баксав * (10/100) = 103 - что является некорректным значением и вызывает отработку DepositSaving с авто-лотом так как отношение убытка по открытым позициям к проценту срабатывания (30%) у значения баланса выше чем у верного значения в 130.



С авто-лотом сложнее, из-за невозможности просчитать AccountFreeMagrgin()... пока вот такое нагородил. Работает, но через раз)))

  lot=NormalizeDouble((((AccountFreeMargin()*FreightMoneyAccountPercent/100)*AccountLeverage())/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE)*0.75),2); // расчёт авто-лота для DepositSaving с учётом фрахта средств торгового счёта
 


Смотрите на фото - одни и те же настройки к разным графикам привели.

Суть в том что прогонка с депо 100 баксов и фрахтом 100% или прогонка с депо 200 баксов и фрахтом 50% должны давать одинаковый результат. И тут эти Gost Quotes (Котировки-привидения) попались на глаза. Всё сбилось. А из-за чего не пойму.

Да, и ещё, комп я не обновил - на стареньком МТ4 прогоняю. Новый хотел скачать но он не пошёл, типа ХР не поддерживается.

Кидаю файл с кодом mql4 -

там в строках 68-69 и далее с 305 строки вся заваруха началась с авто-лотом для аварийного ордера при фрахте...


А это сегодняшняя прогонка:

Файлы:
 
geratdc:

1. Объясните пожалуйста почему у меня прогонка в тесте по одному и тому же периоду совпадает до 55 сделки, а с 55 данные по сделкам сбиваются? Как это возможно?))

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

Например, есть депо 200 баксов, пользователь решил на EURUSD и GPBUSD советника повесить. Соответственно он фрахтует по 50% от депозита за каждым советником в их настройках и они работают исходя из выделенного им бюджета. Или депо 1000 баксов и пользователь решает на 10 графиках работать с минимальным лотом, тогда надо будет просто указать в настройках фрахт 10%. Советник будет калькулировать исходя из депо в 100 баксов, а не 1 000. Может такая идея есть уже? Мне представляется что эту идею на 100% корректно нереально сделать из-за того что авто-лот для аварийного ордера опирается на FreeMargin()...

Предположим с самим вызовом функции защиты по убыткам, я кажись справился:

где ab - скорректированный на фрахт баланс счёта, op - сумма условных профитов/убытков по открытым позициям.

То есть смотрите, если баланс 1 000 баксав, фрахт 10%, а AccountProfit()=30, тогда (((1 030 - 30) * 0,1) + 30) =130. Итого сумма условных убытков рассчитывается корректно, а не от 1 030 баксав * (10/100) = 103 - что является некорректным значением.

С авто-лотом сложнее, из-за невозможности просчитать AccountFreeMagrgin()... пока вот такое нагородил. Работает, но через раз)))


Смотрите на фото - одни и те же настройки к разным графикам привели.

Суть в том что прогонка с депо 100 баксов и фрахтом 100% или прогонка с депо 200 баксов и фрахтом 50% должны давать одинаковый результат. И тут эти Gost Quotes (Котировки-привидения) попались на глаза. Всё сбилось. А из-за чего не пойму.

Да, и ещё, комп я не обновил - на стареньком МТ4 прогоняю. Новый хотел скачать но он не пошёл, типа ХР не поддерживается.

Кидаю файл с кодом mql4 -

там в строках 68-69 и далее с 305 строки вся заваруха началась с авто-лотом для аварийного ордера при фрахте...

А это сегодняшняя прогонка:

Так это же 2 разных советника с разными параметрами.

Попробуй последний вариант советника прогнать раз за разом с параметрами 100 и 100  потом  200 и 50. Графики одинаковые   100 100

    200  50

 

Привет,

Инструмент один и самое главное настройки одинаковые. Да и на другом тесте тоже самое - ерунда получается- какое-то количество сделок и время и котировки одинаковы, а потом сделки перестают совпадать. В чём дело не могу понять. Вчера погонял советника, решил отвлечься от 1С программирования))) Достало. Ну и вот мысля возникла насчёт фрахта, но реализовать корректно на коленке не получилось. Сами котировки я принудительно скачал на диск за год. Может МТ4 глючит ? У меня версия до обновления - та которая с ХР работает))


Вы формулу AccountMargin() знаете?

Не думаю что моё решение по прямому умножению на коэффициент фрахта это лучшее решение. Сомневаюсь я... 

 

Графики одинаковые. Новый вариан советника с фрахтом - СЛИВАЕТ

 
Такое бывает знаете когда? Когда авто-лот не сработал из функции DepositSaving. А вот когда авто-лот сработал то полное не соответствие, поэтому подозреваю AccountFreeMargin() и некорректный подход к расчёту авто-лота при фрахте денежных средств на торговом счёте для  советника.
 

Если замок построен на песке - хоть тысячу подпорок поставь - все равно будет крениться и падать. Любому экономисту понятно, и объяснил уже на примере ведра с картошкой,  что контр-ордера - это глупость, придуманная учителями форекса для затуманивания мозгов слушателей. Выбросьте их - советник станет проще. Добейтесь прибыльности - затем усложняйте для ее увеличения. А если очень хочется с конт-ордерами - откройте неттинговый счет на МТ5. При открытии счета убрать галочку Хеджирование. В МТ5 отсутствует куча ордеров - там одна совокупная позиция.

Купили 1 лот по цене 100 и еще 1 лот по цене 120 - результирующая позиция 2 лота по цене 110   --  усреднение

Купили 1 лот и продали 2 лота - результирующая позиция продажа 1 лот   --  переворот позиции

Купили 2 лота и продали 1 лот - результирующая позиция покупка 1 лот  --  частичное закрытие

Купили 1 лот и продали 1 лот  -- результат позиция закрыта

Если писать без СБ и ООП - то все просто. Чуть у функции OrderSend() параметры проще и еще чуть-чуть

 
STARIJ:

Если замок построен на песке - хоть тысячу подпорок поставь - все равно будет крениться и падать. Любому экономисту понятно, и объяснил уже на примере ведра с картошкой,  что контр-ордера - это глупость, придуманная учителями форекса для затуманивания мозгов слушателей. Выбросьте их - советник станет проще. Добейтесь прибыльности - затем усложняйте для ее увеличения. А если очень хочется с конт-ордерами - откройте неттинговый счет на МТ5. При открытии счета убрать галочку Хеджирование. В МТ5 отсутствует куча ордеров - там одна совокупная позиция.

Купили 1 лот по цене 100 и еще 1 лот по цене 120 - результирующая позиция 2 лота по цене 110   --  усреднение

Купили 1 лот и продали 2 лота - результирующая позиция продажа 1 лот   --  переворот позиции

Купили 2 лота и продали 1 лот - результирующая позиция покупка 1 лот  --  частичное закрытие

Купили 1 лот и продали 1 лот  -- результат позиция закрыта

Если писать без СБ и ООП - то все просто. Чуть у функции OrderSend() параметры проще и еще чуть-чуть

А что за пример с картошкой 
 
Anton Danilchenko:   А что за пример с картошкой 

Когда человек приходит на форекс - у него отрубаются мозги. Этим пользуются лже-наставники и за деньги пудрят мозги: стратегия туда-сюда, контр-ордера, встречные ордера, локи, замки, разруливание локов. Время идет, денежки платим - а слышим бред. И только часть слушателей со временем это осознает. Для понятности смоделируем форекс на базаре. Посадим мысленно торговку, которая по 190 рублей ведро покупает картошку у приезжих, а продает по 200. Спред 10 рублей. Имеется хорошая ликвидность. Торговка, видя монополию, начинает увеличивать цену продажи. 210  ....  220  ...  То тут подходит мужик с мешком картошки и начинает продавать по 210. Это уровень сопротивления. Когда распродаст свой мешок, вот тогда уровень сопротивления будет пробит. Потом подходит другой мужик с мешком. Ему надо быстрее, решил продать по 140. Торговка скупает у него, и цена остается прежней. Это уровень поддержки. Тут подъезжает мужик и говорит: мне на праздник надо картошки. Почем у тебя? Торговка сразу сообразила и говорит - по 250. Вышла новость и цена подскочила. Мужик купил и уехал. Видя повышение цены покупатели разошлись. Торговка снижает цену - коррекция.

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

 

Если  баланс счёта AccountBalance() умножить на плечо AccountLeverage() и потом вычесть AccountMargin() то что получится? AccountFreeMargin()? Может вот так тогда свободные средства по фрахту распределить:

lot=NormalizeDouble(((((AccountBalance()-AccountProfit())*FreightMoneyAccountPercent/100)+AccountProfit())*AccountLeverage()-AccountMargin())/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE)*0.75,2); // расчёт авто-лота для DepositSaving с учётом фрахта средств торгового счёта 
 

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

//+------------------------------------------------------------------+ 
//| Проверка. Проба                                                  | 
//+------------------------------------------------------------------+ 
#property strict

void start()
{
  double FreightMoneyAccountPercent=50;
  double lot=NormalizeDouble(((((AccountBalance()-AccountProfit())*FreightMoneyAccountPercent/100)+AccountProfit())*AccountLeverage()-AccountMargin())/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE)*0.75,2); // расчёт авто-лота для DepositSaving с учётом фрахта средств торгового счёта
  Alert("Баланс = ", AccountBalance(),
        "   Профит = ", AccountProfit(),
        "  Фрахт = ",FreightMoneyAccountPercent,
        "  Лот = ", lot);  
}

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

AccountBalance()  +  AccountProfit()

 
STARIJ:

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

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

AccountBalance()  +  AccountProfit()

AccountBalance()  +  AccountProfit()  = AccountEquity();
Причина обращения: