|
|
|
myMQL4-арсеналец
В мае 2007 занялся MQL4. Свои [пока скромные] наработки выкладываю ниже. Считаю нужным предупредить, что материалы предоставляются "как есть" - мне будет приятно, если они окажутся Вам полезными, однако ответственность за возможные последствия от использования лежит исключительно на Вас. Критика, советы и конструктивные предложения, как всегда, приветствуются.
Напишу советника под Вашу интересную идею (бесплатно). Написанные советники могут быть выложены на сайте (в случае, если Вы против, указывайте это в письме).
(заявки временно не принимаются; 25.06.07)
08.07.07
|
Содержание моего "Арсенальца" (будет постепенно пополняться):
- Компоненты советников:
- Советники:
|
|
11 советников для трейлинга по различным алгоритмам
|
Наверх
|
|
Ранее я выложил 11 библиотечных функций для трейлинга, которые можно использовать для сопровождения открытой позиции в советниках (трейлинги "По теням свечей", "По фракталам", "Стандартный-ступенчатый", "Стандартный-удавка", "По времени", "По ATR", "Храповой, по В.Баришпольцу", "По ценовому каналу", "По скользящему среднему", "Половинящий", а также "KillLoss"). Чтобы облегчить работу тех, кто является сторонником полуавтоматической торговли, я также написал 11 экспертов, осуществляющих трейлинг по вышеупомянутым алгоритмам. Таким образом, открыв, например, позицию вручную, вы можете запустить на данном чарте советника по выбранному варианту трейлинга, указав ему номер открытой сделки, а также определив другие необходимые параметры, и спокойно наблюдать за автоматическим сопровождением вашего трейда. При необходимости вы можете опять перебрать контроль за позицией на себя, отключив советник, или сменить стратегию сопровождения, запустив эксперта, трейлингующего по другому алгоритму.
Описание, свойства и параметры используемых функций трейлинга - см. выше в разделе "Компоненты советников >> Трейлинги", а также в комментариях самих экспертов.
Советники: TrailingExperts.zip (76 Kb)
|
|
|
Советник по "5Min Intraday system" by Phillip Nel
|
Наверх
|
|
Исходные правила (форум Forex Factory), реализованные в советнике: EURUSD, GBPUSD, USDJPY, таймфрейм 5 минут (но работает также налюбом другом). Правила вратце: на чарт накладывается 3 скользящих средних: 50SMA (индикатор направления движения), 21EMA и 10EMA. Если угол наклона 50SMA круче 20 градусов (приблизительно), 21EMA и 10EMA находятся между 50SMA и курсом, ожидаем отката курса в область между 21EMA и 10EMA. Открываемся на откате, после его ослабления/завершения в сторону общей текущей тенденции (наклона 50SMA). Стоплосс 6 п. + спрэд; при +6 п. (т.е. на расстоянии 6 п. + спрэд от курса открытия) перенос в безубыток; тейкпрофит 10 п. Рекомендуется отрабатывать не больше 3 сделок по одному инструменту в день. Более подробные правила и обсуждение - см. по вышеуказанной ссылке (англ.).
Советник: 5min.mq4 | 5min.ex4
|
|
|
Мартингейл (простой и сложный) (тактика ММ)
|
Наверх
|
|
Функция:
double MM_MartingaleComplex(double dCoeff,double dBasicLot,string sSymbol,bool bIf2TradeWithLittleMoney)
Описание: расчет лота осуществляется по тактике Мартингейл - после убыточной сделки лот очередной открываемой увеличиваем в dCoeff раз, после профита - лот равен dBasicLot. При dCoeff=2 - т.н. Простой мартингейл, при 1<dCoeff<2 - сложный (т.е., в последнем случае, лот наращивается менее агрессивно, чем при удвоении, имеет место более "мягкая" прогрессия, однако для компенсации полученных убытков потребуется более одной прибыльной сделки).
Параметры:
double dCoeff - коэффициент, определяющий, во сколько раз лот следующей за убытком сделки будет больше, чем в собственно лоссовой, "2" для Простого мартингейла, меньше 2, но больше 1 - для Сложного;
double dBasicLot - лот, которым играем после закрытия прибыльной сделки;
string sSymbol - символ валютной пары, на которой открывается сделка; можно указать в виде "GBPUSD" или "Symbol()";
bool bIf2TradeWithLittleMoney - в случае, когда размер наличного депозита не позволяет открыться необходимым лотом, при bIf2TradeWithLittleMoney==true - открываемся максимально большим из возможных лотов, при bIf2TradeWithLittleMoney==false - прекращаем торговлю.
Как использовать:
- скачать библиотеку (MM_MartingaleComplex.ex4);
- поместить её в папку [директория MetaTrader'a]/experts/libraries;
- подключить её в вашем советнике;
- пример того, как конкретно следует вызывать данную функцию в вашем эксперте, смотрите в советнике-примере);
Функция предоставляется в режиме fairware (честно-платно): "если она принесет вам пользу, поможет заработать, в качестве благодарности заплатите автору, сколько сочтете достаточным".
Скачать библиотеку: MM_MartingaleComplex.ex4
|
|
|
Фиксированная пропорция (тактика ММ)
|
Наверх
|
|
Функция:
double MM_FxProp(double dDelta, double dStartLot, double dStartDepo, string sSymbol)
Описание: функция осуществляет расчет лота по тактике управления капиталом Фиксированная фракция (подробней о тактике). Суть, в двух словах: для того, чтобы увеличить рабочий лот на 0.1, необходимо на каждый из уже "играемых" лотов заработать dDelta денег. Алгоритм подробно описан в книге Райана Джонса "Биржевая игра. Сделай миллионы - играя числами". На текущий момент реализован вариант без т.н. ставки снижения.
Параметры:
double dDelta - сумма ($), которую следует заработать каждым из уже открываемых лотов (каждым 0.1 лотом), чтобы увеличить рабочий лот на 0.1;
double dStartLot - стартовый лот;
double dStartDepo - стартовый депозит, необходим для отсчета "ступенек" - уровней депо, на которых происходит изменение лота; должен быть постоянным при всех вызовах функции;
string sSymbol - торгуемый инструмент, Symbol() или "USDCHF".
Как использовать:
- скачать библиотеку (MM_FxProp.ex4);
- поместить её в папку [директория MetaTrader'a]/experts/libraries;
- подключить её в вашем советнике;
- пример того, как конкретно следует вызывать данную функцию в вашем эксперте, смотрите в советнике-примере);
Функция предоставляется в режиме fairware (честно-платно): "если она принесет вам пользу, поможет заработать, в качестве благодарности заплатите автору, сколько сочтете достаточным".
Скачать библиотеку: MM_FxProp.ex4
|
|
|
Безопасный % (тактика ММ)
|
Наверх
|
|
Функция:
double MM_SecureF(int iTrades, double dMaxDD, string sSymbol, double dBe4FLot, double dSl)
Описание: функция осуществляет расчет лота по тактике управления капиталом Безопасный % (подробней о тактике). Суть расчетов: последовательно "прогоняем" стейтмент из iTrades последних сделок с % риска от 1 до 100% (по тактике Фиксированный %). При этом для каждого % рассчитываем TWR (подробней - см. Оптимальный %) и максимальный дродаун (в %). По максимальному TWR определяем Оптимальный %. Далее смотрим на значение макс. просадки Оптимального % - если оно не больше заданного в условии (dMaxDD), то Безопасный % = Оптимальный %. Если макс. дродаун Оптимального % больше максимально допустимого, то "снижаемся" от Оптимального % в сторону 0, отбирая те % риска, макс. просадка которых не превышает порог. То значение среди отобранных, которое имеет наибольший TWR, и является Безопасным %.
Параметры:
int iTrades - количество закрытых сделок (период), по результатам которых рассчитывается Безопасный % (не меньше 10);
double dMaxDD - максимально допустимый дродаун (просадка), в %;
string sSymbol - символ валютной пары, а) позицию по которой хотим открыть и б) по закрытым сделкам, совершенным на котором, рассчитывается Оптимальный %; возможен ввод в виде "Symbol()" или буквально "EURJPY";
double dBe4FLot - лот, которым открываемся, пока не закроем достаточное для рассчета Безопасного % число трейдов (iTrades); должен быть постоянным на всем протяжении торговли;
double dSl - стоплосс для открываемой сделки, в пунктах.
Как использовать:
- скачать библиотеку (MM_SecureF.ex4);
- поместить её в папку [директория MetaTrader'a]/experts/libraries;
- подключить её в вашем советнике;
- пример того, как конкретно следует вызывать данную функцию в вашем эксперте, смотрите в советнике-примере);
Функция предоставляется в режиме fairware (честно-платно): "если она принесет вам пользу, поможет заработать, в качестве благодарности заплатите автору, сколько сочтете достаточным".
Скачать библиотеку: MM_SecureF.ex4
|
|
|
KillLoss - трал "навстречу растущему лоссу"
|
Наверх
|
|
Функция:
void KillLoss(int iTicket, double dSpeedCoeff)
Описание: при увеличении лосса (т.е., например, при снижении курса, приближении его к исходному уровню стоплосса) функция передвигает стоплосс ему навстречу со скоростью упомянутого увеличения лосса * коэффициент dSpeedCoeff. Например: открыта длинная позиция, стоплосс исходно размещен на расстоянии в 60 пунктов; когда курс проходит 30 пунктов против позиции, начинаем запускать функцию KillLoss. Если курс снижается на 1 пункт (т.е. от -30 до -31), dSpeedCoeff = 1, то подтягиваем стоплосс на 1 пункт (после изменения он будет размещен уже на расстоянии не в 60, а в 59 п. от открытия). Если на следующем тике курс ещё снизился на 2 пункта (с -31 до -33), функция переместит стоплосс на 2 п. в сторону безубытка. Если курс откатывает в сторону профита (т.е. был, например, -33, а стал -30), функция ничего не предпринимает. Таким образом, стоплосс "встретится" с курсом посредине между исходным уровнем стоплосса и курсом на момент первого вызова функции. Если коэффициент dSpeedCoeff был равен 2, то на каждый пункт "снижения" курса функция KillLoss будет подтягивать стоплосс на 2 пункта. Однако значения параметра dSpeedCoeff не обязательно должны быть постоянными (1, 1.5, 3 и т.д.) - коэффициент "ускорения" может изменяться, например, в зависимости от текущей волатильности (путём сравнения её теперешних и прошлых значений) - таким образом, например, при резком движении против позиции будет "спасена" большая часть исходного стоплосса.
Как использовать:
- скачать библиотеку (KillLoss.ex4);
- поместить её в папку [директория MetaTrader'a]/experts/libraries;
- подключить её в вашем советнике;
- в соответствующем участке кода Вашего советника, в соответствующее время, выбрав предварительно конкретный ордер открытой позиции (функция OrderSelect()), вызвать функцию KillLoss(), указав необходимые параметры (вызов производится аналогично другим ранее описанным функциям, см. эксперт с примером);
Скачать библиотеку: KillLoss.ex4 | KillLoss.mq4
|
|
|
Оптимальный % (тактика ММ)
|
Наверх
|
|
Функция:
double MM_OptimalF(int iTrades, string sSymbol, double dBe4FLot, double dDecrF, double dSl)
Описание: функция осуществляет расчет лота по тактике управления капиталом Оптимальный % (подробней о тактике). Суть: по исходам последних iTrades сделок вычисляем, при каком % риска на сделку на этом периоде была бы получена максимальная конечная прибыль. Полученное значение используется для определения лота для ближайшей открываемой сделки. После появления в истории нового закрытого трейда значение Оптимального % пересчитывается (последняя закрытая сделка "вытесняет" один трейд, самый старый по времени закрытия). Таким образом, игра по Оптимальному % начинается только после совершения, по крайней мере, iTrades сделок. До этого момента торговля осуществляется с фиксированным лотом, указанным в параметре dBe4FLot. Функция предназначена для использования вместе с системами, которые одновременно работают лишь с одним ордером (т.е. одновременно в терминале присутствует только один отложенный или открытый ордер).
Параметры:
int iTrades - количество закрытых сделок (период), по результатам которых рассчитывается Оптимальный %;
string sSymbol - символ валютной пары, а) позицию по которой хотим открыть и б) по закрытым сделкам, совершенным на котором, рассчитывается Оптимальный %; возможен ввод в виде "Symbol()" или буквально "EURJPY";
double dBe4FLot - лот, которым открываемся, пока не закроем достаточное для рассчета Оптимального % число трейдов (iTrades); должен быть постоянным на всем протяжении торговли;
double dDecrF - поскольку в будущем результативность системы может ухудшиться, есть некоторый смысл брать для торговли не точно Оптимальный %, а несколько меньший, находящийся на восходящей, левой части кривой TWR (подробней) - тогда ниже риск при ухудшении показателей системы оказаться в рынке со слишком большим лотом (при снижении прибыльности системы Оптимальный % уменьшается);
double dSl - стоплосс для открываемой сделки, в пунктах.
Как использовать:
- скачать библиотеку (MM_OptimalF.ex4);
- поместить её в папку [директория MetaTrader'a]/experts/libraries;
- подключить её в вашем советнике;
- пример того, как конкретно следует вызывать данную функцию в вашем эксперте, смотрите в советнике-примере);
Функция предоставляется в режиме fairware (честно-платно): "если она принесет вам пользу, поможет заработать, в качестве благодарности заплатите автору, сколько сочтете достаточным".
Скачать библиотеку: MM_OptimalF.ex4
|
|
|
"На все" (тактика ММ)
|
Наверх
|
|
Функция:
double MM_AllM(string sSymbol)
Описание: функция осуществляет расчет лота по тактике управления капиталом "На все" (подробней о тактике). Суть: в каждой сделке открываемся максимально возможным (исходя из наличной маржи) объёмом. Торговля (закономерно) прекращается, если на счете оказывается недостаточно средств для открытия, по крайней мере, лота объёмом 0.1. Использование данной тактики на реальных счетах рискованно и не рекомендуется (хотя на конкурсных бывает вполне естественным).
Параметры:
string sSymbol - единственным параметром, который следует определить, является символ валютной пары, на которой открывается сделка; можно указать в виде, например, "GBPUSD" или "Symbol()".
Как использовать:
- скачать библиотеку (MM_AllM.ex4);
- поместить её в папку [директория MetaTrader'a]/experts/libraries;
- подключить её в вашем советнике;
- пример того, как конкретно следует вызывать данную функцию в вашем эксперте, смотрите в советнике-примере);
Функция предоставляется в режиме fairware (честно-платно): "если она принесет вам пользу, поможет заработать, в качестве благодарности заплатите автору, сколько сочтете достаточным".
Скачать библиотеку: MM_AllM.ex4
|
|
|
Фиксированный % (тактика ММ)
|
Наверх
|
|
Функция:
double MM_FxPrcnt(double dPrcnt,double dSl,string sSymbol)
Описание: функция осуществляет расчет лота по тактике управления капиталом Фиксированный % (он же Фиксированная доля, фракция, Fixed fraction, % Depo и т.д.; подробней о теории и "механике" данной стратегии ММ читайте здесь). Тактика Фиксированный % изначально предназначена для работы с тактиками, которые одновременно имеют только одну открытую позицию (т.е. очередная сделка совершается только по закрытии предыдущей), однако предлагаемая функция также может быть использована для тактик, открывающих одновременно несколько позиций - перед открытием очередной производится расчет суммарной "подрисковой суммы" (т.е. какую сумму мы можем потерять, если все открытые сделки закроются по стоплоссу), и лот для новой сделки расчитывается таким, чтобы не превысить заданный % риска. Следует также подчеркнуть, что для применения данного алгоритма ММ (а также таких вариантов Фиксированного %, как Оптимальный, Безопасный % и проч.) обязательным является использование и указание исходного стоплосса сделки.
Параметры:
double dPrcnt - доля (%) имеющегося капитала, которым планируется рискнуть (иначе говоря, это та часть депозита, которую мы можем потерять в отдельной сделке); значение должно быть больше 0;
double dSl - исходный (на момент открытия сделки) стоплосс, в пунктах (можно указать в виде "0.0055" или "курс_открытия - курс_стоплосса" (для покупки)); значение должно быть больше 0;
string sSymbol - символ валютной пары, на которой открывается сделка; можно указать в виде "GBPUSD" или "Symbol()".
Как использовать:
- скачать библиотеку (MM_FxPrcnt.ex4);
- поместить её в папку [директория MetaTrader'a]/experts/libraries;
- подключить её в вашем советнике;
- пример того, как конкретно следует вызывать данную функцию в вашем эксперте, смотрите в советнике-примере);
Функция предоставляется в режиме fairware (честно-платно): "если она принесет вам пользу, поможет заработать, в качестве благодарности заплатите автору, сколько сочтете достаточным".
Скачать библиотеку: MM_FxPrcnt.ex4
|
|
|
Трейлинг "половинящий"
|
Наверх
|
|
Функция:
void TrailingFiftyFifty(int iTicket,int iTmFrme,double dCoeff,bool trlinloss)
Описание: по закрытию очередного бара уменьшаем расстояние между стоплоссом и текущим курсом в dCoeff раз (исходно я взял 0,5, т.е. наполовину, откуда и название). Т.е., допустим, открыта покупка со стоплоссом в 40 пунктов. По закрытию бара, на котором был совершен вход в рынок, Bid оказался выше курса открытия на 42 пункта. Если мы выбрали вариант трала только "в профите" (bTrlinloss==true), то берем расстояние от курса открытия до текущего курса - 42 п., множим его на dCoeff (например, 0.5), и получив 21 п., переносим стоплосс в +21. Пусть при закрытии следующего бара профит составил +71 п. Тогда разница между текущим стоплоссом и курсом: 71-21=50, половина от найденного значения - 50*0.5=25, и новый стоплосс должен быть установлен на 25 п. выше предыдущего (21+25=46 п. от курса открытия).
При описанном вариант трейлинга, "в профите" (bTrlinloss==true), стоплосс переносится лишь при условии, что новый стоплосс будет "лучше" курса открытия. Если же установить bTrlinloss равным false, то трал будет осуществляться и на "лоссовом" участке (т.е. интервале между курсом открытия и стоплоссом, который, кстати, должен быть обязательно определён (не равен 0), чтобы данный элемент сработал). Т.е., если взять вышеописанный вариант, то по закрытии первого бара стоплосс будет перемещен на 0.5 дистанции не между открытием и текущим курсом, а между стоплоссом и текущим курсом (при стоплоссе в 40 п. и профите в 42 п. это расстояние составит (40+42)/2 = 82/2 = 41 п., стоплосс будет установлен в +1 п. от курса открытия. На втором баре, при профите в 71 п.: а) 71 - 1 = 70, б) 70*0.5 = 35, в) 1 + 35 = 36 п. Как видим, такой вариант будет стартовать с большей "дистанции" и несколько отставать от первого. Его основная функция - поджатие стоплосса при негативном развитии событий. Например, если по закрытию первого бара профит составил -10 п., то при bTrlinloss==true мы: а) найдем расстояние от курса до стоплосса, |-40 + (-10)| = 30 п., б) рассчитаем половину этого значения - 30*0.5 = 15 п. и в) переместим стоплосс в сторону профита на это расстояние: -40 + 15 = -25.
При трейлинге в лоссе увеличивается количество преждевременных закрытий (причем с небольшим убытком), однако страхуемся от получения больших лоссов.
Параметры:
iTicket - уникальный порядковый номер ордера (выбранный перед вызовом функции с помощью OrderSelect());
iTmFrme - период чарта, по барам которого будет осуществляться трейлинг; допустимые варианты ввода: 1 (M1), 5 (M5), 15 (M15), 30 (M30), 60 (H1), 240 (H4), 1440 (D), 10080 (W), 43200 (MN);
dCoeff - коэффициент, определяющий то, в сколько раз будет сокращено расстояние между курсом на момент закрытия бара и текущим стоплоссом;
bTrlinloss - указатель того, следует ли осуществлять трейлинг на лоссовом участке.
Как использовать:
- скачать библиотеку (TrailingFiftyFifty.ex4);
- поместить её в папку [директория MetaTrader'a]/experts/libraries;
- подключить её в вашем советнике;
- в соответствующем участке кода Вашего советника, в соответствующее время, выбрав предварительно конкретный ордер открытой позиции (функция OrderSelect()), вызвать функцию TrailingFiftyFifty(), указав необходимые параметры (см. эксперт с примером);
Пример: TrailingFiftyFifty(OrderTicket(),1440,0.5,false), где OrderTicket() - номер ордера; 1440 - (минут, 1 сутки) таймфрейм, по закрытии баров которого тралим; 0.5 - по закрытии очередного бара расстояние от стоплосса до текущего курса уменьшаем вдвое; false - на "лоссовом" участке не тралим.
Скачать библиотеку: TrailingFiftyFifty.ex4 | TrailingFiftyFifty.mq4
|
|
|
Трейлинг по скользящему среднему
|
Наверх
|
|
Функция:
void TrailingByMA(int iTicket, int iTmFrme, int iMAPeriod, int iMAShift, int MAMethod, int iApplPrice, int iShift, int iIndent)
Описание: функции передается тикет позиции (iTicket), параметры построения скользящего среднего (iTmFrme - таймфрейм, на котором строим МА, iMAPeriod - период мувинга; iMAShift - сдвиг индикатора относительно ценового графика; MAMethod - метод усреднения; iApplPrice - используемая цена; iShift - сдвиг относительно текущего бара на указанное количество периодов назад) и величина отступа от среднего (iIndent), пунктов. Все параметры среднего вводятся в числовом виде, подробней - см. в комментариях функции.
Как использовать:
- скачать библиотеку (TrailingByMA.ex4);
- поместить её в папку [директория MetaTrader'a]/experts/libraries;
- подключить её в вашем советнике;
- в соответствующем участке кода Вашего советника, в соответствующее время, выбрав предварительно конкретный ордер открытой позиции (функция OrderSelect()), вызвать функцию TrailingByMA(), указав необходимые параметры (см. эксперт с примером);
Пример: TrailingByMA(OrderTicket(),60,13,0,0,0,1,3), где OrderTicket() - номер ордера; 60 - таймфрейм (1 час); 13 - период средней равен 13; 0 - среднее не сдвигаем относительно графика; 0 - метод усреднения MODE_SMA, простое скользящее среднее; 0 - по ценам закрытия баров; 1 - трейлингуем по значениям МА на предыдущем (сформировавшемся) баре; 3 - стоплосс устанавливаем с отступом в 3 пункта от МА.
Скачать библиотеку: TrailingByMA.ex4 | TrailingByMA.mq4
|
|
|
Трейлинг по ценовому каналу
|
Наверх
|
|
Функция:
void TrailingByPriceChannel(int iTicket, int iBars_n, int iIndent)
Описание: для позиции с номером iTicket трейлингует стоплосс по противоположной (для длинных позиций - нижней, коротких - соотв. верхней) границе канала, построенного на интервале в iBars_n баров, с отступом в iIndent пунктов от границы.
Как использовать:
- скачать библиотеку (TrailingByPriceChannel.ex4);
- поместить её в папку [директория MetaTrader'a]/experts/libraries;
- подключить её в вашем советнике;
- в соответствующем участке кода Вашего советника, в соответствующее время, выбрав предварительно конкретный ордер открытой позиции (функция OrderSelect()), вызвать функцию TrailingByPriceChannel(), указав необходимые параметры (см. эксперт с примером);
Пример: TrailingByPriceChannel(OrderTicket(),20,3), где OrderTicket() - номер ордера, 20 - кол-во баров, среди которых определяем наибольший high (верхняя граница ценового канала) и наименьший low (нижняя граница), 3 - кол-во пунктов, на которые отступаем от границы канала при установке стоплосса.
Скачать библиотеку: TrailingByPriceChannel.ex4 | TrailingByPriceChannel.mq4
|
|
|
Спасаем позицию
|
Наверх
|
|
Функция:
void SavePos(int iTicket, int iBarsInLoss, int iZepoPlus)
Описание: для позиции с номером iTicket при условии, что на протяжении iBarsInLoss баров стоплосс не был перенесен в безубыток, "спасаем" позицию - если курс открытия очередного бара в зоне убытков (для длинной, например, позиции - ниже курса открытия), пытаемся установить тейкпрофит в безубыток + iZepoPlus пунктов, если это невозможно (курс слишком близко к безубытку + iZepoPlus пунктов), позицию закрываем; если курс открытия очередного бара - в зоне профитов (для короткой позиции, например, ниже курса открытия), пытаемся установить стоплосс в безубыток с отступом в iZepoPlus пунктов, если это невозможно - позицию закрываем. Функция выполняет действия на открытии очередного бара.
Как использовать:
- скачать библиотеку (SavePos.ex4);
- поместить её в папку [директория MetaTrader'a]/experts/libraries;
- подключить её в вашем советнике;
- в соответствующем участке кода Вашего советника, в соответствующее время, выбрав предварительно конкретный ордер открытой позиции (функция OrderSelect()), вызвать функцию SavePos(), указав необходимые параметры (см. эксперт с примером);
Пример: SavePos(OrderTicket(),5,3), где OrderTicket() - номер ордера, 5 - количество баров, по закрытии которых, при необходимости, "спасаем" позицию, 3 - отступ (пунктов) от курса открытия, с которым устанавливаем стоплосс или тейкпрофит.
Скачать библиотеку: SavePos.ex4 | SavePos.mq4
|
|
|
Перенос тейкпрофита в [безубыток + N п.] при лоссе в Х п.
|
Наверх
|
|
Функция:
void TP2BreakevenIf(int iTicket, int iLoss, int iZepoPlus)
Описание: для позиции с номером iTicket при достижении лосса размером в iLoss пунктов тейкпрофит устанавливается (или переносится) в безубыток + iZepoPlus пунктов.
Как использовать:
- скачать библиотеку (TP2BreakevenIf.ex4);
- поместить её в папку [директория MetaTrader'a]/experts/libraries;
- подключить её в вашем советнике;
- в соответствующем участке кода Вашего советника, в соответствующее время, выбрав предварительно конкретный ордер открытой позиции (функция OrderSelect()), вызвать функцию TP2BreakevenIf(), указав необходимые параметры (см. эксперт с примером);
Пример: TP2BreakevenIf(OrderTicket(),40,1), где OrderTicket() - номер ордера, 40 - лосс, пунктов, при достижении которого тейкпрофит позиции будет перенесен в безубыток + 1 п. (последний аргумент).
Скачать библиотеку: TP2BreakevenIf.ex4 | TP2BreakevenIf.mq4
|
|
|
Перенос стоплосса в [безубыток + N п.] при профите в Х п.
|
Наверх
|
|
Функция:
void SL2BreakevenIf(int iTicket, int iProfit, int iZepoPlus)
Описание: для позиции с номером iTicket при достижении профита размером в iProfit пунктов стоплосс переносится в безубыток + iZepoPlus пунктов (если на момент правки ордера он имеет "худшее" значение, т.е. установлен ниже курса открытия для длинных позиций и выше - для коротких).
Как использовать:
- скачать библиотеку (SL2BreakevenIf.ex4);
- поместить её в папку [директория MetaTrader'a]/experts/libraries;
- подключить её в вашем советнике;
- в соответствующем участке кода Вашего советника, в соответствующее время, выбрав предварительно конкретный ордер открытой позиции (функция OrderSelect()), вызвать функцию SL2BreakevenIf(), указав необходимые параметры (см. эксперт с примером);
Пример: SL2BreakevenIf(OrderTicket(),30,1), где OrderTicket() - номер ордера, 30 - профит, пунктов, при достижении которого стоплосс позиции будет перенесен в безубыток + 1 п. (последний аргумент).
Скачать библиотеку: SL2BreakevenIf.ex4 | SL2BreakevenIf.mq4
|
|
|
Функции сопровождения позиций, кроме трейлингов
|
Наверх
|
|
Функции:
void SL2BreakevenIf(int iTicket, int iProfit, int iZepoPlus)
void TP2BreakevenIf(int iTicket, int iLoss, int iZepoPlus)
void SavePos(int iTicket, int iBarsInLoss, int iZepoPlus)
void KillLoss(int iTicket, double dSpeedCoeff)
Описание: библиотека функций, осуществляющих трейлинг по различным алгоритмам:
SL2BreakevenIf() - перенос стоплосса в [безубыток + N п.] при профите в Х п.;
TP2BreakevenIf() - перенос тейкпрофита в [безубыток + N п.] при лоссе в Х п.
SavePos() - "спасение" позиции, если по закрытии Х баров её стоплосс не достиг безубытка.
KillLoss() - трейлинг "навстречу растущему лоссу".
Как использовать:
- скачать библиотеку (4openpos_all.ex4);
- поместить её в папку [директория MetaTrader'a]/experts/libraries;
- подключить её в вашем советнике;
- в соответствующем участке кода Вашего советника, в соответствующее время, выбрав предварительно конкретный ордер открытой позиции (функция OrderSelect()), вызвать необходимую функцию, указав её параметры (см. эксперт с примером);
Пример: см. соответствующие функции.
Скачать библиотеку: 4openpos_all.ex4 | 4openpos_all.mq4
|
|
|
Трейлинг "храповой" (по Баришпольцу)
|
Наверх
|
|
Функция:
void TrailingRatchetB(int ticket,int pf_level_1,int pf_level_2,int pf_level_3,int ls_level_1,int ls_level_2,int ls_level_3,bool trlinloss)
Описание: Ratchet - англ. "храповик", "храповый" (тормоз, колесо и т.д. - тип механизмов, вращающихся, работающих лишь в одном направлении). Название выбрано, чтобы передать основную особенности алгоритма - не упустить профит, если он образовался (а на "лоссовом" участке - если размер убытка сокращается, поджимаем его, чтобы в случае повторного увеличения лосса закрыться (по возможности) с небольшим лоссом). В основе данного трейлинга - алгоритм, описанный В. Баришпольцем в одной из своих рассылок году этак в 2004 (точно не вспомню), на форумах также называемый как "вторая" система выходов Баришпольца ("первая" - "обычная" система сопровождения позиций, с выставлением "далеких" стоплоссов). ticket - номер позиции, которую будем тралить; (пример описан для длинной позиции): pf_level_1 - первый (из трех) уровень профита (пунктов), после достижения которого (курс равен или больше) стоплосс переносится в +1 п.; при достижении/превышении pf_level_2 стоплосс переносится на pf_level_1 пунктов от курса открытия; после достижения/превышения pf_level_3 стоплосс переносится на pf_level_2 пунктов от курса открытия и далее может тралиться одним из других видов трейлинга. Для "лоссового" участка: если курс снижается ниже уровня ls_level_2 пунктов от курса открытия, а потом поднимается выше него, устанавливаем стоплосс на следующем более "глубоком" уровне - ls_level_3 пунктов от открытия; если курс опускался ниже ls_level_1, и потом поднимается выше него, устанавливаем стоплосс на расстоянии ls_level_2 пунктов от курса открытия; если курс проходит расстояние спрэда в сторону профита (т.е. экьюти = 0), стоплосс переносится (если был определён) на первый уровень лосса (ls_level_1 пунктов от курса открытия). Общая идея сопровождения на "лоссовом" участке - "если уж был лосс, и он уменьшается, поджимаем стоплосс (по возможности до безубытка или даже дальше "в профит"), чтобы не допустить повторного "ухода" в лосс". Параметр trlinloss указывает, следует ли тралить на "лоссовом" участке (true) или нет (false). Функция создаёт и использует 2 глобальные переменные терминала (список этой категории переменных можно вызвать нажатием F3 в терминале). В текущем виде предназначена для одновременного сопровождения только одной открытой позиции.
Как использовать:
- скачать библиотеку (TrailingRatchetB.ex4);
- поместить её в папку [директория MetaTrader'a]/experts/libraries;
- подключить её в вашем советнике;
- в соответствующем участке кода Вашего советника, в соответствующее время, выбрав предварительно конкретный ордер открытой позиции (функция OrderSelect()), вызвать функцию TrailingRatchetB(), указав необходимые параметры (см. эксперт с примером);
Пример: TrailingRatchetB(OrderTicket(),10,20,30,15,25,35,true), где OrderTicket() - номер ордера, 10 - первый уровень профита (пунктов; при его достижении стоплосс переносится в +1 п.), 20 - второй уровень профита (пунктов; при его достижении стоплосс переносится на расстояние в 10 (первый уровень) п. от курса открытия); 30 - третий уровень профита (пунктов) (при его достижении стоплосс устанавливается на второй уровень профита, +20 п.); 15 - первый уровень лосса (т.е., если спрэд = 3 п., то первый уровень лосса будет достигнуть при значении экьюти -18 п.) (на него устанавливается стоплосс, если курс опускался ниже него, а потом поднялся выше курса открытия позиции); 25 - второй уровень лосса, пунктов (на него устанавливается стоплосс, если курс опускался ниже него, т.е. лосс достигал (25+спрэд) пунктов, а потом поднялся выше первого уровня лосса; т.е. если было, например, -29 п., а потом -15 п., стоплосс - на -25 п.), 35 - третий уровень лосса, пунктов (на него устанавливаем стоплосс, если курс опускался ниже второго уровня лосса, а потом поднялся выше), true - тралим и на лоссовом участке.
Скачать библиотеку: TrailingRatchetB.ex4 | TrailingRatchetB.mq4
|
|
|
Трейлинг "по ATR"
|
Наверх
|
|
Функция:
void TrailingByATR(int ticket,int atr_timeframe,int atr1_period,int atr1_shift,int atr2_period,int atr2_shift,double coeff,bool trlinloss)
Описание: ATR - (Average True Range, Средний Истинный Диапазон) - один из индикаторов волатильности; чем больше значение, тем, соответсвенно, выше средняя волатильность за заданный период (индикатора) времени; измерятеся в пунктах. Трейлинг по ATR в большинстве случаев позволяет изменять стоплосс соответственно к характеру поведения курса - при высокой волатильности (выраженных рывках) курс "отпускаем", при "топтании на месте" поджимаем более "плотно". В трейлинге используется 2 ATR, которым предлагается задавать отличные периоды - один короткий (напр., 5), другой - длинный (напр., 20). Какому из них - atr1_period или atr2_period - без разницы. Для расчета стоплосса используется всегда большее из значений 2 ATR - это сделано для того, чтобы несколько низковолатильных дней подряд (например, перед выходом новостей) не сделали наш стоплосс слишком близким к текущему курсу (т.е. обычно большим будет более "короткий" ATR, но если имеем несколько баров с низкой волатильностью, то "переходим" на более длиннопериодный ATR). atr_timeframe - период графика, минут (5, 15, 30, 60, 240, 1440 и т.д.), на котором рассчитываются ATR (одинаков для обоих ATR). atr1_shift и atr2_shift - на каком баре (текущем, 0, предыдущем - 1 или дальше "в прошлое") считать соответственно первый и второй ATR. coeff - коэффициент, на который множим ATR, чтобы получить стоплосс (при coeff=1 стоп будер размещен на расстоянии в 1 ATR, при coeff=1.5 - на расстоянии в полтора ATR и т.д.). trlinloss - указатель того, следует ли тралить на участке лоссов (от исходного стоплосса, при наличии такового, до курса открытия).
Как использовать:
- скачать библиотеку (TrailingByATR.ex4);
- поместить её в папку [директория MetaTrader'a]/experts/libraries;
- подключить её в вашем советнике;
- в соответствующем участке кода Вашего советника, в соответствующее время, выбрав предварительно конкретный ордер открытой позиции (функция OrderSelect()), вызвать функцию TrailingByATR(), указав необходимые параметры (см. эксперт с примером);
Пример: TrailingByATR(OrderTicket(),1440,5,1,36,1,1,false), где OrderTicket() - номер ордера, 1440 - (минут, 1 сутки) таймфрейм, на котоором рассчитываются значения ATR, 5 - период "короткого" ATR, 1 - ATR с периодом 5 считаем на предыдущем баре (№1), 36 - период "длинного" ATR, 1 - второй ATR также рассчитываем на предыдущем баре, 1 - коэффициент, на который множим ATR - в данном случае стоплосс будет размещаться на расстоянии в один ATR, false - на "лоссовом" участке не тралим.
Скачать библиотеку: TrailingByATR.ex4 | TrailingByATR.mq4
|
|
|
Трейлинг "по времени"
|
Наверх
|
|
Функция:
void TrailingByTime(int ticket, int interval, int trlstep, bool trlinloss)
Описание: для позиции с номером ticket через заданный интервал времени interval (минут, >0) передвигает стоплосс (независимо от текущего результата, при наличии возможности) на шаг trlstep (пунктов, >0); trlinloss - следует ли тралить в зоне лоссов (на промежутке исходный стоплосс - курс открытия позиции).
Как использовать:
- скачать библиотеку (TrailingByTime.ex4);
- поместить её в папку [директория MetaTrader'a]/experts/libraries;
- подключить её в вашем советнике;
- в соответствующем участке кода Вашего советника, в соответствующее время, выбрав предварительно конкретный ордер открытой позиции (функция OrderSelect()), вызвать функцию TrailingByTime(), указав необходимые параметры (см. эксперт с примером);
Пример: TrailingByTime(OrderTicket(),240,20,false), где OrderTicket() - номер ордера, 240 - (минут, 3 часа) временной интервал, с которым должен передвигаться стоплосс, 20 - (пунктов) шаг, на который передвигается стоплосс, false - в зоне убытков не тралим. Если на момент завершения очередного интервала interval перевести стоплосс не представляется возможным, это будет осуществлено в ближайший момент, как только курс станет лучше от курса нового планируемого стоплосса на минимальное расстояние, на котором можно размещать стоплоссы/тейкпрофиты от текущего курса. Если перенос невозможен на протяжении нескольких интервалов interval, расстояние, на которое должен (был) быть перенесен стоплосс, "накапливается" (т.е. при первой возможности стоплосс будет перенесен на то значение, на котором должен быть по истечении полных interval-ов с момента открытия позиции).
Скачать библиотеку: TrailingByTime.ex4 | TrailingByTime.mq4
|
|
|
Трейлинг-"удавка"
|
Наверх
|
|
Функция:
void TrailingUdavka(int ticket, int trl_dist_1, int level_1, int trl_dist_2, int level_2, int trl_dist_3)
Описание: вариант стандартного трейлинга; от последнего отличается тем, что предоставляет возоможность указать уровни профита (пунктов), при прохождении которых дистанция трейлинга сокращается; ticket - номер позиции, trl_dist_1 - исходное расстояние трейлинга, level_1 - первый уровень профита (пунктов), при прохождении которого расстояние трейлинга сокращается с trl_dist_1 до trl_dist_2, level_2 - второй уровень профита (пунктов), при прохождении которого дистанция трейлинга сокращается с trl_dist_2 до trl_dist_3 (пунктов). Как известно, направленные движения курса ("рывки" после новостей, например, или пробоя важных исторических уровней), не могут быть бесконечными - в определённый момент наступает откат или консолидация. Автоматическое "затягивание" трейлинга с соответствующим образом подобранными параметрами может позволить, не слишком "зажимая" курс на начальной стадии его "пробега", и "затягивая" трейлинг по мере увеличения профита, взять большую часть движения.
Как использовать:
- скачать библиотеку (TrailingUdavka.ex4);
- поместить её в папку [директория MetaTrader'a]/experts/libraries;
- подключить её в вашем советнике;
- в соответствующем участке кода Вашего советника, в соответствующее время, выбрав предварительно конкретный ордер открытой позиции (функция OrderSelect()), вызвать функцию TrailingUdavka(), указав необходимые параметры (см. эксперт с примером);
Пример: TrailingUdavka(OrderTicket(),40,60,30,90,10), где OrderTicket() - номер ордера, 40 - исходный трейлинг (на расстоянии 40 п.), 60 - первый уровень профита, т.е. при достижении профитом 60-ти пунктов трейлинг с 40 п. будет сокращен до 30 (4-й аргумент), 90 - второй уровень профита, при преодолении которого трейлинг сократится до 10 п. (последнее значение).
Скачать библиотеку: TrailingUdavka.ex4 | TrailingUdavka.mq4
|
|
|
Трейлинг стандартный-"ступенчатый"
|
Наверх
|
|
Функция:
void TrailingStairs(int ticket, int trldistance, int trlstep)
Описание: для позиции с номером ticket трейлингует (передвигает в сторону профита) стоплосс "ступеньками" размером в trlstep пунктов на расстоянии trldistance от курса. Если при стандартном трейлинге, встроенном в МТ, при достижении профитом размера трейлинга стоплосс начинает "подтягиваться" попунктово (т.е., например, если трейлинг 25 п., то при +26 стоплосс будет перенесен в +1, при +27 - в +2 и т.д.), то при "ступенчатом" при достижении размера трейлинга (trldistance) стоплосс переносится на определённый, заданный шаг (trldistance; который может быть = 1, и тогда трейлинг будет аналогичен стандартному, или любым другим), после чего опять ожидаем, пока курс "пробежит" на расстояние в trldistance теперь уже от текущего стоплосса (например, при trldistance = 30 и trlstep = 10 при достижении +30 стоплосс будет перенесен в +10, далее до +40 никаких изменений не будет, а при +40 стоплосс переместится на +20, при +50 - на +30 п. и т.д.). Размер trldistance не может быть меньше минимального расстояния, на котором можно устанавливать стоплосс/тейкпрофит (MarketInfo(Symbol(),MODE_STOPLEVEL)), trlstep не может быть больше trldistance.
Как использовать:
- скачать библиотеку (TrailingStairs.ex4);
- поместить её в папку [директория MetaTrader'a]/experts/libraries;
- подключить её в вашем советнике;
- в соответствующем участке кода Вашего советника, в соответствующее время, выбрав предварительно конкретный ордер открытой позиции (функция OrderSelect()), вызвать функцию TrailingStairs(), указав необходимые параметры (см. эксперт с примером);
Пример: TrailingStairs(OrderTicket(),40,10), где OrderTicket() - номер ордера, 40 - значение трейлинга, 10 - "шаг" трейлинга.
Скачать библиотеку: TrailingStairs.ex4 | TrailingStairs.mq4
|
|
|
Трейлинг по фракталам
|
Наверх
|
|
Функция:
void TrailingByFractals(int ticket, int tmfrm, int frktl_bars, int indent,bool trlinloss)
Описание: для позиции с номером ticket трейлингует (передвигает в сторону профита) стоплосс по экстремумам frktl_bars-барных фракталов (условие: frktl_bars>3) на таймфрейме tmfrm (варианты: 1, 5, 15, 30, 60, 240, 1440, 10080, 43200); при изменении стоплосс размещается с отступом в indent (условие: indent не меньше 0) пунктов от минимума (при трейлинге длинных) или максимума (коротких позиций) экстремума соответствующего фрактала; trlinloss - следует ли трейлинговать стоплосс на лоссовом участке (от исходного стоплосса до курса открытия) - false - стоплосс начинает "двигаться", только когда он "лучше" курса открытия, true - тралим всё время, сначала передвигая стоплосс от его начального положения к курсу открытия ("лоссовая" зона), а потом в профите.
Как использовать:
- скачать библиотеку (TrailingByFractals.ex4);
- поместить её в папку [директория MetaTrader'a]/experts/libraries;
- подключить её в вашем советнике;
- в соответствующем участке кода Вашего советника, в соответствующее время, выбрав предварительно конкретный ордер открытой позиции (функция OrderSelect()), вызвать функцию TrailingByFractals(), указав необходимые параметры (см. эксперт с примером);
Пример: TrailingByFractals(OrderTicket(),1440,7,3), где OrderTicket() - номер ордера, 1440 - период графика (1 день), по фракталам которого необходимо "трелинговать", 7 - количество баров в составе фрактала, 3 - отступ от теней (пунктов), на котором размещается стоплосс.
Скачать библиотеку: TrailingByFractals.ex4 | TrailingByFractals.mq4
|
|
|
Трейлинг по теням свечей
|
Наверх
|
|
Функция:
void TrailingByShadows(int ticket, int tmfrm, int bars_n, int indent,bool trlinloss)
Описание: для позиции с номером ticket трейлингует (передвигает в сторону профита) стоплосс по теням последних bars_n (условие: bars_n>0) баров на таймфрейме tmfrm (варианты: 1, 5, 15, 30, 60, 240, 1440, 10080, 43200); при изменении стоплосс размещается с отступом в indent (условие: indent не меньше 0) пунктов от минимума (при трейлинге длинных) или максимума (коротких позиций) соответствующего бара; trlinloss - следует ли тралить на "лоссовом" участке (до курса открытия) - true - тралим, false - трейлинг начинается только когда новый стоплосс "лучше" курса открытия.
Как использовать:
- скачать библиотеку (TrailingByShadows.ex4);
- поместить её в папку [директория MetaTrader'a]/experts/libraries;
- подключить её в вашем советнике;
- в соответствующем участке кода Вашего советника, в соответствующее время, выбрав предварительно конкретный ордер открытой позиции (функция OrderSelect()), вызвать функцию TrailingByShadows(), указав необходимые параметры (см. эксперт с примером);
Пример: TrailingByShadows(OrderTicket(),60,3,4), где OrderTicket() - номер ордера, 60 - период графика (1 час), по барам которого необходимо "трелинговать", 3 - количество баров, по теням которых осуществляется трейлинг, 4 - отступ от теней (пунктов), на котором размещается стоплосс.
Скачать библиотеку: TrailingByShadows.ex4 | TrailingByShadows.mq4
|
|
|
Трейлинг-все функции
|
Наверх
|
|
Функции:
void TrailingByShadows(int ticket, int tmfrm, int bars_n, int indent)
void TrailingByFractals(int ticket, int tmfrm, int frktl_bars, int indent)
void TrailingStairs(int ticket, int trldistance, int trlstep)
void TrailingUdavka(int ticket, int trl_dist_1, int level_1, int trl_dist_2, int level_2, int trl_dist_3)
void TrailingByTime(int ticket, int interval, int trlstep, bool trlinloss)
void TrailingByATR(int ticket,int atr_timeframe,int atr1_period,int atr1_shift,int atr2_period,int atr2_shift,double coeff,bool trlinloss)
void TrailingRatchetB(int ticket,int pf_level_1,int pf_level_2,int pf_level_3,int ls_level_1,int ls_level_2,int ls_level_3,bool trlinloss)
void TrailingByPriceChannel(int iTicket, int iBars_n, int iIndent)
void TrailingByMA(int iTicket, int iTmFrme, int iMAPeriod, int iMAShift, int MAMethod, int iApplPrice, int iShift, int iIndent)
void TrailingFiftyFifty(int iTicket,int iTmFrme,double dCoeff,bool trlinloss)
Описание: библиотека функций, осуществляющих трейлинг по различным алгоритмам:
TrailingByShadows() - по теням N последних свечей (на текущем или других таймфреймах);
TrailingByFractals() - по фракталам, образованным заданным количеством баров (на текущем или других таймфреймах).
TrailingStairs() - аналогичный стандартному трейлинг, который, однако, переносится "скачкообразно", с определённым, задаваемым шагом.
TrailingUdavka() - производный от стандартного трейлинга, но при прохождении заданных уровней профита дистанцию трейлинга сокращаем.
TrailingByTime() - через заданный интервал времени переносим стоплосс (при возможности и независимо от результатов по позиции) на заданный шаг.
TrailingByATR() - тралим на расстоянии в N x ATR.
Более подробное описание - см. в описании соответствующих функций.
TrailingRatchetB() - система быстрого поджатия в безубыток и "ступеньками" на начальном этапе роста профита, поджатие на "лоссовом" участке для предупреждения роста убытков после их "отката".
TrailingByPriceChannel() - трейлинг по противоположной границе ценового канала.
TrailingByMA() - трейлинг по скользящему среднему.
TrailingFiftyFifty() - по закрытии очередного бара расстояние между текущим курсом и стоплоссом уменьшаем в заданное кол-во раз.
Как использовать:
- скачать библиотеку (TrailingAll.ex4);
- поместить её в папку [директория MetaTrader'a]/experts/libraries;
- подключить её в вашем советнике;
- в соответствующем участке кода Вашего советника, в соответствующее время, выбрав предварительно конкретный ордер открытой позиции (функция OrderSelect()), вызвать необходимую функцию, указав её параметры (см. эксперт с примером);
Пример: см. соответствующие функции.
Скачать библиотеку: TrailingAll.ex4 | TrailingAll.mq4
|
|
|
Советник "Пробой средней на дневках" В. Баришпольца
|
Наверх
|
|
Исходные правила: GBPUSD, дневной таймфрейм, экспоненциальная средняя периода 3, сдвиг вперед 3; открытие на покупку а) при пересечении белой свечей средней снизу вверх, б) при пересечении нижней тенью любой свечи средней, в) при пересечении верхней тенью свечи средней, когда тело не пересекает среднюю, средняя имеет крутой наклон; на продажу - наоборот. По закрытии суток переносим стоп в безубыток + 5 п. (по возможности), ближе 10 п. от закрытия дня стоп не переносим. Трейлинг для длинной позиции - по лоу 2 последних свечей. В случае, если 3 свечи (в т.ч. та, на которой открылись), закрываются в убытке, ставим тейкпрофит на б.у. + 5 п. При открытой позиции новые сигналы игнорируем.
Тестирование и обсуждение тактики: например, на www.community.finlist.org
Советник: MA_BrkOut_D.mq4 | MA_BrkOut_D.ex4
Дополнительно: ранее мы публиковали результаты применения различных тактик ММ к данной торговой стратегии (по стейтменту, набранному вручную, с помощью программы MMT).
|
|
|
Советник "Пробой средней на часовках" В. Баришпольца
|
Наверх
|
|
Исходные правила, реализованные в советнике: EURUSD, таймфрейм 1 час (или дневной), простая средняя периода 20; рабочий интервал - с 8 до 23 часов, после 20 часов новые ордера не выставляем, сопровождаем уже открытые позиции; в 23:00 все оставшиеся позиции закрываем безотносительно к текущему результату. Правила открытия: дожидаемся пересечения средней какой-либо частью свечи (опционально - размах свечи - не меньше 20 п.), после чего выставляем на макс. и мин. с отступом в 3 п. пробойные ордера. После открытия противоположный ордер остаётся в качестве переворотного. Трейлингуем по теням (для покупки - low) свечей.
13.08.07 добавлено: возможность выбрать 2 временных режима работы - а) круглосуточный, открытие и сопровождение ордеров круглосуточно и б) по графику, в последнем случае можно задать интервал (часов), в котором и открываем новые позиции, и сопровождаем уже открытые, час, после которого только сопровождаем уже открытые, но не открываем новые и, наконец, час, при наступлении которого все открытые трейды принудительно закрываются. Однако также добавлена возможность выбрать один из двух сценариев закрытия: а) если позиция в профите или безубытке, закрываем, б) если позиция в лоссе, оставляем её, выставив тейкпрофит в безубыток или, если курс слишком близко к безубытку для выставления тейкпрофита, закрываем с небольшим лоссом. Добавлена возможность трейлинговать не только по теням последовательных свечей, но и по теням нескольких свечей (напр., для покупки - по минимальному из лоу последних Х свечей), а также не на текущем, а на другом (напр., более мелком) таймфрейме (для трейлинга используется функция TrailingByShadows()). Добавлена возможность задавать отступ (пунктов) от тени при трейлинге стоплосса.
Кроме советника (с исходным кодом) в нижеуказанном архиве также pdf-мануал с расшифровкой параметров эксперта, файл-библиотека с функцией для трейлинга TrailingByShadows() и файл шаблона для наложения на чарт 20-периодной средней и советника.
Советник переписан и дополнен по совету Евгения Крюкова.
Тестирование и обсуждение тактики: было в своё время, напр., на www.community.finlist.org
Комплект: MA_BrkOut_H_v2.rar (133 Kb, эксперт, библиотека трейлинга, шаблон, мануал)
|
|
|
|
|