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

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


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

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

Что с запятой, что без запятой компилируется и выводится на экран.
OP_BUY==0; OP_SELL==1; здесь можно ставить Константу(OP_BUY или OP_SELL) или цифровое значение(0 или1)
для AUTO- значения нет, поэтому мы можем поставить любое==-1 ??

Про запятую - спасибо.
Можно-ли использовать константу в описании enum? - не знаю, я бы использовал - код становится читабельным, но если компилятор выдаст ошибку - тогда цифрой.
Про AUTO = -1. можно любое, какое назначите с тем и будем работать.
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Перейти

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

Перейти

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

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

Цитата: 0ll от Мая 10, 2014, 01:01:05 pm
- В функции start() Выведешь Alert() где расскажешь что за скрипт, координаты - где его бросили на экран графика, под ценой или над (Справка Операции с графиками), текущую пару.



В (Справка Операции с графиками) есть две функции:
ChartTimePriceToXY(Преобразует координаты графика из представления время/цена в координаты по оси X и Y)
ChartXYToTimePrice (Преобразует координаты X и Y графика в значения время и цена)
Ссылка на сообщение
Поделиться на другие сайты

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


В (Справка Операции с графиками) есть две функции:
ChartTimePriceToXY(Преобразует координаты графика из представления время/цена в координаты по оси X и Y)
ChartXYToTimePrice (Преобразует координаты X и Y графика в значения время и цена)

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

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

OLL Не знаю, что наделал, вставил функцию: ChartXYToTimePrice(0,x,y,window,dt,price) и объявил переменные
компилировал, вроде не ругается.Если честно, что сделал, не понял

Спойлер

#property version "1.00"
#property description "Частичное закрытие Buy , Sell, Auto ордеров"
#property strict
extern int x =0;//(int)lparam;
extern int y =0;//(int)dparam;
extern datetime dt =0;
extern double price =0;
extern int window=0;


extern int Magic = 123;//Уникальный номер;
extern int Delta = -10;//мимнимальный процент профита от депозита;
//+------------------------------------------------------------------+
#property script_show_inputs
//--- с какими ордерами работаем
enum general_direction
{
ordersBUY = OP_BUY,
ordersSELL = OP_SELL,
AUTO = -1
};
//--- input parameters
input general_direction Direct = ordersSELL;

//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- преобразуем координаты X и Y в терминах дата/время
if(ChartXYToTimePrice(0,x,y,window,dt,price))
{
Alert ("Window=%d X=%d Y=%d => Time=%s Price=%G",window,x,y,TimeToString(dt),price);
//--- сделаем обратное преобразование: (X,Y) => (Time,Price)
if(ChartTimePriceToXY(0,window,dt,price,x,y))
Alert ("Time=%s Price=%G => X=%d Y=%d",TimeToString(dt),price,x,y);
else
Alert("ChartTimePriceToXY return error code: ",GetLastError());
//--- зададим координату времени для вертикальной линии перекрестия
ObjectSetInteger(0,"V Line",OBJPROP_TIME,dt);
//--- зададим координату цены для горизонтальной линии перекрестия
ObjectSetDouble(0,"H Line",OBJPROP_PRICE,window,price);
ChartRedraw(0);
}
else
Alert("ChartXYToTimePrice return error code: ",GetLastError());
Alert("+--------------------------------------------------------------+");

Alert(" Магик =" + IntegerToString(Magic) + "\nСимвол =" + Symbol() + "\nПериод =" + IntegerToString(Period()));
return;
}
//+------------------------------------------------------------------+

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

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


OLL Не знаю, что наделал, вставил функцию: ChartXYToTimePrice(0,x,y,window,dt,price) и объявил переменные
компилировал, вроде не ругается.Если честно, что сделал, не понял

Понятно, что не понятно... Вы дочитайте справку, там есть более понятные функции, напр. ChartPriceOnDropped().
Вы же взяли функцию преобразования координат XY в дату/цену, а ей координаты нужны - где-ж Вы их возьмете?
Не заморачивайтесь с координатами XY - они вообще не понадобятся.
Ссылка на сообщение
Поделиться на другие сайты

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

OLL
Тогда вроде так

Спойлер

#property version "1.00"
#property description "Частичное закрытие Buy , Sell, Auto ордеров"
#property strict

extern int Magic = 123;//Уникальный номер;
extern int Delta = -10;//мимнимальный процент профита от депозита;
//+------------------------------------------------------------------+
#property script_show_inputs
//--- с какими ордерами работаем
enum general_direction
{
ordersBUY = OP_BUY,
ordersSELL = OP_SELL,
AUTO = -1
};
//--- input parameters
input general_direction Direct = ordersSELL;

//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
double p=ChartPriceOnDropped();

Alert(" Магик =" + IntegerToString(Magic) + "\nСимвол =" + Symbol() + "\nПериод =" + IntegerToString(Period()) + "\nКоординаты = " ,p);
return;
}
//+------------------------------------------------------------------+

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

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

С_е_р_г_у_й Всё так. Работает? Вы сразу запускайте в МТ после компиляции.
По поводу алгоритма AUTO что думаете?

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

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


По поводу алгоритма AUTO что думаете?


Я думаю надо объявить переменную ТР, найти ордера с ТР+
В AUTO необходимо прописать OP_BUY и OP_SEL. ??
Посчитать все ордера , задать какие ордера будут закрываться ВАЙ, закрывать ВАЙ ордера
Для СЕЛЛ считаем все ордера , определяем какие закрываем СЕЛЛ, закрываем СЕЛЛ
Для АВТО считаем ордера , определяем какие закрываем, закрываем
Где то так??? Изменено пользователем С_е_р_г_у_й
Ссылка на сообщение
Поделиться на другие сайты

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

С_е_р_г_у_й. Когда пользователь выбирает Бай или Селл с этим всё понятно, но если Авто, то нам с Вами в скрипте надо вычислить какую корзину хочет закрыть пользователь. Я вам писал ранее возможные варианты - как это делать. От Вас нужно решение, а может оба варианта сделаем? - не будем искать лёгких путей.

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

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

Конечно оба варианта.
Нам с Вами в скрипте надо вычислить какую корзину хочет закрыть пользователь, вот и давайте вычислим.
Для этого нам надо посчитать все ордера, определить какие ордера открыты???
for (int i = 0; i

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

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

Ну, значит, поехали - этап 2.
Предисловие. Мне бы как трейдеру не понравилось то, что скрипт в автоматическом режиме творит чудеса на моём реальном счёте, а Вам? Поэтому план такой: нужно вывести окно подтверждения с кнопочками "Да"(или ОК) и "Отмена". В окно вывести максимум информации для принятия решения, а именно: на какой паре какие ордера будем работать, текущее количество ордеров по сове, по направлению, текущая просадка по сове и направлению, сколько пунктов до безубытка по рабочей корзине, сколько ордеров будем закрывать и сколько останется.
Все эти данные мы вычислим на 3 этапе, а пока окно подтверждения (может это: http://docs.mql4.com/ru/common/messagebox)
Что-то очень простое задание... Усложним: если пользователь выбрал ОК то Алерт "закрываем", если отмена Алерт "пока!"

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

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

OLL Не теряйте меня, исчезаю на пару дней, приношу извинения.


Добавлено: 12-05-2014 13:52:10

OII День добрый,
Цитата

окно подтверждения Что-то очень простое задание... Усложним: если пользователь выбрал ОК то Алерт "закрываем", если отмена Алерт "пока!"


Спойлер

//+------------------------------------------------------------------+
//| Скрипт частичного закрытия ордеров.mq4 |
//| Copyright 2014, MetaQuotes Software Corp. |
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link "http://www.mql5.com"
#property version "1.00"
#property description "Частичное закрытие Buy , Sell, Auto ордеров"
#property strict

extern int Magic = 123;//Уникальный номер;
extern int Delta = -10;//мимнимальный процент профита от депозита;
//+------------------------------------------------------------------+
#property script_show_inputs
//--- с какими ордерами работаем
enum general_direction
{
ordersBUY = OP_BUY, //Ордера на покупку
ordersSELL = OP_SELL, //Ордера на продажу
AUTO = -1, //В автоматичуском режиме
};
//--- input parameters
input general_direction Direct = ordersSELL;

//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{

int rat=MessageBox("закрытие ордеров ","Скрипт частичного закрытия ордеров", MB_OKCANCEL);
if(rat == IDOK)Alert ("закрываем ");
if(rat == IDCANCEL)Alert("пока");

double p=ChartPriceOnDropped();

Alert(" Магик =" + IntegerToString(Magic) + "\nСимвол =" + Symbol() + "\nПериод =" + IntegerToString(Period()) + "\nкоординаты = " ,p);
return;
}
//+------------------------------------------------------------------+

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

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

С_е_р_г_у_й Добрый день.
MessageBox надо-бы после определения цены
После Алерта "пока" - завершение работы.
Но это мелочи, теперь 3 этап:
Вы как трейдер хотите совершить частичное закрытие - какая информация Вам нужна? - подумайте надосуге, я Вам уже писал примерный перечень, что-то можно выкинуть, что-то добавить.
Итак, пользователь запустил скрипт и МТ начал исполнять процедуру старт(). Нам же надо действовать в соответствии с пожеланиями пользователя. Здесь надо вставить "логическое дерево". В нашем случае видимо лучше использовать switch для выбора дальнейшего действия http://docs.mql4.com/ru/basis/operators/switch в зависимости от направления сделки.
Задание: в старт() сначала идет определение цены, потом switch, затем MessageBox
в свиче для например для case OP_BUY: направте в функцию пересчета ордеров с параметром Директ.
а для Авто - решим позже.

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

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

OII День добрый, тяжело даются знания, без наводящих вопросов мне не справится, " определение цены"?,
Смотрю Скрипт закрытия ордеров CloseAllOrders_v5.mq4, сравниваю. Может не стоит смотреть на другие советники, а то из за этого каша в голове.

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

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

OII День добрый, тяжело даются знания, без наводящих вопросов мне не справится,

Прости, может я плохо объяснил. Цену Вы уже определили по точке загрузки скрипта. Далее будут ещё более сложные вопросы и, чтобы улучшить взаимопонимание, я думаю перейти непосредственно в текст скрипта, т.е. там внутри давать задания и писать объяснения. Давайте Ваш последний текст (прикрепите в формате mq4) и попробуем.
Ссылка на сообщение
Поделиться на другие сайты

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

Наверно все таки откройте новый топик.
Разбор написания скрипта с нуля дело точно полезное, но это не должно мешать другим людям осваивать азы языка по урокам, подготовленным топикстартером.

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

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

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

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


Хорошо, давайте, только я и этого не знаю как сделать (прикрепить в формате mq4).

Когда пишите на форуме ответ внизу (под окошком) есть кнопка "Вложения и другие параметры". Там есть кнопка "выбрать файл". Находите наш скрипт в дебрях МТ (для этого в редакторе нажмите файл-сохранить как... он Вам покажет где находится папка с файлом (при этом сохранять не обязательно)) и всё он прикрепился к письму.

С_е_р_г_у_й в общем разделе "Уголок программиста" создайте "Новая тема" назовите как нибудь "Пишу скрипт с нуля", может быть Старик туда перенесёт нашу переписку, а может нет - неважно.
Ссылка на сообщение
Поделиться на другие сайты

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

И снова я за помощью к господам программистам. Хочу в своем советнике использовать индикатор HMA Arrows, который читает инфу с HMA Color. Но у меня не получается использовать iCustom. Искал причину и вот решил посмотреть какую же инфу мне выдает iCustom. ВТФ?!!! Как и почему? я в ступоре? подскажите в чем у меня проблема. Прикладываю скрин, индикаторы, советник, в котором я прописал тупо iCustom и Print. Помогите получить нормальные данные.


Добавлено: 13-05-2014 11:34:29

Форум не дает "сову" прикрепить, поэтому код сюда кину, извиняйте и не ругайтесь сильно...

extern double Lots = 0.01;
extern int TakeProfit = 10;
extern int StopLoss = 14; // Стоплосс, 0 - не используется
extern int Slippage = 0;
extern string Indicator_HMA = "Данные индикатора HMA_arrows";
extern int HMA_Period = 7;
extern int HMA_PriceType = 0;
extern int HMA_Method = 3;

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double arrow_down=iCustom(Symbol(), 0, "HMA Arrows", HMA_Period, HMA_PriceType, HMA_Method, 0,0);
Print("arrow_down"," ",arrow_down);
double arrow_up=iCustom(Symbol(), 0, "HMA Arrows", HMA_Period, HMA_PriceType, HMA_Method, 1,0);
Print("arrow_up"," ",arrow_up);

}
//+------------------------------------------------------------------+

icustom.JPG
HMA_Arrows.mq4
HMA_Arrows.ex4
HMA_Color.mq4
HMA_Color.ex4

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

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


double arrow_down=iCustom(Symbol(), 0, "HMA Arrows", HMA_Period, HMA_PriceType, HMA_Method, 0,0);


Пробуй так:
double arrow_down=iCustom(Symbol(), 0, "HMA Arrows", HMA_Period, HMA_PriceType, HMA_Method, 0,1);
Поясню: индюк HMA Arrows не рассчитывает значения для 0-бара, только начиная с 1. А Вы его о 0-баре спрашиваете - вот он и отвечает...
Ссылка на сообщение
Поделиться на другие сайты

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



double arrow_down=iCustom(Symbol(), 0, "HMA Arrows", HMA_Period, HMA_PriceType, HMA_Method, 0,0);


Пробуй так:
double arrow_down=iCustom(Symbol(), 0, "HMA Arrows", HMA_Period, HMA_PriceType, HMA_Method, 0,1);
Поясню: индюк HMA Arrows не рассчитывает значения для 0-бара, только начиная с 1. А Вы его о 0-баре спрашиваете - вот он и отвечает...

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

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

Народ, кто смотрел 2-й урок по MQL? _http://tradelikeapro.ru/izuchaem-mql-urok-n-2-tsiklyi-funktsii-i-ordera-v-sovetnike/

Все написал по видео. Но, сова открывает ордера только buylimit. Почему?

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

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


Народ, кто смотрел 2-й урок по MQL? _http://tradelikeapro.ru/izuchaem-mql-urok-n-2-tsiklyi-funktsii-i-ordera-v-sovetnike/

Все написал по видео. Но, сова открывает ордера только buylimit. Почему?



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

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



Народ, кто смотрел 2-й урок по MQL? _http://tradelikeapro.ru/izuchaem-mql-urok-n-2-tsiklyi-funktsii-i-ordera-v-sovetnike/

Все написал по видео. Но, сова открывает ордера только buylimit. Почему?



я смотрел, но ответить почему не смогу пока Вы свой вариант не предъявите :)


Нет у меня своего варианта (пока что). Я просто хочу понять, почему открывает только buylimit? Если закрыть вызов buylimit, то никаких ордеров не открывает. Игнорит полностью вызов selllimit.


int start()
{
if(HourEnd == TimeHour(TimeCurrent()))
{
DeleteOrdes();
}
minprice = NormalizeDouble(GetMinPrice(),Digits);
maxprice = NormalizeDouble(GetMaxPrice(),Digits);

if (HourStart == TimeHour(TimeCurrent()) && CountBuyLimit() == 0 && CountSellLimit() == 0)
{
SL = NormalizeDouble(minprice - StopLoss*Point,Digits);
TP = NormalizeDouble(minprice + TakeProfit*Point,Digits);
OrderSend(Symbol(),OP_BUYLIMIT, Lots, minprice, Slippage, SL, TP, comment, Magic, 0, Blue);

SL = NormalizeDouble(maxprice + StopLoss*Point,Digits);
SL = NormalizeDouble(maxprice - TakeProfit*Point,Digits);
OrderSend(Symbol(),OP_SELLLIMIT, Lots, maxprice, Slippage, SL, TP, comment, Magic, 0, Red);
}
return(0);
}


UPDATE: нашел ошибку. В вызове OrderSend для selllimit два SL определено. Исправил нужный на ТР. ЗАРАБОТАЛО. Изменено пользователем geugene
Ссылка на сообщение
Поделиться на другие сайты

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

Господин xbms в уроке с классами описал унивирсальную функцию для закрытия ордеров.Возьми ее на вооружение и тебе ее будет достаточно,только единственное она без обработки на ошибки.ну там на реквоты и все такое.

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

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

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

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

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

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

Войти

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

Войти

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


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

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