[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 292

 

Здравствуйте.

Помогите разобраться плз, что я не так делаю.

Условно: Ask = 1.3000

              PriceAsk = 1.3055 (в т.ч. где Step=50 и Srpead=3)

bool BuyOrder=1,

if (Ask-PriceAsk+Step-Spread<=0 && BuyOrder==0) почему это условие считается истинным??
 
ed3sss:

Непосредственно перед оператором if выведите в лог значения всех переменных присутствующих в условии

Print("Ask:",Ask," PriceAsk:",PriceAsk," Step:",Step," Srpead:",Srpead," BuyOrder:",BuyOrder);
Наверняка некоторые значения перемененных будут не такими как вы себе представляли.
 
Здравствуйте, у меня в терминале мт4 когда нажимаю   на кнопку  одной из валютных пар , которая находится сразу под  терминалом например  (eurusd) , чтобы открыть окно терминала именно с этой парой , при открытии  окно сворачивается в маленькое , и нужно его  разворачевать  в правом верхнем углу , раньше такого не было , подскажите  почему так  получается и как  исправить ?
 
GaryKa:

Непосредственно перед оператором if выведите в лог значения всех переменных присутствующих в условии

Print("Ask:",Ask," PriceAsk:",PriceAsk," Step:",Step," Srpead:",Srpead," BuyOrder:",BuyOrder);
Наверняка некоторые значения перемененных будут не такими как вы себе представляли.

Проверимс, спасибо)
 
to hoz Сначала чуток теории


А теперь вывод

hoz:
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|        Функция, определения минимальной разрядности лота                          |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int LotDecimal()
{return (MathCeil (MathAbs (MathLog (bd_LOTSTEP) / MathLog (10))));}
Хочу понять как она работает. Потому и спросил.
Подчеркнутое выражение возвращает десятичный логарифм (логарифм по основанию 10) для bd_LOTSTEP, тоесть показывает в какую степень надо возвести 10 чтобы получить bd_LOTSTEP.
 

GaryKa:

Непосредственно перед оператором if выведите в лог значения всех переменных присутствующих в условии

Print("Ask:",Ask," PriceAsk:",PriceAsk," Step:",Step," Srpead:",Srpead," BuyOrder:",BuyOrder);
Наверняка некоторые значения перемененных будут не такими как вы себе представляли.


ed3sss:


Проверимс, спасибо)

Спасибки, нашел логическую ошибку в программе, теперь все работает.
 

Здравствуйте.

Как можно вывести на графике надпись по текущему инструменту Прибыль/убыток открытых ордеров.

Сложно осуществлять проверку в эксперте, открывал ли он позиции или нет (включение/выключение терминала) и чтобы подхватывал последний объем лота до закрытия терминала.

Спасибо.

 
hoz:

Просто мне тут попалась функция:

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|        Функция, определения минимальной разрядности лота                          |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int LotDecimal()
{return (MathCeil (MathAbs (MathLog (bd_LOTSTEP) / MathLog (10))));}
Хочу понять как она работает. Потому и спросил.

Если ошибаюсь, то извиняюсь. MathLog(x) - это ln(x) (натуральный логарифм). Формула перевода на другое основание - log_a(b)=ln(b)/ln(a), в данном случае получаем ln(x)/ln(10)=lg(x) (десятичный логарифм). Целая часть десятичного логарифма lg(1...9) равна 0, lg(10...99) равна 1, lg(100...999) равна 2, lg(1000...9999) равна 3 и так далее, т.е. значение логарифма числа больше единицы равно количеству цифр в этом числе (до запятой, после не считаем) минус один. Если икс от 0 до единицы, то целая часть lg(0,1...0,9) равна -1, lg(0,01...0,09) равна -2, lg(0,001...0,009) равна -3 и так далее, то есть если не смотреть на минус, десятичный логарифм числа от 0 до единицы равен общему количеству нулей до первой значащей цифры. Я не знаю, как работает MathCeil, но если она возвращает целую часть числа, то эта функция по идее возвращает количество цифр в числе до запятой минус один, если число больше 1, и количество нулей в числе до первой значащей цифры, если число от 0 до единицы. Минимум этой функции находится в диапазоне икс равным 1...9. Дальше при 10...99 и 0,1...0,9 функция равна 1, при 100...999 и 0,01...0,09 равна 2 и так далее. По идее...
 

День добрый, косяк какой-то в программе, голову сломал уже, ткните пожста пальцем что не так. Просто хочу знать почему не работает условие для modifi. Даже если условие не истино, все равно оно выполняется и соответственно при модификации выскакивают ошибки либо 1, либо 130. Всем спасибо.

//---------------модификация ордеров под TP-------------------
     for (i = OrdersTotal() - 1; i >= 0; i--) {
        OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
        if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {
            if (OrderType() == OP_BUY) { 
              if  (OrderTakeProfit() == 0 || OrderTakeProfit() > OprTPB(TP)){
               RefreshRates();
               OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OprTPB(TP),0,CLR_NONE);
              }
            }  
            if ((OrderType() == OP_SELL)) { 
              if  (OrderTakeProfit() == 0 || OrderTakeProfit() < OprTPS(TP)){
               RefreshRates();
               OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OprTPS(TP),0,CLR_NONE); 
              }
            }  
        }    
     }
   return(0);
}

double LastOpPrBuy(double va=0)
{
   for (i = OrdersTotal() - 1; i>= 0; i--)
   {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if (va == 0) va = OrderOpenPrice();
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
         if (OrderType() == OP_BUY && OrderOpenPrice()<va) va = OrderOpenPrice();
   }
   return (va);
}
//----------------------------------------------------------------------------------
double LastOpPrSell(double va=0)
{
   for (i = OrdersTotal() - 1; i>= 0; i--)
   {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if (va == 0) va = OrderOpenPrice();
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
         if (OrderType() == OP_SELL && OrderOpenPrice()>va) va = OrderOpenPrice();
   }
   return (va);
}
//----------------------------------------------------------------------------------
double OprTPB(int TP)
{
   int j=0;
   double TPB=0;
   for (i = OrdersTotal() - 1; i>= 0; i--)
   {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
         if (OrderType() == OP_BUY)
         {
            TPB+=OrderOpenPrice();
            j++;
         }
   }
   if (j==0) {
      j++;
      TPB = Ask;
   }
   TPB=(TPB/j)+TP*Point;
   return (TPB);
}
//----------------------------------------------------------------------------------
double OprTPS(int TP)
{
   int j=0;
   double TPS=0;
   for (i = OrdersTotal() - 1; i>= 0; i--)
   {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
         if (OrderType() == OP_SELL)
         {
            TPS+=OrderOpenPrice();
            j++;
         }
   }
   if (j==0) {
      j++;
      TPS = Bid;
   }
   TPS=(TPS/j)-TP*Point;
   return (TPS);
}
//----------------------------

 
borilunad:
Да все мы тут новички! Не видите, что простых вещей не знаем! Где нам ещё выяснять! По крайней мере, мы хотим знать, не то, что как некоторые думают, что только спросят, чтобы вставить в код и сразу деньги качать!


))) Из трейдерского юмора:

- Подскажите где прибыльный советник скачать! 

- Поищи где-то выше в теме, там выкладывали робота, называется @MOZG@v4.12.

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