Универсальная формула расчета объема ордера по заданному риску для всех инструментов - страница 2

 

Сначала нужно найти стоимость 1-го пункта в валюте депозита

pv=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)*SymbolInfoDouble(_Symbol,SYMBOL_POINT)/SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)

Пусть, SL и TP - стоп-приказы в пунктах, Loss - потери в валюте депозита, Profit - прибыль в валюте депозита, Lot - объем позиции.

Задача 1. Известны Lot и SL. Loss=Lot*SL*pv, Profit=Lot*TP*pv

Задача 2. Известны SL и Loss. Lot=Loss/(SL*pv), Profit=Loss*TP/SL

 
Aleksej Poljakov #:

Сначала нужно найти стоимость 1-го пункта в валюте депозита

Пусть, SL и TP - стоп-приказы в пунктах, Loss - потери в валюте депозита, Profit - прибыль в валюте депозита, Lot - объем позиции.

Задача 1. Известны Lot и SL. Loss=Lot*SL*pv, Profit=Lot*TP*pv

Задача 2. Известны SL и Loss. Lot=Loss/(SL*pv), Profit=Loss*TP/SL

К сожалению, я тоже сначала пошел по этому пути, но эти простые формулы - не универсальны. Они работают не для всех инструментов, например, для индексов в национальной валюте.
Например, индекс DAX — основной индекс немецкого фондового рынка, который отслеживает динамику акций 40 крупнейших компаний Германии на основе рыночной капитализации на Франкфуртской фондовой бирже, рассчитывается в евро. Поэтому после того, как будет найдено значение Loss, надо это значение еще умножить на курс национальной валюты EURUSD, чтобы получить Loss в валюте депозита. Тоже самое и для FTSE, найденное значение Loss надо умножить на курс GBPUSD и т.д. Кроме того, есть еще своя специфика расчета Loss для криптовалюты.

Так что для предварительной оценки результата торговой операции достаточно функции OrderCalcProfit(), которая вычислит размер прибыли/убытка с учетом специфики рыночного окружения.




 
Eugene Myzrov #:

К сожалению, я тоже сначала пошел по этому пути, но эти простые формулы - не универсальны. Они работают не для всех инструментов, например, для индексов в национальной валюте.
Например, индекс DAX — основной индекс немецкого фондового рынка, который отслеживает динамику акций 40 крупнейших компаний Германии на основе рыночной капитализации на Франкфуртской фондовой бирже, рассчитывается в евро. Поэтому после того, как будет найдено значение Loss, надо это значение еще умножить на курс национальной валюты EURUSD, чтобы получить Loss в валюте депозита. Тоже самое и для FTSE, найденное значение Loss надо умножить на курс GBPUSD и т.д. Кроме того, есть еще своя специфика расчета Loss для криптовалюты.

Так что для предварительной оценки результата торговой операции достаточно функции OrderCalcProfit(), которая вычислит размер прибыли/убытка с учетом специфики рыночного окружения.




написать простейший скрипт и проверить, большого труда не составит...

Файлы:
 
Aleksej Poljakov #:

написать простейший скрипт и проверить, большого труда не составит...

    Написать простейший скрипт - труда не составит, только не понятно, что надо проверить?
    Какой индекс? И что делает швейцарский франк на картинке?

 
Eugene Myzrov #:

    Написать простейший скрипт - труда не составит, только не понятно, что надо проверить?
    Какой индекс? И что делает швейцарский франк на картинке?

На картинках видно, что DAX. А франк - просто сменил валюту счета. Оказалось, что расчет стоимости пункта в валюте депозита верен.

 
Aleksej Poljakov #:

На картинках видно, что DAX. А франк - просто сменил валюту счета. Оказалось, что расчет стоимости пункта в валюте депозита верен.

    Поясни, пожалуйста, есть индекс DAX, который рассчитывается в EUR (валюта котировки), вот его примерная цена закрытия 21,200 EUR.

    Размер пункта в валюте котировки point=0.01 EUR. На картинках ты показываешь стоимость одного пункта в разных валютах депозита USD и CHF.

    

     Получается, что 1 евроцент равен 0.01 USD и 0,01 CHF одновременно? Но такого не может быть, значит все-таки упрощенный расчет стоимости пункта в валюте депозита, который ты предлагаешь, неполный.
     Поскольку валюта котировки EUR не совпадает с валютой депозита USD, то полученный результат необходимо еще умножить курс EURUSD...

 
Eugene Myzrov #:
    Поясни, пожалуйста, есть индекс DAX, который рассчитывается в EUR (валюта котировки), вот его примерная цена закрытия 21,200 EUR.

    Размер пункта в валюте котировки point=0.01 EUR. На картинках ты показываешь стоимость одного пункта в разных валютах депозита USD и CHF.

    

     Получается, что 1 евроцент равен 0.01 USD и 0,01 CHF одновременно? Но такого не может быть, значит все-таки упрощенный расчет стоимости пункта в валюте депозита, который ты предлагаешь, неполный.
     Поскольку валюта котировки EUR не совпадает с валютой депозита USD, то полученный результат необходимо еще умножить курс EURUSD...

Конечно же нет. Стоимость 1-го пункта в валюте депозита означает, что мы получим такую-то прибыль/убыток, если значение цены изменится на 1 пункт (точка). Все торговые операции сводятся к обмену одной валюты на другую. Но, валюты DAX, нету в природе. По крайней мере в ISO 4217, она не зарегистрирована. Если счет открыт в eur, то и прибыль/убыток будут в eur. Если счет в тугриках, то в них и будут расчеты.

Еще раз, DAX - это просто индекс, когда чего-то там сложили на что-то поделили и вывели на график. Мы просто делаем ставку - будет расти этот индекс или нет. Если мы угадали - премия, нет - убыток. Аналог - приходим мы на ипподром и делаем ставку на лошадь в фунтах, а лошадь зовут EUR. Если она победит, то выигрыш нам выплатят в eur или gbp? В какой валюте мы ставили, в той нам и выплатят, а имя лошади тут вообще никаким боком.

Попробуйте написать простейший советник. Алгоритм - каждый 10-ый бар открывается новая позиция. Как только позиция пройдет 20 пунктов, она закрывается. При расчете объема позиции сначала используйте свой очень мудрый метод. А потом, наивный мой. Сравните результаты.

 
Aleksej Poljakov #:

Попробуйте написать простейший советник. Алгоритм - каждый 10-ый бар открывается новая позиция. Как только позиция пройдет 20 пунктов, она закрывается. При расчете объема позиции сначала используйте свой очень мудрый метод. А потом, наивный мой. Сравните результаты.

Ну что же, делать нечего, написал простейший скрипт.

//+------------------------------------------------------------------+
//| Script program start function
//+------------------------------------------------------------------+
void OnStart()
{
   ENUM_ORDER_TYPE order_type=ORDER_TYPE_BUY;
double profit=0; 

   double nPointSize=SymbolInfoDouble(_Symbol, SYMBOL_POINT);           // стоимость одного пункта цены в валюте котировки
   double nTickSize =SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE); // стоимость одного тика   цены в валюте котировки
   double nTickValue=SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE);// 


   double volume     = 1.0; 
   double open_price =20980.09;
   double close_price=20978.09;
   double delta      = 200;   // кол-во пунктов

// Метод №1
   double pv=nTickValue*nPointSize/nTickSize;
   Print("Метод №1 (наивный): P/L=", volume * delta * pv);

// Метод №2
   ResetLastError();
   double profit=0; 
   if (!OrderCalcProfit(order_type, _Symbol, volume, open_price, close_price, profit)) {
      Print("OrderCalcProfit() failed. Error ", GetLastError()); return;
   }
   Print("Метод №2 (мудрый): P/L=", profit);
   return;
}
 

А вот результат прогона скрипта на DE40 (брокер Tickmill), размер лота volume=1.0

2025.04.19 19:01:13.104    -- OrderCalProfit2 (DE40,M10)    Метод №1 (наивный): P/L=2.0
2025.04.19 19:01:13.104    -- OrderCalProfit2 (DE40,M10)    Метод №2 (мудрый) : P/L=2.28

Здесь очевидно причина расхождения в том, что в твоей формуле не учитывается курс EURUSD...

SOLUSD (Solana Token vs US Dollar): Цены и графики коинов в реальном времени, курсы криптовалют
SOLUSD (Solana Token vs US Dollar): Цены и графики коинов в реальном времени, курсы криптовалют
  • 2025.04.19
  • www.mql5.com
Курс SOLUSD за сегодня изменился на -0.53%. При этом минимальная цена на торгах достигала 132.3377, а максимальная — 135.8585
 
Eugene Myzrov #:

А вот результат прогона скрипта на DE40 (брокер Tickmill), размер лота volume=1.0

2025.04.19 19:01:13.104    -- OrderCalProfit2 (DE40,M10)    Метод №1 (наивный): P/L=2.0
2025.04.19 19:01:13.104    -- OrderCalProfit2 (DE40,M10)    Метод №2 (мудрый) : P/L=2.28

Здесь очевидно причина расхождения в том, что в твоей формуле не учитывается курс EURUSD...

Ну, все-таки надо запустить советник для сравнения.

Еще раз - валюта котировки, валюта прибыли и валюта депозита - это три разных валюты. А вот цена 1-го пункта в валюте депозита - всегда константа. Трейдеру удобнее считать убытки/прибыли в той валюте, в которой он открыл свой счет. Попробуйте сделать элементарный советник 9не важно прибыль/убыток от него будет) и тогда сможете сравнить разницу.