Помогите с расчётом ТР

 

Всем привет! Суть системы, мартин открывает серию сделок например на бай и сова пересчитывает с каждой новой открытой сделкой ТР. Вот тут у меня и загвоздка, на тестере сова считает всё правильно, а вот на реальном рынке (демо счёт) проблема то +6 пунктов то +8. А мне надо, чтоб в ноль закрывал. Помогите чем можете, может где-то ошибка в расчётах. Вот расчёт:

 

LastOrder = 0;
  
   Result=OrderSelect(OrdersTotal()-1,SELECT_BY_POS);
      if(OrderMagicNumber() == Magic && OrderSymbol() ==Symbol())
      if(OrderType() == OP_BUY)
         {
            LastOrder = OrderOpenPrice(); // цена открытия последнего открытого ордера в серии
         }
  
  double PointValue=MarketInfo(Symbol(),MODE_TICKVALUE)*(MarketInfo(Symbol(),MODE_POINT)/MarketInfo(Symbol(),MODE_TICKSIZE)); // стоимость пункта
  
  LotSum = 0; TotalDrawdown = 0; Zeroo = 0; PunktZero = 0; SredTPBuy = 0;
  for(t=0; t<OrdersTotal(); t++)
    if(OrderSelect(t,SELECT_BY_POS))
    if(OrderMagicNumber() == Magic && OrderSymbol() ==Symbol())
    if(OrderType() == OP_BUY)
    {
       TotalDrawdown+=(((OrderOpenPrice()-LastOrder)*OrderLots())*PointValue); // считаем общую просадку
       LotSum+=OrderLots(); // складываем все объемы ордеров в серии
    }
      
       Zeroo = NormalizeDouble((TotalDrawdown/(LotSum*PointValue))*10000*Point, Digits); // Значение - Сколько пунктов надо пройти цене чтоб выйти в ноль
       SredTPBuy = LastOrder+Zeroo; // количество пунктов до закрытия серии в 0 прибавляем к цене открытия последнего ордера в серии.
 
ну для начала найдите действительно последний ордер и получите подтверждение что он последний, далее расчёт средневзвешенного тп немного странный
 
Artem Onopin:

Всем привет! Суть системы, мартин открывает серию сделок например на бай и сова пересчитывает с каждой новой открытой сделкой ТР. Вот тут у меня и загвоздка, на тестере сова считает всё правильно, а вот на реальном рынке (демо счёт) проблема то +6 пунктов то +8. А мне надо, чтоб в ноль закрывал. Помогите чем можете, может где-то ошибка в расчётах. Вот расчёт:


В тестере фикс.спред, в реальном рынка плавающий, поэтому косячит 

Вот считает верно, надеюсь разберётесь

BuyAwerage= ND(dBid()-(_BuyProfit/(TickValue*_BuyLot))*_Point,_Digits);
SellAwerage=ND(dAsk()+(_SellProfit/(TickValue*_SellLot))*_Point,_Digits);


 

 
Vitaly Muzichenko:

В тестере фикс.спред, в реальном рынка плавающий, поэтому косячит 

Вот считает верно, надеюсь разберётесь

BuyAwerage= ND(dBid()-(_BuyProfit/(TickValue*_BuyLot))*_Point,_Digits);
SellAwerage=ND(dAsk()+(_SellProfit/(TickValue*_SellLot))*_Point,_Digits);


 

Если можно поясните)) Немного не доходит до меня ваша формула))
 
Aleksey Semenov:
ну для начала найдите действительно последний ордер и получите подтверждение что он последний, далее расчёт средневзвешенного тп немного странный
Теоретически, я тоже могу много чего написать, конкретно, приведите примеры кода действительно последнего ордера и не странного расчёта тп
 
Artem Onopin:
Если можно поясните)) Немного не доходит до меня ваша формула)) 
// ND = NormalizeDouble
double TickValue=MarketInfo(dSymbol,MODE_TICKVALUE);

_BuyLot // совокупный лот по всем Buy
_BuyProfit // совокупный профит  по всем Buy
  BuyAwerage= ND(dBid()-(_BuyProfit/(TickValue*_BuyLot))*_Point,_Digits);

_SellLot //совокупный лот по всем Sell
_SellProfit // совокупный профит  по всем Sell
  SellAwerage=ND(dAsk()+(_SellProfit/(TickValue*_SellLot))*_Point,_Digits);
 
Artem Onopin:
Теоретически, я тоже могу много чего написать, конкретно, приведите примеры кода действительно последнего ордера и не странного расчёта тп
int oldticket=0;
int Ticket=0;                
oldticket = OrderTicket();
if (oldticket > Ticket){
Ticket = oldticket;}

 решение как найти самый последний по тикету ордер в серии

Расчёт бу - считаем: (сумма всех (объёмов*цену открытия)) / (сумма всех объёмов) = средневзвешенная цена открытия всей серии ордеров - тобишь цена безубытка

 
Aleksey Semenov:
int oldticket=0;
int Ticket=0;                
oldticket = OrderTicket();
if (oldticket > Ticket){
Ticket = oldticket;}

 решение как найти самый последний по тикету ордер в серии

Расчёт бу - считаем: (сумма всех (объёмов*цену открытия)) / (сумма всех объёмов) = средневзвешенная цена открытия всей серии ордеров - тобишь цена безубытка

Вот спасибо, теперь есть над чем подумать)))
 
Vitaly Muzichenko:
// ND = NormalizeDouble
double TickValue=MarketInfo(dSymbol,MODE_TICKVALUE);

_BuyLot // совокупный лот по всем Buy
_BuyProfit // совокупный профит  по всем Buy
  BuyAwerage= ND(dBid()-(_BuyProfit/(TickValue*_BuyLot))*_Point,_Digits);

_SellLot //совокупный лот по всем Sell
_SellProfit // совокупный профит  по всем Sell
  SellAwerage=ND(dAsk()+(_SellProfit/(TickValue*_SellLot))*_Point,_Digits);
Спасибо))
 
Давайте забудем про последний ордер, вся суть моего расчёта именно работа с ценами открытия ведь на них уже не влияет спред, он уже заложен в цену открытия. Мой расчёт основан именно на ценах открытия последний ордер теоритически с прибылью 0 от него только я беру цену открытия и лот. Цель данного расчёта закрытие серии сдлеок в 0 по уже заранее рассчитанному и выставленному ТП. Повторюсь, что в тестере всё работает прекрасно, а вот на демо косячит закрывает на 6 -8 пунктов раньше, тоесть если взять серию на Бай закрывает на 6-8 пунктов в минус. Функция OrderProfit() для моего расчёта не походит. Может есть у кого ещё идей? 
 
Artem Onopin:
Давайте забудем про последний ордер, вся суть моего расчёта именно работа с ценами открытия ведь на них уже не влияет спред, он уже заложен в цену открытия. Мой расчёт основан именно на ценах открытия последний ордер теоритически с прибылью 0 от него только я беру цену открытия и лот. Цель данного расчёта закрытие серии сдлеок в 0 по уже заранее рассчитанному и выставленному ТП. Повторюсь, что в тестере всё работает прекрасно, а вот на демо косячит закрывает на 6 -8 пунктов раньше, тоесть если взять серию на Бай закрывает на 6-8 пунктов в минус. Функция OrderProfit() для моего расчёта не походит. Может есть у кого ещё идей? 
Изначально ложное и вредное для капитала представление, видимо ещё ни разу сделки не открывали. Или у вас спред = 0?
Причина обращения: