Расчет цены символа, при которой произойдет стоп аут - страница 2

 

Ihor Herasko #:

(FreeMargin - SOLevel * Margin) / (TickValue * Lots * TickSize / Point)

Вроде бы так:

   double soLevel = AccountMargin() * AccountStopoutLevel();
   if(AccountStopoutMode() == 1){
      soLevel = AccountStopoutLevel();
   }
   d_shift_3 = (AccountEquity() - soLevel) / (MarketInfo(Symbol(), MODE_TICKVALUE) * lots * MarketInfo(Symbol(),MODE_TICKSIZE) / _Point );
 
Yevhenii Levchenko #:
double soLevel = AccountMargin() * AccountStopoutLevel(); if(AccountStopoutMode() == 1){ soLevel = AccountStopoutLevel(); } d_shift_3 = (AccountEquity() - soLevel) / (MarketInfo(Symbol(), MODE_TICKVALUE) * lots * MarketInfo(Symbol(),MODE_TICKSIZE) / _Point );

выдало ошибку деления на ноль.
сделал проверку на lots

double soLevel = AccountMargin() * AccountStopoutLevel();
  if ( lots > 0)
  {
   if(AccountStopoutMode() == 1) {
      soLevel = AccountStopoutLevel();
   }
   d_shift_3 = (AccountEquity() - soLevel) / (MarketInfo(Symbol(), MODE_TICKVALUE) * lots * MarketInfo(Symbol(),MODE_TICKSIZE) / _Point );
   }                     
  else u_shift_3 = 0.0;

ошибка пропала, но вывод на график цены SO нулевой при открытых ордерах.


Нулевой он должен быть только при отсутствии открытых ордеров.

 
FEEX #:

ошибка пропала, но вывод на график цены SO нулевой при открытых ордерах.

Давайте полный код разбирать. А то так наугад только...

 
у вас 
d_shift_3 = (AccountEquity() - soLevel) / (MarketInfo(Symbol(), MODE_TICKVALUE) * lots * MarketInfo(Symbol(),MODE_TICKSIZE) / _Point );

я заменил на 

u_shift_3

но теперь цена SO вообще постоянно плавает и непонятная


 
Yevhenii Levchenko #:

Давайте полный код разбирать. А то так наугад только...

а сюда влезет весь код или можно файл загрузить mq4 ?

 

Нашел как файл прикрепить)

Оставил всё как есть с учетом последних изменений. Ваш код с 508 строки.

Файлы:
ZolotoAM2.mq4  38 kb
 

Там функция getLot возвращала ноль скорее всего (из-за магика скорее всего). Потому всегда объем был равен нулю.

Число u_shift_3 - это количество пунктов, которое может пройти цена до стопаута. То есть нужно добавить/отнять это число, умноженное на _Point, и результат будет показывать необходимый уровень цены, на котором будет стоп аут. Например, если сделки по символу у нас на продажу, то это будет double soPrice =  Ask + u_shift_3 * _Point;

Файлы:
ZolotoAM2.mq4  35 kb
 
Yevhenii Levchenko #:

Там функция getLot возвращала ноль скорее всего (из-за магика скорее всего). Потому всегда объем был равен нулю.

Число u_shift_3 - это количество пунктов, которое может пройти цена до стопаута. То есть нужно добавить/отнять это число, умноженное на _Point, и результат будет показывать необходимый уровень цены, на котором будет стоп аут. Например, если сделки по символу у нас на продажу, то это будет double soPrice =  Ask + u_shift_3 * _Point;

1 - это кол-во пунктов до стопаута? Если да, то мне это не нужно)

2- а это что?))

И мы делаем не то, что нужно.
Мне нужна ТОЛЬКО цена стоп аута. Которая будет меняться с каждым новым открытым ордером. Больше ничего)))
Если открытых ордеров нет, то StopOut price = 0.00000
Если открытые ордера есть, хоть один, то  StopOut price = цене, на которой произойдет стопаут, и будет менятся с каждым открытым новым ордером. И если строим сетку селл, и цена идет против нас, что цена стопаута будет выше текущей цены, если сетка бай и цена против нас, то цена стопаута будет ниже текущей цены. Остается вычислить только точный уровень этой цены) по задумке за цену SO отвечает параметр u_shift_3, так же на его показаниях рисуется линия SO. Это всё, что мне нужно)))

еще не понял что с magic не так.. его можно менять или нет? Вы там поставили -1.

 
FEEX #:

2- а это что?))

Стредства ниже которых будет SO_SO

FEEX #:

Мне нужна ТОЛЬКО цена стоп аута. Которая будет меняться с каждым новым открытым ордером. Больше ничего)))

Так я же описал как ее получить:

Yevhenii Levchenko #:

Число u_shift_3 - это количество пунктов, которое может пройти цена до стопаута. То есть нужно добавить/отнять это число, умноженное на _Point, и результат будет показывать необходимый уровень цены, на котором будет стоп аут. Например, если сделки по символу у нас на продажу, то это будет double soPrice =  Ask + u_shift_3 * _Point;

 
Yevhenii Levchenko #:

Стредства ниже которых будет SO_SO

Так я же описал как ее получить:

double soPrice =  Ask + u_shift_3 * _Point;  - не могу сообразить куда это запихать... 


И, как я понял. если сделки на покупку, то :

double soPrice =  Bid - u_shift_3 * _Point; ?

с какими условия нужно эти две строки обыграть - не могу сообразить((((

--------------

вот у нас есть кол-во пунктов до слива: 

double  u_shift_3=0;

   double soLevel = AccountMargin() * AccountStopoutLevel() / 100;

   if(AccountStopoutMode() == 1) {

      soLevel = AccountStopoutLevel();

   }

   if ( lots > 0) {

      u_shift_3 = (AccountEquity() - soLevel) / (MarketInfo(Symbol(), MODE_TICKVALUE) * lots * MarketInfo(Symbol(),MODE_TICKSIZE) / _Point );

   } else u_shift_3 = 0.0;

как в этому привязать эти две стоки чтобы переменная soPrice  в итоге вывела цену SO на график?

double soPrice =  Ask + u_shift_3 * _Point;

double soPrice =  Bid - u_shift_3 * _Point;


" Стредства ниже которых будет SO_SO" - там наоборот всё получается, средства растут при приближении к стоп ауту.


Не могли бы Вы убрать эти средства вообще, они не нужны. Кол-во пунктов можно оставить. Пожалуйта, сделайте в советнике так, чтобы на график выводилась ЦЕНА стопаута. У меня уже третьи сутки пухнет мозг...

Причина обращения: