Ответить
24.03.2012, 14:49
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

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

пример нам надо добавлять 5 пунктов к стоплосу и тп
описываем переменную
int sl_shift = 5
как теперь ее добавить к double (sl=sl+sl_shift)
double sl = 1.3200
так чтобы в результате получилось 1.3205, а не 6.3200
Надо без скобок и объявить sl через int. sl не может быть ценой. Это растояние в пунктах от цены открытия ордера. Так что через int надо объявлять.

int sl_shift = 5;
int sl = 10;
int sl_shift;
sl_shift = sl_shift+sl;
24.03.2012, 14:50
Аватар для SilverKZ
SilverKZ SilverKZ вне форума Элитный участник
Регистрация: 25.10.2008 / Сообщений: 320
Поблагодарили 1,511 раз(а) / Репутация: 1512
а теперь вопросы по типам переменных.
каким образом конвертировать одни в другие.

пример нам надо добавлять 5 пунктов к стоплосу и тп
описываем переменную
int sl_shift = 5
как теперь ее добавить к double (sl=sl+sl_shift)
double sl = 1.3200
так чтобы в результате получилось 1.3205, а не 6.3200
sl = sl + sl_shift * Point;

где Point - предопределенная переменная, которая = размеру пункта текущего инструмента в валюте котировки.
24.03.2012, 14:55
Аватар для Beast
Beast Beast вне форума Почётный гражданин
Регистрация: 12.10.2011 / Сообщений: 812
Поблагодарили 408 раз(а) / Репутация: 412
Надо без скобок и объявить sl через int. sl не может быть ценой. Это растояние в пунктах от цены открытия ордера. Так что через int надо объявлять.

int sl_shift = 5;
int sl = 10;
int sl_shift;
sl_shift = sl_shift+sl;
дело в том что этот конкретный пример нужно прикрутить к копировщику. он получает тп и сл в формате дабл, определенные значения которые являются ценой.

sl = sl + sl_shift * Point;

где Point - предопределенная переменная, которая = размеру пункта текущего инструмента в валюте котировки.
именно то что нужно. буду копаться в коде дальше

о! возник с ходу вопрос.
возмем мои прежние условия. sl=1.3200
а правильно ли будет считаться, если sl_shift будет отрицательным?
т.е. например в условии if/else определяем ордер бай или селл
если бай, то sl_shift=--sl_shift

правильно ли в таком случае отработает sl = sl + sl_shift * Point и мы получим 1.3195?

Последний раз редактировалось Beast; 24.03.2012 в 15:06.
24.03.2012, 15:17
Аватар для SilverKZ
SilverKZ SilverKZ вне форума Элитный участник
Регистрация: 25.10.2008 / Сообщений: 320
Поблагодарили 1,511 раз(а) / Репутация: 1512
дело в том что этот конкретный пример нужно прикрутить к копировщику. он получает тп и сл в формате дабл, определенные значения которые являются ценой.



именно то что нужно. буду копаться в коде дальше

о! возник с ходу вопрос.
возмем мои прежние условия. sl=1.3200
а правильно ли будет считаться, если sl_shift будет отрицательным?
т.е. например в условии if/else определяем ордер бай или селл
если бай, то sl_shift=--sl_shift

правильно ли в таком случае отработает sl = sl + sl_shift * Point и мы получим 1.3195?
Отработает правильно
Арифметика простая 1.3200 + (-5) * 0.0001 = 1.3200 - 0.0005 = 1.3195
но я бы ввел отдельную переменную для итогового значения
24.03.2012, 16:08
Аватар для Beast
Beast Beast вне форума Почётный гражданин
Регистрация: 12.10.2011 / Сообщений: 812
Поблагодарили 408 раз(а) / Репутация: 412
Отработает правильно
Арифметика простая 1.3200 + (-5) * 0.0001 = 1.3200 - 0.0005 = 1.3195
но я бы ввел отдельную переменную для итогового значения
ну вот вроде скомпилировался без проблем
tp_shift и sl_shift вынесены в extern

Цитата:
if(invert==1)
{
if(tip==OP_BUY)
{
tip=OP_SELL; sls_shift=sl_shift*(-1); tps_shift=tp_shift;
}
else if(tip==OP_SELL)
{
tip=OP_BUY; sls_shift=sl_shift; tps_shift=tp_shift*(-1);
}
...........

dtp=tp; dsl=sl;
tp=dsl+tps_shift*Point; sl=dtp+sls_shift*Point;
24.03.2012, 17:19
Аватар для Dimentor-spb
Dimentor-spb Dimentor-spb вне форума Местный житель
Регистрация: 03.11.2011 / Адрес: SPb-Lugansk / Сообщений: 165
Поблагодарили 169 раз(а) / Репутация: 170
Буду почитывать толкование MQL для понимания общей картины происходящего в коде,
если топикстартер не против. Спасибо Вам за старания.
24.03.2012, 18:13
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,032 раз(а) / Репутация: 9032
  • Отправить сообщение для eevviill с помощью Skype™
Сообщение от: Dimentor-spb
Буду почитывать толкование MQL для понимания общей картины происходящего в коде,
если топикстартер не против. Спасибо Вам за старания.
Я не против. Просто когда я открыл стандартный учебник и первый раз увидел как там объясняют, то тогда у меня отпало желание учить MQL4.
25.03.2012, 08:13
Аватар для skalper2011
skalper2011 skalper2011 вне форума Декомпилятор
Регистрация: 22.09.2011 / Сообщений: 863
Поблагодарили 1,248 раз(а) / Репутация: 1252
  • Отправить сообщение для skalper2011 с помощью Skype™
Для лучшего понимания скачайте видеокурс по программированию
_http://file.karelia.ru/zrz98j/
25.03.2012, 18:25
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

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

По умолчанию Урок 4 - написание простейшего скрипта

Добрый вечер. Сегодня будем пробовать создавать простейший скрипт. Как попасть в Meta Editor описано в 2-ом уроке.

РЕКОМЕНДАЦИЯ. После моего объяснения постаратся создать скрипт с другими переменными и их названиями (без подглядывания на форум).

ЗАДАЧИ. Понять что я написал, создать и выложить свой скрипт.

Я напишу скрипт и подробное объяснение к нему. Наш скрипт будет считать суму 2-ух чисел и выводить на экран(сигнал-слева от него колокольчик).
Итак начнём.

Скрипт

PHP код:
1)#property copyright "eevviill"
2)#property show_inputs
3)extern double a 4;
4)extern double b 7;
5)double c;

6)int start()
7){
8)c=a+b;
  
9)Alert(c);
10)return(0);
11)  } 
Пояснение

1)Это не обязательная строка. В ней пишется кому принадлежат авторские права на файл. Пишется #property copyright "" В кавычках тот, кому принадлежат авторские права.

2)Эта функция даёт возможность, при прикреплении скрипта к графику, менять переменные которые в файле имеют приписку extern. В советниках и индикаторах чтобы увидеть, при прикреплении файла к графику, переменные с припиской extern этой функции не надо. Пишется #property show_inputs

3)Первая переменная. Так как она написана, это называется объявлением переменной. Это делается для того чтобы файл знал с какой переменной имеет дело, какого она типа, её значение и выводить ли переменную в свойства файла при прикреплении файла к графику. Желательно, рекомендовано и необходимо объявлять переменные вначале файла(но не обязательно. можно и в самой функции). Итак.
3.1)extern - значит что мы выводим переменную в свойства файла при прикреплении его к графику.
3.2)double - значит что мы указываем тип переменной(урок 2). В нашем случае переменная может быть с дробной частью.
3.3)a значит что мы указываем название переменной.
3.4)= значит что мы присваиваем переменной какое то значение.
3.5)4 значит что мы присвоили переменной число 4.
3.6); значит что мы закончили объявлять переменную(урок 3).
Пишется extern double a = 4;
4)Аналогично с 3)
5)Мы объявили переменную, но не вывели во внешние переменные(прикрепление к графику) и не присвоили ей значения. Тоесть без extern и без =
Пишется double c;
6)После объявления переменных идёт название функции где проходят все вычесления. А именно фунция Старт.
Пишется int start()
7)Левая квадратная скобка. Обязательно должна быть после написания названия функции. Она указывает на начало расчётов в функции.
Пишется {
8)Собственно наш расчёт. Где a и b это нашы переменные которые мы можем менять во внешних переменных(прикрепление к графику).
с у нас будет ровно сумме a и b(значение которых мы укажем).
Пишется c=a+b;
9)Это выхов сигнала при прикрепленни файла к графику. Итак.
9.1)Alert значит что мы указали функцию, которая выведет на екран сообщение.
9.2)(с) значит что мы указали в скобках что нам выводить в сообщении на экран. Если с, то после пересчёта его значения, в сообщении выведется результат.
9.3); значит конец действия(по простому - точка).
Пишется Alert(c);
10)Это оператор. Если расчёты без ошибок он возвращает 0 и работа файла продолжается дальше. Можно не 0 писать в скобках, но в редких случаях.
Пишется return(0);
11)Правая квадратная скобка. Обязательно должна быть после окончания расчётов. Она указывает на конец расчётов в функции.
Пишется }

Последний раз редактировалось chocolate; 14.05.2012 в 12:44.
25.03.2012, 19:45
Аватар для Mango.
Mango. Mango. вне форума Местный житель
Регистрация: 12.10.2011 / Сообщений: 326
Поблагодарили 163 раз(а) / Репутация: 182
10)Это оператор. Если расчёты без ошибок он возвращает 0 и работа файла продолжается дальше. Можно не 0 писать в скобках, но в редких случаях.
Пишется return(0);
Возвращает 0 куда? А если написать return(с)?
По остальной части кода всё понятно описано.
25.03.2012, 20:12
Аватар для Mango.
Mango. Mango. вне форума Местный житель
Регистрация: 12.10.2011 / Сообщений: 326
Поблагодарили 163 раз(а) / Репутация: 182
Вот мой скрипт: вместо функции Alert() использовал
Comment() - функция выводит комментарий, определенный пользователем, в левый верхний угол графика.

extern double a=20;
extern double b=50;
extern double c;

int start()
{

c=a+b;

Comment(c);

return(0);
}
25.03.2012, 20:16
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,032 раз(а) / Репутация: 9032
  • Отправить сообщение для eevviill с помощью Skype™
Возвращает 0 куда? А если написать return(с)?
По остальной части кода всё понятно описано.
В вызывающую функцию. В нашем случае int start()
25.03.2012, 20:22
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,032 раз(а) / Репутация: 9032
  • Отправить сообщение для eevviill с помощью Skype™
Вот мой скрипт: вместо функции Alert() использовал
Comment() - функция выводит комментарий, определенный пользователем, в левый верхний угол графика.

extern double a=20;
extern double b=50;
extern double c;

int start()
{

c=a+b;

Comment(c);

return(0);
}
10 балов вам. Не поменяли названия переменных. Не выложили файл.

P.S. Забыл добавить. После того как написали, надо скомпилировать. Хотя бы для того чтобы проверить ошибки.
Послезавтра будем писать скрипт по нахождению размера лота для открытия ордера от депо.
26.03.2012, 10:31
Регистрация: 13.03.2009 / Сообщений: 2,366
Поблагодарили 1,968 раз(а) / Репутация: 2045
1)#property copyright "eevviill"
2)#property show_inputs
3)extern double a = 4;
4)extern double b = 7;
5)double c;

6)int start()
7){
8)c=a+b;

9)Alert(c);
10)return(0);
11) }

Пояснение


10)Это оператор. Если расчёты без ошибок он возвращает 0 и работа файла продолжается дальше. Можно не 0 писать в скобках, но в редких случаях.
Пишется return(0);
Я прошу прощения, не вытерпел.
В функциях int init(), int deinit(), int start() если выполняется return(0); это ничего и никуда не возвращает, и тем более не выплняется дальше. Это просто выход из соответствующей функции. Просто нечему возвращать. Конкретно в скрипте выход из функции start() это завершение работы скрипта. Так что, в скрипте, в функции start(), return(0); это значит завершить работу скрипта.
Например:
extern double a = 4;
extern double b = 7;
double c;
int start()
{
//Если здесь вписать return(0); то скрипт работать не будет.
//Он завершит работу сразу после запуска.

c=a+b;
Alert(c);
//выход из функции старт. Завершение работы скрипта.
return(0);
}
return возвращает только в пользовательской функции и только если она не void типа. Там обязательно в скобках должно быть указано что возвращать. Если функция void типа то в конце должно быть return; без скобок. Так как void не подразумевает никаких возвратов. Просто выход.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!

Последний раз редактировалось Ugar; 26.03.2012 в 10:43.
26.03.2012, 11:02
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,032 раз(а) / Репутация: 9032
  • Отправить сообщение для eevviill с помощью Skype™
Ugar спасибо за пояснение.
26.03.2012, 11:07
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,032 раз(а) / Репутация: 9032
  • Отправить сообщение для eevviill с помощью Skype™
Вижу только Mango. написал всё ли ему понятно. ОК. Значит буду у него спрашивать всё ли я доступно объяснил.
Сегодня сделаем скрипт калькулятор.
26.03.2012, 12:47
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

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

По умолчанию Урок 5 - скрипт калькулятор

Добрый день. Судя по тому что после четвёртого урока вопрос был один и на него Ugar ответил разборчиво, можна сделать вывод что можно продолжать дальше.
Сегодня напишем скрипт, который будет выполнять функции калькулятора. Подробно останавливатся на том, что было описано в прошлых уроках не буду.

ЗАДАЧИ. Понять что я написал в скрипте и без помощи форума написать похожий скрипт(с другими названиями и значениями переменных). Указать значение переменной(2-ое объяснение).

Скрипт.
PHP код:
#property copyright "eevviill"
#property show_inputs
1)extern double a 4;
extern double b 7;
2)extern string Znak;
3)string Plus "+";
string Minus "-";
string Umnogenie "*";
string Delenie "/";
double  c;
 
 
int start()
  {
4)if(Znak==Plusc=a+b;
if(
Znak==Minusc=a-b;
if(
Znak==Umnogeniec=a*b;
if(
Znak==Deleniec=a/b;
5)Alert(DoubleToStr(c,8));
6)return(0);
  } 
Пояснение.
1)Был выбран тип данных double(урок 2). Посколько у нас скрипт должен выполнять функцию калькулятора, то мы можем вводить не только целые числа.
2)Был выбран тип данных string(урок 2), потому что +-*/ относятся к этому типу данных, а именно "Строковый тип данных". Переменная выведена во внешние свойства файла(прикрепление к графику) и значение этой переменной не указано потому что мы сами будем её выбирать при прикреплению к графику. Но значение можно указать и тогда оно во внешних свойствах будет отображатся по умолчанию.
3)Был выбран тип данных string(урок 2), потому что +-*/ относятся к этому типу данных, а именно "Строковый тип данных". Значения переменных указано.
4)Здесь используется функция if(). Очень необходимая функция. Если дословно озвучить что написано в этой строке, то выйдет так "Если значение переменной Znak равняется значению переменной Plus, то переменной с присваиваится сумма значений 2-ух переменных а и b."
Пишется if(Znak==Plus) c=a+b;
4.1)if() значит что мы в скобках записываем какое то условие. Например Znak==Plus.
4.2)Znak==Plus. == не означает ровно(присвоить значение). Знак проверяет одинаковы ли значения переменных.
4.3)c=a+b значит что если в функции if() то что в скобках истинно, то выполняется действие которое стоит после скобок.
5)Поскольку у нас скрипт-калькулятор, то надо чтобы он выводил нам результат с определённым количеством цифр после запятой.
DoubleToStr(с,8) имеет 2 свойства.
5.1)(с,) первым записывается название переменной(функция бедет брать её значение).
5.2)(,8) вторым записывается количество цифр после запятой которое буде выводится на экран(например 7,88990011).
Пишется DoubleToStr()
6)retutn(0) значит что мы закончили расчёты в функции int start()

Последний раз редактировалось chocolate; 14.05.2012 в 12:44.
27.03.2012, 06:19
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,032 раз(а) / Репутация: 9032
  • Отправить сообщение для eevviill с помощью Skype™
Ребятишки. Так дело не пойдёт. Если никто не отпишется всё ли понятно, я продолжать не буду. Если никому не надо, то смысл что я здесь штампую?
27.03.2012, 07:52
Аватар для Mango.
Mango. Mango. вне форума Местный житель
Регистрация: 12.10.2011 / Сообщений: 326
Поблагодарили 163 раз(а) / Репутация: 182
Всё понятно.
27.03.2012, 14:45
Аватар для Beast
Beast Beast вне форума Почётный гражданин
Регистрация: 12.10.2011 / Сообщений: 812
Поблагодарили 408 раз(а) / Репутация: 412
Ребятишки. Так дело не пойдёт. Если никто не отпишется всё ли понятно, я продолжать не буду. Если никому не надо, то смысл что я здесь штампую?
ты пиши, пиши
возникнут вопросы отпишемся, а пока вопросов нет - зачем тему флудом засорять?
Ответить


Опции темы

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

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



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


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