Скачать MetaTrader 5

Расчет цены 1 лота до его открытия.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
awkozlov
166
awkozlov  

Лотом как-то не наглядно открываться: на одной валюте он стоит 20$, на другой 200$.

Хотелось бы входить в рынок всегда фиксированной суммой, а не лотом.

Т.е. рассчитать лот так, чтобы при его открытии получить скажем спрэд в 20$.

Конечно можно:

- открыть позицию на 1 лот в тесте

- посмотреть какой по ней получился спредовый минус (Например: -222$)

- пересчитать процентное соотношение лота под 20$ ( 20$*1 лот / 225$ = 0,08888888888 )

- и открыть на продуктиве позицию на 0.09 лота на желаемые примерно -20$

Перебрал некоторые переменные, но никак не могу из них сообразить стоимость 1 лота.

// Минимальное изменение цены.
// MQL5: Модифицировано поведение свойства символа SYMBOL_TRADE_TICK_SIZE. Для символов, для которых явно не задан размер тика, возвращается размер пункта.
double   _SYMBOL_TRADE_TICK_SIZE = SymbolInfoDouble(lzSymbolName,SYMBOL_TRADE_TICK_SIZE);

// Минимальный шаг изменения объема для заключения сделки
double   _SYMBOL_VOLUME_STEP = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);

//*********************************************

// Стоимость всех пунктов в спреде в валюте депозита
double   _SYMBOL_SPREAD_PRICE = SymbolInfoDouble(_Symbol,SYMBOL_ASK) - SymbolInfoDouble(_Symbol,SYMBOL_BID);

// Количество пунктов в спрэде
long     _SYMBOL_SPREAD = SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);

// Цена 1-го пункта
double   _SYMBOL_POINT_PRICE = _SYMBOL_SPREAD_PRICE / _SYMBOL_SPREAD;

// Цена 1-го лота?

double   _SYMBOL_LOT_PRICE = -222;

// Количество лотов для открытия на 20$ 

double   _SYMBOL_LOT_SEND_20 = 20/_SYMBOL_LOT_PRICE;
220Volt
1175
220Volt  
Я на все расчеты смотрю так: цена входа это 100%, все например вошли на отметки 1.5, цена ушла к 2, следовательно результат сделки (2-1.5)/1.5 = 33% от суммы контракта. Со спредом аналогично, например он 2 пипса, следовательно (1.5 - 1.4998)/1.5 = 0.00013 * 100 (%) от суммы контракта. Если один лот, то 100000 *  0.00013 = 13 $. А если найти лот = 13/ 0.00013  
Andrey Voytenko
25025
Andrey Voytenko  

Попробуйте, это скрипт для расчета лота исходя из заданной суммы.

//+------------------------------------------------------------------+
//|                                                      CalcLot.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

#property script_show_inputs

//--- входные параметры
input double            InpMoney       =  200;              //Сумма, на которую открывается сделка
input ENUM_ORDER_TYPE   InpDirection   =  ORDER_TYPE_BUY;   //Тип ордера
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {

   double bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);
   double ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK);

   double price;
   if(InpDirection==ORDER_TYPE_BUY) price=ask;
   else if(InpDirection==ORDER_TYPE_SELL) price=bid;
   else
     {
      printf("Расчет лота ведется только для значений %s и %s",EnumToString(ORDER_TYPE_BUY),EnumToString(ORDER_TYPE_SELL));
      return;
     }

   double calc_margin=0;
   if(OrderCalcMargin(InpDirection,_Symbol,1.0,price,calc_margin))
     {
      if(calc_margin>0.0)
        {
         double lot=InpMoney/calc_margin;
         printf("Для суммы %.2f(%s), лот равен %.2f",InpMoney,_Symbol,lot);
        }
     }
  }
//+------------------------------------------------------------------+

 

awkozlov
166
awkozlov  
avoitenko:

Попробуйте этот скрипт.

 

Спасибки, скрипт навел на замечательную функцию OrderCalcProfit()

В результате нарисовал скрипт рассчитывающий лот исходя из желаемого минуса при открытии. БОЛЬШИМ СПРЕДАМ - МАЛЕНЬКИЕ ЛОТЫ !!!

double zLot (string zSymbol, string Shift)
{
double zSpeadProfit = 20;

double zMinLot= SymbolInfoDouble(zSymbol,SYMBOL_VOLUME_MIN);
if (zMinLot == 0) {zMinLot = SymbolInfoDouble(zSymbol,SYMBOL_VOLUME_STEP);}

double zOrderCalcProfit;

if (Shift == "Buy")  
{
OrderCalcProfit(ORDER_TYPE_BUY, zSymbol, 100 ,SymbolInfoDouble(zSymbol,SYMBOL_ASK), SymbolInfoDouble(zSymbol,SYMBOL_BID), zOrderCalcProfit);
}

if (Shift == "Sell") 
{
OrderCalcProfit(ORDER_TYPE_SELL, zSymbol, 100 , SymbolInfoDouble(zSymbol,SYMBOL_BID), SymbolInfoDouble(zSymbol,SYMBOL_ASK), zOrderCalcProfit);
}

if (Shift == "Wait") {Alert ("Не могу определить для лота тип ордера, возвращаю минимальный лот."); return (NormalizeDouble(zMinLot,2));}

//Alert (Shift, " zOrderCalcProfit = ",zOrderCalcProfit);

double Lot = - zSpeadProfit * 100 / zOrderCalcProfit;

Alert ("Lot =", Lot);

return (NormalizeDouble(Lot,2));
}


Nikolay Demko
12617
Nikolay Demko  
awkozlov:

Спасибки, скрипт навел на замечательную функцию OrderCalcProfit()

В результате нарисовал скрипт рассчитывающий лот исходя из желаемого минуса при открытии.


Круто, весь народ желает прибыли, а вы тут желаемые убытки рассчитываете :)

nothing personal, just life.

Valerii Mazurenko
3486
Valerii Mazurenko  
avoitenko:

Попробуйте, это скрипт для расчета лота исходя из заданной суммы.

Для покупок нужно учитывать ещё проскальзывание, если оно будет использоваться:

if(InpDirection==ORDER_TYPE_BUY) price=ask + slippage;

 

fellow
248
fellow  

действительно, почему лота нет в MQL5 ?

ведь многим хочется знать цену пункта лотом 

так и придётся вычислять лот с помощью OrderCalcMargin и  OrderCalcProfit

hrenfx
3671
hrenfx  

Полотовая ,попипсовая, подолларовая логики в какой-то мере ущербны. Как и многое другое, что измеряется в абсолютных единицах. Переход к относительным единицам измерения особенно полезен при торговле портфелем разнокалиберных символов. Вообще тема перехода от одних единиц измерения к другим довольно простая, но слабо (вообще не встречал) освещена, т.к., видимо, почти не практикуется.

По сути задача при открытии позиции сначала должна ставиться так: какую часть имеющегося капиталла мы хотим инвестировать в позицию портфлеля (включая простейший случай портфеля - 1 символ)? Например, хотим инвестировать 50% от тех денежных средств, что имеем. Далее встает вопрос (грубо): какой профит мы хотим получить? Допустим, что хотим получить 5%.

И уже только потом встает вопрос, какие лоты и направления должны быть для различных символов портфеля, как должна измениться цена порфтеля (в абсолютных единицах).

Причем заметьте, все это распространяется на любые "символы", включая картошку, мебель и т.д. А не только FOREX+биржи. Подобная логика универсальна.

P.S. Представьте себе такую картину в терминале: 30% из ваших средств задействованы в торговле. Они распределены так: 100% = 10% (инвестированы в BUY EURUSD) + 20% (SELL GBPUSD) + 50% (BUY GOLD) + 30% (SELL OIL). И собственно, без разницы тогда, какие там лоты у каждого символа и чему равна цена каждого символа.

P.P.S. На FOREX еще бывает полезна другая система координат: сколько какой валюты (не пар, а именно валюты: USD, JPY, CHF и т.д.) у вас "имеется" (включая отрицательное количество). Например, при рыночно-нейтральной позиции BUY EURUSD, SELL GBPUSD и SELL EURGBP количество "имеющейся" каждой валюты (EUR, USD, GBP) должно быть нулевым. И тема взаимного перехода от имеющейся валюты к лотам их соответствующих пар-символов тоже интересна.

P.P.P.S. Нет на MQL5-форуме трейдерских тем. Один программинг. 

Alexander Laur
8263
Alexander Laur  
hrenfx:

1.... Далее встает вопрос (грубо): какой профит мы хотим получить? Допустим, что хотим получить 5%.

........

2. P.P.P.S. Нет на MQL5-форуме трейдерских тем. Один программинг. 

1. Мне ближе лоты ограничевать потерями, а не прибылью. 

 2. Так сайт называется не www.mt5.com, а www.mql5.com.  

MT5 - Forex Traders Portal for MetaTrader users
  • www.mt5.com
Forex Traders Portal for MetaTrader users. Monitoring, trader contests, Forex analysis, Forex TV, trading education, Forex Trading Forum and free @MT5.com mailboxes.
hrenfx
3671
hrenfx  
papaklass:

1. Мне ближе лоты ограничевать потерями, а не прибылью.

Дело в том, что без разницы, 5% прибыли или 5% убытка. Т.к. это просто соответствующее относительное изменение цены в какую-либо сторону. Например, при Margin = 1% (Leverage = 100) для  EURUSD (GOLD, OIL, картошка - не важно) это будет изменение цены на 0.005% (5% * Margin) от цены открытия. И лоты при такой системе координат вообще не при чем.
Alexander Laur
8263
Alexander Laur  
hrenfx:
Дело в том, что без разницы, 5% прибыли или 5% убытка. Т.к. это просто соответствующее относительное изменение цены в какую-либо сторону. Например, при Margin = 1% (Leverage = 100) для  EURUSD (GOLD, OIL, картошка - не важно) это будет изменение цены на 0.005% (5% * Margin) от цены открытия. И лоты при такой системе координат вообще не при чем.

 Соглашусь, что 5% это 5% и совершенно не важно прибыли или убытка.

Каждый раз, открывая позицию я думаю, что она закроется по Стоп-лоссу. Поэтому я и написал, что мне ближе ограничевать размеры лотов потерями. Я хочу знать сколько % депо я потеряю при неблагоприятном для меня стечение обстоятельств.

При формировании портфеля, я рассчитываю лоты по различным инструментам исходя из дневного диапазона и стоимости тика инструмента. То есть, я получаю дневной диапазон инструмента в валюте депозита (например в USD). Размерами лота я выравниваю потери по инструментам. То есть, если я получу Стоп-лоссы по трем инструментам (EURUSD, USDJPY, AUDUSD), то они будут одинаковы между собой.

Рассчитывать размеры лотов в портфеле через равенство валют не пробовал ни разу.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий