Ответить
19.01.2013, 22:25
Регистрация: 13.03.2009 / Сообщений: 2,394
Поблагодарили 1,974 раз(а) / Репутация: 2051
На самом деле учебником "это" не назовёшь. Сделано абы-как... Лучше смотри чьи-н. коды и изучай как они написано, а потом когда будет понимать как работаю эксперты, сможешь сама писать. А "то" что на оф. сайте.. используй как документацию и не более того. Документация с большего сносная, а учебника по сути нет, одно название..
Ты являешься хорошим примером, как не надо изучать язык. В твоих кодах косяки способные насмешить даже новичка. Не зная основ изучать чужие готовые программы не рационально.
Прежде чем разбирать чужой код для обучения, нужно быть уверенным что этот код написан достаточно грамотно что бы работал надёжно. Не зная языка и не имея опыта, оценить это весьма сложно. Вынос всей программы в пользовательские функции не показатель грамотности программиста. И соответственно надёжности работы программы. Ты типичный пример.
Даже если код написан грамотно и надёжно, всех хитростей и нюансов не уловишь, они могут быть не явными, но значимыми для обеспечения надёжной работы программы. В хороших учебниках написано как решить задачу, почему именно так и пример кода.
Изучать нужно по букварю. Их навалом, главное выбрать правильный. Заглядывать в чужой код можно и ногда нужно, но не для того что бы использовать его как учебник. Чужой код скорее подсказка. Например, при написании своей программы, не получается сообразить как решить какую то задачу. В этом случае можно найти чужой код в котором эта задача решена и подглядеть как. Но проще спросить у опытных программистов. Правда, они часто отвечают конкретным ответом, на конкретный вопрос, без каких то нюансов. Подразумевая что нюансы уже известны.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
19.01.2013, 22:58
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Ты являешься хорошим примером, как не надо изучать язык. В твоих кодах косяки способные насмешить даже новичка. Не зная основ изучать чужие готовые программы не рационально.

Ugar, Тыкать проще всего, а как подсказать, то сразу в сторону... Вот так Спасибо! То что я спрашивал, я уже сам сделал, так как ждать ответ сутками не есть пригодный мне вариант.
А вообще, я имел ввиду именно смотреть чей-то код в плане понять как работают программы... Я именно это и советовал.. Зачем повторяться?
Есс-но, что человек, который не понимает вообще ничего будет искать программу по проще, а потому уже посложнее возьмётся. Это даже и писать не стоит, так как оно логично.
В конце концов, мы тут не подкалывать друг друга собрались, а помогать и объяснять. А в данном случае это больше похоже на канкретный упрёк.
Если ты считаешь, что я в чём-то не прав, так и скажи прямо. Не зачем юлить вдоль и поперёк.
Что касается ошибок, да.. у меня это бывает, т.к. я не профи, но решать им я уже научился в большинстве случаев.
Да и вообще, каким боком я к тому учебнику отношусь? Если не могли написать адекватный учебник, это косяк создателей языка, а я тут не причём. Лично я изучал всё на чужих кодах, и читал книги по Си. Но не программисту книги по Си и С++ читать довольно сложно, поэтому я и не посылаю туда. И это не только мои слова.
Но если учебника у " авторов " не получилось создать, нужно это признать, а не защищать их.. Хотя Allis Amazing сама убедиться скоро на сколько адекватен это " учебник "

Последний раз редактировалось hoz; 19.01.2013 в 23:05.
20.01.2013, 08:17
Регистрация: 13.03.2009 / Сообщений: 2,394
Поблагодарили 1,974 раз(а) / Репутация: 2051
Ugar, Тыкать проще всего, а как подсказать, то сразу в сторону... Вот так Спасибо! То что я спрашивал, я уже сам сделал, так как ждать ответ сутками не есть пригодный мне вариант.
Я подсказывал, но моё мнение тебя не интересовало. Сам сусам.
А вообще, я имел ввиду именно смотреть чей-то код в плане понять как работают программы... Я именно это и советовал.. Зачем повторяться?
Я об этом и писал. Зачем советуешь другим, способ как изучать язык, если сам его не изучил?
Если не могли написать адекватный учебник, это косяк создателей языка, а я тут не причём. Лично я изучал всё на чужих кодах, и читал книги по Си.
Вот это и заметно. Создатели языка не писали учебник. Автор Сергей Ковалёв, а не метаквоты.
Но если учебника у " авторов " не получилось создать, нужно это признать, а не защищать их..
Если учебник размещён на сайте mql значит он одобрен метаквотами, так же это может означать что, по их мнению, именно в этом учебнике меньше косяков. Учебников по MQL4 навалом, не нравится этот можно найти другой. Лично я изучал по другому. К сожалению он у меня не сохранился.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
20.01.2013, 10:13
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 701
Поблагодарили 276 раз(а) / Репутация: 276
Подскажите, вот есть такой код
PHP код:
for(int i=0i<=OrdersTotal()-1i++) 
 { 
 if(
OrderSelect(i,SELECT_BY_POS))
 { 
 if(
OrderMagicNumber()==magic
 { 
 if(
OrderSymbol()==Symbol()) 
 { 
int fir_or_time OrderOpenTime();
int i iBarShift(NULL,0,fir_or_time);
break; 
 } 
 } 
 } 
 } 
Его мне подсказал eevviill. Здесь указано время первого открытого ордера. А как указать, используя те же данные, цену первого открытого ордера?То есть что-то вроде OrderOpenPrice[i]? Но конечно, в правильном коде...
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе
20.01.2013, 10:20
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

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

Его мне подсказал eevviill. Здесь указано время первого открытого ордера. А как указать, используя те же данные, цену первого открытого ордера?То есть что-то вроде OrderOpenPrice[i]? Но конечно, в правильном коде...
PHP код:
for(int i=0i<=OrdersTotal()-1i++) 
 { 
 if(
OrderSelect(i,SELECT_BY_POS))
 { 
 if(
OrderMagicNumber()==magic
 { 
 if(
OrderSymbol()==Symbol()) 
 { 
double fir_op_pr=OrderOpenPrice();
break; 
 } 
 } 
 } 
 } 
20.01.2013, 10:22
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 701
Поблагодарили 276 раз(а) / Репутация: 276
PHP код:
for(int i=0i<=OrdersTotal()-1i++) 
 { 
 if(
OrderSelect(i,SELECT_BY_POS))
 { 
 if(
OrderMagicNumber()==magic
 { 
 if(
OrderSymbol()==Symbol()) 
 { 
double fir_op_pr=OrderOpenPrice();
break; 
 } 
 } 
 } 
 } 
Спасибо, eevviill, но мне хочется, чтобы цена открытия была именно на указанной мной свече, то есть как я уже писал, типа так - OrderOpenPrice[i]. Возможно такое?
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе
20.01.2013, 10:25
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 701
Поблагодарили 276 раз(а) / Репутация: 276
То есть берём ту свечу,на которой первым по времени открылся ордер и берём цену открытия этого ордера на этой свече
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе

Последний раз редактировалось Алекc1234; 20.01.2013 в 10:31.
20.01.2013, 10:38
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,034 раз(а) / Репутация: 9034
  • Отправить сообщение для eevviill с помощью Skype™
Сообщение от: Алекc1234
Спасибо, eevviill, но мне хочется, чтобы цена открытия была именно на указанной мной свече, то есть как я уже писал, типа так - OrderOpenPrice[i]. Возможно такое?
PHP код:
for(int i=0i<=OrdersTotal()-1i++)  
 {  
 if(
OrderSelect(i,SELECT_BY_POS)) 
 {  
 if(
OrderMagicNumber()==magic)  
 {  
 if(
OrderSymbol()==Symbol())  
 {  
int fir_or_time OrderOpenTime(); 
int i iBarShift(NULL,0,fir_or_time); 
break;  
 }  
 }  
 }  
 } 

PHP код:
for(int i=0i<=OrdersTotal()-1i++)  
 {  
 if(
OrderSelect(i,SELECT_BY_POS)) 
 {  
 if(
OrderMagicNumber()==magic)  
 {  
 if(
OrderSymbol()==Symbol())  
 {  
if(
OrderOpenTime()>=Time[i] && OrderOpenTime()<Time[i-1])
{
double fir_op_on_bar_price=OrderOpenPrice();
break;  
}
 }  
 }  
 }  
 } 
20.01.2013, 10:52
Аватар для Allis Amazing
Allis Amazing Allis Amazing вне форума Интересующийся
Регистрация: 22.07.2012 / Сообщений: 19
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
Сообщение от: Allis Amazing
Ай, спасибо, посмотрю. Просто человек который знает тему, всегда может отличить "толковый букварь" от "ну что-то там на эту тему написано")))
Изучать нужно по букварю. Их навалом, главное выбрать правильный.
Так вот же жжжжж, это и попросила в итоге!
Господа программисты, подскажите, пожалуйста, ПРАВИЛЬНЫЙ букварь!!
20.01.2013, 11:02
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Я подсказывал, но моё мнение тебя не интересовало. Сам сусам.

Где ты подсказывал? Мне очень интересно увидеть тот пост...

Я об этом и писал. Зачем советуешь другим, способ как изучать язык, если сам его не изучил?

Вопрос поствлен не верно. Я язык изучил, но ещё не на 100%. Ну логично что всё знать сразу не будешь. Хотя уже понаписал череду экспертов различных, и, уже понимание есть довольно-таки ясное. НО не всегда.. не спорю..

[QUOTE=Ugar;561009]Вот это и заметно. Создатели языка не писали учебник. Автор Сергей Ковалёв, а не метаквоты.


Да я в курсе, не хотел уже канкретно на Кавалёва наезжать. НО метаквоты вообще мудаки, сами вообще ничего не сделали для блага пользователей, только деньги стригут с ДЦ и не более того. Это называется "зажрались".


Учебников по MQL4 навалом, не нравится этот можно найти другой. Лично я изучал по другому. К сожалению он у меня не сохранился.

Хватает учебников по Си, а по MQL4 всё тоже самое. Хотя есть на английском языке, но.. там уже нужно знать английский язык, и не каждый будет читать её (хотя я читал кусками, что интересно).

Если учебник размещён на сайте mql значит он одобрен метаквотами, так же это может означать что, по их мнению, именно в этом учебнике меньше косяков.

Это может означать лишь то, что метаквотовцам плевать на то, какой там учебник. Сами они и пальцем не пошевелили, чтобы пользователю с нуля научиться программировать чётко и ясно.

Последний раз редактировалось hoz; 20.01.2013 в 11:12.
20.01.2013, 11:05
Регистрация: 13.03.2009 / Сообщений: 2,394
Поблагодарили 1,974 раз(а) / Репутация: 2051
Очень не желательно объявлять переменную внутри цикла или после условия.
Код:
for(int i=0; i<=OrdersTotal()-1; i++)   
 {   
 if(OrderSelect(i,SELECT_BY_POS))  
 {   
 if(OrderMagicNumber()==magic)   
 {   
 if(OrderSymbol()==Symbol())   
 {   
if(OrderOpenTime()>=Time[i] && OrderOpenTime()<Time[i-1]) 
{ 
double fir_op_on_bar_price=OrderOpenPrice(); 
break;   
} 
 }   
 }   
 }   
 }  
При таком объявлении переменной, в случае отсутствия ордеров открытых советником, переменная fir_op_on_bar_price не будет существовать, так как не была объявлена. Значит применять её за пределами цикла можно будет только при наличии ордеров советника. При отсутствии, обращение к переменной, приведёт к ошибке, или даже зависанию программы.
То же а в этом коде
Код:
for(int i=0; i<=OrdersTotal()-1; i++)   
 {   
 if(OrderSelect(i,SELECT_BY_POS))  
 {   
 if(OrderMagicNumber()==magic)   
 {   
 if(OrderSymbol()==Symbol())   
 {   
int fir_or_time = OrderOpenTime();  
int i = iBarShift(NULL,0,fir_or_time);  
break;   
 }   
 }   
 }   
 }  
Здесь переменные fir_or_time будут существовать только при наличии ордеров советника. И ещё fir_or_time должна быть datetime, а не int типа. Переменная i объявлена в цикле for и в ней порядковый номер ордера. И тут же объявлена повторно и в ней номер бара. Кроме буквы i есть ещё и другие для переменных. Так же можно использовать сочетание букв.

Пожалуй лучше объявлять переменные заранее, а внутри цикла только присваивать им значение. Например в начале функции start() самое удобное место для объявления локальных переменных.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
20.01.2013, 11:22
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 701
Поблагодарили 276 раз(а) / Репутация: 276
Очень не желательно объявлять переменную внутри цикла или после условия.
Код:
for(int i=0; i<=OrdersTotal()-1; i++)   
 {   
 if(OrderSelect(i,SELECT_BY_POS))  
 {   
 if(OrderMagicNumber()==magic)   
 {   
 if(OrderSymbol()==Symbol())   
 {   
if(OrderOpenTime()>=Time[i] && OrderOpenTime()<Time[i-1]) 
{ 
double fir_op_on_bar_price=OrderOpenPrice(); 
break;   
} 
 }   
 }   
 }   
 }  
При таком объявлении переменной, в случае отсутствия ордеров открытых советником, переменная fir_op_on_bar_price не будет существовать, так как не была объявлена. Значит применять её за пределами цикла можно будет только при наличии ордеров советника. При отсутствии, обращение к переменной, приведёт к ошибке, или даже зависанию программы.
То же а в этом коде
Код:
for(int i=0; i<=OrdersTotal()-1; i++)   
 {   
 if(OrderSelect(i,SELECT_BY_POS))  
 {   
 if(OrderMagicNumber()==magic)   
 {   
 if(OrderSymbol()==Symbol())   
 {   
int fir_or_time = OrderOpenTime();  
int i = iBarShift(NULL,0,fir_or_time);  
break;   
 }   
 }   
 }   
 }  
Здесь переменные fir_or_time будут существовать только при наличии ордеров советника. И ещё fir_or_time должна быть datetime, а не int типа. Переменная i объявлена в цикле for и в ней порядковый номер ордера. И тут же объявлена повторно и в ней номер бара. Кроме буквы i есть ещё и другие для переменных. Так же можно использовать сочетание букв.

Пожалуй лучше объявлять переменные заранее, а внутри цикла только присваивать им значение. Например в начале функции start() самое удобное место для объявления локальных переменных.
Спасибо, действительно, по варианту eevvillla в тестере происходило зависание, а когда присвоил разные буквы переменным в цикле и в номере бара, то заработало! И всё-таки всё-равно не так как хотелось бы. Может Вы подскажете, как правильно в коде сделать мою просьбу?
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе
20.01.2013, 11:28
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Сообщение от: Allis Amazing
Так вот же жжжжж, это и попросила в итоге!
Господа программисты, подскажите, пожалуйста, ПРАВИЛЬНЫЙ букварь!!

Держи! У каждого автора разные темы по своему разобраны. Но в целом, вполне адекватные книги.
20.01.2013, 11:53
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
И ещё fir_or_time должна быть datetime, а не int типа.

Согласен с предыдущим постом, кроме этого момента. fir_or_time - это переменная времени. Время это - целое число.. Значит тип - int.
20.01.2013, 13:37
Регистрация: 13.03.2009 / Сообщений: 2,394
Поблагодарили 1,974 раз(а) / Репутация: 2051
Согласен с предыдущим постом, кроме этого момента. fir_or_time - это переменная времени. Время это - целое число.. Значит тип - int.
Ну тогда расскажи мне. зачем существует datetime тип?
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
20.01.2013, 13:57
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Ну тогда расскажи мне. зачем существует datetime тип?

Для того чтобы указывать тип для переменных даты. Дата и время это разные вещи. На днях я просматривал форум мкьэловский, и там, как-раз таки коснулись вопроса подобного. В общем-то все дружно согласились с тем, что время это инт, и сказал это профессионал изначально, которому я лично доверяю.
20.01.2013, 14:50
Регистрация: 13.03.2009 / Сообщений: 2,394
Поблагодарили 1,974 раз(а) / Репутация: 2051
Для того чтобы указывать тип для переменных даты. Дата и время это разные вещи. На днях я просматривал форум мкьэловский, и там, как-раз таки коснулись вопроса подобного. В общем-то все дружно согласились с тем, что время это инт, и сказал это профессионал изначально, которому я лично доверяю.
Ух ты, а я не знал. Тогда будь добр, поясни чем отличается дата от времени?
Конкретно о чём шла речь изначально
Цитата:
datetime OrderOpenTime( )
Возвращает время открытия выбранного ордера.
Это дата или время? Если время то почему в нем есть дата?
Если дата то почему в нём есть время?
Сам проверь, после выбора ордера, напечатай в журнал
Print(TimeToStr(OrderOpenTime(),TIME_DATE));
Print(TimeToStr(OrderOpenTime(),TIME_SECONDS));
А можешь напечатать одной строкой
Print(TimeToStr(OrderOpenTime(),TIME_DATE | TIME_SECONDS));
А то что на форумах пишут надо фильтровать своими мозгами. В этом поможет справочник и Print()

А вот если бы ты почитал учебник, такого бы не писал на форуме и не позорился. Легко бы разбирался где можно int, а где datetime.
_http://book.mql4.com/ru/functions/datetime

Для грамотного программиста хватило бы и справочника
int Day( )
int DayOfWeek( )
int Hour( )
int TimeHour( datetime time)
...
datetime TimeCurrent( )
datetime TimeLocal( )
datetime OrderOpenTime( )
datetime OrderCloseTime( )
Если не видишь и не понимаешь разницы, зачем затеваешь спор?
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!

Последний раз редактировалось Ugar; 20.01.2013 в 15:24.
23.01.2013, 16:35
Аватар для chocolate
chocolate chocolate вне форума Администратор
Регистрация: 18.06.2010 / Адрес: Россия/Тольятти / Сообщений: 3,630
Поблагодарили 3,144 раз(а) / Репутация: 3199
Огромная просьба большие выкладки кода вставлять под спойлер

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

пример текста
[свернуть]

PHP код:
[SPOILER]пример текста[/SPOILER
FAQ по форуму или ответы на все вопросы пользователей

Как вставить видео с Youtube?


Модератор - он не надзиратель, а дружественный пользователю участник. (с)

Есть вопросы по форуму? С радостью отвечу.

Биржевые линейки
23.01.2013, 19:44
Аватар для progenitor
progenitor progenitor вне форума Интересующийся
Регистрация: 28.09.2010 / Сообщений: 1
Поблагодарили 0 раз(а) / Репутация: 1

По умолчанию Запись в массивы

В функции начальной инициализации init хочу заполнить массив(ы) для дальнейшей обработки уже в функции start. но массив получается с одними нулями.

//--- buffers

double ma[]; //массив для скользящей средней
double stoch[]; //массив для записи стохастика

int init()
{

SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ma);


int bars_for_count = Bars;

for(int i=0; i<bars_for_count; i++)
{
ma[i]=iMA(Symbol(),240,52,0,MODE_EMA,PRICE_CLOSE,i);
stoch[i]=iStochastic(Symbol(),60,4,7,3,MODE_SMA,PRICE_CLOS E,1,i);

Alert("ma[i]="+ma[i]);
Alert("stoch[i]="+stoch[i]);
}
return(0);
}

алерты для проверки, при первом запуске все нули, после компиляции только в скользящей стедней появляются значения а стохастик по прежнему нули пишет.
Кто подскажет где путаница?
Заранее благодарен
24.01.2013, 03:57
Аватар для qqmber
qqmber qqmber вне форума Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
В функции начальной инициализации init хочу заполнить массив(ы) для дальнейшей обработки уже в функции start. но массив получается с одними нулями.
...
алерты для проверки, при первом запуске все нули, после компиляции только в скользящей стедней появляются значения а стохастик по прежнему нули пишет.
Кто подскажет где путаница?
Заранее благодарен
Память под индексные буфера выделяется после выполнения init(), т.е. заполнять их можно только в start().
Если перезагрузка кода вызвана его перекомпиляцией, то глобальные массивы не переинициализируются, ma[] будет иметь отведенную память и какие-то значения даже в init(), но я бы не стал на это рассчитывать.
Под стохастик место вообще не будет выделено пока он не объявлен индексным буфером.
Ответить

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


Опции темы

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

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



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


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