Скачать MetaTrader 5

Объём лота ?

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

Здравствуйте. Помогите решить задачу.

Открыта позиция

BUY,

Т\П=100

С\Л=0

Лот=0.1

Позиция может быть как в прибыли, так и в убытке в момент поступления сигнала на продажу. Поступил сигнал продать,

открыта позиция

SELL,

Т\П=100

С\Л=0

Лот=?

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

 Усложнённый вариант,  две позиции бай и селл незакрыты, поступил сигнал бай, все позиции закроются по Т\П = 100 п. от открытия последней позиции. Как рассчитать лот третьей и последующих позиций, чтобы получить прибыль запланированную при открытии первой позиции?

Alexey Volchanskiy
19372
Alexey Volchanskiy  
sile:

Здравствуйте. Помогите решить задачу.

Открыта позиция

BUY,

Т\П=100

С\Л=0

Лот=0.1

Позиция может быть как в прибыли, так и в убытке в момент поступления сигнала на продажу. Поступил сигнал продать,

открыта позиция

SELL,

Т\П=100

С\Л=0

Лот=?

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

Это нереально, если нет явного тренда и вы не знаете уровней поддержки и сопротивления. Если знаете - все на уровне арифметики 5-го класса.
Sile Si
80
Sile Si  
Alexey Volchanskiy:
Это нереально, если нет явного тренда и вы не знаете уровней поддержки и сопротивления. Если знаете - все на уровне арифметики 5-го класса.

Что нереально?

Стратегия в данной задаче вторична или даже вовсе не имеет значения.

Для примера можно взять простейший сигнал закрытие выше МА бай, ниже селл.

Вопрос, что из чего вычитать и с чем складывать.Понятно, что в случае, когда открытая позиция в плюсе, лот нужно уменьшить и наоборот. Но насколько?

Vasiliy Pushkaryov
4817
Vasiliy Pushkaryov  

Я бы пошел таким путем.
Вы хотели получить 100 пунктов профита. При стоимости пункта равной 1 и объеме 0,1 - это 10 дол. (формула ниже)

Кол-во пунктов * стоимость пункта * объем  = профит

Когда планируете выставить позицию Селл, нужно перед этим по Бай выяснить текущий профит, например, 2 дол.
0,1 лота пойдет на хеджирование. Теперь нам нужно заработать 8 дол.

Значит объем = профит / кол-во пунктов * стоимость пункта

Итого объем для Sell = 8 / 100 * 1 + 0,1 = 0,18

Sile Si
80
Sile Si  
Vasiliy Pushkaryov:

Я бы пошел таким путем. 

Спасибо. Функция почему-то возвращает 1е-06. Делаю всё вроде бы так, как вы сказали.

Или не так?

double newLot(string sy="", int op=-1, int mn=-1)
{
  datetime o;
  double po, pp, Profit,lot;
  double   l=-1;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy==Symbol()) {
        if (OrderType()==OP_BUY ) {
           po=MarketInfo(OrderSymbol(), MODE_POINT);
           pp=MarketInfo(OrderSymbol(), MODE_BID);
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (o<OrderOpenTime()) {
                o=OrderOpenTime();
                lot=OrderLots();
                //pp - OrderOpenPrice;
                Profit=_TP*po*PricePips()*lot;//Кол-во пунктов * стоимость пункта * объем  = профит


                l= Profit/_TP*po*PricePips();//объем = профит / кол-во пунктов * стоимость пункта
                //PricePips() это стоимость пункта
                
                
              }
            }
          }
        }
      }
    }
  }
  return(l);

 

 вот функция расчёта стоимости пункта

double PricePips()
{
// --------- вычисляем какая пара (прямая, обратная, кросс) --------------
   TipInstrumenta=StringFind( SMB,"USD",0);
  
   //------ извлекаем имя первой валютной пары ------------
   SMB1=StringSubstr(SMB,0,3); //базовая валюта
   //SMB2=StringSubstr(SMB,3,3);// валюта котирования.
  
   // ------- текущая котировка базовой валюты к доллару США -------------
   BazCours=MarketInfo(SMB1+"USD",MODE_BID);
   //Alert("Tекущая котировка базовой валюты к доллару США = ",BazCours);
  
   // --------- рассчитываем стоимость пункта -------------------------
   if(TipInstrumenta==3){//пара прямая, напр. EurUsd
     PointPrise=1000000*_Lots/10*Point;
     ryn_PointPrise=1000000*MinLot/10*Point;//стоимость пункта при минимальном лоте
   }
   if(TipInstrumenta==0){//пара обратная, напр. UsdJpy
     PointPrise=1000000*_Lots/10*Point/Bid;
     ryn_PointPrise=1000000*MinLot/10*Point/Bid;//стоимость пункта при минимальном лоте
   }
   if(TipInstrumenta==-1){//Кросс-пара, напр EurJpy
     PointPrise=1000000*_Lots/10*Point*BazCours/Bid;
     ryn_PointPrise=1000000*MinLot/10*Point*BazCours/Bid;
   }
   // ----- нормализуем полученную стоимость пункта ------
   PointPrise=NormalizeDouble(PointPrise,2);
   ryn_PointPrise=NormalizeDouble(ryn_PointPrise,2);
   return(PointPrise);
}
Aleksey Semenov
4306
Aleksey Semenov  

можно и без расчёта стоимости пункта - а главное проще считать лот если известен тейкпрофит второй локирующей позиции, считаем от дистанции в пунктах между двумя позициями если известно где вторая позиция должна закрытся то вычислить её лот не проблема, ща может вспомню формулу, хотя есть такой советник только наоборот считает где встанет тейк при таком то лоте локирующей сделки, а вам нужно наоборот рассчитать какой будет лот при таком то тейке у локирующей сделки, берём бумажку, карандаш и рисуем где и как расположены ордера, расчёт велся только для позиции сидящей в убытке

дано

х - цена ордера бай открытый допустим по цене 1000 объёмом 0.1 (находится в убытке)

у - цена ордер селл который ещё не открыли но сигнал на открытие поступил по цене 880

Задача рассчитать лот ордера (у) чтобы через заданное количество пунктов - вывести серию из 2 ордеров в 0 или в прибыль от первого ордера, (изначально рассчитывается для вывода в 0 а там уже можно разные коффициенты добавлять, спред погрешность итд)

ТР = 150

(х-у) дистанция между ордерами

х-(у-ТР) - дистанция от ордера (х) до точки закрытия

подставим цены в формулу

1000-(880-150) = 270

270*0.1 = 27 - убытка ордера Х в условных единицах (также можно вычислить условную прибыль 150*0.1 = 15 ед)

(27+15)/150=0.28 лота будет наш ордер (У), надеюсь доходчиво объяснил

ну это самый простой вариант вычисления лота и самый грубый

Vasiliy Pushkaryov
4817
Vasiliy Pushkaryov  
sile:

Спасибо. Функция почему-то возвращает 1е-06. Делаю всё вроде бы так, как вы сказали.


Текущий профит ордера, после того как его выбрали, проще вычислить так:

OrderProfit() + OrderCommission() + OrderSwap()

стоимость пункта тоже можно встроенной функцией

double pipCost = MarketInfo(_Symbol, MODE_TICKVALUE);

Попробуйте используя это, что получиться.

Sile Si
80
Sile Si  
Aleksey Semenov:

 это самый простой вариант вычисления лота и самый грубый

Спасибо, мне интересны все варианты решения.

Сейчас оформлю предложенные формулы в функцию.

 Если усложнить задачу, притом, что эти две позиции незакрыты, поступил сигнал бай, Т\П статичный, как был у первых двух позиций.

Цель прежняя - первоначально запланированная сумма профита.

Как теперь считать лот?

Sile Si
80
Sile Si  
Vasiliy Pushkaryov:

стоимость пункта тоже можно встроенной функцией

Спасибо, это существенно упростит код.

По поводу приведённых вами формул.

Возможно, неправильно вас понимаю.

1)Кол-во пунктов * стоимость пункта * объем  = профит

2)Значит объем = профит / кол-во пунктов * стоимость пункта

3)Итого объем для Sell = 8 / 100 * 1 + 0,1 = 0,18

 в строке “1” кол-во пунктов это текущий профит открытой позиции,

в строке “2” кол-во пунктов это статический профит открытой позиции.

Или нет?

Vasiliy Pushkaryov
4817
Vasiliy Pushkaryov  
sile:

Спасибо, это существенно упростит код.

По поводу приведённых вами формул.

Возможно, неправильно вас понимаю.

1)Кол-во пунктов * стоимость пункта * объем  = профит

2)Значит объем = профит / кол-во пунктов * стоимость пункта

3)Итого объем для Sell = 8 / 100 * 1 + 0,1 = 0,18

 в строке “1” кол-во пунктов это текущий профит открытой позиции,

в строке “2” кол-во пунктов это статический профит открытой позиции.

Или нет?

открыта позиция

SELL,

Т\П=100

С\Л=0

Лот=?

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

Да, в строке “1” кол-во пунктов это текущий профит открытой позиции,

В строке “2” кол-во пунктов это статический Т\П=100 планируемой к открытию позиции Sell. Выделил красным, то как понимаю, нужно было найти.

new-rena
3371
new-rena  
sile:

Спасибо. Функция почему-то возвращает 1е-06. Делаю всё вроде бы так, как вы сказали.

Или не так? 

 вот функция расчёта стоимости пункта

Вот, небольшая поправка (у Вас не так):

объем = профит / (кол-во пунктов * стоимость пункта)

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