Ответить
25.11.2012, 13:45
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ

По умолчанию Отладка кода в MQ4

Я написал первый советник, и сразу столкнулся в какими-то непонятками. Код компилится, НО в тестере даже не открывает ордера.
Просьба профессионалов, помог понять логику отладки кода.
Поскольку стандартного отладчика в терминале MT4 нет, нужно как-то же решать эти вопросы..
25.11.2012, 18:21
Регистрация: 13.03.2009 / Сообщений: 2,406
Поблагодарили 1,980 раз(а) / Репутация: 2057
Print() тебе поможет. После операции вставь принт с результатом операции. При выполнении советника смотри что печатается в журнале. Если напечатанный результат операции верен, переходи к следующей операции. Так проверишь весь код. и найдёшь где неправильно работает.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
26.11.2012, 11:51
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Я так и делаю, но некоторые принты не выводятся т.е. принты в некоторых функциях вообще не выводятся в журнал. Это что может означать?
26.11.2012, 12:05
Аватар для ale002
ale002 ale002 вне форума ::: __,,,^._.^,,,__ :::
Регистрация: 28.02.2010 / Сообщений: 1,246
Поблагодарили 2,510 раз(а) / Репутация: 2536
Тока одно - программа в ту строку, куда вписан Print, на попала. Вы же в курсе в котор строках вашего алгоритма программа делает выбор, вот перед ними и ставьте Print. Не после проверки условия, а ПЕРЕД и выводите в него переменные, котор участвуют в проверке. Напр:

Print("dRange=", dRange, " adLevels[0]=", adLevels[0], " gdStep=", gdStep);

А после оператора сравнения фтыкайте ещё один Print с отмашкой типа Print("Прокатило!");
26.11.2012, 12:50
Регистрация: 13.03.2009 / Сообщений: 2,406
Поблагодарили 1,980 раз(а) / Репутация: 2057
Я так и делаю, но некоторые принты не выводятся т.е. принты в некоторых функциях вообще не выводятся в журнал. Это что может означать?
Это то же помогает. Если принт не печатается значит не выполнилось условие что бы программа зашла в то место куда принт засунут. Или наоборот, выполняется какое то условие что бы программа не заходила в это место.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
26.11.2012, 18:37
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Вот, например у меня ф-ция в эксперте, я туда навставлял принтов:

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

PHP код:
//+-------------------------------------------------------------------------------------+
//| Генерация сигнала закрытия, покупки или продажи                                     |
//+-------------------------------------------------------------------------------------+
int GetSignal()
{
  
double firstBarClosed iClose(Symbol(),1440,2);
  
double secondBarClosed iClose(Symbol(),1440,1);
  
  if(
firstBarClosed secondBarClosed)                                       // закрытие вчерашнего дня ниже закрытия предыдущего, то..
  
Print("firstBarClosed > secondBarClosed "firstBarClosed" > "secondBarClosed);
  Print(
"firstBarClosed > secondBarClosed "firstBarClosed secondBarClosed);
  return(
SIGNAL_BUY);                                                        // Покупаем

  
if(firstBarClosed secondBarClosed)                                      // Если закрытие вчерашнего дня выше закрытия предыдущего, то..
  
Print("firstBarClosed < secondBarClosed "firstBarClosed" < "secondBarClosed);
  Print(
"firstBarClosed < secondBarClosed "firstBarClosed secondBarClosed);
  return(
SIGNAL_SELL);                                                      // Продаём

  
return(SIGNAL_NO);                                                        // Нет сигнала

[свернуть]



В журнале выводит:

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

PHP код:
2012.11.26 20:34:27    2012.11.02 20:23  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1
2012.11.26 20
:34:27    2012.11.02 20:23  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1.2964 1.2946
2012.11.26 20
:34:27    2012.11.02 20:23  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1
2012.11.26 20
:34:27    2012.11.02 20:23  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1.2964 1.2946
2012.11.26 20
:34:27    2012.11.02 20:23  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1
2012.11.26 20
:34:27    2012.11.02 20:23  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1.2964 1.2946
2012.11.26 20
:34:27    2012.11.02 20:23  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1
2012.11.26 20
:34:27    2012.11.02 20:23  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1.2964 1.2946
2012.11.26 20
:34:27    2012.11.02 20:22  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1
2012.11.26 20
:34:27    2012.11.02 20:22  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1.2964 1.2946
2012.11.26 20
:34:27    2012.11.02 20:22  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1
2012.11.26 20
:34:27    2012.11.02 20:22  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1.2964 1.2946
2012.11.26 20
:34:27    2012.11.02 20:22  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1
2012.11.26 20
:34:27    2012.11.02 20:22  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1.2964 1.2946
2012.11.26 20
:34:27    2012.11.02 20:22  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1
2012.11.26 20
:34:27    2012.11.02 20:22  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1.2964 1.2946
2012.11.26 20
:34:27    2012.11.02 20:19  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1
2012.11.26 20
:34:27    2012.11.02 20:19  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1.2964 1.2946
2012.11.26 20
:34:27    2012.11.02 20:19  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1
2012.11.26 20
:34:27    2012.11.02 20:19  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1.2964 1.2946 
[свернуть]



Всё же верно, почему тогда выводиться тоже самое? И кроме 1 больше ничего не возвращается..

Последний раз редактировалось NSerega; 26.11.2012 в 18:49.
26.11.2012, 19:55
Аватар для ale002
ale002 ale002 вне форума ::: __,,,^._.^,,,__ :::
Регистрация: 28.02.2010 / Сообщений: 1,246
Поблагодарили 2,510 раз(а) / Репутация: 2536
В таком виде функция может вернуть тока значение, присвоенное SIGNAL_BUY и ничего другого. И напечатать тока либо один первый Print, либо 1й и 2й. А после этого неизбежен Return(SIGNAL_BUY), какие бы не были результаты проверки. Бо вы в фигурные скобки не взяли блоки Print..Print..Return
26.11.2012, 21:35
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
По суди да, я упустил этот момент. Вот исправил:

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

PHP код:
int GetSignal()
{
  
double firstBarClosed iClose(Symbol(),1440,2);
  
double secondBarClosed iClose(Symbol(),1440,1);
  
  if(
firstBarClosed secondBarClosed)                                       // закрытие вчерашнего дня ниже закрытия предыдущего, то..
    
{  Print("firstBarClosed > secondBarClosed "firstBarClosed" > "secondBarClosed);
       Print(
"firstBarClosed > secondBarClosed "firstBarClosed secondBarClosed);
       return(
SIGNAL_BUY);                                                        // Покупаем
    
}
  if(
firstBarClosed secondBarClosed)                                      // Если закрытие вчерашнего дня выше закрытия предыдущего, то..
    
{  Print("firstBarClosed < secondBarClosed "firstBarClosed" < "secondBarClosed);
       Print(
"firstBarClosed < secondBarClosed "firstBarClosed secondBarClosed);
       return(
SIGNAL_SELL);                                                      // Продаём
    
}
  return(
SIGNAL_NO);                                                        // Нет сигнала

[свернуть]



В журнале:

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

PHP код:
2012.11.26 23:07:39    2012.11.02 20:23  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1
2012.11.26 23
:07:39    2012.11.02 20:23  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1.2964 1.2946
2012.11.26 23
:07:39    2012.11.02 20:23  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1
2012.11.26 23
:07:39    2012.11.02 20:23  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1.2964 1.2946
2012.11.26 23
:07:39    2012.11.02 20:23  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1
2012.11.26 23
:07:39    2012.11.02 20:23  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1.2964 1.2946
2012.11.26 23
:07:39    2012.11.02 20:23  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1
2012.11.26 23
:07:39    2012.11.02 20:23  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1.2964 1.2946
2012.11.26 23
:07:39    2012.11.02 20:22  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1
2012.11.26 23
:07:39    2012.11.02 20:22  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1.2964 1.2946
2012.11.26 23
:07:39    2012.11.02 20:22  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1
2012.11.26 23
:07:39    2012.11.02 20:22  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1.2964 1.2946
2012.11.26 23
:07:39    2012.11.02 20:22  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1
2012.11.26 23
:07:39    2012.11.02 20:22  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1.2964 1.2946
2012.11.26 23
:07:39    2012.11.02 20:22  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1
2012.11.26 23
:07:39    2012.11.02 20:22  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1.2964 1.2946
2012.11.26 23
:07:39    2012.11.02 20:19  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1
2012.11.26 23
:07:39    2012.11.02 20:19  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1.2964 1.2946
2012.11.26 23
:07:39    2012.11.02 20:19  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1
2012.11.26 23
:07:39    2012.11.02 20:19  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1.2964 1.2946
2012.11.26 23
:07:39    2012.11.02 20:19  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1
2012.11.26 23
:07:39    2012.11.02 20:19  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1.2964 1.2946
2012.11.26 23
:07:39    2012.11.02 20:19  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1
2012.11.26 23
:07:39    2012.11.02 20:19  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1.2964 1.2946
2012.11.26 23
:07:38    2012.10.17 12:01  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1
2012.11.26 23
:07:38    2012.10.17 12:01  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1.2784 1.3097
2012.11.26 23
:07:38    2012.10.17 12:01  Gann_2Days EURUSD,H1OrderClose error 4051
2012.11.26 23
:07:38    2012.10.17 12:01  Gann_2Days EURUSD,H1invalid ticket for OrderClose function
2012.11.26 23:07:38    2012.10.17 12:01  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1
2012.11.26 23
:07:38    2012.10.17 12:01  Gann_2Days EURUSD,H1firstBarClosed secondBarClosed 1.2784 1.3097
2012.11.26 23
:07:38    2012.10.17 12:01  Gann_2Days EURUSD,H1OrderClose error 4051
2012.11.26 23
:07:38    2012.10.17 12:01  Gann_2Days EURUSD,H1invalid ticket for OrderClose function
2012.11.26 23:07:36    Gann_2Daysloaded successfully 
[свернуть]



Постояно возвращается те же цены и тот же возврат в return т.е. signal_buy т.е. 1. Но должны же возвращаться другие цены и другие сигналы..

Последний раз редактировалось NSerega; 26.11.2012 в 21:59.
30.11.2012, 17:27
Аватар для Sergey Kovalyov
Sergey Kovalyov Sergey Kovalyov вне форума Элитный участник
Регистрация: 10.08.2012 / Адрес: Киев, Слава Украине! / Сообщений: 2,346
Поблагодарили 1,483 раз(а) / Репутация: 1485
Так правильно возращает одинаковую цену. Вы же цены от H1 свечей берете. Пока на новый час не перешли, то цены будут одинаковые.

И у Вас там, кажется, дыра в котировках. Между 17 октября и 2 ноября.
29.12.2012, 21:02
Аватар для sochinik
sochinik sochinik вне форума Активный участник
Регистрация: 10.05.2012 / Адрес: Курск-Краснодар / Сообщений: 326
Поблагодарили 169 раз(а) / Репутация: 170
  • Отправить сообщение для sochinik с помощью ICQ Отправить сообщение для sochinik с помощью MSN
Я только в начале изучения MQL, поэтому ищу вспомогательные программы для написания , сейчас использую кроме редактора медаэтитора ещё и Forex EA Generator 4 и Notepad++, в первом можно правильно составить шаблон эксперта с автоматическим преобразованием на 5 знаков, а также разобрать как правильно составить код.., а в Notepad++ удобно отслеживать парность скобок и начало и окончание функций, а также заменять части кода сразу автоматом во всём эксперте... а какие программы ещё полезны для програмирования советников?
У меня сменился SKYPE!!! Ищу своих друзей!

Пишите в личку или в новый SKYPE: sochinik1
29.12.2012, 22:29
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Я только в начале изучения MQL, поэтому ищу вспомогательные программы для написания , сейчас использую кроме редактора медаэтитора ещё и Forex EA Generator 4 и Notepad++, в первом можно правильно составить шаблон эксперта с автоматическим преобразованием на 5 знаков, а также разобрать как правильно составить код.., а в Notepad++ удобно отслеживать парность скобок и начало и окончание функций, а также заменять части кода сразу автоматом во всём эксперте... а какие программы ещё полезны для програмирования советников?
Лично я пользуюсь для анализа любого кода только Microsoft Visual Studio 2010. Это самое удобное средство для этих целей.
Ответить

Метки
mq4, код, отладка, отладчик, эксперт


Опции темы

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

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



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


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