Как высчитать TakeProfit "замка" - страница 2

 
Dmitry Fedoseev:

Офигеть! Такие портянки выложили и ни у кого нет правильно когда. За то вы все из себя тут такие. 

Бурные аплодисменты. 

ps. Самый прикол в том, что никто в это даже не поверит. Да? 

ps2. А я опять такой злодей, критикую. Да? 

Dmitry, почему, у меня считает правильно и кроссы, и золото, и CFD. А за счёт функций - легко адаптировать в любой код, портянка не настолько длинна.
 

Для однонаправленных ордеров:

(price[1] * vl[1] + price[2] * vl[2] + .... + price[i] * vl[i]) / (vl[1] + vl[2] + .... + vl[i]);

где price - цена открытия ордера,

      vl - объем ордера,

      i - количество открытых ордеров.

Посчитайте для каждого направления суммарную цену открытия и объем.

Найдите среднюю цену для обоих направлений:

(price_Buy * vl_Buy - price_Sell * vl_Sell) / (vl_Buy - vl_Sell); - цена открытия Вашей суммарной позиции.

Тэйк ставите относительно этой цены.

 
goman:

Для однонаправленных ордеров:

(price[1] * vl[1] + price[2] * vl[2] + .... + price[i] * vl[i]) / (vl[1] + vl[2] + .... + vl[i]);

где price - цена открытия ордера,

      vl - объем ордера,

      i - количество открытых ордеров.

Посчитайте для каждого направления суммарную цену открытия и объем.

Найдите среднюю цену для обоих направлений:

(price_Buy * vl_Buy - price_Sell * vl_Sell) / (vl_Buy - vl_Sell); - цена открытия Вашей суммарной позиции.

Тэйк ставите относительно этой цены.

А на минус зачем заменили, правильно же было с начала. Эххх...

Допустим у 2-х ордеров: 1 бай и 1 селл цены и объемы одинаковые, тогда цена позиции бесконечность?

Верните плюс на родину и продолжайте развивать мысль, т.к. это ещё не всё. Объемы селлок и баек надо сравнить...

К примеру, если объемы равны (лок), то самый оптимально возможный тейк найден - это цена позиции, либо любая цена. А если не равны?

 
Dmitry Fedoseev:

Офигеть! Такие портянки выложили и ни у кого нет правильно когда. За то вы все из себя тут такие. 

Бурные аплодисменты. 

ps. Самый прикол в том, что никто в это даже не поверит. Да? 

ps2. А я опять такой злодей, критикую. Да? 

выложи правильный код, или заткнись навеки 
 
Alexander Bereznyak:
выложи правильный код, или заткнись навеки 

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

Как уже писал:

ps. Самый прикол в том, что никто в это даже не поверит. Да? 

ps2. А я опять такой злодей, критикую. Да? 

ps3 (специально для Alexander Bereznyak). Фильтруй базар. Ты уж не раздражаешь, ты уже просто смешишь.

 
new-rena:

А на минус зачем заменили, правильно же было с начала. Эххх...

Допустим у 2-х ордеров: 1 бай и 1 селл цены и объемы одинаковые, тогда цена позиции бесконечность?

Верните плюс на родину и продолжайте развивать мысль, т.к. это ещё не всё. Объемы селлок и баек надо сравнить...

К примеру, если объемы равны (лок), то самый оптимально возможный тейк найден - это цена позиции, либо любая цена. А если не равны?

Именно "минус". :)

При равных объемах уравнение имеет бесконечное количество решений. Другими словами, результат суммарной позиции не зависит от изменения текущей цены.

Моя формула, с минусом и при неравных объемах, дает значение цены, при которой результат суммарной позиции будет равен нулю. Формула дает цену безубытка совокупной (Buy+Sell) позиции.

Причем, если объем совокупного Buy > совокупного Sell, то расчетная цена будет > цены совокупной Buy позиции. Если объем совокупного Sell > совокупного Buy, то цена результирующей позиции будет < цены совокупной Sell позиции.

 
Dmitry Fedoseev:

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

Как уже писал:

ps. Самый прикол в том, что никто в это даже не поверит. Да? 

"Обойдешься" - это не факты, а пустая болтовня!

"правильный код" - если все коды неправильны, так помогите нам всем - выложите правильный, поставьте нас на путь истинный!

"никто в это даже не поверит" - конечно никто не поверит, ведь код рабочий, а вы доказываете его неработоспособность, и при этом не приводите ни единого факта его неработоспособности.

Как-то так. 

 
goman:

Именно "минус". :)

При равных объемах уравнение имеет бесконечное количество решений. Другими словами, результат суммарной позиции не зависит от изменения текущей цены.

Моя формула, с минусом и при неравных объемах, дает значение цены, при которой результат суммарной позиции будет равен нулю. Формула дает цену безубытка совокупной (Buy+Sell) позиции.

Причем, если объем совокупного Buy > совокупного Sell, то расчетная цена будет > цены совокупной Buy позиции. Если объем совокупного Sell > совокупного Buy, то цена результирующей позиции будет < цены совокупной Sell позиции.

Таак, проверим.

Бай по 1*1 и 2*1, селл 1*1. Итог (1*1+2*1-1*1)/(1+1-1) = 2

Очень может быть что верно. В данном случае тейк на 2.1?

А тут:

Селл по 1*1 и 2*1, бай 1*1. Итог (1*1-2*1-1*1)/(1-1-1) = 2

Тейк на 1,9?

Работает!!!

Тогда формула будет выглядеть так:

Если vl_Buy>vl_Sell, тогда Level_TP=(price_Buy * vl_Buy - price_Sell * vl_Sell) / (vl_Buy - vl_Sell)+TP*Point;

Если vl_Buy<vl_Sell, тогда Level_TP=(price_Buy * vl_Buy - price_Sell * vl_Sell) / (vl_Buy - vl_Sell)-TP*Point;

 
Vitaly Muzichenko:

"Обойдешься" - это не факты, а пустая болтовня!

"правильный код" - если все коды неправильны, так помогите нам всем - выложите правильный, поставьте нас на путь истинный!

"никто в это даже не поверит" - конечно никто не поверит, ведь код рабочий, а вы доказываете его неработоспособность, и при этом не приводите ни единого факта его неработоспособности.

Как-то так. 

Не претендую на 100% правильный код, но так ваш код правильнее (Для тестера стратегий 100%):

//===============================================================================================
//--------------------- Возвращает уровень безубытка открытых позиций --------------------------+
//===============================================================================================
double BreakEvenOpenPos(string symb="",int type=-1,int mg=-1)
  {
   int digit=0;
   double LotB=0.0,LotS=0.0,ProB=0.0,ProS=0.0,ResBr=0.0,TickValue=0.0,point_=0.0,ask=0.0,bid=0.0,lotsize=0.0,exchrate=0.0;
   if(symb=="") {symb=_Symbol;}
   LotB=AmountLotFromOpenPos(symb,OP_BUY,mg);
   ProB=ProfitOpenPosInCurrency(symb,OP_BUY,mg);
   LotS=AmountLotFromOpenPos(symb,OP_SELL,mg);
   ProS=ProfitOpenPosInCurrency(symb,OP_SELL,mg);
   point_=MarketInfo(symb,MODE_POINT);
   ask=MarketInfo(symb, MODE_ASK);
   bid=MarketInfo(symb, MODE_BID);
   digit=(int)MarketInfo(symb,MODE_DIGITS);
   lotsize=MarketInfo(symb,MODE_LOTSIZE);
   exchrate=AccountExchangeRate(symb);
//TickValue=MarketInfo(symb,MODE_TICKVALUE);
   TickValue=((lotsize*(bid+point_))-(lotsize*bid))/exchrate;
// Расчеты
   if(LotB>0 && type==OP_BUY)
     {
      ResBr=ask-ProB/(TickValue*LotB)*point_;
      return NormalizeDouble(ResBr,digit);
     }
   if(LotS>0 && type==OP_SELL)
     {
      ResBr=bid+ProS/(TickValue*LotS)*point_;
      return NormalizeDouble(ResBr,digit);
     }
   if(LotB-LotS!=0 && type==-1)
     {
      double AskBidPrice=0.0;
      if(LotB>0)AskBidPrice=ask;else if(LotS>0)AskBidPrice=bid;else if(LotB>0 && LotS>0)AskBidPrice=(ask+bid)/2.0;
      ResBr=AskBidPrice-(ProB+ProS)/(TickValue*(LotB-LotS))*point_;
      return NormalizeDouble(ResBr,digit) ;
     }
   return 0;
  }
//===============================================================================================
//------------------------ Возвращает сумму лотов открытых позиций -----------------------------+
//===============================================================================================
double AmountLotFromOpenPos(string symb="",int type=-1,int mg=-1)
  {
   double lot=0.0;
   if(symb=="") {symb=_Symbol;}
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==symb || symb=="") && (type<0 || OrderType()==type) && (mg<0 || OrderMagicNumber()==mg))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               lot+=OrderLots();
              }
           }
        }
     }
   return lot;
  }
//===============================================================================================
//------------- Возвращает суммарный профит открытых позиций в валюте депозита -----------------+
//===============================================================================================
double ProfitOpenPosInCurrency(string symb="",int type=-1,int mg=-1)
  {
   double profit=0.0;
   if(symb=="") {symb=_Symbol;}
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()==OP_BUY || OrderType()==OP_SELL)
           {
            if((OrderSymbol()==symb || symb=="") && (type<0 || OrderType()==type) && (mg<0 || OrderMagicNumber()==mg))
              {
               profit+=OrderProfit()+OrderSwap()+OrderCommission();
              }
           }
        }
     }
   return profit;
  }
//+------------------------------------------------------------------+
//| AccountExchangeRate = AccountCurrency / QuotedCurrency           |
//+------------------------------------------------------------------+
double AccountExchangeRate(string symbol)
  {
   string accCurrency=AccountCurrency();
   string baseCurrency=StringSubstr(symbol,0,3);
   string quotedCurrency=StringSubstr(symbol,3,3);

   if(accCurrency==quotedCurrency)
      return 1;
   else if(accCurrency==baseCurrency)
      return MarketInfo(symbol,MODE_BID);
   else
     {
      string pair=StringConcatenate(accCurrency,quotedCurrency);
      double rate=MarketInfo(pair,MODE_BID);

      int LastError=_LastError;
      if(LastError==4106)
        {
         pair=StringConcatenate(quotedCurrency,accCurrency);
         rate=MarketInfo(pair,MODE_BID);
         LastError=_LastError;
         if(LastError==0)
           {
            rate=1/rate;
            return rate;
           }
         else
            return 1;
        }
      else if(LastError!=0)
        {
         return 1;
        }
     }
   return 1;
  }
//+------------------------------------------------------------------+
 
lilita bogachkova:

Не претендую на 100% правильный код, но так ваш код правильнее (Для тестера стратегий 100%):

Мой изначально выложенный код работает в сове, и отрабатывает правильно, даже если по позициям набежал своп  и прочие издержки.
Причина обращения: