Ответ
 
Опции темы
Старый 14.09.2013, 17:55   #1521 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для 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   #1522 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,010
Репутация: 828
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 842 раз(а) в 554 сообщениях
Поинты: 1308
Цитата:
OrderTicket() не будет при выводе? Но если его нет, это будет ошибка так?
Если ордер не выполнен, то OrderSend() возвращает -1 вместо номера тикета.
А вообще, если переменная неопределена, то возвращается пустое значение/ноль, т.е. в любом случае, это не ошибка.
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 15.09.2013, 08:25   #1523 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от ansol Посмотреть сообщение
Если ордер не выполнен, то OrderSend() возвращает -1 вместо номера тикета.
А вообще, если переменная неопределена, то возвращается пустое значение/ноль, т.е. в любом случае, это не ошибка.
Да, я это и имел ввиду. Но тикета тут не будет. Получится вывод кривой какой-то и не логичный.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 16.09.2013, 08:36   #1524 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,681
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™

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


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

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

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,681
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™

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


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

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

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

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,681
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от ansol Посмотреть сообщение
Это баг или фича!
Из хелпа:

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

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,010
Репутация: 828
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 842 раз(а) в 554 сообщениях
Поинты: 1308
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   #1529 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,681
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от ansol Посмотреть сообщение
1. Дык еще бы так не работало!
2. Второй вопрос был по С++ или я не понял, пардон. Причем тут getlasterror() из MQL4?
2. Ну я про mql. База то у них одинаковая. Да и там думаю есть похожая функция.
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 16.09.2013, 09:22   #1530 (permalink)
Почётный гражданин
 
Аватар для qqmber
 
Регистрация: 20.01.2013
Сообщений: 530
Репутация: 386
qqmber - qqmber - qqmber - qqmber -
Сказал(а) спасибо: 57
Поблагодарили 386 раз(а) в 254 сообщениях
Поинты: 439
Сообщение от eevviill Посмотреть сообщение
1) Так работает. А так как я написал нет.
Должно работать, это совершенно законная конструкция.
name_ind нигде в другом месте не переопределяется?
Покажи весь текст.
qqmber вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (16.09.2013)
Старый 16.09.2013, 09:25   #1531 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,010
Репутация: 828
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 842 раз(а) в 554 сообщениях
Поинты: 1308
Кстати, да, смотри как я написал:

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

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

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

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

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,681
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от qqmber Посмотреть сообщение
Должно работать, это совершенно законная конструкция.
name_ind нигде в другом месте не переопределяется?
Покажи весь текст.
Да. Наверно гдето переопределилось.
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 17.09.2013, 19:21   #1533 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от ansol Посмотреть сообщение
Это баг или фича!
Из хелпа:

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

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

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

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,010
Репутация: 828
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 842 раз(а) в 554 сообщениях
Поинты: 1308
По ссылке посмотрел - там ни до чего не доспорили и бросили это грязное дело
Вполне вероятно, что в MQL4 тип не важен, хотя был у меня глюк один, но счас вспоминать и экпериментировать не хочется. Глюк был точно связан с тем, что я с какого-то бодуна придумал обозвать их всех void'ами Вернул обратно в int и больше никогда так не делал, ибо времени жалко
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 17.09.2013, 19:41   #1536 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для 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   #1537 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от ansol Посмотреть сообщение
По ссылке посмотрел - там ни до чего не доспорили и бросили это грязное дело
Вполне вероятно, что в MQL4 тип не важен, хотя был у меня глюк один, но счас вспоминать и экпериментировать не хочется. Глюк был точно связан с тем, что я с какого-то бодуна придумал обозвать их всех void'ами Вернул обратно в int и больше никогда так не делал, ибо времени жалко
У меня тоже инты, и нет резона что-то там менять.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 17.09.2013, 19:52   #1538 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,010
Репутация: 828
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 842 раз(а) в 554 сообщениях
Поинты: 1308
MQL - он такой эмкуэль... Вообщем, в некоторых случаях при делении на пойнт MQL приводит типы и считает пойнт нулем. Правда, из этого выходят тупым умножением на 1.0
Правда, мне такой случай не попался, а пример пользователя я проверять не стал, так поверил. Там большое целое делилось на Point, причем в операции "if" без получения результата деления
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 18.09.2013, 07:41   #1539 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,681
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для 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   #1540 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для 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 Выкл.



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


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