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

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


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

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


Добавил сдвиг и для удобства цифры заменил на константы ;)


Здорово. Так гораздо удобнее, понятнее и со сдвигом можно применять.
Ежели удасться, то стрелки алерты были б кстати. Понаблюдал, заметил, что текущие тенденции хорошо показывает.
Хоть иногда и с небольшим запозданием, но не более, чем по классике "входить на 2й свече после сигнала".
Т.е. сигнал от этого инд. получается ка 2й звонок. :!!

Ну, и, MTF, если посильно реализуемо.
В задел и для экспериментов - мож удастся как доп. фильтр в ТС или в сов. добавлять. :)
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Перейти

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

Перейти

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

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

Друзья, подскажите, в чем разница если нужно ограничить колличесто открываемых ордеров в рынке использовать (OrdersTotal()>=OrderCount) или отдельную функцию с циклом и ОrderSelect. Это из 2-го урока. Просто например мне нужно, чтобы рынке постоянно был только 1 ордер. Можно ли сделать попроще, чтобы не пписать отдельную функцию? спасибо.
Только начал изучать, пытаюсь вникнуть в основы.

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

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

Парни, давайте без ложной скромности и с фиксацией инфы.

1) slope_direction_line m01.mq4 - мод должен отличаться от оригинала.
№мода и дату модификации в код (шапку) тоже сам Бог велел вписывать

2) в код (шапку) можно и нужно дописывать "доработано SuTeRR и erkon"

3) ссылку на этот топик в шапку тоже никто вставить не запрещает.

Делаем что-то лучше: фиксим моды/улучшения - и не стесняемся в коде расписываться.
Уменьшаем хаос - и чествуем героев! :)


P.S. мои Slope Direction Line только нерассортированные и только из папки Загрузки.
Для понимание уровня хаоса - при том, что я аккуратист. :)

Slope_Direction_Line.rar

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

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


Друзья, подскажите, в чем разница если нужно ограничить колличесто открываемых ордеров в рынке использовать (OrdersTotal()>=OrderCount) или отдельную функцию с циклом и ОrderSelect. Это из 2-го урока. Просто например мне нужно, чтобы рынке постоянно был только 1 ордер. Можно ли сделать попроще, чтобы не пписать отдельную функцию? спасибо.
Только начал изучать, пытаюсь вникнуть в основы.

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

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



Друзья, подскажите, в чем разница если нужно ограничить колличесто открываемых ордеров в рынке использовать (OrdersTotal()>=OrderCount) или отдельную функцию с циклом и ОrderSelect. Это из 2-го урока. Просто например мне нужно, чтобы рынке постоянно был только 1 ордер. Можно ли сделать попроще, чтобы не пписать отдельную функцию? спасибо.
Только начал изучать, пытаюсь вникнуть в основы.

OrdersTotal выдаёт общее кол-во ордеров в мт в том числе закрытых и возможно других советников - так что без цикла сортировки не обойтись.


немного не так.
OrdersTotal() показывает только ВСЕ активные ордера(включая и отложенные лимитки и стоповые) вне зависимости от пола, расы, вероисповедания. :))
OrdersHistoryTotal() - показывает только закрытые ордера и удаленные(отмененные отложки).

haiduc если ты планируешь что в терминале будет работать только один твой советник и только на одном графике - то OrdersTotal() будет достаточно Изменено пользователем dermitay
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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

Уважаемые форумчане ЗДРАВСТВУЙТЕ!
Подскажите пожалуйста новичку ответ на такой вопрос!
Советник основан на трендовом индикаторе к примеру SAR или MA. При открытии ордера на Buy выставляется SL и TP.Цена достигает, к примеру TP. Как запретить советнику ( условие) открывать сделку Buy ( в том же направлении) пока не произойдет реверс на индикаторе и советник не откроет сделку Sell.

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

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

ну вопроса сразу же два:
1. что делать если произошел реверс сигнал а предыдущий ордер до сих пор не закрыт по ТП? строить уже локирующую сетку?
2. что делать если ордер закрылся по СЛ и получили сигнал на реверс?

а вобще, суть: при открытии каждого ордера запоминай его тип. и если следующий сигнал(аналогично перепиши чтоб было 0 - сигнал на бай, 1- сигнал на селл) не равен (1 - #сохраненный тип предыдущего ордера#) прим.: единица минус тип предыдущего ордера.
то сделки не открываем.

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

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

mult290, Я в таких случаях решаю следующим образом:
if (High[1] > MA && Low[1]

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

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


mult290, Я в таких случаях решаю следующим образом:
if (High[1] > MA && Low[1]


Любой способ хорош, если он работает ;)
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
mult290 если хотите чтоб ордера бай/селл открывались по очереди, то введите переменную int LastOrd=-1.
работать будет примерно так:

int ordType = SignalOpen(); // сигнал на открытие нового ордера - OP_BUY или OP_SELL
if ( LastOrd != ordType )
{
OrderOpen( ordType );
LastOrd = ordType;
}
  • Лайк 3
Ссылка на сообщение
Поделиться на другие сайты

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

Здравствуйте уважаемые форумчане.
Новичок. Одолел Урок №3. А вот с домашним заданием к нему чегой-то ну никак справится не могу. В частности, пока OrderSend просто BUY или просто SELL - работает. НО! Как только OrderSend -> Отложенный ордер (любой, хоть SELLSTOP, хоть …), финал всегда один: Ticket В натуре (на основе текста кода Урока 3) это выглядит так.
Действие первое
if(CountSell()==0 && Bid>=PriceHigh )
{
OpPr=NormalizeDouble((Bid),Digits);

Tiket = OrderSend(Symbol(),OP_SELL, Lots,OpPr,Slippage,0,0,"TMA-robot",Magic,Red);
if(Tiket>0)
РАБОТАЕТ

Действие второе
if(CountSell()==0 && Bid>=PriceHigh)
{
SL = 0;
TP = 0; OpPr=NormalizeDouble((Bid-100*Point),Digits);
Tiket=OrderSend(Symbol(),OP_SELLSTOP,Lots,OpPr,Slippage,0,0,"TMA-robot",Magic,Red);
if(Tiket>0) // OP_BUYLIMIT

и/или Действие третье

void OnTick()
{
PriceHigh= iCustom(NULL,0,"TMA_Fair",TimeFrame,HalfLength,Price,ATRMultiplier,ATRPeriod,Interpolate,1,0);
PriceLow = iCustom(NULL,0,"TMA_Fair",TimeFrame,HalfLength,Price,ATRMultiplier,ATRPeriod,Interpolate,2,0);

if(CountSell()==0 && Bid>=PriceHigh)
{
SL = 0;
TP = 0; OpPr=NormalizeDouble((PriceHigh+100*Point),Digits);
Tiket=OrderSend(Symbol(),OP_BUYSTOP,Lots,OpPr,Slippage,0,0,"TMA-robot",Magic,Red);
if(Tiket>0) // OP_SELLLIMIT

А тут Финал всегда один: Ticket Самостоятельное и очень тщательное изучение Справки и Учебника MQL ничего не дало. Там ситуация Error=3 -не обсуждается.
Ну и внимание вопрос: а в чём ошибка и что такое, в данном случае, НЕПРАВИЛЬНЫЕ ПАРАМЕТРЫ?
Заранее спасибо.
p.s. Просматривая и прослушивая Уроки (надо признать очень удачные, лучше по написанию советников для начинающих не встречал), обратил внимание, что в самом начале процесса написания советника в одном случае на экране Редактора MQL появляется функция void onTick(), а в другом, в частности Урок 4 (Мартингейл, на 1-й минуте) функция int start(). Это почему и как этим управлять?
Кстати, порекомендуйте, где ещё чего скачать-почитать по программированию и языку MQL

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

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


Цитата

Как сделать чтобы выводилось в обратном порядке? Т.е. сначала бар N, а в конце нулевой?


Nicole, просто в цикле for для Вашей переменной str начните перебирать не с i=0, а с i=50 и в обратную сторону. И попробуйте еще для тренировки вот это число баров (50) :-? задать как переменную, голых вводов цифр Павел не советовал делать, что в принципе правильно


Наконец-то разобралась. Ошибка должна была отлежаться пару дней )))) Спасибо за целебный пинок ))))
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
DrNimus там вариантов несколько может быть, в том числе зависит от параметров счёта к которому подключен МТ - надо проверить уровень СтопЛевел. В третьем варианте что выдаёт индикатор проверяли? В общем случае нужно расставлять Print-ы типа:
Print ( "Потом смотрите в журнал.

OnTick() - Это для 600+ билда МТ. Start() для старых билдов.
Ссылка на сообщение
Поделиться на другие сайты

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


DrNimus там вариантов несколько может быть, в том числе зависит от параметров счёта к которому подключен МТ - надо проверить уровень СтопЛевел. В третьем варианте что выдаёт индикатор проверяли? В общем случае нужно расставлять Print-ы типа:
Print ( "Потом смотрите в журнал.



Добавлено: 12-02-2016 14:42:32

Проверял. И не только в третьем. Я не оч. понимаю, почему собственно нужно проверять СтопЛевел. Ибо:
а) Параметры SL и TP =0
б) С индикатора ПРИХОДИТ сигнал ( принты я расставлял и сигнал вижу)
в) а вот дальше вижу только err=3. Я уж и Print (GetLastError()) тоже
И не оч. понимаю, почему бы ему не открыть BUYSTOP на 100 (или 15) пп. повыше сиюминутного Ask-a? Чего ему мешает-то?
Изменено пользователем DrNimus
Ссылка на сообщение
Поделиться на другие сайты

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


Я не оч. понимаю, почему собственно нужно проверять СтопЛевел. Ибо:
И не оч. понимаю, почему бы ему не открыть BUYSTOP на 100 (или 15) пп. повыше сиюминутного Ask-a? Чего ему мешает-то?



СтопЛевел при открытии BuyStopа накладывает ограничение OpenPrice-Ask ≥ StopLevel
Подробнее можно вот тут почитать https://book.mql4.com/ru/appendix/limits
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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

товарищи, братья по разуму, я тут задумался над оптимизацией кода, так как голый терминал с моей мультивалютной совой на линухе жрет 500Мб.

я избавился от лишних циклов - не помогло. вобще ничего не поменялось.
я извратился, и покусился на святое - типы переменных, все что можно перевел в float и оставшееся в short. все с корректным приведением типов где надо. короче с #property strict код компилится без единой ошибки(для меня это уже принцип - я всегда так пишу код чтобы все было чики-поки).
толку - абсолютный ноль.
так как сова у меня мультивалютная я всегда применяю онтаймер вместо онтика, думал причина в нем, переписал все под стандарты ОнТик - вобще ноль реакции.
сейчас рынок закрыт - код вобще просто инициализируется и все - логика дальнейшая не работает, однако - терминал с совой как весил 500Мб так и весит.
какие из "тяжелых" наркотиков применяются в коде - да особо никаких - лишь создан массив на 28 элементов, элемент представляет из себя структуру
но и дело не в ней, вот вариант "для корыстных до ресурсов", я загнался еще больше прочитав эту статью про выравнивание в структуре.

вот итог структуры(с выравниванием), заполняется единократно в ините, дальше в коде идет модификация значений под алгоритм совы:

Спойлер

struct am
{
float adr;
float preClose;
float curClose;
float preRSI;
float curRSI;
float distance;
float lastprice;
short countBUY;
short countSELL;
short curCountOrders;
short preCountOrders;
short timeprev;
short s1;
short s2;
short s3;
string sym;
};
am MainBase[];



но и это нихрена не помогло - код вобще не изменился "в весе" в оперативке ни на мегабайт.
поясню: у меня поднят Debian, ест он все вместе с поднятыми плюшками и т.д. и т.п. максимум 80Мб. сам мт4 под вайн32 дает около 130Мб. и вот мой сов неработающий 360-400Мб.

вот у меня и возник вопрос - а как решаете вы проблемы с оптимизацией кода? или лыжи не едут или я еб...
в чем может быть причина? Изменено пользователем dermitay
Ссылка на сообщение
Поделиться на другие сайты

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

Я далеко не спец, но как мне кажется, от нас тут уже ничего не зависит - что туда пихают метаквоты при компиляции, что оно столько жрет - никому неизвестно :-? Причем с каждым билдом все хуже и тяжелее...

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

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

Приветствую "коллеги" может кто подскажет, кому не трудно... набросал код а советник живет своей жизнью в тестере. Не учитывает значение "Macd" из функции iMACD при открытии ордера. и когда много условий не открывает SELL. С одной средней и вверх и в низ а когда много то только вверх. дело даже не в продаже самой, просто она в коде после покупок идет. в другой сове так же было... в ней еще до кучи цикл не работал, хотел дивергенцию MACD найти... хотя делал все по видео. Короче беда!
Грешу на качество моделирования 25% - может ли это влиять?
Подскажите новичку если не сложно)

вот код:

Спойлер


void OnTick()
{



double Trend01 = iMA (NULL,0, MA1,0,MODE_SMA,PRICE_CLOSE,10);
double Trend02 = iMA (NULL,0, MA2,0,MODE_SMA,PRICE_CLOSE,10);
double Trend03 = iMA (NULL,0, MA3,0,MODE_SMA,PRICE_CLOSE,10);
double Trend04 = iMA (NULL,0, MA4,0,MODE_SMA,PRICE_CLOSE,10);
double Trend1 = iMA (NULL,0, MA1,0,MODE_SMA,PRICE_CLOSE,0);
double Trend2 = iMA (NULL,0, MA2,0,MODE_SMA,PRICE_CLOSE,0);
double Trend3 = iMA (NULL,0, MA3,0,MODE_SMA,PRICE_CLOSE,0);
double Trend4 = iMA (NULL,0, MA4,0,MODE_SMA,PRICE_CLOSE,0);

double Trend005 = iMA (NULL,0, 1,0,MODE_SMA,PRICE_HIGH,0);
double Trend05 = iMA (NULL,0, 1,0,MODE_SMA,PRICE_HIGH,1);
double Trend5 = iMA (NULL,0, 1,0,MODE_SMA,PRICE_HIGH,5);
double Trend006 = iMA (NULL,0, 1,0,MODE_SMA,PRICE_LOW,0);
double Trend06 = iMA (NULL,0, 1,0,MODE_SMA,PRICE_LOW,1);
double Trend6 = iMA (NULL,0, 1,0,MODE_SMA,PRICE_LOW,5);

double MacdCurrent =iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);

double T1 = Trend01-=Trend1;
double T2 = Trend02-=Trend2;
double T3 = Trend03-=Trend3;
double T4 = Trend04-=Trend4;

int total=OrdersTotal();
if (total
{



if(Trend006 > Trend1 && Trend06 Trend1 && MacdCurrent > Macd)
{
int tiket =OrderSend(Symbol(),OP_BUY,Lot, Ask,3,Ask-StopLoss*Point,Bid+TakeProfit*Point,"",123,Blue);
if (tiket>0)
{
Print ("Отработала покупка");
}
}
if(Trend006 > Trend2 && Trend06 Trend2 && MacdCurrent > Macd)
{
int tiket =OrderSend(Symbol(),OP_BUY,Lot, Ask,3,Ask-StopLoss*Point,Bid+TakeProfit*Point,"",123,Blue);
if (tiket>0)
{
Print ("Отработала покупка");
}
}
if(Trend006 > Trend3 && Trend06 Trend3 && MacdCurrent > Macd)
{
int tiket =OrderSend(Symbol(),OP_BUY,Lot, Ask,3,Ask-StopLoss*Point,Bid+TakeProfit*Point,"",123,Blue);
if (tiket>0)
{
Print ("Отработала покупка");
}
}
if(Trend006 > Trend4 && Trend06 Trend4 && MacdCurrent > Macd)


{
int tiket =OrderSend(Symbol(),OP_BUY,Lot, Ask,3,Ask-StopLoss*Point,Bid+TakeProfit*Point,"",123,Blue);
if (tiket>0)
{
Print ("Отработала покупка");
}
}



if (Trend005 = Trend1 && Trend5 {
Print ("Отработала продажа");
int tiket =OrderSend(Symbol(),OP_SELL,Lot, Bid,3,Bid + StopLoss*Point,Ask - TakeProfit*Point,"",123,Blue);
if (tiket>0)
{
Print ("Отработала продажа");
}
}
if (Trend005 = Trend2 && Trend5 {
Print ("Отработала продажа");
int tiket =OrderSend(Symbol(),OP_SELL,Lot, Bid,3,Bid + StopLoss*Point,Ask - TakeProfit*Point,"",123,Blue);
if (tiket>0)
{
Print ("Отработала продажа");
}
}
if (Trend005 = Trend3 && Trend5 {
Print ("Отработала продажа");
int tiket =OrderSend(Symbol(),OP_SELL,Lot, Bid,3,Bid + StopLoss*Point,Ask - TakeProfit*Point,"",123,Blue);
if (tiket>0)
{
Print ("Отработала продажа");
}
}
if (Trend005 = Trend4 && Trend5
{
Print ("Отработала продажа");
int tiket =OrderSend(Symbol(),OP_SELL,Lot, Bid,3,Bid + StopLoss*Point,Ask - TakeProfit*Point,"",123,Blue);
if (tiket>0)
{
Print ("Отработала продажа");
}
}





}

}


и еще вопрос: как описать дивергенцию MACD? хочу что бы при пересечении сигнальной линии гистограммой советник пробегался на "N" количество баров назад и искал похожее пересечение. Например через 30 баров. Далее вычислял разность значений сигнальных линий. Текущее и те 30 баров назад. Далее Находил разность текущей цены(или машки) и цены 30 баров назад. Во внешних параметрах: минимальная отдаленность MACD от 0, мин. разница цен, и мин разница сигнальных линий MACD.

Понятно, что это нужно делать в цикле, но что то он не пошел у меня не пошел подскажите плиз...
Заранее спасибо! Изменено пользователем Старик
Ссылка на сообщение
Поделиться на другие сайты

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

вот у меня и возник вопрос - а как решаете вы проблемы с оптимизацией кода? или лыжи не едут или я еб...
в чем может быть причина?


Да я сколько пробовал, тоже бывает только уменьшением циклов или их упрощением решается, а в остальном ни хрена...
  • Лайк 3
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
dermitay имхо МТ, для ускорения работы сов, буферизирует в оперативе всё к чему есть обращение из совы. т.е. буферы индюков, цен инструментов. Это я к тому, что оптимизация самого кода мало чего даст, попробуй сову безиндикаторную и которая кроме бид/аск ничем не пользуется...
была где-то сова, которая открывала сделку со сл и тп и если был сл, то следующий ордер встречный, при тп в ту-же сторону. :d
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Управление ордерами. Стоп-ордера Buy Stop, Sell Stop вместо стоп-лосс.
Скрипты и панелька - доработка.


Просьба сделать индикатор, или подправить готовый: BDMhelperv1.06.mq4
выводящий в окно пары, где он стоит, маленькие кнопки,
при нажатии на которые срабатывают скрипты по управлению ордерами:

BUY: ByMarketBuy.rar SELL: ByMarketSell.rar Reverse: Reverse.rar

Close ALL: ClosePart&WL Close_BUY, Close_SELL, Reserv

Скрипты в папке Scripts МТ4.
---
Или это ТЗ так:


ТЗ для управляющего индюка:

- сделать/доработать_готовый индюк с 8 кнопками
- в настройках индюка для каждой кнопки 2 параметра
1. строка = название кнопки
2. символ = горячая клавиша для запуска скрипта.
- панелька с кнопками привязывается к сторонам окна пары с позициями Х(У), см. рис.

Как пользоваться: у нас есть набор скриптов, выбираем 8 шт и назначаем им горячие клавиши в МТ.
Затем запускаем индюк, настраиваем название кнопок и указываем символ горячей клавиши.

пример запуска скрипта из эксперта/индикатора.



Пример такого решения: Индикатор BDMhelperv1.06.mq4
к-й можно взять за основу и доработать.

***

ТЗ подробно.
(это ТЗ уже в черновиках, оставлено тут для памятки, можно не смотреть.
Требуется сделать/подправить индикатор как описано выше.
Все другие уточнения, при необходимости могу дать по частям)

Спойлер

Индикатор вывода кнопок запуска скриптов.

Цитата

Есть индикатор BDMhelperv1.06.mq4
с маленькими серыми кнопочками в окне по открытию/закрытию ордеров на графике
через подключённые на кнопки скрипты.

Работа с ним весьма упрощается и повышается продуктивность.
Позволяет быстро и легко управляться вручную и на полуавтомате с другими советниками(в т.ч. трал)
сразу на нескольких парах.
Не занимает место советника в окне.

Скрипты написаны так, что при открытии ордера сразу выставляют заданные в коде/настройках ТП и СЛ.
---

Дополнительно требуется написать или переделать скрипты:

Спойлер

1. открытия по рынку ордеров BUY, SELL, (и BUY-Limit, SELL-Limit - опц.),
где вместо СЛ сразу выставлялся бы встречный Стоп-ордер Buy Stop, Sell Stop.
2. замены ранее выставленных в зоне убытка стоп-лосс(СЛ) ордеров на Стоп-ордера Buy-Stop, Sell-Stop - автоматически и/или с кнопкой "Замена стопов". Стоп-лосс(СЛ) ордера в зоне БУ+(прибыли) не должны заменяться.

Примеры готовых скриптов, индикатор и подробное ТЗ по частям возможным к реализации - см. далее, в первых постах темы.
Включая готовые скрипты по выставлению ордеров BUY, SELL сразу со СЛ(стоп-лосс) и ТП(тейк-профит),
где выставление СЛ можно заменить на выставление стоп-ордеров: Buy Stop, Sell Stop.








ЧАСТЬ 1.

1. Доработка и написание скриптов.


ЗАДАЧА:
переделать скрипты для открытия/закрытия/управления ордеров кнопками от индикатора BDMhelperv1.06.mq4 или аналога:


Спойлер

1. Чтоб вместо стоп-лосса выставлялся встречный лок - стоп-ордер равный созданному рабочему ордеру:
Buy-Stop для Sell , Sell-Stop для Buy ордеров.
Скрипты срабатывают для того инструмента (пары) на к-м запущены кнопками из установленного в их окне индикатора.

Возможность выбора работы с обычными СЛ и ТП остаётся.
И разработка будет полезна для любого стиля торговли.

2. Доработать функции/настройки этих скриптов:

1. автоматически заменяет выставленные любым образом(сов., руками) в зоне убытка стоп-лоссы к любым новым ордерам по инструменту(паре)
на стоп-ордера(локи) Buy Stop , Sell Stop.
СЛ в зоне прибыли, БУ+ при этом не затрагиваются, кроме случая их принудительного перемещения на какой-то уровень (например для сведения всех ордеров вместе к усреднённой линии) отдельной настройкой/скриптом

2. Выставленные одновременно с новым ордером скриптом стоп-ордера(локи) д.б. можно перетаскивать руками
и они по-умолчанию не должны авто- возвращаться (этим) скриптом на их первоначальное место.

3. И при срабатывании стоп-ордеров(лока) - убирается ТП от основного ордера, к которому поставлены локи.
При срабатывании ТП и закрытии осн. локируемого ордера эти встречные стоп-ордера(локи) к этому ордеру должны автоматически удаляться.

4. При переводе СЛ основного ордера в БУ+ эти стоп-ордера(локи) также должны удаляться. Далее работает трал.
Т.е. новый СЛ "оттянутый" руками или тралом/др.скриптом/советником в зону БУ+ должен выстваляться, с оновременным удалением локирующего стоп-ордера к открытому ордеру.

5. Желательны функции/кнопки/чеки:

- Стоп-ордера вместо СЛ* [ ] (чек)
*по-умолч. выставляются обычные СЛ

- Показывать средние линии БУ(+спред+комиссия) цен ордеров и средние линии всех СЛ и ТП из настроек* [ ] (чек)
*отдельно для всех Бай, отдельно для всех Селл ордеров

- СЛ по средним [ ] (чек)*
- ТП по средним [ ] (чек)*
*по-умолчанию стопы(стоп-ордера) выставляются к каждому ордеру отдельно, при отметке чека - по средним линиям всех ордеров этого направления, при каждом новом ордере переносятся с ними**
**при установке чека все ранее выставленные стопы(стоп-ордера) переносятся с отступами по средним линиям, при снятии, все уже имеющиеся стопы(стоп-ордера) остаются на месте, а новые уже выставляются к каждому новому ордеру отдельно.

- Разнести СЛ по ордерам(кнопка)
- Разнести ТП по ордерам (кнопка)*
*все стопы(стоп-ордера) принудительно разносятся к каждому ордеру согласно их значениям в настройках

- Лот начальный
[ ] (вписать, по-умолч. - из настроек)

---
Названия переделанных скриптов поменять*, напр. на BuyBDM-Lock.mq4 и SellBDM-Lock.mq4

*Функции выставления СЛ и ТП, как обычно, там стоит оставить, хотя бы, просто закомментировав, или сделав вкл/откл. настройку их.
Особенно для случая стыковки с панелькой-индикатором, где эти настройки будут задаваться.
Если проще и меньше нагрузки на МТ4 и комп, то можно использовать разные скрипты:
1. для СЛ и ТП (как обычно) 2. Для Локов вместо СЛ.




2. Доработка индикатора или аналога.


Спойлер

Индикатор BDMhelperv1.06.mq4 сейчас как-то завязан на сов. BDMv1.27.ex4 (берёт оттуда настройки-данные для СЛ и ТП)
из ветки [UNI] SCALP.INC MULTI
архив и описание сборки http://tlap.com/forum/torgovye-sistemy/2/uni-scalpinc-multi-skalping-28-par-s-odnoy-doski/12001/?do=findComment&comment=252467

Его следует отвязать от любых сов., сделав автономным, связанным только со скриптами, с возможностью независимо ставить на любое окно.
Либо создать аналог.

Добавить настройки и кнопки/чеки/поля:

- Бай
- Селл
- Закрыть все
- Закрыть все Бай
- Закрыть все Селл
- СЛ размер [ ] (вписать, по-умолч. - из настроек)
- ТП размер [ ] (вписать, по-умолч. - из настроек)
- Всё (возможное) по списку 5. Желательны функции/кнопки/чеки: (см. выше)

В будущем:
- Включить трал [ ] (подключаемый отдельно)
- Настройки трала: ...
- Вкл. БУ+ [ ] (чек) (подкл. отдельно)
- Настройки БУ: ...
Кнопки/чеки/поля можно разнести по нескольким разным панелькам, выстраиваемым по привязке к углам и координатам Х и У отдельно.

Более подробно мысли, функции и ТЗ по доработке индикатора и панелек в след. части (после осн. скриптов).



Дизайн.
Сейчас кнопки в окне вмещают по 2 БУквы в подписи.
Думаю, что можно их сделать по 3, чуть расширив кнопки, уменьшив буквы в размере - чтоб меньше расширять (экономим место)
Допустимы подписи АБР рядом с кнопками на прозрачном фоне, в настройках инд., тогда сделать чек [ ] Показ. подписи у кнопок.
Также такой чек можно вывести в кнопки окна.
---


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


---
Основные (первичные) скрипты BuyBDM.mq4 и SellBDM.mq4 и индикатор BDMhelperv1.06.mq4
+ доп. скрипты по управлению ордерами разного назначения (для образца, примера, вариантов) прилагаются.
---

Вид кнопок от индикатора сейчас (примерный образец):

Scripts_for_orders.rar
BuyBDM.mq4+SellBDM.mq4-комментарии.rar

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

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


dermitay имхо МТ, для ускорения работы сов, буферизирует в оперативе всё к чему есть обращение из совы. т.е. буферы индюков, цен инструментов. Это я к тому, что оптимизация самого кода мало чего даст, попробуй сову безиндикаторную и которая кроме бид/аск ничем не пользуется...
была где-то сова, которая открывала сделку со сл и тп и если был сл, то следующий ордер встречный, при тп в ту-же сторону. :d



да я в курсе этого. поэтому избавился от iCustom и описал весь алгоритм простыми iMA и iRSI. то есть в коде по сути у меня нет обращений "во вне", файлы не читаю, глобальные переменные не юзаю... в тестере код тестируется приемлемо быстро - год за 7-10 минут спокойно проходит.
Ссылка на сообщение
Поделиться на другие сайты

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

Всем привет!

Посмотрел видео.
MQL программирование: как написать советник на индикаторе

Хороший урок.
Все сделал скомпилировал. Без ошибок.
При тесте возникла проблема.

Тестер очень медленно тестирует по сравнению с видео.
Если там сделки совершались одна за одной, то у меня сделка одна в 4 минуты где-то.

Ноут достаточно хороший.
Асус i5 1.8, оперативы 6 Гб, Жесткий диск с виндой свободен гигов на 40.
Но работает медленно по сравнению с видео.

Настройки те же.
EURUSD
15min
Контрольные точки
Спред 5
Без визуал
Временной период тот же

В диспетчере задач Метатрейдер жрет 42% ЦП, 138Mb памяти.
Windows 10 64

Яндекс молчит. Подскажите пожалуйста, что сделать с тестером. Может там есть еще какие-то скрытые настройки.


А да.
В терминале не было котировок за прошлый год. Я подгрузил их через
сервис - архив котировок, для м5 и м15.
Брокер Larson Holts и на OANDA тоже самое.

Вопрос: Какие настройки посоветуете поменять?


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

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

Здраствуйте! учусь програмированию, но не как не могу разобратся с левыми открытиями ордеров.
коротко. написал простой советник для примера: Если цена Ask опускается ниже уровня Level , то открывается ордер на покупку. Если ордер закрывается по стоп лосу, то по задумке больше ордеров открыватся не должно, но ордер на покупку все равно открывается. Пытался булевским типом прикрыть это безобразие, но обьявив ево в начале он просит дать ему одно из двух значений, что ломает логику.
как правильно написать код, С Уважением.

line_Orders.mq4

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

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


Цитата

вот у меня и возник вопрос - а как решаете вы проблемы с оптимизацией кода? или лыжи не едут или я еб...
в чем может быть причина?


Да я сколько пробовал, тоже бывает только уменьшением циклов или их упрощением решается, а в остальном ни хрена...


Я далеко не спец, но как мне кажется, от нас тут уже ничего не зависит - что туда пихают метаквоты при компиляции, что оно столько жрет - никому неизвестно :-?
Причем с каждым билдом все хуже и тяжелее...


Это чтобы всякие умники яйцеголовые по терминалам не лазили и ДЦ не нагружали... :d
Напишет умник жутко умную и большую программу - а она никуда не лезет...

Типа такая узенькая дверь в ДЦ получается.
Деньги туда в дверь отдать можно, даже зад свой тощий просунуть можно.
А шибко умную яйцеголову свою, будь любезен, снаружи где-нибудь держи и в терем/ДЦ не совай... :) Изменено пользователем Старик
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Войти

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

Войти

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


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

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