Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 239

 
Antonius:


В чем проблема, работает.

 
r772ra:


В чем проблема, работает.


Ошибка и правда оказалась не в коде, нужно было просто модель тестирования поставить "Все тики", вместо "По ценам открытия". Долго так, конечно, тестировать.

Спасибо больше за помощь! Извините, что отнял время такой глупостью)

 
Antonius:


Ошибка и правда оказалась не в коде, нужно было просто модель тестирования поставить "Все тики", вместо "По ценам открытия". Долго так, конечно, тестировать.

Спасибо больше за помощь! Извините, что отнял время такой глупостью)

Чтобы тестировать по ценам открытия, замените 0 на 1 в строках проверки направления свечи. Правда он тогда будет по первому бару смотреть направление. Когда стоит 0, у вас цены открытия и закрытия просто равны.
 

Подскажите как научить эксперта правильно вытягивать данные:

Прошу его найти значение последней цены. Он находит, но выдает с четырьмя знаками после запятой, пятый округляет. Для корректной роботы необходимо учитывать и пятый символ.

Так же, немножечко, но округляет и среднюю цену. А так же, приводит среднюю цену так же к четвертому символу.

С калькулятором у меня получаются другие числа.

NormalizeDouble() побывал применять однако результатов пока не получил.

int Oldticketnumber;
double Unused = 0;
int Ticketnumber = 0;
RefreshRates();
for(int cnt = OrdersTotal()-1; cnt >= 0; cnt --)               //Для всехоткрытых ордеров
 {
  if (OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))  // Выбираем со всего масива ордеров
  if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)//Выбирам ордера експерта
   {
   if(OrderType()==OP_BUY)                                              
    {

     BuyAP += OrderOpenPrice()*OrderLots();          // Средневзвешаная цена всех позиций  
  
     Oldticketnumber = OrderTicket();                               // присваиваем тикеты
     if (Oldticketnumber > Ticketnumber)                         //  ищем последний тикет 
      {
      LastPrise = OrderOpenPrice();                         // присваиваем последнюю цену
      Unused = LastPrise;                                       // задаем цену переменной
      Ticketnumber = Oldticketnumber;                          // последный заданый тикет
      }
// далее по  тексту---------------------------------------------------------------------

if (BuyLots != 0)       // Если есть ордера BUY, то вычисляется их средняя цена открытия
    BuyAP /= BuyLots;      

 
Limita:

Подскажите как научить эксперта правильно вытягивать данные:

Прошу его найти значение последней цены. Он находит, но выдает с четырьмя знаками после запятой, пятый округляет. Для корректной роботы необходимо учитывать и пятый символ.

Так же, немножечко, но округляет и среднюю цену. А так же, приводит среднюю цену так же к четвертому символу.

С калькулятором у меня получаются другие числа.

NormalizeDouble() побывал применять однако результатов пока не получил.

Где вы это всё видите?
 
artmedia70:
Где вы это всё видите?


От скруглений не куда не деться. Но вопрос от чего округлять от 5той или 4той цифры
в коде прописано чуток ниже:

Comment("Средняя цена Buy ",BuyAP, " Sell ",SellAP, " Последняя цена " ,LastPrise);
                                                                              // принтуем
 
Limita:


От скруглений не куда не деться. Но вопрос от чего округлять от 5той или 4той цифры
в коде прописано чуток ниже:

А так пробовал

Comment("Средняя цена Buy ",DoubleToStr(BuyAP,5), " Sell ",DoubleToStr(SellAP,5), " Последняя цена " ,DoubleToStr(LastPrise,5));

string DoubleToStr( double value, int digits)
Преобразование числового значения в текстовую строку, содержащую символьное представление числа в указанном формате точности.

 

Всем привет, у меня такая задача:

Определить появление нового бар (синтетика), используя минимум кода и не используя переменных привязанных ко времени открытия бара. Решил следующим образом:

if (Bid>Open[0] || Bid<Open[0]) return;
Какие подводные камни возможны при использовании в тестере и на демке?
 
dmitriy086:

Всем привет, у меня такая задача:

Определить появление нового бар (синтетика), используя минимум кода и не используя переменных привязанных ко времени открытия бара. Решил следующим образом:

Какие подводные камни возможны при использовании в тестере и на демке?


При торговле синтетикой у тебя нет единого бара по этому инструменту, а есть совокупность инструментов по каждому из которых ты можешь попробовать определить новый бар. Чем больше инструментов в торговле тем выше вероятность ошибки или проскальзывания во времени так как эксперт висит на одной паре и другие тики он также видит только когда придёт тик по этому инструменту.
Можно использовать глобальные переменные, но это не очень поможет так как если ты отследил новый тик на другой паре, где нет робота то сделку ты всё равно не сделаешь так как на твоей паре нет тика. можно делать опрос по таймеру - тоже есть некоторые проблемы. Если инструментов в торговле не много то самый простой способ это писать робота с учётом что он будет висеть сразу везде.

Кто нить знает возможно ли в отдельном окне индикатора не выводить значения всех буферов? Это та белая строка что пишется в левом верхнем углу окна индюка, а то уже бесит когда в используется 8 буферов видеть столько не нужных цифр.

 
Desead:


Кто нить знает возможно ли в отдельном окне индикатора не выводить значения всех буферов? Это та белая строка что пишется в левом верхнем углу окна индюка, а то уже бесит когда в используется 8 буферов видеть столько не нужных цифр.


В ините SetIndexLabel(...,""), но при этом и из окна данных буфер исчезнет.
Причина обращения: