Обучение MQL II. Урок 12 Обучение MQL II. Урок 12
|

Обучение MQL II. Урок 12

Здраствуйте дорогие читатели! Сегодня мы напишем простейшую пробойную систему.

   12.1. Алгоритм

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

Эксперт анализирует максимальные и минимальные цены (тени свечей) за определенный период (период мы сможем настраивать) и выставляются отложенные ордера по обе стороны от текущей цены. Это будут ордера типа <op_buystop > и < op_sellstop >. Для большей эффективности мы будем выставлять ордера только в случае если разница между максимальной и минимальной ценой за период не больше оговоренной нами величины, (эта величина определяет ширину канала, новость многие ждут, значит, канал узок).


Онлайн обучение: финансы и форекс

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

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


Подведем итог алгоритма. Если нет отрытых позиций и выставленных ордеров. Находим максимальную и минимальную цену за период, вычисляя разницу между ними. Если разница меньше порога, который мы установили, то выставляем 2 ордера на пробой. Ордера выставляем с маленьким запасом, например, +5 пунктов, хотя, сделаем эту величину тоже настраиваемой, т.к. на разных временных фреймах запас будет разным. После срабатывания одного из ордеров, второй ордер удаляется.

  12.2. Эксперт
/*[[
Name := Proboy
Author := fxtest.ru
Link := forextimes.ru
Lots := 1.00
Stop Loss := 20
Take Profit := 40
Trailing Stop := 0
]]*/
Defines: HL(85),N(9),Zapas(5); //HL- разница между экстремальными ценами, N- период, Zapas- запас в выставлении отложенного ордера
var:s(0),b(0),ho(0),lo(0),i(0),fl(0); // s- количество отложенных OP_sellSTOP b- количество отложенных OP_BUYSTOP, i- переменная цикла
// ho- мах цена периода, lo-минимальныя цена периода, fl-флаг для выставления второго ордера

If((CurTime-LastTradeTime)<11) then Exit; // 10 сек таймаут, пока он не прошел будет осуществляться выход из эксперта

if fl=1 then // т.к. одновременно два ордера поставить нельзя, OP_sellSTOP ставится после 10 сек, с помощью флага
{fl=0; // обнуление флага и выставление 2го отложенного
SetOrder(OP_sellSTOP, lots, lo-Zapas * point, 3,lo +StopLoss * Point, lo-TakeProfit*Point, red);};

b=0; // обнуление переменных для счета
s=0;
if TotalTrades=1 then exit; // если открыт только 1 ордер то, это ордер в рынке, выходим

if totaltrades<>0 then
for i=1 to TotalTrades
Begin
IF OrderValue(i,VAL_TYPE)=OP_BUYstop then b=b+1; // подсчет позиций в цикле
if OrderValue(i,VAL_TYPE)=OP_SELLstop then s=s+1;
if (s+b)=2 then exit; // если 2 отложенных выходим
end;
if TotalTrades<>0 and (s+b)=1 then // если 1 отложенный остался (он лишний, т.к. один уже стал сыграл, удаляем его
{ for i=1 to TotalTrades
Begin
if (OrderValue(i,VAL_TYPE)=OP_sellSTOP) or (OrderValue(i,VAL_TYPE)=OP_buySTOP) then
DeleteOrder(OrderValue(i,VAL_TICKET),blue); //удаление
end;
exit;};

if TotalTrades=0 and (b+s)=0 then { // нахождение минимальной, максимальной цены
ho=h[1];
lo=l[1];
for i=n DownTo 1
Begin
if h[i]>ho then ho=h[i];
if l[i]<lo then lo=l[i];
end;
};
if TotalTrades=0 and (b+s)=0 and (ho-lo)<Hl*point then { // если открытых позиций нет и условия выполняется то
// то выставлять 2 ордера

fl=1;
SetOrder(OP_BUYSTOP,lots,ho+Zapas*point,3,ho-StopLoss*Point,ho+TakeProfit*Point,blue); // 1й из 2х

};

   12.3. Заключение

Т.к. это самый простой пробойный алгоритм, он, конечно, не приносит достойной прибыли, но в природе такие системы существуют в более сложных вариантах. Есть смысл подключать эксперт только в определенные моменты (перед выходом новостей). Можно также ввести дополнительные условия на длину теней свечей внутри периода или (и) поставить ограничение и по объему, но т.к. на форексе объем тиковый, особых улучшений он не даст.

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

Компания <Fxtest>
Халхальян Артур
техническая поддержка трейдеров
artur@fxtest.ru