Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
Money Fixed Margin - эксперт для MetaTrader 5
- Просмотров:
- 2621
- Рейтинг:
- Опубликован:
- 2016.12.28 15:20
- Обновлен:
- 2018.02.16 09:45
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Пример для расчёта размера лота c фиксированным уровнем маржи. То есть, если задать 10%, откроется позиция, размер маржи которой составит 10% от свободной маржи.
Входные параметры:
- StopLoss (in pips) — уровень StopLoss
- % risk — размер маржи под позицию, в процентах от свободной маржи
Для симуляции торговли организован такой цикл:
if(count%980==0) // we pass 980 tics
{
//--- getting lot size for open long position (CMoneyFixedMargin)
Начальное значение count=-21 задаётся исключительно для "разогрева" тестера стратегий. Далее рассчитывается остаток от деления переменной count на число 980 (число взято просто с потолка). Иными словами, каждые 980 тиков осуществляется заход в цикл расчёта лота с учётом рисков на сделку.
Сам цикл расчёта лота в зависимости от риска на сделку (расчёт для позиции Buy):
Шаг первый
double sl=0.0;
double check_open_long_lot=0.0;
//--- variant #1: StopLoss=0.0
sl=0.0;
check_open_long_lot=m_money.CheckOpenLong(m_symbol.Ask(),sl);
Print("sl=0.0",
", CheckOpenLong: ",DoubleToString(check_open_long_lot,2),
", Balance: ", DoubleToString(m_account.Balance(),2),
", Equity: ", DoubleToString(m_account.Equity(),2),
", FreeMargin: ", DoubleToString(m_account.FreeMargin(),2));
//--- variant #2: StopLoss!=0.0
sl=m_symbol.Ask()-ExtStopLoss;
check_open_long_lot=m_money.CheckOpenLong(m_symbol.Ask(),sl);
Print("sl=",DoubleToString(sl,m_symbol.Digits()),
", CheckOpenLong: ",DoubleToString(check_open_long_lot,2),
", Balance: ", DoubleToString(m_account.Balance(),2),
", Equity: ", DoubleToString(m_account.Equity(),2),
", FreeMargin: ", DoubleToString(m_account.FreeMargin(),2));
if(check_open_long_lot==0.0)
return;
в переменную check_open_long_lot при помощи метода CheckOpenLong класса CMoneyFixedMargin получаем рассчитанный размер лота для позиции Buy с учётом StopLoss:
В журнал экспертов печатаются такие параметры: StopLoss, рассчитанный размер лота в зависимости от риска на сделку, баланс торгового счёта на момент расчёта, размер собственных средств на счете на момент расчёта, размер зарезервированных залоговых средств на момент расчёта.
Если расчёт вернул значение "0.0" - выходим:
return;
Шаг второй
В переменную chek_volime_lot при помощи метода CheckVolume класса CTrade получаем размер лота для позиции Buy, на который у нас хватит средств. Здесь мы передаём такие параметры: m_symbol.Name() — имя символа, check_open_long_lot — объём позиции, которую мы хотим открыть (этот параметр мы уже рассчитали ранее):
double chek_volime_lot=m_trade.CheckVolume(m_symbol.Name(),check_open_long_lot,m_symbol.Ask(),ORDER_TYPE_BUY);
Шаг третий
Если метод CheckVolume вернул не "0.0", значит проверяем условие: у нас хватает средств на открытие позиции рассчитанного лота с учётом риска.
if(chek_volime_lot!=0.0) if(chek_volime_lot>=check_open_long_lot) { if(m_trade.Buy(chek_volime_lot,NULL,m_symbol.Ask(), m_symbol.NormalizePrice(m_symbol.Ask()-ExtStopLoss), m_symbol.NormalizePrice(m_symbol.Ask()+ExtStopLoss))) { if(m_trade.ResultDeal()==0) count--; } else count--; } else Print("CMoneyFixedMargin lot = ",DoubleToString(check_open_long_lot,2), ", CTrade lot = ",DoubleToString(chek_volime_lot,2));
Если средств хватает, то открываем позиции, если не хватает — то в журнал экспертов печатаются рассчитанный размер лота с учётом риска на сделку (DoubleToString(check_open_long_lot,2)) и размер лота, на который хватает средств (DoubleToString(chek_volime_lot,2)).
Пример открытия позиции Buy, при 10% риска на свободную маржу:
Что при этом распечатывалось в журнале:
Money Fixed Margin (EURUSD,M1) 2016.11.28 00:03:24 sl=1.05792, CheckOpenLong: 0.28, Balance: 3000.00, Equity: 3000.00, FreeMargin: 3000.00
Trade 2016.11.28 00:03:31 instant buy 0.28 EURUSD at 1.06076 sl: 1.05792 tp: 1.06292 (1.06042 / 1.06076 / 1.06042)
Trades 2016.11.28 00:03:31 deal #2 buy 0.28 EURUSD at 1.06076 done (based on order #2)
Trade 2016.11.28 00:03:31 deal performed [#2 buy 0.28 EURUSD at 1.06076]
Trade 2016.11.28 00:03:31 order performed buy 0.28 at 1.06076 [#2 buy 0.28 EURUSD at 1.06076]
Money Fixed Margin (EURUSD,M1) 2016.11.28 00:03:31 CTrade::OrderSend: instant buy 0.28 EURUSD at 1.06076 sl: 1.05792 tp: 1.06292 [done at 1.06076]
Обратите внимание, что при расчёте лота в зависимости от риска на свободную маржу, StopLoss не имеет значения.
RSI EA - торговля по уровням перекупленности/перепроданности по индикатору iRSI (Relative Strength Index, RSI).
StopAndTake MT5При перетаскивании скрипта на график цены изменяется стоп или тейк всех открытых ордеров по данному инструменту.
Торговля по Moving Average. Проверка на достаточность средств.
e-TurboFxПроводится анализ баров на наличие N баров одного типа, идущих подряд.