Всем привет! Суть системы, мартин открывает серию сделок например на бай и сова пересчитывает с каждой новой открытой сделкой ТР. Вот тут у меня и загвоздка, на тестере сова считает всё правильно, а вот на реальном рынке (демо счёт) проблема то +6 пунктов то +8. А мне надо, чтоб в ноль закрывал. Помогите чем можете, может где-то ошибка в расчётах. Вот расчёт:
В тестере фикс.спред, в реальном рынка плавающий, поэтому косячит
Вот считает верно, надеюсь разберётесь
SellAwerage=ND(dAsk()+(_SellProfit/(TickValue*_SellLot))*_Point,_Digits);
В тестере фикс.спред, в реальном рынка плавающий, поэтому косячит
Вот считает верно, надеюсь разберётесь
SellAwerage=ND(dAsk()+(_SellProfit/(TickValue*_SellLot))*_Point,_Digits);
ну для начала найдите действительно последний ордер и получите подтверждение что он последний, далее расчёт средневзвешенного тп немного странный
Если можно поясните)) Немного не доходит до меня ваша формула))
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);
Теоретически, я тоже могу много чего написать, конкретно, приведите примеры кода действительно последнего ордера и не странного расчёта тп
int Ticket=0;
oldticket = OrderTicket();
if (oldticket > Ticket){
Ticket = oldticket;}
решение как найти самый последний по тикету ордер в серии
Расчёт бу - считаем: (сумма всех (объёмов*цену открытия)) / (сумма всех объёмов) = средневзвешенная цена открытия всей серии ордеров - тобишь цена безубытка
int Ticket=0;
oldticket = OrderTicket();
if (oldticket > Ticket){
Ticket = oldticket;}
решение как найти самый последний по тикету ордер в серии
Расчёт бу - считаем: (сумма всех (объёмов*цену открытия)) / (сумма всех объёмов) = средневзвешенная цена открытия всей серии ордеров - тобишь цена безубытка
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() для моего расчёта не походит. Может есть у кого ещё идей?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет! Суть системы, мартин открывает серию сделок например на бай и сова пересчитывает с каждой новой открытой сделкой ТР. Вот тут у меня и загвоздка, на тестере сова считает всё правильно, а вот на реальном рынке (демо счёт) проблема то +6 пунктов то +8. А мне надо, чтоб в ноль закрывал. Помогите чем можете, может где-то ошибка в расчётах. Вот расчёт:
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 прибавляем к цене открытия последнего ордера в серии.