Вторник, 07.05.2024, 00:31
 
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Xrust Форум » Основной форум » Вопросы начинающих знакомиться с языком MQL4 » Вопросы начинающих знакомиться с языком MQL4 (Спрашивайте - отвечаем)
Вопросы начинающих знакомиться с языком MQL4
xrustДата: Среда, 13.08.2008, 03:16 | Сообщение # 1
Admin
Группа: Администраторы
Сообщений: 489
Репутация: 1
Статус: Offline
прошу smile

"Телефон - это проклятье человечества!" масяня.
 
wikДата: Суббота, 16.08.2008, 21:29 | Сообщение # 2
Майор
Группа: Проверенные
Сообщений: 83
Репутация: 0
Статус: Offline
Quote (xrust)
прошу

Страшно tongue

 
xrustДата: Суббота, 16.08.2008, 21:44 | Сообщение # 3
Admin
Группа: Администраторы
Сообщений: 489
Репутация: 1
Статус: Offline
Учиться - никогда не поздно, и совсем не страшно ! еще smile
"Тяжело в учении - легко в бою"
я ведь и сам только учусь, так что давайте учиться вместе smile


"Телефон - это проклятье человечества!" масяня.
 
wikДата: Воскресенье, 17.08.2008, 11:54 | Сообщение # 4
Майор
Группа: Проверенные
Сообщений: 83
Репутация: 0
Статус: Offline
Quote (xrust)
Учиться - никогда не поздно, и совсем не страшно ! еще
"Тяжело в учении - легко в бою"
я ведь и сам только учусь, так что давайте учиться вместе

Ну тогда командуйте. pray
Для начала, насколько я понимаю, всем срочно изучить "азбуку"? bash
Чтоб хотя-бы понимать о чём идет речь? good

 
xrustДата: Понедельник, 18.08.2008, 02:33 | Сообщение # 5
Admin
Группа: Администраторы
Сообщений: 489
Репутация: 1
Статус: Offline
Конечно! Азбука находиться Здесь доступная для скачки

Здесь посмотреть онлайн

я лично предпочитаю это


"Телефон - это проклятье человечества!" масяня.
 
xrustДата: Понедельник, 18.08.2008, 02:47 | Сообщение # 6
Admin
Группа: Администраторы
Сообщений: 489
Репутация: 1
Статус: Offline
Язык достаточно простой, я бы сказал урезанный, так, как предназначен только для работы в среде платформы Метатрейдер, но этого вполне достаточно. Так как в этой среде возможны всего лищь три конструкции, начнем с их описания.
Итак:


"Телефон - это проклятье человечества!" масяня.
 
xrustДата: Понедельник, 18.08.2008, 05:33 | Сообщение # 7
Admin
Группа: Администраторы
Сообщений: 489
Репутация: 1
Статус: Offline
Конструкция первая - Пользовательский индикатор, блок схема :
//+------------------------------------------------------------------+
//| Primer.mq4 |
//| Copyright © 2008, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
// Заголовок , или описательная часть,здесь описываем все элементы
// которые будут включены в программу
#property copyright "#Copyright © 2008, XrustSolution.#"
#property link "#xrust.ucoz.net#"
#property show_inputs // Показывать окно с переменными при старте
#include <stdlib.mqh> // #include - "включено"- то что будет добавленно
//в код программы, в данном случае это библиотека с описанием ст.ошибок
#property indicator_separate_window // индикатор в отдельном окне
#property indicator_buffers 4 //кол во буферов инд или линий, значков, и пр.
#property indicator_color1 Red // цвет первого буфера
#property indicator_color2 Blue //
#property indicator_color3 Lime //
#property indicator_color4 Yellow //
//---- input parameters внешние переменные индикатора, которые мозно менять через "свойства"
extern bool ExtParam1=0; // Внешние переменные
extern int ExtParam2=0; //
extern double ExtParam3=0; //
extern color ExtParam4=Red; //
extern string ExtParam5="Privet! :)"; //
//---- buffers
double ExtMapBuffer1[]; // описание буферов индикатора
double ExtMapBuffer2[]; // буфер- массив, значение которого
double ExtMapBuffer3[]; // будет выводиться на дисплей
double ExtMapBuffer4[]; // в окне индикатора
//---- Glibal variables
bool a;//переменная булевого типа , принимает значения ложь\истина
int x,y,asd[100];//тип целого числа
//asd[100]-так обьявляються массивы в данном примере одномерный массив на 100 знач
double n,m;//пер. с плавающей точкой 0,1 0,258 и т.д.
string str="Пример";//строковые переменные
datetime Time_Of;//переменые даты, и времени описание читать в учебнике
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
// инициализирующая часть, выполняется однократно при установке на график,
// или смены таймфрейма.
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE);//первый буфф.рис линию
SetIndexBuffer(0,ExtMapBuffer1);//
SetIndexStyle(1,DRAW_HISTOGRAM);//второй гистограмму
SetIndexBuffer(1,ExtMapBuffer2);//
SetIndexStyle(2,DRAW_SECTION);//третий секциями как в зигзаге
SetIndexBuffer(2,ExtMapBuffer3);
SetIndexEmptyValue(2,0.0);
SetIndexStyle(3,DRAW_ARROW);//четвертый рис. стрелочки
SetIndexArrow(3,217);//код стрелочек см. в хелпе
SetIndexBuffer(3,ExtMapBuffer4);
SetIndexEmptyValue(3,0.0);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
// Деинициализационная часть, вып при завершении программы
//
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
//----
// Собственно тело программы выпоняеться по кольцу, с приходом новогог тика
//----
return(0);
}
//+------------------------------------------------------------------+
// продолжение следует smile


"Телефон - это проклятье человечества!" масяня.
 
xrustДата: Пятница, 22.08.2008, 19:50 | Сообщение # 8
Admin
Группа: Администраторы
Сообщений: 489
Репутация: 1
Статус: Offline
Ответ на вопрос по стохастику:

Вариан первый курочим пользовательские индикаторы smile
1)В терминале открываем пользовательские индикаторы, и находим там Stochastic? вот он

//+------------------------------------------------------------------+
//| Stochastic.mq4 |
//| Copyright © 2004, MetaQuotes Software Corp. |
//| http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net/"

#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_buffers 2
#property indicator_color1 LightSeaGreen
#property indicator_color2 Red
//---- input parameters
extern int KPeriod=5;
extern int DPeriod=3;
extern int Slowing=3;
//---- buffers
double MainBuffer[];
double SignalBuffer[];
double HighesBuffer[];
double LowesBuffer[];
//----
int draw_begin1=0;
int draw_begin2=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
string short_name;
//---- 2 additional buffers are used for counting.
IndicatorBuffers(4);
SetIndexBuffer(2, HighesBuffer);
SetIndexBuffer(3, LowesBuffer);
//---- indicator lines
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0, MainBuffer);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1, SignalBuffer);
//---- name for DataWindow and indicator subwindow label
short_name="Sto("+KPeriod+","+DPeriod+","+Slowing+")";
IndicatorShortName(short_name);
SetIndexLabel(0,short_name);
SetIndexLabel(1,"Signal");
//----
draw_begin1=KPeriod+Slowing;
draw_begin2=draw_begin1+DPeriod;
SetIndexDrawBegin(0,draw_begin1);
SetIndexDrawBegin(1,draw_begin2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Stochastic oscillator |
//+------------------------------------------------------------------+
int start()
{
int i,k;
int counted_bars=IndicatorCounted();
double price;
//----
if(Bars<=draw_begin2) return(0);
//---- initial zero
if(counted_bars<1)
{
for(i=1;i<=draw_begin1;i++) MainBuffer[Bars-i]=0;
for(i=1;i<=draw_begin2;i++) SignalBuffer[Bars-i]=0;
}
//---- minimums counting
i=Bars-KPeriod;
if(counted_bars>KPeriod) i=Bars-counted_bars-1;
while(i>=0)
{
double min=1000000;
k=i+KPeriod-1;
while(k>=i)
{
price=Low[k];
if(min>price) min=price;
k--;
}
LowesBuffer[i]=min;
i--;
}
//---- maximums counting
i=Bars-KPeriod;
if(counted_bars>KPeriod) i=Bars-counted_bars-1;
while(i>=0)
{
double max=-1000000;
k=i+KPeriod-1;
while(k>=i)
{
price=High[k];
if(max<price) max=price;
k--;
}
HighesBuffer[i]=max;
i--;
}
//---- %K line
i=Bars-draw_begin1;
if(counted_bars>draw_begin1) i=Bars-counted_bars-1;
while(i>=0)
{
double sumlow=0.0;
double sumhigh=0.0;
for(k=(i+Slowing-1);k>=i;k--)
{
sumlow+=Close[k]-LowesBuffer[k];
sumhigh+=HighesBuffer[k]-LowesBuffer[k];
}
if(sumhigh==0.0) MainBuffer[i]=100.0;
else MainBuffer[i]=sumlow/sumhigh*100;
i--;
}
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
int limit=Bars-counted_bars;
//---- signal line is simple movimg average
for(i=0; i<limit; i++)
SignalBuffer[i]=iMAOnArray(MainBuffer,Bars,DPeriod,0,MODE_SMA,i);
//----
return(0);
}
//+------------------------------------------------------------------+

Задача - научить его читать с других символов,


"Телефон - это проклятье человечества!" масяня.
 
xrustДата: Пятница, 22.08.2008, 19:59 | Сообщение # 9
Admin
Группа: Администраторы
Сообщений: 489
Репутация: 1
Статус: Offline
За данные в нем отвечают такие предопределенные переменные как

Bars[]
Close[]
Open[]
Low[]
High[]

Как видите плосле переменной стоятквадратные скобочки, что означает , что это массив данных, в них мы указываем номер бара на основном чарте к которому будем обращаться
Так как задача стояла читать с других символов, значит надо к ним обратиться,и тут нам поможеттакая конструкция:

iBars(_Symbol,0)
iLow(_Symbol,0,k)
iHigh(_Symbol,0,k)
iClose(_Symbol,0,k)

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

extern string _Symbol="";
extern int KPeriod=5;
extern int DPeriod=3;
extern int Slowing=3;

после чего в блоке "инит()" мы ее проинициализируем : if(_Symbol==""){_Symbol=Symbol();}
в этой строке мы указываем ей , что если строка пустая , то должен использоваться текущий символ

после чего меняем

Close[k] на iClose(_Symbol,0,k)
High[k] на iHigh(_Symbol,0,k)

и так далее, компилим смотрим что у нас получилось:


"Телефон - это проклятье человечества!" масяня.
 
xrustДата: Пятница, 22.08.2008, 20:11 | Сообщение # 10
Admin
Группа: Администраторы
Сообщений: 489
Репутация: 1
Статус: Offline
//+------------------------------------------------------------------+
//| Stochastic.mq4 |
//| Copyright © 2004, MetaQuotes Software Corp. |
//| http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net/"

#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_buffers 2
#property indicator_color1 LightSeaGreen
#property indicator_color2 Red
//---- input parameters
extern string _Symbol="";
extern int KPeriod=5;
extern int DPeriod=3;
extern int Slowing=3;
//---- buffers
double MainBuffer[];
double SignalBuffer[];
double HighesBuffer[];
double LowesBuffer[];
//----
int draw_begin1=0;
int draw_begin2=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
string short_name;
//---- 2 additional buffers are used for counting.
IndicatorBuffers(4);
SetIndexBuffer(2, HighesBuffer);
SetIndexBuffer(3, LowesBuffer);
//---- indicator lines
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0, MainBuffer);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1, SignalBuffer);
//---- name for DataWindow and indicator subwindow label
short_name="Sto("+KPeriod+","+DPeriod+","+Slowing+")";
IndicatorShortName(short_name);
SetIndexLabel(0,short_name);
SetIndexLabel(1,"Signal");
//----
draw_begin1=KPeriod+Slowing;
draw_begin2=draw_begin1+DPeriod;
SetIndexDrawBegin(0,draw_begin1);
SetIndexDrawBegin(1,draw_begin2);
//----
if(_Symbol==""){_Symbol=Symbol();}//
return(0);
}
//+------------------------------------------------------------------+
//| Stochastic oscillator |
//+------------------------------------------------------------------+
int start()
{
int i,k;
int counted_bars=IndicatorCounted();
double price;
//----
if(iBars(_Symbol,0)<=draw_begin2) return(0);
//---- initial zero
if(counted_bars<1)
{
for(i=1;i<=draw_begin1;i++) MainBuffer[iBars(_Symbol,0)-i]=0;
for(i=1;i<=draw_begin2;i++) SignalBuffer[iBars(_Symbol,0)-i]=0;
}
//---- minimums counting
i=iBars(_Symbol,0)-KPeriod;
if(counted_bars>KPeriod) i=iBars(_Symbol,0)-counted_bars-1;
while(i>=0)
{
double min=1000000;
k=i+KPeriod-1;
while(k>=i)
{
price=iLow(_Symbol,0,k);
if(min>price) min=price;
k--;
}
LowesBuffer[i]=min;
i--;
}
//---- maximums counting
i=iBars(_Symbol,0)-KPeriod;
if(counted_bars>KPeriod) i=iBars(_Symbol,0)-counted_bars-1;
while(i>=0)
{
double max=-1000000;
k=i+KPeriod-1;
while(k>=i)
{
price=iHigh(_Symbol,0,k);
if(max<price) max=price;
k--;
}
HighesBuffer[i]=max;
i--;
}
//---- %K line
i=iBars(_Symbol,0)-draw_begin1;
if(counted_bars>draw_begin1) i=iBars(_Symbol,0)-counted_bars-1;
while(i>=0)
{
double sumlow=0.0;
double sumhigh=0.0;
for(k=(i+Slowing-1);k>=i;k--)
{
sumlow+=iClose(_Symbol,0,k)-LowesBuffer[k];
sumhigh+=HighesBuffer[k]-LowesBuffer[k];
}
if(sumhigh==0.0) MainBuffer[i]=100.0;
else MainBuffer[i]=sumlow/sumhigh*100;
i--;
}
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
int limit=iBars(_Symbol,0)-counted_bars;
//---- signal line is simple movimg average
for(i=0; i<limit; i++)
SignalBuffer[i]=iMAOnArray(MainBuffer,iBars(_Symbol,0),DPeriod,0,MODE_SMA,i);
//----
return(0);
}
//+------------------------------------------------------------------+


"Телефон - это проклятье человечества!" масяня.
 
xrustДата: Пятница, 22.08.2008, 20:14 | Сообщение # 11
Admin
Группа: Администраторы
Сообщений: 489
Репутация: 1
Статус: Offline
Закидываем на чарт, комп дико тормозит, что и понятно ему надо подкачивать инфу с другого символа, да код не оптимизирован,заходим в свойства индикатора, и вместо пустого значения строки символа записываем нужный, жмем ОК опять ждем, любуемся на свою работу!
smile


"Телефон - это проклятье человечества!" масяня.
 
xrustДата: Пятница, 22.08.2008, 20:15 | Сообщение # 12
Admin
Группа: Администраторы
Сообщений: 489
Репутация: 1
Статус: Offline
В следующий раз, сделаем это по другому, через вызов пользовательского индикатора

"Телефон - это проклятье человечества!" масяня.
 
MaxVelДата: Четверг, 09.10.2008, 19:16 | Сообщение # 13
Рядовой
Группа: Пользователи
Сообщений: 4
Репутация: 0
Статус: Offline
...мда..., давно меня тут не было..., вот теперь точно займусь языком..., тем более учитель есть....)))) wink

...то, что не убило тебя, сделало тебя сильнее...
 
Xrust Форум » Основной форум » Вопросы начинающих знакомиться с языком MQL4 » Вопросы начинающих знакомиться с языком MQL4 (Спрашивайте - отвечаем)
  • Страница 1 из 1
  • 1
Поиск:

Используются технологии uCoz