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

 

Всем привет !

Только сейчас заметил странную работу NormalizeDouble.

То есть советник то работает хорошо и ошибок не выдает а вот логи в тестере очень странные.

Поясню.

Вычисляю функцией профит. Делаю как и положено NormalizeDouble(Profit,Digits);

Далее Print("   profit=",DoubleToStrMorePrecision(Profit,8));

В результате я вижу в логах такое : "profit=0.88881912". По идее должно быть 0.88881000 верно ?

Или я туплю и делаю что то не так ?

 
goodearth:

Всем привет !

Только сейчас заметил странную работу NormalizeDouble.

То есть советник то работает хорошо и ошибок не выдает а вот логи в тестере очень странные.

Поясню.

Вычисляю функцией профит. Делаю как и положено NormalizeDouble(Profit,Digits);

Далее Print("   profit=",DoubleToStrMorePrecision(Profit,8));

В результате я вижу в логах такое : "profit=0.88881912". По идее должно быть 0.88881000 верно ?

Или я туплю и делаю что то не так ?

У вас значение Profit участвует в торговых приказах?
 
artmedia70:
У вас значение Profit участвует в торговых приказах?

Да конечно. Причем без ошибок :-). Я поэтому и удивился.

У меня Build 735

Торговля идет на демке.

Аааааааа всё понял ! Я забыл операцию присваивания :-). "Profit=NormalizeDouble(Profit,Digits)".

Правда все равно не понятно почему советник не выдает ошибок ))

Может на сервере автоматом скругляют.....

Мне почему то казалось что NormalizeDouble это процедура а не функция :-).

 
Ozero:

Перес ";" за скобку.

Программа работает, НО периодически ругается на ошибку 4108.


Ozero.

Вообще, удалить надо!

 
borilunad:

Вообще, удалить надо!

Борис, лучше б ты ему прямо кодом показал, а то я с недосыпу забыл... ;)

ResetLastError();
if(!OrderClose(OrderTicket(),OrderLots(),_Bid,15)) Print("Чё-та не закрылася позиция. Фигня вот такая происходит: "+GetLastError());
 
artmedia70:

Борис, лучше б ты ему прямо кодом показал, а то я с недосыпу забыл... ;)

Не хотел злоупотреблять твоим авторским правом! ;)

А серьёзно, что-то не вставлялось! Но сейчас попробую!

 

ResetLastError();
if(!OrderClose(OrderTicket(),OrderLots(),_Bid,15)) Print("");

 А сейчас получилось! Странно!

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

Подскажите пожалуйста решение.

Естьь советник, который компилируется без ошибок 500-м билдом эдитора. 

Но в новой версии выдает ошибки. Вот такие:

bool TP?=true;   // ошибка  '?' - semicolon expected    
а вот про эту аж дважды

if(TP?)    // ')' - unexpected token    
           // ')' - ':' colon sign expected     
Я посмотрел по справочнику по новой версии и по старой, но про вопросительный знак ничего похожего не нашел.

Вопрос: что значат эти операции и как их поправить, чтобы код нормально компилировался?

Заранее спасибо


[Удален]  

Здравствуйте! Подскажите пожалуйста, почему у меня иногда не срабатывает оператор if esle. 
Вот пример:  

double H3=ObjectGet ("H3 line", OBJPROP_PRICE1);
int start()
{
double price = Bid;
if (price==H3)
{
 Alert ("Урааааа  ", Symbol());
}
return(0);
}

 

 Где:
H3 - это ценовое значение уровня
price - текущая цена

В итоге выходит, что цена доходит до этого уровня (иногда даже останавливается на нем), а Алерт не срабатывает. 
Подскажите в чем ошибка?

 
Kapizdo4ka:

Здравствуйте! Подскажите пожалуйста, почему у меня иногда не срабатывает оператор if esle. 
Вот пример:  

 

 Где:
H3 - это ценовое значение уровня
price - текущая цена

В итоге выходит, что цена доходит до этого уровня (иногда даже останавливается на нем), а Алерт не срабатывает. 
Подскажите в чем ошибка?

В том, что цена редко может точно совпадать со значением уровня. Или price >= H3 или определить диапазон погрешности.
 
//+------------------------------------------------------------------+
//|                                                        Ozero.mq4 |
//|                                            Copyright 2014, Vinin |
//|                                             http://vinin.ucoz.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, Vinin"
#property link      "http://vinin.ucoz.ru"
#property version   "1.00"
#property strict
// -------- переменные --- Н -----
extern double gLot=0.1;            // размер лота для покупки 
extern double gPoint=0.001;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
// -------- переменные --- К ----- 
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {

// Открытие позиции
   if(OrdersTotal()==0)
     {
      Print(" Открытие первой позиции ");
      double _Ask=MarketInfo("GBPUSD",MODE_ASK);
      int ticket=OrderSend("GBPUSD",OP_BUY,gLot,_Ask,15,0,0);
      if(ticket>0)
        {
         Print(" ОРДЕР ОТКРЫТ ",ticket);
        }
     }

   double _Bid=MarketInfo("GBPUSD",MODE_BID); //для цены
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos,SELECT_BY_POS))
        {
         if(OrderOpenPrice()+gPoint<_Bid)
           {
            OrderClose(OrderTicket(),OrderLots(),_Bid,15);
            
ResetLastError();
if(!OrderClose(OrderTicket(),OrderLots(),_Bid,15)) Print("Чё-та не закрылася позиция. Фигня вот такая происходит: "+GetLastError());

           }
        }
     }
   return(0);
  }

Доброе утро.

Программа имеет такой вид.

При компиляции выдает:

'Ozero.mq4'                                                      Ozero.mq4      1        1
return value of 'OrderClose' should be checked     Ozero.mq4    46      13
implicit conversion from 'number' to 'string'          Ozero.mq4    49    117
0 error(s), 2 warning(s)                                                           1       3


Во вкладке "результаты" видно, что ордера открываются и закрываются.

1    2014.08.25 00:00    buy    1    0.10    1.6550    0.0000    0.0000    0.00    10000.00
2    2014.08.25 06:30    close    1    0.10    1.6562    0.0000    0.0000    0.12    10000.12
3    2014.08.25 06:31    buy    2    0.10    1.6564    0.0000    0.0000    0.00    10000.12
4    2014.08.25 10:00    close    2    0.10    1.6574    0.0000    0.0000    0.10    10000.22
5    2014.08.25 10:00    buy    3    0.10    1.6576    0.0000    0.0000    0.00    10000.22
6    2014.08.25 12:58    close    3    0.10    1.6586    0.0000    0.0000    0.10    10000.32
7    2014.08.25 12:58    buy    4    0.10    1.6590    0.0000    0.0000    0.00    10000.32
8    2014.08.26 13:13    close at stop    4    0.10    1.6576    0.0000    0.0000    -0.14    10000.18


8 - это я прервал работу закрыв тестер.


Далее,  смотрим "Журнал":

2014.10.31 07:46:44.837    GBPUSD,M15: 4453 tick events (5608 bars, 340128 bar states) processed within 312876 ms (total time 324436 ms)
2014.10.31 07:46:44.837    2014.08.26 13:13  Tester: order #4 is closed
2014.10.31 07:46:44.798    2014.08.26 13:13  Visual tester stopped
2014.10.31 07:43:15.315    2014.08.25 12:58  Ozero GBPUSD,M15:  ОРДЕР ОТКРЫТ 4
2014.10.31 07:43:15.315    2014.08.25 12:58  Ozero GBPUSD,M15: open #4 buy 0.10 GBPUSD at 1.6590 ok
2014.10.31 07:43:15.315    2014.08.25 12:58  Ozero GBPUSD,M15:  Открытие первой позиции
2014.10.31 07:43:15.245    2014.08.25 12:58  Ozero GBPUSD,M15: Чё-та не закрылася позиция. Фигня вот такая происходит: 4108
2014.10.31 07:43:15.245    2014.08.25 12:58  Ozero GBPUSD,M15: OrderClose error 4108
2014.10.31 07:43:15.245    2014.08.25 12:58  Ozero GBPUSD,M15: unknown ticket 3 for OrderClose function
2014.10.31 07:43:15.245    2014.08.25 12:58  Ozero GBPUSD,M15: close #3 buy 0.10 GBPUSD at 1.6576 at price 1.6586
2014.10.31 07:42:51.123    2014.08.25 10:00  Ozero GBPUSD,M15:  ОРДЕР ОТКРЫТ 3
2014.10.31 07:42:51.123    2014.08.25 10:00  Ozero GBPUSD,M15: open #3 buy 0.10 GBPUSD at 1.6576 ok
2014.10.31 07:42:51.123    2014.08.25 10:00  Ozero GBPUSD,M15:  Открытие первой позиции
2014.10.31 07:42:51.059    2014.08.25 10:00  Ozero GBPUSD,M15: Чё-та не закрылася позиция. Фигня вот такая происходит: 4108
2014.10.31 07:42:51.059    2014.08.25 10:00  Ozero GBPUSD,M15: OrderClose error 4108
2014.10.31 07:42:51.059    2014.08.25 10:00  Ozero GBPUSD,M15: unknown ticket 2 for OrderClose function
2014.10.31 07:42:51.059    2014.08.25 10:00  Ozero GBPUSD,M15: close #2 buy 0.10 GBPUSD at 1.6564 at price 1.6574
2014.10.31 07:42:31.473    2014.08.25 06:31  Ozero GBPUSD,M15:  ОРДЕР ОТКРЫТ 2
2014.10.31 07:42:31.473    2014.08.25 06:31  Ozero GBPUSD,M15: open #2 buy 0.10 GBPUSD at 1.6564 ok
2014.10.31 07:42:31.473    2014.08.25 06:31  Ozero GBPUSD,M15:  Открытие первой позиции
2014.10.31 07:42:31.331    2014.08.25 06:30  Ozero GBPUSD,M15: Чё-та не закрылася позиция. Фигня вот такая происходит: 4108
2014.10.31 07:42:31.331    2014.08.25 06:30  Ozero GBPUSD,M15: OrderClose error 4108
2014.10.31 07:42:31.331    2014.08.25 06:30  Ozero GBPUSD,M15: unknown ticket 1 for OrderClose function
2014.10.31 07:42:31.331    2014.08.25 06:30  Ozero GBPUSD,M15: close #1 buy 0.10 GBPUSD at 1.6550 at price 1.6562
2014.10.31 07:41:31.966    2014.08.25 00:00  Ozero GBPUSD,M15:  ОРДЕР ОТКРЫТ 1
2014.10.31 07:41:31.966    2014.08.25 00:00  Ozero GBPUSD,M15: open #1 buy 0.10 GBPUSD at 1.6550 ok
2014.10.31 07:41:31.966    2014.08.25 00:00  Ozero GBPUSD,M15:  Открытие первой позиции
2014.10.31 07:41:31.958    Ozero inputs: gLot=0.1; gPoint=0.001;

Теперь я вообще в растерянности. С одной стороны ордера закрываются, это видно по графику и "результатам", с другой стороны судя по журналу код исполняется с ошибками :(((((((((((

Ozero.