Ответ
 
Опции темы
14.09.2013, 17:55
Аватар для hoz
hoz Активный участник
Регистрация: 01.04.2011 / Сообщений: 530
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Хм. Нашёл ещё одну весьма интересную вещь. Я сам так не делал, потом стало интересно..
Вот функция обработки ошибок:

Скрытый текст

PHP код:
bool fErrorHandling (int fi_Errorboolfb_InvalidSTOP)
{   
//----
   
if (fi_Error == 0)
      return (
true);
   switch (
fi_Error)
   {
      case 
4:   /*ERR_SERVER_BUSY*/
      
case 137/*ERR_BROKER_BUSY*/
      
case 139/*ERR_ORDER_LOCKED*/
      
case 146/*ERR_TRADE_CONTEXT_BUSY*/ Sleep (500); return (false);
      case 
6:   /*ERR_NO_CONNECTION*/ fReConnect(); Sleep (1000); return (false);
      case 
135/*ERR_PRICE_CHANGED*/ 
      
case 136/*ERR_OFF_QUOTES*/
      
case 138/*ERR_REQUOTE*/ Sleep (1); return (false);
      case 
129/*ERR_INVALID_PRICE*/
      
case 130/*ERR_INVALID_STOPS*/ fb_InvalidSTOP true; return (false);
      case 
4109/*ERR_TRADE_NOT_ALLOWED*/
         
Print ("TRADE NOT ALLOWED ! SWITCH ON option \' Allow live trading\' (Необходимо включить опцию \'Разрешить советнику торговать\')");
         return (
true);
      default: 
fWrite_Log (StringConcatenate (OrderTicket(), ": Критическая ошибка № "ErrorDescription (fi_Error)), bi_indERR); return (true);
   }
//----
   
return (true);

[свернуть]



В общем-то суть такая, что по дефолту довольно-странный лог получается..
Ведь если условие:

PHP код:
 if (fi_Error == 0)
      return (
true); 

Не выполнено, значит есть какая-то ошибка. Если есть ошибка, значит возможно, тикета может не быть вообще, если данная функция находится в функция посыла ордера, например. Тогда если нет тикета, то получится, что в данном месте:

Скрытый текст

PHP код:
 fWrite_Log (StringConcatenate (OrderTicket(), ": Критическая ошибка № "ErrorDescription (fi_Error)), bi_indERR); return (true); 
[свернуть]



OrderTicket() не будет при выводе? Но если его нет, это будет ошибка так?

Последний раз редактировалось NSerega; 15.09.2013 в 13:47.
hoz вне форума Ответить с цитированиемОтветить с цитированием  
15.09.2013, 05:01
Аватар для ansol
ansol Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,016
Поблагодарили 855 раз(а) / Репутация: 841
Цитата:
OrderTicket() не будет при выводе? Но если его нет, это будет ошибка так?
Если ордер не выполнен, то OrderSend() возвращает -1 вместо номера тикета.
А вообще, если переменная неопределена, то возвращается пустое значение/ноль, т.е. в любом случае, это не ошибка.
ansol на форуме Ответить с цитированиемОтветить с цитированием  
15.09.2013, 08:25
Аватар для hoz
hoz Активный участник
Регистрация: 01.04.2011 / Сообщений: 530
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Сообщение от ansol Посмотреть сообщение
Если ордер не выполнен, то OrderSend() возвращает -1 вместо номера тикета.
А вообще, если переменная неопределена, то возвращается пустое значение/ноль, т.е. в любом случае, это не ошибка.
Да, я это и имел ввиду. Но тикета тут не будет. Получится вывод кривой какой-то и не логичный.
hoz вне форума Ответить с цитированиемОтветить с цитированием  
16.09.2013, 08:36
Аватар для eevviill
eevviill Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,027 раз(а) / Репутация: 9027
  • Отправить сообщение для eevviill с помощью Skype™

По умолчанию iCustom


extern string name_ind = "Un34";
double ter=iCustom(Symbol(),0,name_ind,0,0);

Пишу так. Компилятор пишет Что название индикатора в Кастоме должно быть стринг. Почему так?
eevviill вне форума Ответить с цитированиемОтветить с цитированием  
16.09.2013, 08:37
Аватар для eevviill
eevviill Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,027 раз(а) / Репутация: 9027
  • Отправить сообщение для eevviill с помощью Skype™

По умолчанию void start()


Пишу везде
void start()
{
}

В уроках по С++ говорят что так нельзя.
Почему?
eevviill вне форума Ответить с цитированиемОтветить с цитированием  
16.09.2013, 08:44
Аватар для ansol
ansol Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,016
Поблагодарили 855 раз(а) / Репутация: 841
Это баг или фича!
Из хелпа:
Цитата:
Пример:
double val=iCustom(NULL, 0, "SampleInd",13,1,0);
Я всегда так писал, в кавычках, так что ХЗ.
2.
void не возвращает значений, как ошибки отлавливать?
ansol на форуме Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (16.09.2013)
16.09.2013, 09:04
Аватар для eevviill
eevviill Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,027 раз(а) / Репутация: 9027
  • Отправить сообщение для eevviill с помощью Skype™
Сообщение от ansol Посмотреть сообщение
Это баг или фича!
Из хелпа:

Я всегда так писал, в кавычках, так что ХЗ.
2.
void не возвращает значений, как ошибки отлавливать?
1) Так работает. А так как я написал нет.
2) GetLastError();
eevviill вне форума Ответить с цитированиемОтветить с цитированием  
16.09.2013, 09:06
Аватар для ansol
ansol Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,016
Поблагодарили 855 раз(а) / Репутация: 841
1. Дык еще бы так не работало!
2. Второй вопрос был по С++ или я не понял, пардон. Причем тут getlasterror() из MQL4?

В любом случае, фунция start() как основная, должна что-то возвращать в вызывающую программу. В MQL4 можно писать void start() ?
Я уж не помню, вроде когда-то давно сталкивался с траблой такой, что надо именно int start()

P.S. я поправил свой ответ

Последний раз редактировалось ansol; 16.09.2013 в 09:12.
ansol на форуме Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (16.09.2013)
16.09.2013, 09:11
Аватар для eevviill
eevviill Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,027 раз(а) / Репутация: 9027
  • Отправить сообщение для eevviill с помощью Skype™
Сообщение от ansol Посмотреть сообщение
1. Дык еще бы так не работало!
2. Второй вопрос был по С++ или я не понял, пардон. Причем тут getlasterror() из MQL4?
2. Ну я про mql. База то у них одинаковая. Да и там думаю есть похожая функция.
eevviill вне форума Ответить с цитированиемОтветить с цитированием  
16.09.2013, 09:22
Аватар для qqmber
qqmber Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
Сообщение от eevviill Посмотреть сообщение
1) Так работает. А так как я написал нет.
Должно работать, это совершенно законная конструкция.
name_ind нигде в другом месте не переопределяется?
Покажи весь текст.
qqmber вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (16.09.2013)
16.09.2013, 09:25
Аватар для ansol
ansol Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,016
Поблагодарили 855 раз(а) / Репутация: 841
Кстати, да, смотри как я написал:

Скрытый текст

PHP код:
            string z1z "1ZigZag";
            
dPrevZ iCustom(sSymboliTFz1zExtDepthExtDeviationExtBackStep0iZCountPrev); 
[свернуть]

И все работает, не ругается, а ведь одни сплошные переменные указаны, включая имя индикатора

Последний раз редактировалось NSerega; 17.09.2013 в 23:17.
ansol на форуме Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (16.09.2013)
16.09.2013, 09:49
Аватар для eevviill
eevviill Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,027 раз(а) / Репутация: 9027
  • Отправить сообщение для eevviill с помощью Skype™
Сообщение от qqmber Посмотреть сообщение
Должно работать, это совершенно законная конструкция.
name_ind нигде в другом месте не переопределяется?
Покажи весь текст.
Да. Наверно гдето переопределилось.
eevviill вне форума Ответить с цитированиемОтветить с цитированием  
17.09.2013, 19:21
Аватар для hoz
hoz Активный участник
Регистрация: 01.04.2011 / Сообщений: 530
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Сообщение от ansol Посмотреть сообщение
Это баг или фича!
Из хелпа:

Я всегда так писал, в кавычках, так что ХЗ.
2.
void не возвращает значений, как ошибки отлавливать?
Непосредственно из функции старт ошибки кто отлавливает? Ловятся ж они ниже на уровнях, но не в головной... Главное что б старт отработал, а дальше уже дело за пользовательскими функциями.
Не согласны?
Кстати, сегодня я про это читал, исква чутка другую тему смежную. Вот из истории:
_http://forum.mql4.com/ru/20867

Последний раз редактировалось NSerega; 17.09.2013 в 23:17.
hoz вне форума Ответить с цитированиемОтветить с цитированием  
17.09.2013, 19:27
Аватар для ansol
ansol Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,016
Поблагодарили 855 раз(а) / Репутация: 841
Сообщение от hoz Посмотреть сообщение
Непосредственно из функции старт ошибки кто отлавливает? Ловятся ж они ниже на уровнях, но не в головной... Главное что б старт отработал, а дальше уже дело за пользовательскими функциями.
Не согласны?
Нет. Вызываемая функция должна вернуть в родительскую "0" или код ошибки, даже если она не выполнила ни одной пользовательской функции.
Представьте себе деление на ноль первой строчкой кода - какие еще функции, откуда?
А когда пишут горе-программисты, получается, что и прога не запускается и никаких ошибок в винде нет
Это я уже имею в виду С++ и егонный ехе-шник в винде, ну а в МТ4 имеем аналог - в качестве "ОС Виндовз" выступает терминал, в качестве ехе-шника исполняемый файл ех4
ansol на форуме Ответить с цитированиемОтветить с цитированием  
17.09.2013, 19:37
Аватар для ansol
ansol Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,016
Поблагодарили 855 раз(а) / Репутация: 841
По ссылке посмотрел - там ни до чего не доспорили и бросили это грязное дело
Вполне вероятно, что в MQL4 тип не важен, хотя был у меня глюк один, но счас вспоминать и экпериментировать не хочется. Глюк был точно связан с тем, что я с какого-то бодуна придумал обозвать их всех void'ами Вернул обратно в int и больше никогда так не делал, ибо времени жалко
ansol на форуме Ответить с цитированиемОтветить с цитированием  
17.09.2013, 19:41
Аватар для hoz
hoz Активный участник
Регистрация: 01.04.2011 / Сообщений: 530
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Предлагаю помозговать над одной довольно интересной функцией. Я вот так и не понял, бывает ли в такой функции необходимость. Автор говорит, что бывает.. Автора скрывать не буду, т.к. функция его. Мне просто попались его библиотеки, и, я решил их прошерстить, для общего сведения и прокачки своих знаний. Вот она:

Скрытый текст

PHP код:
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Функция, гарантированного получения Point                                  |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double fGet_Point (string fs_Symbol "")
{
    
double ld_Point 0.0;
//----
    
if (fs_Symbol == "")
    {
       
fs_Symbol Symbol();
    }
    
ld_Point MarketInfo (fs_SymbolMODE_POINT);
    
//---- Если результата нет
    
if (ld_Point == 0.0)
    {
       
int li_Digits MarketInfo (fs_SymbolMODE_DIGITS);
       if (
li_Digits 0)
       {
          
ld_Point 1.0 MathPow (10li_Digits);
       }
    }
    else
    {
       return (
ld_Point);
    }
//----
    
return (ld_Point);

[свернуть]



Вопрос простой Зачем получать Point, если он получается из MarketInfo() ? Я задал вопрос автору. Автор сказал, что мол частенько приходится использовать Point в качестве делителя, а на ноль делить нелья!. Мол это ещё с начальных классов дети знают..
Соглашусь, знают, знаем.. НО, опять же с чего бы то значение Point не получится из MarketInfo() ? И, самое интересное, если уже на то пошло, и значение Point не получили, какова гарантия, что значение Digits будет получено?
Ведь если Digits не будет получено тоже (теоритически, что маловероятно по-моему), то из функции вообще не выйдем толком, так как нет else после:
э
PHP код:
 if (li_Digits 0)
       {
          
ld_Point 1.0 MathPow (10li_Digits);
       } 

Последний раз редактировалось NSerega; 17.09.2013 в 23:17.
hoz вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (18.09.2013)
17.09.2013, 19:49
Аватар для hoz
hoz Активный участник
Регистрация: 01.04.2011 / Сообщений: 530
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Сообщение от ansol Посмотреть сообщение
По ссылке посмотрел - там ни до чего не доспорили и бросили это грязное дело
Вполне вероятно, что в MQL4 тип не важен, хотя был у меня глюк один, но счас вспоминать и экпериментировать не хочется. Глюк был точно связан с тем, что я с какого-то бодуна придумал обозвать их всех void'ами Вернул обратно в int и больше никогда так не делал, ибо времени жалко
У меня тоже инты, и нет резона что-то там менять.
hoz вне форума Ответить с цитированиемОтветить с цитированием  
17.09.2013, 19:52
Аватар для ansol
ansol Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,016
Поблагодарили 855 раз(а) / Репутация: 841
MQL - он такой эмкуэль... Вообщем, в некоторых случаях при делении на пойнт MQL приводит типы и считает пойнт нулем. Правда, из этого выходят тупым умножением на 1.0
Правда, мне такой случай не попался, а пример пользователя я проверять не стал, так поверил. Там большое целое делилось на Point, причем в операции "if" без получения результата деления
ansol на форуме Ответить с цитированиемОтветить с цитированием  
18.09.2013, 07:41
Аватар для eevviill
eevviill Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,027 раз(а) / Репутация: 9027
  • Отправить сообщение для eevviill с помощью Skype™
Сообщение от hoz Посмотреть сообщение
Предлагаю помозговать над одной довольно интересной функцией. Я вот так и не понял, бывает ли в такой функции необходимость. Автор говорит, что бывает.. Автора скрывать не буду, т.к. функция его. Мне просто попались его библиотеки, и, я решил их прошерстить, для общего сведения и прокачки своих знаний. Вот она:

Скрытый текст

PHP код:
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Функция, гарантированного получения Point                                  |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double fGet_Point (string fs_Symbol "")
{
    
double ld_Point 0.0;
//----
    
if (fs_Symbol == "")
    {
       
fs_Symbol Symbol();
    }
    
ld_Point MarketInfo (fs_SymbolMODE_POINT);
    
//---- Если результата нет
    
if (ld_Point == 0.0)
    {
       
int li_Digits MarketInfo (fs_SymbolMODE_DIGITS);
       if (
li_Digits 0)
       {
          
ld_Point 1.0 MathPow (10li_Digits);
       }
    }
    else
    {
       return (
ld_Point);
    }
//----
    
return (ld_Point);

[свернуть]



Вопрос простой Зачем получать Point, если он получается из MarketInfo() ? Я задал вопрос автору. Автор сказал, что мол частенько приходится использовать Point в качестве делителя, а на ноль делить нелья!. Мол это ещё с начальных классов дети знают..
Соглашусь, знают, знаем.. НО, опять же с чего бы то значение Point не получится из MarketInfo() ? И, самое интересное, если уже на то пошло, и значение Point не получили, какова гарантия, что значение Digits будет получено?
Ведь если Digits не будет получено тоже (теоритически, что маловероятно по-моему), то из функции вообще не выйдем толком, так как нет else после:
э
PHP код:
 if (li_Digits 0)
       {
          
ld_Point 1.0 MathPow (10li_Digits);
       } 
С Point проблем никогда небыло.
Но они могут быть в мультивалютниках и если в обзоре рынка нету нужной пары, то 0 будет. Но его функция в этом не поможет. Так что его функция безполезна.
eevviill вне форума Ответить с цитированиемОтветить с цитированием  
18.09.2013, 12:12
Аватар для hoz
hoz Активный участник
Регистрация: 01.04.2011 / Сообщений: 530
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Сообщение от eevviill Посмотреть сообщение
С Point проблем никогда небыло.
Но они могут быть в мультивалютниках и если в обзоре рынка нету нужной пары, то 0 будет. Но его функция в этом не поможет. Так что его функция безполезна.

Если получать данные из ИНИТА, то всё будет чётко. Ведь если из ИНИТ данные не получаться, то эксперт не запустится, как я понимаю.

Последний раз редактировалось hoz; 18.09.2013 в 12:28.
hoz вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (18.09.2013)
Ответ

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 06:12. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO