MQL для тебя

MQL для чайников, программирование на MQL4, MQL5

Архив за марта, 2010

Столкнулся с проблемой и вот уже третий день бьюсь и решить не могу. В готовом советнике решил вместо лота ввести % риска, поэтому нужен расчёт лота к стопу, например при депо 10 000 риск 1% при стопе 100 пп это будет примерно лот 0.1 а вот при стопе 200 лот уже лот должен быть 0.05, для того чтобы риск 1% остался на том же уровне. Надеюсь всё понятно изложил.

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

Расчет стоимости пункта


Все валютые пары можно условно разделить на три категории — пары с обратной котировкой (EURUSD, GBPUSD), пары с прямой котировкой (USDJPY, USDCHF) и кросс-курсы (GBPCHF, EURJPY и т.п.).

1. Для валютных пар с обратной котировкой стоимость пункта, выраженная в долларах, рассчитывается по формуле
PIP = LOT_SIZE * TICK_SIZE,
где LOT_SIZE — размер лота, TICK_SIZE — размер тика.

Для валютных пар с обратной котировкой стоимость пункта постоянна и не зависит от текущей котировки.

Пример:
Для EURUSD размер лота 100,000 евро, размер тика — 0.0001
PIP = 100,000 * 0.0001 = $10.00

2. Для валютных пар с прямой котировкой стоимость пункта, выраженная в долларах, рассчитывается по формуле
PIP = LOT_SIZE * TICK_SIZE / CURRENT_QUOTE,
где LOT_SIZE — размер лота, TICK_SIZE — размер тика, CURRENT_QUOTE — текущая котировка пары.

Для валютных пар с прямой котировкой стоимость пункта меняется в зависимости от текущей котировки.

Пример:
Для USDJPY размер лота 100,000 долларов, размер тика — 0.01. При котировке USDJPY 114.66
PIP = 100,000 * 0.01 / 114.66 = $8.72

3. Для кросс-курсов стоимость пункта, выраженная в долларах, рассчитывается по формуле
PIP = LOT_SIZE * TICK_SIZE * BASE_QUOTE / CURRENT_QUOTE,
где LOT_SIZE — размер лота, TICK_SIZE — размер тика, BASE_QUOTE — текущая котировка базовой (первой) валюты к доллару США, CURRENT_QUOTE — текущая котировка пары.

Для кросс-курсов стоимость пункта меняется в зависимости от текущих котировок как самой пары, так и базовой валюты.

Пример:
Для GBPJPY размер лота 100,000 фунтов, размер тика — 0.01, базовая валюта — GBPUSD. При котировке GBPJPY 230.82 и котировке GBPUSD 2.0107
PIP = 100,000 * 0.01 * 2.0107 / 230.82 = $8.71

Разработчики MetaTrader позаботились об этом и предоставили нам функцию: MarketInfo(Symbol(),MODE_TICKVALUE) — стоимость 1 пункта в валюте депозита для 1 лота. Напишем скрипт для расчета лота:

//±-----------------------------------------------------------------+
//| Расчет лота в зависимости от размера стоплосса |
//| Copyright © 2010. |
//| http://mql4you.ru |
//±-----------------------------------------------------------------+
#property copyright "Copyright © 2010."
#property link "http://mql4you.ru"
#property show_inputs
extern int MaxRisk=2;
extern int StopLoss=100;
//±-----------------------------------------------------------------+
int start()
{double Free =AccountFreeMargin();
double LotVal =MarketInfo(Symbol(),MODE_TICKVALUE);//стоимость 1 пункта для 1 лота
double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
double Lot =MathFloor((Free*MaxRisk/100)/(StopLoss*LotVal)/Step)*Step;
if(Lot<Min_Lot) Lot=Min_Lot;
if(Lot>Max_Lot) Lot=Max_Lot;
Alert(Lot);
return(0);}
//±-----------------------------------------------------------------+

Скачать скрипт: lotstop.mq4

Добрый день! В интернете полно стратегий для 3 часового или 6 часового тайм-фрейма. В MetaTrader 4  нет таких интервалов. Там после часового идет 4 часовой, а после 4 часового идет дневной. Можно ли как-нибудь настроить нестандартный таймфрейм?

Отвечаю: Нестандартный тайм-фрейм в MT4 настроить Можно!

Опишу пример открытия 3 часового графика для валютно пары GBPUSD. Первое что нужно сделать — это открыть часовой график необходимой нам валюты:

Часовой график GBPUSD

После этого запускаем скрипт period_converter.mq4 (он есть в стандартной поставке терминала Metatrader 4)

Скрипт period_converter.mq4

Указываем множитель (количество свечей в необходимом нам периоде):

Параметры скрипта period_converter.mq4

Нажимаем кнопочку «OK». После этого идем в меню Файл — Открыть автономно:

Открытие автономного графика

Откроется окно:

Список валют для автономного графика

Находим в нем выбранную нами валютную пару и тайм-фрейм H3. Нажимаем кнопочку «Открыть».
В итоге получаем 3 часовой график для GBPUSD:

3 часовой график GBPUSD

Рекомендуемый ДЦ - Forex4you !

Недавно мне пришло письмо: Уважаемый Александр Парнюк! если вас не затруднит подскажите пожалуйста как написать индикатор на основе 4х цен свечного графика? Визуально это должно выглядеть как обычный свечной или баровский график только свечи не показывают тренд а выровнены по цене открытия по нулевой оси, т.е. бычьи свечи будут над осью Х а медвежьи под ней но цена открытия всегда на ней и главное тени (весь обьем взятого интервела времени) можно конечно представить как макд только в столбце тело свечи отображено одним цветом а тени другим чтоб явно читались четыре цены.

Подобного урока по индикаторам форекс у меня нет. Поэтому сегодня я решил показать как пишутся такие индикаторы. Для начала запускаем мастер создания советников forex:

Мастер создания советников

Выбираем «Пользовательский индикатор». В следующем окне указываем название Нашего индикатора форекс. Так как входные параметры нам не нужны — оставим их не заполненными:

Параметры индикатора

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

Буфера индикатора

Мы выбрали тип рисования — гистограмма для отображения значений в виде вертикальных линий. После нажатия кнопочки «Готово» будет сгенерирован код индикатора форекс для MT4:

//±-----------------------------------------------------------------+
//| Cand.mq4 |
//| Copyright © 2010. |
//| http://mql4you.ru |
//±-----------------------------------------------------------------+
#property copyright "Copyright © 2010."
#property link "http://mql4you.ru"
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//±-----------------------------------------------------------------+
int init()
{SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_HISTOGRAM);
SetIndexBuffer(1,ExtMapBuffer2);
return(0);}
//±-----------------------------------------------------------------+
int deinit() {return(0);}
//±-----------------------------------------------------------------+
int start()
{int counted_bars=IndicatorCounted();
return(0);}
//±-----------------------------------------------------------------+

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

#property indicator_width1 2
#property indicator_width2 1

Для линий первого буфера (свечей) мы задали ширину в 2 пиксела, а для линий второго буфера (теней) мы задали ширину в 1 пиксель.
Осталось заполнить буферы значениями по свечам. Для этого пробежимся в цикле по свечам и занесем в первый буфер высоту свечи (Close[]-Open[]), а во второй высоту тени (High[]-Low[]). Так как свечи бывают бычьи (Close>Open) и медвежьи (Close<Open), а высота тени всегда High>Low, то необходимо еще определить знак. В итоге код нашего цикла получиться:

int limit;
int counted_bars=IndicatorCounted();
if(counted_bars>0) counted_bars-- ;
limit=Bars-counted_bars;
for(int i=0; i<limit; i++)
{ExtMapBuffer1[i]=Close[i]-Open[i];
int zn=1;
if(Close[i]<Open[i]) zn=-1;
ExtMapBuffer2[i]=(High[i]-Low[i])*zn;
}

Вот что у нас получилось в итоге:

График с индикатором

Скачать: индикатор Сand.mq4