Как рассчитать стоимость пункта в валюте депозита - страница 2

 
Alexander Bereznyak #:

а что функция

не работает

Она работает, но она бесполезная. Не понимаю, зачем её сделали. Её негде применять. Вы можете привести пример её применения?
 

Что могу сказать, что для расчета маржи на мт5, что для расчета потенциальной прибыли на мт4/мт5 пришлось городить целый огород функций, чтобы получить эти значения.

Пришлось всё это рассчитывать через-через. Но оно того стоит, когда нужен хороший мани менеджмент, а он нужен всегда. Торговать "на глазок" - это либо рисковать получить незапланированный убыток, либо не до зарабатывать.

Спасибо всем, кто поднимал эти вопросы тут на форуме, по крупицам удалось сформировать алгоритм и воплотить.


 

Учтите, что функция 

SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE)

выдаёт очень часто неверные значения для невалютных пар, например для металлов, индексов.

Пример из другой ветки:

https://www.mql5.com/ru/forum/351/page8#comment_40520273

Как рассчитать стоимость пункта в валюте депозита без этой функции непонятно, кто-нибудь знает?

Расчет TickValue и прибыли - Заполните спецификацию интересуемого инструмента. Умножаем стоимость пункта на объем MathAbs покупки минус продажи
Расчет TickValue и прибыли - Заполните спецификацию интересуемого инструмента. Умножаем стоимость пункта на объем MathAbs покупки минус продажи
  • 2022.07.01
  • www.mql5.com
то умножаем стоимость тика на объем MathAbs покупки минус продажи одного и того же инструмента. Стоимость ПУНКТА сможем рассчитать мы по этой формуле. Опять у ALPARI на инструменте NQ100 выдает стоимость пункта 0
 
Konstantin Efremov #:

Что могу сказать, что для расчета маржи на мт5, что для расчета потенциальной прибыли на мт4/мт5 пришлось городить целый огород функций, чтобы получить эти значения.

Пришлось всё это рассчитывать через-через. Но оно того стоит, когда нужен хороший мани менеджмент, а он нужен всегда. Торговать "на глазок" - это либо рисковать получить незапланированный убыток, либо не до зарабатывать.

Спасибо всем, кто поднимал эти вопросы тут на форуме, по крупицам удалось сформировать алгоритм и воплотить.


Вместо картинки лучше бы функции Ваши прикрепили
 

Писал для себя когда-то расчёт стоимости пункта при заданном лоте. Вроде работало корректно. Проверьте.

// ---------------- StoimostPunkta() ------------------------------------
// функция возвращает стоимость пункта при заданном лоте
// ---------------------------------------------------------
double StoimostPunkta(double in_Lot){
        string  FunctionName="StoimostPunkta()";
        string  SMB=Symbol();
        double  Stoimost1Lota=MarketInfo(SMB,MODE_TICKVALUE); // стоимость пункта при лоте = 1
  double        MinLot=MarketInfo(SMB,MODE_MINLOT);
        double  StoimostMinLota,PricePunktaZadannLota;
        int                     KoefDelenija,SkolkoRaz;
        
        if(in_Lot<MinLot){
                Print("(центовый, долларовый) и разрядность торгового инструмента");
                Print("указав валютную пару, таймфрейм, тип торгового счёта");
                Print("Обратитесь к разработчику на e-mail:");
                Print("Ошибка! Некорректное значение параметра. in_Lot<MinLot");
                Print("==================== ",FunctionName," ====================");
                return(0);
        }
        
        if(MinLot==1 || MinLot==0.1 || MinLot==0.01){
                if(MinLot==1){
                        KoefDelenija=1;
                }
                if(MinLot==0.1){
                        KoefDelenija=10;
                }
                if(MinLot==0.01){
                        KoefDelenija=100;
                }
        }
        else{
                KoefDelenija=(-1000);
        }
        if(KoefDelenija<0){
                Print("(центовый, долларовый) и разрядность торгового инструмента");
                Print("указав валютную пару, таймфрейм, тип торгового счёта");
                Print("Обратитесь к разработчику на e-mail:");
                Print("Ошибка! Некорректное значение параметра MinLot = ",MinLot);
                Print("==================== ",FunctionName," ====================");
                return(0);
        }
        else{ // иначе коэффициент нормален
                StoimostMinLota=Stoimost1Lota/KoefDelenija;// стоимость пункта при минимальном лоте
        }
        if(StoimostMinLota>0){
                // смотрим сколько раз в нашем лоте умещается минимальный
                SkolkoRaz=in_Lot/MinLot;
                // Теперь вычисляем сколько стоит пункт при заданном лоте
                PricePunktaZadannLota=StoimostMinLota*SkolkoRaz;
                return(PricePunktaZadannLota);
        }
        else{
                Print("(центовый, долларовый) и разрядность торгового инструмента");
                Print("указав валютную пару, таймфрейм, тип торгового счёта");
                Print("Обратитесь к разработчику на e-mail:");
                Print("Ошибка! Некорректное значение параметра StoimostMinLota = ",StoimostMinLota);
                Print("==================== ",FunctionName," ====================");
                return(-1);
        }
}


 

Причина обращения: