Как расчитать SL и TP от валюты депозита по позиции?

 

Доброе время суток дорогие форумчане - подскажите пожалуйста по вот какой теме:

Есть открытая позиция по какому то инструменту, мне нужно рассчитать для нее TP и SL

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

Допустим у меня депозит 1000$

Я открыл какую то позицию и мне нужно установить SL и TP так что бы SL привел к потери 50$ а TP к 100$ условно. (то есть отталкиваюсь от того сколько я хочу потерять/заработать)

Я долго гуглил и пришел к мнению что нужно получить стоимость одного лота

//Получить стоимость одного пункта в валюте депозита
price_lots = OrderLots() * MarketInfo(OrderSymbol(),MODE_TICKVALUE) / ( MarketInfo(OrderSymbol(),MODE_TICKSIZE) / MarketInfo(OrderSymbol(),MODE_POINT));

А как быть дальше? - может кто ни буть нужные формулы подкинуть?  я просто тупо не знаю как подсчитать это все дело.

 
0x41:

Доброе время суток дорогие форумчане - подскажите пожалуйста по вот какой теме:

Есть открытая позиция по какому то инструменту, мне нужно рассчитать для нее TP и SL

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

Допустим у меня депозит 1000$

Я открыл какую то позицию и мне нужно установить SL и TP так что бы SL привел к потери 50$ а TP к 100$ условно. (то есть отталкиваюсь от того сколько я хочу потерять/заработать)

Я долго гуглил и пришел к мнению что нужно получить стоимость одного лота

А как быть дальше? - может кто ни буть нужные формулы подкинуть?  я просто тупо не знаю как подсчитать это все дело.

Просто надо понять разницу между стоимостью лота и стоимостью пункта. Тогда всё получится.

К примеру: стоимость одного пункта = 1$ тогда получается, что если цена пройдёт 50 пунктов, вы потеряете 50$

 
Я вот щас подумал - а как быть с кредитными плечами?
 
0x41:
Я вот щас подумал - а как быть с кредитными плечами?

Никак, они не влияют на прибыль и убыток.

 

Блин у меня тупняк

//Получить стоимость одного пункта в валюте депозита
         price_lots = OrderLots() * MarketInfo(OrderSymbol(),MODE_TICKVALUE) / ( MarketInfo(OrderSymbol(),MODE_TICKSIZE) / MarketInfo(OrderSymbol(),MODE_POINT));
//Вот тут я узнал сколько пунктов должна пройти цена что бы мой убыток составил 100$ 
stop_loss = 100 / price_lots;

Что мне нужно сделать со stop_loss что бы отправить ее в OrderModify - потмоу что OrderModify stop_loss ждет явно не в пунктах?

 
0x41:

Доброе время суток дорогие форумчане - подскажите пожалуйста по вот какой теме:

Есть открытая позиция по какому то инструменту, мне нужно рассчитать для нее TP и SL

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

Допустим у меня депозит 1000$

Я открыл какую то позицию и мне нужно установить SL и TP так что бы SL привел к потери 50$ а TP к 100$ условно. (то есть отталкиваюсь от того сколько я хочу потерять/заработать)

Я долго гуглил и пришел к мнению что нужно получить стоимость одного лота

А как быть дальше? - может кто ни буть нужные формулы подкинуть?  я просто тупо не знаю как подсчитать это все дело.

 Есть функция расчета лота от стоплосса, может лучше ее использовать при открытии?

//+------------------------------------------------------------------+
//| Расчет лота в процентах, от размера стоплосса                    |
//| MaxRisk = 5; % от свободных средств, StopLoss = 100; пункты      |
//+------------------------------------------------------------------+
double LotsOptimized()
{
       double Lot; 
       double TicVal  =MarketInfo(_Symbol,MODE_TICKVALUE); // стоимость 1 пункта 1 лота
       double Step    =MarketInfo(_Symbol,MODE_LOTSTEP);   // шаг лота
       double Marg    =AccountFreeMargin();                // свободные средства 
       double Min_Lot =MarketInfo(_Symbol,MODE_MINLOT);    // минимальный лот
       double Max_Lot =MarketInfo(_Symbol,MODE_MAXLOT);    // максимальный лот
       if(Max_Lot > 201) Max_Lot = 200; else Max_Lot = Max_Lot; 
       //проверим средства, если есть средства, то расcчитаем лот процентный в соотношении стоплосса
       if(Marg>TicVal*2) Lot=MathFloor((Marg*MaxRisk/100)/(StopLoss*TicVal)/Step)*Step; else Lot=Min_Lot;
       //нормализуем лот, согласно шага лота  
       Lot=Step*NormalizeDouble(Lot/Step,0);
       if(Lot<Min_Lot)  Lot=Min_Lot; 
       if(Lot>Max_Lot)  Lot=Max_Lot;   
return(Lot);}    


 

 

Да не в том то и дело что не проще но спасибо за код.

В итоге методом тыка получилось что то такое

//Получить стоимость одного пункта в валюте депозита
         price_lots = OrderLots() * MarketInfo(OrderSymbol(),MODE_TICKVALUE) / ( MarketInfo(OrderSymbol(),MODE_TICKSIZE) / MarketInfo(OrderSymbol(),MODE_POINT));
         //баксы делим на стоимость одного пункта получаем пукты которые можем просрать
         open_price = OrderOpenPrice();
         take_profit = NormalizeDouble(((100 / price_lots)*0.0001)+OrderOpenPrice(),4);

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