Перейти к содержанию

Обучение языку MQL4 под MetaTrader 4


Рекомендуемые сообщения

Обучение языку MQL4 под MetaTrader 4 Опубликовано





вы хоть объясните, стоит ли продолжать это обучение, или уже этот урок не поможет в создании советников?



конечно стоит учи!!!! Смотри все уроки практикуй! а томот просто актуализируешься! ничо там сложного нет! Читай документацию очень Важно!!!
Кстате еслиб ты с первого урока начинал ты бы вопрос про start не задавал!


в первом же уроке говорится что start самая главная часть. но спасибо, буду изучать


Смотри дальше там говорится что старт это функция которая принимает и реагирует на каждый тик терминала! ну вот тебе и
void onTick()
{
вместо старт понятнее!!!



ясно, виноват, буду изучать, спасибо!)
Ссылка на сообщение
Поделиться на другие сайты

  • Ответов 6,8k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Смотрим видео-уроки, изучаем MQL:       Скачать видеокурс «MQL программирование. Как самому написать форекс советник/ индикатор/ скрипт»   P.S. Тема про Обучение MQ

Перейти

Циклы цикл for Иногда необходимо повторять одно и то же действие несколько раз подряд. Для этого используют циклы. К примеру, мы хотим проанализировать последние 10 баров и выяснить наименьшую цен

Перейти

Речь идет о том, что не будет значимых нововведений. А только баги периодически будут править. А вот все новое мол - в МТ5. Когда они вживую сказали то же самое на конференции в Москве, я уточнил: "То

Перейти
Обучение языку MQL4 под MetaTrader 4 Опубликовано

Народ а что с котировками? Я открыл терминал я с Альпари, а у Меня там уже 6 знаков и на золоте 7!!!

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Господа программисты ,разъясните плиз у индикаторов стохастик имеются уровни 20, 80. Или MACD с уровнем 0.
так вот вопрос как взять значение индикатора когда он находится ниже 20 или выше 80 основная и сигнальная линия.либо пересекаются за этими уровнями.значение индикаторов я вроде бы взял,а вот что дальше с ними делать не знаю.

Stoh=iStochastic(Symbol(),PERIOD_H1,Kperiod,Dperiod,slowing,MODE_SMA,0,MODE_MAIN,0);
StohSignal=iStochastic(Symbol(),PERIOD_H1,Kperiod,Dperiod,slowing,MODE_SMA,0,MODE_SIGNAL,0);

Macd=iMACD(Symbol(),PERIOD_H4,fast_ema_period,slow_ema_period,signal_period,PRICE_CLOSE,MODE_MAIN,0);
MacdSignal=iMACD(Symbol(),PERIOD_H4,fast_ema_period,slow_ema_period,signal_period,PRICE_CLOSE,MODE_SIGNAL,0);

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Подскажите пожалуйста почему не удаляется отложенные ордера

Спойлер


if (Close2 > ima && Close2 {
Price = NormalizeDouble(Close1 + Delta * Point, Digits);
double StepB = NormalizeDouble(Price - Step * Point, Digits);
ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, Price, Slippage, 0, 0, "", Magic, 0,Green);
if(ticket>0)
{
TP = NormalizeDouble(Price + TakeProfit * Point, Digits);
SL = NormalizeDouble(Price - StopLoss * Point, Digits);

OrderModify(ticket, Price, SL, TP, 0);
if (Ask }
}

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Подскажите пожалуйста почему не удаляется отложенные ордера

Спойлер


if (Close2 > ima && Close2 {
Price = NormalizeDouble(Close1 + Delta * Point, Digits);
double StepB = NormalizeDouble(Price - Step * Point, Digits);
ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, Price, Slippage, 0, 0, "", Magic, 0,Green);
if(ticket>0)
{
TP = NormalizeDouble(Price + TakeProfit * Point, Digits);
SL = NormalizeDouble(Price - StopLoss * Point, Digits);

OrderModify(ticket, Price, SL, TP, 0);
if (Ask }
}




тут установка и модификация ордеров, никак не удаление...
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано



Подскажите пожалуйста почему не удаляется отложенные ордера

Спойлер


if (Close2 > ima && Close2 {
Price = NormalizeDouble(Close1 + Delta * Point, Digits);
double StepB = NormalizeDouble(Price - Step * Point, Digits);
ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, Price, Slippage, 0, 0, "", Magic, 0,Green);
if(ticket>0)
{
TP = NormalizeDouble(Price + TakeProfit * Point, Digits);
SL = NormalizeDouble(Price - StopLoss * Point, Digits);

OrderModify(ticket, Price, SL, TP, 0);
if (Ask }
}




тут установка и модификация ордеров, никак не удаление...


if (Ask В конце
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Спойлер


Господа программисты ,разъясните плиз у индикаторов стохастик имеются уровни 20, 80. Или MACD с уровнем 0.
так вот вопрос как взять значение индикатора когда он находится ниже 20 или выше 80 основная и сигнальная линия.либо пересекаются за этими уровнями.значение индикаторов я вроде бы взял,а вот что дальше с ними делать не знаю.

Stoh=iStochastic(Symbol(),PERIOD_H1,Kperiod,Dperiod,slowing,MODE_SMA,0,MODE_MAIN,0);
StohSignal=iStochastic(Symbol(),PERIOD_H1,Kperiod,Dperiod,slowing,MODE_SMA,0,MODE_SIGNAL,0);

Macd=iMACD(Symbol(),PERIOD_H4,fast_ema_period,slow_ema_period,signal_period,PRICE_CLOSE,MODE_MAIN,0);
MacdSignal=iMACD(Symbol(),PERIOD_H4,fast_ema_period,slow_ema_period,signal_period,PRICE_CLOSE,MODE_SIGNAL,0);


Тебе нужно сравнить значение сигнала и основной лини сначала на 1 баре потом на 0 и добавить условие что основная линия при этом ниже или выше уровня 20,80 типа так :
if(iStochastic(Symbol(),PERIOD_H1,Kperiod,Dperiod,slowing,MODE_SMA,0,MODE_MAIN,1iStochastic(Symbol(),PERIOD_H1,Kperiod,Dperiod,slowing,MODE_SMA,0,MODE_SIGNAL,0) && iStochastic(Symbol(),PERIOD_H1,Kperiod,Dperiod,slowing,MODE_SMA,0,MODE_MAIN,0) открываем бай и бла бла
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Привет спасибо за помощь, а как быть с MACD взял как написано в учебнике,в общем не работает.

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано




Подскажите пожалуйста почему не удаляется отложенные ордера

Спойлер


if (Close2 > ima && Close2 {
Price = NormalizeDouble(Close1 + Delta * Point, Digits);
double StepB = NormalizeDouble(Price - Step * Point, Digits);
ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, Price, Slippage, 0, 0, "", Magic, 0,Green);
if(ticket>0)
{
TP = NormalizeDouble(Price + TakeProfit * Point, Digits);
SL = NormalizeDouble(Price - StopLoss * Point, Digits);

OrderModify(ticket, Price, SL, TP, 0);
if (Ask }
}




тут установка и модификация ордеров, никак не удаление...


if (Ask В конце


сорри, не обратил внимания...

ну... значит не выполняется условие...
кстати, в новом билде можно поставить точку останова и посмотреть реальные значения в переменных...
Если не разберётесь, то скоро будет видео, где мы рассмотрим этот и многие другие вкусности нового билда.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

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

Спойлер

[Macd=iMACD(Symbol(),PERIOD_H4,fast_ema_period,slow_ema_period,signal_period,PRICE_CLOSE,MODE_MAIN,0);
MacdSignal=iMACD(Symbol(),PERIOD_H4,fast_ema_period,slow_ema_period,signal_period,PRICE_CLOSE,MODE_SIGNAL,0);
Macd_1=iMACD(Symbol(),PERIOD_H4,fast_ema_period,slow_ema_period,signal_period,PRICE_CLOSE,MODE_MAIN,2);
MacdSignal_1=iMACD(Symbol(),PERIOD_H4,fast_ema_period,slow_ema_period,signal_period,PRICE_CLOSE,MODE_SIGNAL,2);


Stoh=iStochastic(Symbol(),PERIOD_H1,Kperiod,Dperiod,slowing,MODE_SMA,0,MODE_MAIN,0);
StohSignal=iStochastic(Symbol(),PERIOD_H1,Kperiod,Dperiod,slowing,MODE_SMA,0,MODE_SIGNAL,0);
Stoh_1=iStochastic(Symbol(),PERIOD_H1,Kperiod,Dperiod,slowing,MODE_SMA,0,MODE_MAIN,1);
StohSignal_1=iStochastic(Symbol(),PERIOD_H1,Kperiod,Dperiod,slowing,MODE_SMA,0,MODE_SIGNAL,1);



bbUP=iBands(Symbol(),PERIOD_M5,period,deviation,bands_shift,PRICE_CLOSE,1,0);
bbDOWN=iBands(Symbol(),PERIOD_M5,period,deviation,bands_shift,PRICE_CLOSE,2,0);

if((Macd_1StohSignal && StohVolume[0](MacdStohSignal && StohVolume[0]

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


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

Спойлер

[Macd=iMACD(Symbol(),PERIOD_H4,fast_ema_period,slow_ema_period,signal_period,PRICE_CLOSE,MODE_MAIN,0);
MacdSignal=iMACD(Symbol(),PERIOD_H4,fast_ema_period,slow_ema_period,signal_period,PRICE_CLOSE,MODE_SIGNAL,0);
Macd_1=iMACD(Symbol(),PERIOD_H4,fast_ema_period,slow_ema_period,signal_period,PRICE_CLOSE,MODE_MAIN,2);
MacdSignal_1=iMACD(Symbol(),PERIOD_H4,fast_ema_period,slow_ema_period,signal_period,PRICE_CLOSE,MODE_SIGNAL,2);


Stoh=iStochastic(Symbol(),PERIOD_H1,Kperiod,Dperiod,slowing,MODE_SMA,0,MODE_MAIN,0);
StohSignal=iStochastic(Symbol(),PERIOD_H1,Kperiod,Dperiod,slowing,MODE_SMA,0,MODE_SIGNAL,0);
Stoh_1=iStochastic(Symbol(),PERIOD_H1,Kperiod,Dperiod,slowing,MODE_SMA,0,MODE_MAIN,1);
StohSignal_1=iStochastic(Symbol(),PERIOD_H1,Kperiod,Dperiod,slowing,MODE_SMA,0,MODE_SIGNAL,1);



bbUP=iBands(Symbol(),PERIOD_M5,period,deviation,bands_shift,PRICE_CLOSE,1,0);
bbDOWN=iBands(Symbol(),PERIOD_M5,period,deviation,bands_shift,PRICE_CLOSE,2,0);

if((Macd_1StohSignal && StohVolume[0](MacdStohSignal && StohVolume[0]



Дружище, ты ещё сюда добавь Т.З.
То есть, что ты хочешь получить этим кодом...
Да, я сейчас глянул твой код, логически может и правильно, но я не пойму что ты хочешь получить, поэтому проверить твою логику ну никак не могу...
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Здраствуйте госпадин xbms система Александра Элдера то есть,на старшем таймфрейме на MACD на двух барах гистограмма выше сигналки,на более младшем стохастик в зоне перепроданости т.е 20 и пересекает быстрая медленную,то еще более младшем таймфрейме входим в пакупки.я добавил Bollinger Bands на младший тайм фрейм чтоб входить на откате как я думаю на максимально выгодной цене.
Господин xbms прикладываю весь код.Вот еще что,до меня так и не дошло почему код обработки ошибок не работает в новом билде.выдает кучу ошибок.


Добавлено: 06-02-2014 18:32:15

Хочу его доработать так как думаю есть у него потенциал.вот два графика с тестора,первый торгует одним лотом,второй с ММ.вот только как отчет выложить не знаю.

TestoviySovetnik.mq4
eurusd.gif
eurusd.gif
eurusd.gif
eurusd_2.gif

Изменено пользователем denis77515
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Здравствуйте подскажите как реализовать функцию, необходимо узнать как закрылся последний ордер , в + или - , нашел вот такой код
double isCloseLastPosByStopTrade(string sy="",int op=-1,int mn=-1)
{
datetime t;
double ocp,osl;
int dg,i,j=-1,k=OrdersHistoryTotal();

if(sy=="0") sy=Symbol();
for(i=0; i {
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==sy || sy=="")
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(op {
if(mn {
if(t {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
if(OrderSelect(j,SELECT_BY_POS,MODE_HISTORY))
{
return(OrderProfit());
}

}
но не понимаю некоторых моментов, а и именно if(tи еще эти строки
if(op {
if(mn {
поясните пожалуйста данные моменты или подскажите другой вариант решения данной проблемы, Спасибо.


Добавлено: 06-02-2014 17:17:54

по op=-1 и mn= -1 понял, это значит любая позиция и любой магик, у переменной t должно быть значение 0 наверное ?

Добавлено: 06-02-2014 19:08:23

С этим разобрался, подскажите пожалуйста как сделать выбор 2-х последних ордеров в истории ? Изменено пользователем Sharovik
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Как правильно сделать условие: Если есть открытые ордера на продажу - рассматривать только покупки, и наоборот: если есть открытые ордера на покупку - рассматривать только продажу?




В уроках от xbms для таких нужд есть функции:

Спойлер


//========================================================================================
int CountBuy()
{
int count = 0;
for(int trade = OrdersTotal()-1; trade >= 0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
count++;
}
}
return(count);
}
//========================================================================================
int CountSell()
{
int count = 0;
for(int trade = OrdersTotal()-1; trade >= 0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_SELL)
count++;
}
}
return(count);
}
//=======================================================================================



Можно ли их как то в упрощённом виде записать?

На подобие этого:

Спойлер


if (OrdersTotal == 0) //Окрытие ордера только если нет уже открытых ордеров.
{...}

Изменено пользователем Teo
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Всем привет народ!!!! Вопрос для маэстро Xbms!!! Вот в некоторых советниках в настройках иногда есть такая функция которая скрывает место установки профита и лоса!!! Хотелось бы добавить такую функцию в собственную сову!!! Можно такой урок? Или подскажите на что обратить внимание!!!
P.S. Кстате заменил условия установки ордеров по определённому времени так Вы мне подсказали и теперь да, открываются всегда!!! Странно почему не всегда открывались по времени заданному через "string"?

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

1. время должно быть ОДНОГО формата, не важно строка или дата.
2. Виртуальные СЛ и ТП, описываются одним блоком условий.(if (SL>n){OrderClose} - но тут стоит учитывать проскальзывание)

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


1. время должно быть ОДНОГО формата, не важно строка или дата.
2. Виртуальные СЛ и ТП, описываются одним блоком условий.(if (SL>n){OrderClose} - но тут стоит учитывать проскальзывание)



Не понял я про формат!!!
Я имею в виду TimeToStr(TimeCurrent()............."15:30" не всегда срабатывает!
TimeHour(TimeCurrent()............. 15
TimeMinute(TimeCurrent().............30 a так стабильно!
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано



1. время должно быть ОДНОГО формата, не важно строка или дата.
2. Виртуальные СЛ и ТП, описываются одним блоком условий.(if (SL>n){OrderClose} - но тут стоит учитывать проскальзывание)



Не понял я про формат!!!
Я имею в виду TimeToStr(TimeCurrent()............."15:30" не всегда срабатывает!
TimeHour(TimeCurrent()............. 15
TimeMinute(TimeCurrent().............30 a так стабильно!


это будет легче понять, если написать так:
Print(TimeToStr(TimeCurrent()));

...посмотреть в журнале и сделать вывод! :)
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано




1. время должно быть ОДНОГО формата, не важно строка или дата.
2. Виртуальные СЛ и ТП, описываются одним блоком условий.(if (SL>n){OrderClose} - но тут стоит учитывать проскальзывание)



Не понял я про формат!!!
Я имею в виду TimeToStr(TimeCurrent()............."15:30" не всегда срабатывает!
TimeHour(TimeCurrent()............. 15
TimeMinute(TimeCurrent().............30 a так стабильно!


это будет легче понять, если написать так:
Print(TimeToStr(TimeCurrent()));

...посмотреть в журнале и сделать вывод! :)



То есть даты не хватает? Обязательно надо вставлять?

Добавлено: 07-02-2014 08:24:37

xbms а можете про блоки рассказать? как они используются для скрытия лоса и профита от брокера чёто не понятно вообще как блок на это влияет? А может это я вообще затеил зря? Опытные люди подскажите стоит ли в это лесть? Чтоб я больше никому здесь голову не морочил плиз!!! Изменено пользователем elruso
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

По поводу новых вкусностей нового билда было бы интересно посмотреть видео,уж как то там заморочено все))) или с непривычки кажется))) \M/

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Как правильно сделать условие: Если есть открытые ордера на продажу - рассматривать только покупки, и наоборот: если есть открытые ордера на покупку - рассматривать только продажу?




В уроках от xbms для таких нужд есть функции:

Спойлер


//========================================================================================
int CountBuy()
{
int count = 0;
for(int trade = OrdersTotal()-1; trade >= 0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
count++;
}
}
return(count);
}
//========================================================================================
int CountSell()
{
int count = 0;
for(int trade = OrdersTotal()-1; trade >= 0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_SELL)
count++;
}
}
return(count);
}
//=======================================================================================



Можно ли их как то в упрощённом виде записать?

На подобие этого:

Спойлер


if (OrdersTotal == 0) //Окрытие ордера только если нет уже открытых ордеров.
{...}




вот благодаря этим функция и можно записать так:

if (CountBuy() > 0) { CheckOpenSellOrder(); }
if (CountSell() > 0) { CheckOpenBuyOrder(); }

вот как-то так...
ну и разумеется с дополнительными условиями покупки/продажи...

  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Цитата

if (CountBuy() > 0) {...} // сделка откроется только если уже есть открытые бай-ордера
if (CountSell() > 0) {...} // сделка откроется только если уже есть открытые селл-ордера








То что я имел в виду наверно должно выглядеть так:

if (CountBuy()  == 0) {...} // сделка откроется только если нет открытых ордеров на бай. Максимум один открытый бай-ордер.
if (CountSell() == 0) {...} // сделка откроется только если нет открытых ордеров на селл. Максимум один открытый селл-ордер.


xbms, подскажите правильно ли я рассуждаю? ;)
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Цитата

if (CountBuy() > 0) {...} // сделка откроется только если уже есть открытые бай-ордера
if (CountSell() > 0) {...} // сделка откроется только если уже есть открытые селл-ордера








То что я имел в виду наверно должно выглядеть так:

if (CountBuy()  == 0) {...} // сделка откроется только если нет открытых ордеров на бай. Максимум один открытый бай-ордер.
if (CountSell() == 0) {...} // сделка откроется только если нет открытых ордеров на селл. Максимум один открытый селл-ордер.


xbms, подскажите правильно ли я рассуждаю? ;)


Вполне!
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • Рекомендуемые брокеры

  • ×
    ×
    • Создать...