Я так.
double Stop_points=40; //SL double Lot_perc_by_stop=4; //risk% ///////////////////////////////////////////////////////// double perc_lot_by_stop_f(double Stop_points,double Lot_perc_by_stop) { double lose_on_stop_lose=Stop_points*(MarketInfo(Symbol(),MODE_TICKVALUE)/100); double propotion=(AccountBalance()/100*Lot_perc_by_stop)/lose_on_stop_lose; double Loto_=MarketInfo(Symbol(),MODE_MINLOT)*propotion; if(Loto_>MarketInfo(Symbol(),MODE_MAXLOT)) Loto_=MarketInfo(Symbol(),MODE_MAXLOT); if(Loto_<MarketInfo(Symbol(),MODE_MINLOT)) Loto_=MarketInfo(Symbol(),MODE_MINLOT); return(Loto_); }
Пытаюсь подсчитать реальный размер риска и соответственно лота, для валют получается вроде, а для CFD такой скрипт не подходит
где, что я упустил ? :
please help )Функция Point () может некорректно рассчитывать значения для экзотических пар и инструментов не относящихся в валютным парам (к примеру, золото). Посмотри на сайте любого ДЦ размер 1 лота для своей CFD и подставь вместо Point(). Для EUR/USD=100000, а для Bitcoin=1.
flatON:
Функция Point () может некорректно рассчитывать значения для экзотических пар и инструментов не относящихся в валютным парам (к примеру, золото). Посмотри на сайте любого ДЦ размер 1 лота для своей CFD и подставь вместо Point(). Для EUR/USD=100000, а для Bitcoin=1.
Ах, какая не хорошая функция... :(
А если серьёзно, то чтобы вы её вольно или невольно не забижали, всё же уточню попутно, не вдаваясь в расчёты по коду выше:
В отрывке кода от автора темы не функция Point(), а предопределённая переменная Point:
... double rick_1_pose = (points * (Point * AccountInfoInteger(ACCOUNT_LEVERAGE)));// usd ...
Предопределённые переменые Point и _Point, а так же функция Point() - идентичны по выводимым ими значениям (т.е., выводят одинаковые значения).
Тестовый скрипт:
#property version "1.00" #property strict #define TEST_PRINT_THREE(x,y,z) Print(__LINE__,", ",__FUNCTION__,\ ", ",(#x)," = ",(x),", ",(#y)," = ",(y),\ ", ",(#z)," = ",(z)) //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { int dig=Digits(); //--- TEST_PRINT_THREE(DoubleToString(Point,dig),//переменная: Справочник MQL4 / Предопределенные переменные / Point DoubleToString(_Point,dig),//переменная с deprecated статусом: Справочник MQL4 / Предопределенные переменные / _Point DoubleToString(Point(),dig));//функция: Справочник MQL4 / Проверка состояния / Point } //+------------------------------------------------------------------+
Работа этого тестового скрипта на графике GOLD, H1 - золото (скрин вывода им записи во вкладку торгового терминала "Эксперты"):
P./S.: Т.е., выводимые тестовым скриптом через переменные и функцию размеры пункта равны между собой и соответствуют графику:

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Пытаюсь подсчитать реальный размер риска и соответственно лота, для валют получается вроде, а для CFD такой скрипт не подходит
где, что я упустил ? :
please help )