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

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


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

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

OLL Допустим по БАЙтикет через цикл for(i=0; i

Что такое "OrdersTotalMagicbuy" я не знаю.
Но сделать можно так:
   int tikMax=0, tikMin=0;
double MaxPrc=0, MinPrc=999999;

for (int i = 0; i {
if (!OrderSelect(iOrd, SELECT_BY_POS, MODE_TRADES)) continue;
if (!(OrderSymbol()== Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)) continue;
if (OrderOpenPrice() > MaxPrc) { tikMax = OrderTicket(); MaxPrc = OrderOpenPrice(); continue; }
if (OrderOpenPrice() }
OrderSelect(tikMax, SELECT_BY_TICKET);
OrderClose(tikMax, OrderLots(), Bid, 3, Gray);
OrderSelect(tikMin, SELECT_BY_TICKET);
OrderClose(tikMin, OrderLots(), Bid, 3, Gray);
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Перейти

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

Перейти

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

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


проверяй если оба времени 0 то расчёт всех баров если размеры по 0 то тоже все бары

extern int CalculatBars = 200; количество баров
extern int SizeMaxBar =1000; максимальный размер от хай до лоу
extern int SizeMaxTeloBar=1000;максимальный размер тела
extern int StartTime =8;
extern int EndTime =23;



Спасибо за индикатор, но есть небольшая проблема в его работе. МТ4 сборка 625. при переключении таймфрейма на MN индикатор удаляется с графика. Есть возможность исправить это как то или такая проблема у меня одного?
Ссылка на сообщение
Поделиться на другие сайты

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


Относительно iCustom: получаем сигнал от индикатора, хочу этот сигнал привязать к цене закрытия бара, на котором этот сигнал был получен.

У iClose и iCustom последний параметр вызова одинаковый - shift - это и есть номер бара которому соответствует возвращаемое значение. (У Вас индюки на одном таймфрейме работают?)



"Работают" - громко сказано, да пока только два индюка в связке пытаюсь сделать...
Ссылка на сообщение
Поделиться на другие сайты

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



проверяй если оба времени 0 то расчёт всех баров если размеры по 0 то тоже все бары

extern int CalculatBars = 200; количество баров
extern int SizeMaxBar =1000; максимальный размер от хай до лоу
extern int SizeMaxTeloBar=1000;максимальный размер тела
extern int StartTime =8;
extern int EndTime =23;



Спасибо за индикатор, но есть небольшая проблема в его работе. МТ4 сборка 625. при переключении таймфрейма на MN индикатор удаляется с графика. Есть возможность исправить это как то или такая проблема у меня одного?
юндюк для мелких таймов так как просили с выборкой по времени
держите подправленный для дневок и выше

Volatil_Indi-1.mq4

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

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

Обращаюсь к программистам и всем, кто может помочь, мозги уже закипают. extern int order = 5, tp=10;
Необходимо рассчитать tp, и написать функцию закрытия ордеров, orderclose(ticket) :
if(OrdersTotal>order) tpb=(((первый+предпоследний+последний ордера)/3)*tp*Point);
if (Bid>=tpb) orderclosebuy(ticketbuy);
if(OrdersTotal>order) tps=(((первый+предпоследний+последний ордера)/3)*tp*Point);
if (Ask>=tps) orderclosesell(ticketsell);
if(OrdersTotal>order) tpbb=(((первый+последний ордера)/2)*tp*Point);
if (Bid>=tpbb) orderclosebuyb(ticketbuy);
if(OrdersTotal>order) tpss=(((первый+последний ордера)/2)*tp*Point);
if (Ask>=tpss) orderclosesells(ticketsell);

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

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

Обращаюсь к программистам и всем, кто может помочь, мозги уже закипают.

У Вас закипают мозги от того, что Вы не четко представляете, чего хотите (имхо - по себе сужу).
Вы хотите сделать функцию частичного закрытия ордеров больших сеток для уменьшения просадки?
Если да, то должен Вас разочаровать: я делал это... и это была вещь! - работала как часы, настраивалась и оптимизировалась... но сливала там, где обычная сетка не сливала. Итог: выбросил нафиг.

Конкретно по теме:
- Вам не нужно закрывать одновременно Бай и Селл, т.к. если Бай будет в просадке, то Селл в прибыли.
- Вы так и не сказали что такое "первый+последний ордера". Мы же не знаем как Вы сетку строите.
Это могут быть первый и последний по времени открытия или по цене открытия.
- Надо сложить профит всех (+) ордеров, запомнить, затем перебирать все (-)ордера начиная с "первого" и если профит (-) ордера укладывается в сумму профитов (+) ордеров - закрывать последовательно.
- Еще надо определиться в какой момент включается эта фишка. И не включать её более 1 раза - сольёт.
Ссылка на сообщение
Поделиться на другие сайты

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

- Вам не нужно закрывать одновременно Бай и Селл, т.к. если Бай будет в просадке, то Селл в прибыли.
- Вы так и не сказали что такое "первый+последний ордера". Мы же не знаем как Вы сетку строите.
Это могут быть первый и последний по времени открытия или по цене открытия.
- Надо сложить профит всех (+) ордеров, запомнить, затем перебирать все (-)ордера начиная с "первого" и если профит (-) ордера укладывается в сумму профитов (+) ордеров - закрывать последовательно.
- Еще надо определиться в какой момент включается эта фишка. И не включать её более 1 раза - сольёт.


OLL
Я хочу к обычной сетке привязать дополнительное закрытие.Допустим сов работает только на БАЙ, цена идет вниз, получили №- кол-во ордеров , цена пошла вверх, индикаторы показали разворот, но до ТР цена не дошла, развернулась , индикаторы опять показали разворот, и в этот момент закрываем прибыльные ордера и убыточный первый ордер.
Ссылка на сообщение
Поделиться на другие сайты

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

.Допустим сов работает только на БАЙ, цена идет вниз, получили №- кол-во ордеров , цена пошла вверх, индикаторы показали разворот, но до ТР цена не дошла, развернулась , ...

Да знаю я всё про это. См. пост выше. Итог: льёт. Не сразу, сначала нравится, залог уменьшается, свободных средств больше... - хрень. Почитай зерговские ветки, я полгода потратил на это. Лучше делай динамическую сетку или ещё думай как уменьшить риски, например если сетка большая и вышел этот недооткат - закрывай всю сетку в минус и начинай новую.
Ссылка на сообщение
Поделиться на другие сайты

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

OII. Все правильно говоришь, на реале я это делаю ручками и стараюсь не открывать на МАХ и МIN, и сравниваю графики на разных временных графиках . Сейчас начал изучать MQL . И все это мне надо для изучения MQL.

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

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

OII. Все правильно говоришь, на реале я это делаю ручками и стараюсь не открывать на МАХ и МIN, и сравниваю графики на разных временных графиках . Сейчас начал изучать MQL . И все это мне надо для изучения MQL.

Молодец! Начинай писать скрипт частичного закрытия, а я помогу.
Домашнее задание:
- Создать скрипт, который при загрузке показывает Окно свойств
- extern-ы: Magic, Direct (Buy, Sell, Auto), Delta (дельта профита (в %) после частичного закрытия, т.е. должна-ли остаться некая доля прибыли или в 0, или может до -10% в минус)
- В функции start() Выведешь Alert() где расскажешь что за скрипт, координаты - где его бросили на экран графика, под ценой или над (Справка Операции с графиками), текущую пару.
Как справишься - продолжим.
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
С_е_р_г_у_й, 0ll - хорошая затея.

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

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

OII - Хорошо, давайте попробуем, только я в этом деле 0.Просмотрел видео уроки по MQL. Еще не начал писать скрипт, а уже куча вопросов.

Спойлер

extern int Magic = 123;
extern int Delta = 0;
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
Alert("");
}


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

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

Еще не начал писать скрипт, а уже куча вопросов.

Ну поздравляю, с почином так-сказать.
В скрипте не увидел выполнение первого пункта (Справка Препроцессор http://docs.mql4.com/ru/basis/preprosessor/compilation)
Второй пункт не увидел переменной направления работы int Direct
В Alert() вставь что-нибудь, например ("наш магик = " + Magic), или классика: ("Hello World!")
Потом компилируй и запусти.
Видео это хорошо, но http://docs.mql4.com/ru/ - имхо лучше, ну и поиск в Гугле.
Если Вам кажется, что темп обучения слишком велик - скажите (я же не знаю Вашего уровня и образования)

ПС: Остальные обучающиеся могут присоединяться.
ППС: 2 Старик: Вы как думаете нам здесь переписываться или уйти в личку, чтоб тему не раздувать? Изменено пользователем 0ll
Ссылка на сообщение
Поделиться на другие сайты

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

OLL-Второй пункт не увидел переменной направления работы int Direct-??
за что отвечает переменная int Direct

Спойлер

extern bool DirectBuy = False;//?
extern bool DirectSell = False;//?
extern bool DirectAuto = True;//?
или
extern int DirectBuy = 10;//?
extern int DirectSell = 10;//?
extern int DirectAuto = 10;//?


Спойлер

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

extern int Magic = 123;//Уникальный номер
extern int Delta = 0;

extern bool DirectBuy = False;//?
extern bool DirectSell = False;//?
extern bool DirectAuto = True;//?

//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
Alert(" Магик =" + Magic + "\nСимвол =" + Symbol() + "\nПериод =" + Period());
return;
}
//+------------------------------------------------------------------+


Компилирую, выдает предупреждение:
implicit conversion from 'number' to 'string'
implicit conversion from 'number' to 'string'

приношу свои извинения за некорректное написание, но как вижу так и пишу.На счет образования, когда я учился,кроме калькуляторов ничего не было, о компьютерах ничего не слышали. Изменено пользователем С_е_р_г_у_й
Ссылка на сообщение
Поделиться на другие сайты

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

Вопрос. Есть отложка BuyStop / SellStop. Советник открывает несколько ордеров с шагом и указывает TP. Мне же нужно, чтобы ставил трал вместо ТР.
Я так понимаю, что нужно изменить параметр Takeprofit в функции OrderSend ? Только как ее туда прописать?

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

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


OLL-Второй пункт не увидел переменной направления работы int Direct-??
за что отвечает переменная int Direct

Переменная Direct отвечает за то с какими ордерами мы будем работать Бай или Селл. Параметр этот можно задать руками при запуске скрипта, а можно вычислить автоматически (мы этим позже займемся). Запишем так:
extern int Direct = -1; //OP_BUY = 0; OP_SELL = 1; AUTO = -1;
а лучше это сделать через enum читай здесь: http://docs.mql4.com/ru/basis/variables/inputvariables

Компилирую, выдает предупреждение:
implicit conversion from 'number' to 'string'
implicit conversion from 'number' to 'string'

Это предупреждение о неявном преобразовании здесь:
Alert(" Магик =" + Magic + "\nСимвол =" + Symbol() + "\nПериод =" + Period());
Если исправить например Magic на IntegerToString(Magic), то одно предупреждение уйдет. То же с периодом.
Запускали скрипт в терминале?

Насчет образования: я имел ввиду не компьютерное, а общее. Упрощённо говоря - умение работать со справочной литературой...

Добавлено: 10-05-2014 17:09:43

Вопрос. Есть отложка BuyStop / SellStop. Советник открывает несколько ордеров с шагом и указывает TP. Мне же нужно, чтобы ставил трал вместо ТР.
Я так понимаю, что нужно изменить параметр Takeprofit в функции OrderSend ? Только как ее туда прописать?

Можно тралить ТР или СЛ. Менять эти параметры функцией OrderModify(); Или я не так понял? Изменено пользователем 0ll
Ссылка на сообщение
Поделиться на другие сайты

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

Вопрос. Есть отложка BuyStop / SellStop. Советник открывает несколько ордеров с шагом и указывает TP. Мне же нужно, чтобы ставил трал вместо ТР.
Я так понимаю, что нужно изменить параметр Takeprofit в функции OrderSend ? Только как ее туда прописать?

Можно тралить ТР или СЛ. Менять эти параметры функцией OrderModify(); Или я не так понял?


Пример. Для каждого ордера TP=50. Как пройдет цена эти 50пп, закрывается и сразу открывается другой (сетка короче). В целом все хорошо. но, с тралом может взять профита больше. Цена прошла 50пп, сработал трал и все. Дальше пусть подтягивает цену, пока она не повернет и не закроется уже по трал-стопу.
Выходит, что в настройках совы указывается не TP=50, а Трал=50. Вот сей трал мне в отложке и нужно прописать. Простой обычный трал без всяких шагов и прочего.
Ссылка на сообщение
Поделиться на другие сайты

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

Пример. Для каждого ордера TP=50. Как пройдет цена эти 50пп, закрывается и сразу открывается другой (сетка короче). В целом все хорошо. но, с тралом может взять профита больше. Цена прошла 50пп, сработал трал и все. Дальше пусть подтягивает цену, пока она не повернет и не закроется уже по трал-стопу.
Выходит, что в настройках совы указывается не TP=50, а Трал=50. Вот сей трал мне в отложке и нужно прописать. Простой обычный трал без всяких шагов и прочего.

Когда Вы пишите по ТР=50 пп я это понимаю как открытый рыночный ордер с ТР. В конце Вы пишите про трал в отложке - это как мне понять? есть ещё и отложка? т.е. Вы отложкой хотите тралить рыночный ордер?
Ну и последнее: я не смогу Вам помочь сделать "обычный трал без всяких шагов и прочего" - просто не знаю как... Если не трудно - распишите этот момент подробно.
Ссылка на сообщение
Поделиться на другие сайты

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


Пример. Для каждого ордера TP=50. Как пройдет цена эти 50пп, закрывается и сразу открывается другой (сетка короче). В целом все хорошо. но, с тралом может взять профита больше. Цена прошла 50пп, сработал трал и все. Дальше пусть подтягивает цену, пока она не повернет и не закроется уже по трал-стопу.
Выходит, что в настройках совы указывается не TP=50, а Трал=50. Вот сей трал мне в отложке и нужно прописать. Простой обычный трал без всяких шагов и прочего.

Когда Вы пишите по ТР=50 пп я это понимаю как открытый рыночный ордер с ТР. В конце Вы пишите про трал в отложке - это как мне понять? есть ещё и отложка? т.е. Вы отложкой хотите тралить рыночный ордер?
Ну и последнее: я не смогу Вам помочь сделать "обычный трал без всяких шагов и прочего" - просто не знаю как... Если не трудно - распишите этот момент подробно.


Трал срабатывает на открытом ордере, конечно. Хорошо ... Пусть будет некий шаг траллинга. Все ордера будут закрываться не по жесткому ТР, а по траллингу. Пройдя 50 пп срабатывает отложка. К ней цепляется трал. Но тралить он начнет как цена пройдет (мин дистанция до начала траллинга) 50пп. А дальше уже шаг трала = 5пп.

P.S. Это короче из предоставленного советника "Беспроигрышная торговая система Grand Master" http://tlap.com/forum/torgovye-sistemy/2/uni-grand-master-besproigryshnaya-torgovaya-sistema/4499/?do=findComment&comment=84344. Там есть исходники совы Grand Master_AUD-USD.mq4. Сова хорошая. Вот добавить ей трала бы)))
Ссылка на сообщение
Поделиться на другие сайты

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


P.S. Это короче из предоставленного советника "Беспроигрышная торговая система Grand Master" http://tlap.com/forum/torgovye-sistemy/2/uni-grand-master-besproigryshnaya-torgovaya-sistema/4499/?do=findComment&comment=84344. Там есть исходники совы Grand Master_AUD-USD.mq4. Сова хорошая. Вот добавить ей трала бы)))

Прости, я не модератор, но это тема про обучение mql, т.е. предполагается, что Вы сами делаете, а другие советы дают. А для переделки чего-то внизу надо темку создать. Сову посмотрю, но надо изучать систему, чтоб не испортить...
Ссылка на сообщение
Поделиться на другие сайты

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



P.S. Это короче из предоставленного советника "Беспроигрышная торговая система Grand Master" http://tlap.com/forum/torgovye-sistemy/2/uni-grand-master-besproigryshnaya-torgovaya-sistema/4499/?do=findComment&comment=84344. Там есть исходники совы Grand Master_AUD-USD.mq4. Сова хорошая. Вот добавить ей трала бы)))

Прости, я не модератор, но это тема про обучение mql, т.е. предполагается, что Вы сами делаете, а другие советы дают. А для переделки чего-то внизу надо темку создать. Сову посмотрю, но надо изучать систему, чтоб не испортить...


А там портить нечего))) И код по ходу не оптимизирован. Сова - как простой скрипт - открывает сетку ордеров и не более. И такие скрипты есть на форуме. Но, сова все ж лучше.

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

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

0ll

Цитата

Запускали скрипт в терминале?


Запустил скрипт в терминале, можно идти дальше. Присваивать к " ordersBUY, ordersSELL, AUTO" числа не надо?
Спойлер

#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()
{
Alert(" Магик =" + IntegerToString(Magic) + "\nСимвол =" + Symbol() + "\nПериод =" + IntegerToString(Period()));
return;
}
//+------------------------------------------------------------------+

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

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

Запустил скрипт в терминале, можно идти дальше. Присваивать к " ordersBUY, ordersSELL, AUTO" числа не надо?

Обязательно! В этом весь смысл enum!
ordersBUY = OP_BUY, ordersSELL = OP_SELL, AUTO = -1, (после AUTO нужна запятая?)
(заодно гляньте раздел справки http://docs.mql4.com/ru/constants/tradingconstants/orderproperties)
Ранее я Вам писал:


- В функции start() Выведешь Alert() где расскажешь что за скрипт, координаты - где его бросили на экран графика, под ценой или над (Справка Операции с графиками), текущую пару.

Справка здесь:http://docs.mql4.com/ru/chart_operationsИ чтобы закончить первый этап нужно определиться как будет работать режим AUTO:
1. Пользователь может бросить скрипт на график, а мы по координатам найдем ближайший ордер и определим его тип.
2. Просто пересчитаем ордера, найдем "последние" профитные(+) и будем работать по их типу.
Можно ещё в режиме AUTO у пользователя запрашивать подтверждение этого выбора.
Ссылка на сообщение
Поделиться на другие сайты

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


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

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

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

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

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

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

Войти

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

Войти

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


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

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