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

 
FEEX #:

а как убрать "минус"? не может лот быть отрицательным))

нужно чтобы независимо от sell или buy рисовало  All volume trade now = 0.23.

В отпечатке используйте MathAbs()

 
Yevhenii Levchenko #:

В отпечатке используйте MathAbs()

Вы меня решили добить?)))))) Я уже не понимаю что значит "отпечаток", а там еще и  MathAbs()...

 
FEEX #:

Вы меня решили добить?)))))) Я уже не понимаю что значит "отпечаток", а там еще и  MathAbs()...

Там где выводит информацию заместо lots используйте MathAbs(lots)

 
Yevhenii Levchenko #:
MathAbs(lots)

Работает!!!)) Вроде всё) Спасибо))

 
Yevhenii Levchenko #:


Еще нашел один нюанс: если нет открытых ордеров, то цена StopOut показывает текущую цену! Это нонсенс.


Я ранее писал, если нет открытых ордеров, нужно чтобы цена StopOut была 0.00000 - это логично)

//-------------- расчет цены Stop Out, линия уровня SO ----------------+

double price = lots > 0 ? Bid - u_shift_3 * _Point : Ask + u_shift_3 * _Point;

   if(price!=0) {
      if(ObjectFind("SO_Line")==-1) {
         ObjectCreate(0,"SO_Line",OBJ_HLINE,0,0,price);
         ObjectSetInteger(0,"SO_Line",OBJPROP_COLOR,Red);
         ObjectSetInteger(0,"SO_Line",OBJPROP_STYLE,0);
         ObjectSetInteger(0,"SO_Line",OBJPROP_WIDTH,2);
         ObjectSetInteger(0,"SO_Line",OBJPROP_BACK,true);
      } else
         ObjectMove(0,"SO_Line",0,0,price);
   }

А вообще можно как-то уйти от переменной price, которая по умолчанию является переменной текущей цены, и для цены SO использовать отдельную переменную, например so_price?
Просто если мне понадобится на график вывести текущую цену, a price уже выводит цену SO, то как тогда выводить текущую цену?))

 
FEEX #:

Пробуйте! У вас все получится :)

 
Yevhenii Levchenko #:

Пробуйте! У вас все получится :)

я пробовал))) вроде логически должно работать:

double so_price=0;
 if ( lots > 0) // lots — сумма всех лотов сетки
    { 
      if (GetLot(0))
        {
          so_price = Bid - u_shift_3 * _Point;
        } 
      if (GetLot(1))
        { 
          so_price = Ask + u_shift_3 * _Point;
        }
    }
 else so_price = 0.0;

   if(so_price!=0) {
      if(ObjectFind("SO_Line")==-1) {
         ObjectCreate(0,"SO_Line",OBJ_HLINE,0,0,so_price);
         ObjectSetInteger(0,"SO_Line",OBJPROP_COLOR,Red);
         ObjectSetInteger(0,"SO_Line",OBJPROP_STYLE,0);
         ObjectSetInteger(0,"SO_Line",OBJPROP_WIDTH,2);
         ObjectSetInteger(0,"SO_Line",OBJPROP_BACK,true);
      } else
         ObjectMove(0,"SO_Line",0,0,so_price);
   }  

но - нет)) всё время показывает  StopOut price = 0.00000, есть открытые ордера, нет - всё время 0.00000...


double price = lots > 0 ? Bid - u_shift_3 * _Point : Ask + u_shift_3 * _Point;

я не знаю что означает "?" и ":" в этой строке... поэтому не понимаю что там происходит..

 
FEEX #:
double price = lots > 0 ? Bid - u_shift_3 * _Point : lots < 0 ? Ask + u_shift_3 * _Point : 0;

Попробуйте это....

FEEX #:

я не знаю что означает "?" и ":" в этой строке... поэтому не понимаю что там происходит..

Это тернарный оператор

 
Yevhenii Levchenko #:

Попробуйте это....

Это тернарный оператор

Первый раз это слово вообще вижу))) новая строка работает правильно))
Можно еще один момент, пока Вы меня не послали?...

Расчет кол-ва пунктов до SO

//-------------------  расчет пунктов до Stop Out -----------------+
   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 );
   } 
   u_shift_3 = MathAbs(u_shift_3);
---------------
...
"\n StopOut pips = ",DoubleToString(u_shift_3*_Point,Digits),
...

Этот показатель выводится в формате: 0.02347
Можно как-то сделать, чтобы выводилось 2347? Т.е. без 0.00..

 
FEEX #:

Первый раз это слово вообще вижу))) новая строка работает правильно))
Можно еще один момент, пока Вы меня не послали?...

Расчет кол-ва пунктов до SO

Этот показатель выводится в формате: 0.02347
Можно как-то сделать, чтобы выводилось 2347? Т.е. без 0.00..

"\n StopOut pips = ",DoubleToString(u_shift_3,Digits),

Это попробуйте