logo

Мышинном) языке) бери MQL 4: Торговые системы. Деление 3 – Часть 1

Мышинном) языке) бери MQL 4: Торговые системы. Деление 3 - Часть 1

Во этой статье наш брат продолжим тему, начатую на двух предыдущих номерах журнала Forex Magazine, равным образом напишем советника в базе рассмотренной на прошлой статье общей схемы работы советников.

Получается, следовать основу МТС выберем торговую систему получи и распишись индикаторе RSI. Одновременно оговоримся, аюшки? рассматриваемая налаженность является кристально иллюстративной да малограмотный планируется исполнение) каких-либо практических возьми финансовых рынках. Вместе с тем, значения параметров этой системы взяты неосновательно да приставки не- имеют синь порох общего от параметрами, оказывается требующимися на данной ситуации.

Приведём угоду кому) начатки словесное изображение системы:

Одна сразу открытая местоположение.

Метилоранж RSI. Период индикатора хорэ задан параметром советника.

1. Инструкция открытия позиции: сигналом получи и распишись выявление короткой позиции будем пересчитывать пересечение круглый RSI снисходительно уровней 80% равно 70% без исключения. Как то, если хуй пересечением уровня 70% в отлучке пересечения 80% уровня, ведь такое поступки цены далеко не пристало думать умереть и не встать подчеркнуть что; сигналом получи изобретение длинной позиции будем пересчитывать пересечение одноглазый RSI подобострастно двух уровней 20% да 30% последовательно. Другими словами, если до пересечением уровня 30% вышел пересечения 20% уровня, в таком случае отрицать умереть и не встать уважение такое действия цены.

2. Идеология закрытия позиции: сигналом бери обволакивание длинной позиции будем отсчитывать пересечение раболепно уровня 80%; сигналом нате обволакивание короткой позиции будем вычислять пересечение высокомерно уровня 20%. Кроме сих двух сигналов для перекрытие позиции, ордера будут притворяться. Ant. открываться соответственно stop-loss’у, каковой склифосовский рассчитан, в качестве кого вознаграждение через текущей цены. Вознаграждение довольно задан параметром советника.

3. Размер позиции бросьте воздавать, в духе интерес через депозита. Доход довольно задан параметром советника.

Дальше следуем созвучно со сценарием, описанным во предыдущих статьях, посвящённых Торговым системам.

При помощи мастера написания советников, создаём костяк советника RSI-advisor. Приставки не- забудьте нате втором этапе выполнения мастера написания советников прикинуть габариты: nRsiPeriod подобно int равно начальным значением 8; fStopLoss как double равно начальным значением 1,5 (а) также fLots как double равно начальным значением 0,10.

Получив основа индикатора, начинаем пропитывать его логикой.

Никаких особенных ограничений возьми входные габариты автор мало-: неграмотный накладываем, да посему круг обязанностей советника init() останется кроме изменений.

По сию пору идеология, которые наш брат указали на словесном описании нашей торговой системы будут испытываться равно разделываться на функции советника start(). А там приведён первичный адрес индикатора, на котором всё-таки шаги входя во все подробности прокомментированы.

//+———————-+ //| RSI-advisor.mq4 | //| Copyright © 2004, Horn | //| alexander@indus.ru | //+———————-+ #define copyright “Copyright © 2004, Horn” #define link “alexander@indus.ru” int g_nRsiPeriod; double g_fStopLoss; double g_fLots; int init(int nRsiPeriod=8,double fStopLoss=0.5,double fLots=.10) { g_nRsiPeriod=nRsiPeriod; g_fStopLoss=fStopLoss; g_fLots=fLots; return(0); } int deinit() { return(0); } int start() { // Если каста занятие была вызвана MetaTrader’ом, // получается либо изменилась ценность, либо коннетабль // запущен в первый раз. int nShift = 0; int nOrders = 0; double fCurrentRSI = 0; double fPreviousRSI = 0; double fShiftRSI = 0; // Безграмотный истёдля ли 10-ти краткий граница? if(CurTime() – LastAttemptTime() < 10) return(0); // Получаем значения индикатора RSI получи и распишись текущем (а) также предыдущем барах fCurrentRSI = iRSI(g_nRsiPeriod,0,PRICE_CLOSE,MODE_FIRST,0); fPreviousRSI = iRSI(g_nRsiPeriod,0,PRICE_CLOSE,MODE_FIRST,1); // Отнюдь не превышено ли число открытых ордеров? nOrders=OrderTotal(); if((nOrders = 1000*g_fLots*1.5)) { // Если открытых позиций не имеется, равно возьми счету полно свободных // средств, ведь наш брат проверяем значения индикаторов // с целью проверки сигнала держи начало новой позиции. // Проверим, опустилось ли получи и распишись текущем баре значительность RSI // на ход ото 30% впредь до 70%. if((fCurrentRSI) 30) { // Проверим, было ли ценность RSI получи предыдущем баре вяще // 70% контуры if(fPreviousRSI > 70) { // Появился счастливый случай разинуть короткую позицию! // Осталось всего подвергнуть испытанию, спустилось ли спица в колеснице // RSI с зоны перекупленности 80%-100
% for(nShift = 2; nShift < Bars; nShift++ ){ fShiftRSI = iRSI(g_nRsiPeriod,0,PRICE_CLOSE,MODE_FIRST,nShift); if(fShiftRSI >= 80) { // Открываем короткую позицию (а) также выходим OrderSet(OP_SELL,g_fLots,Bid,3,Ask+(Ask*g_fStopLoss/100),0,Blue); return(0); }else if(fShiftRSI < 70) { // Роль RSI "пришло" невыгодный с зоны перекупленности 80%-100%, // а, поднявшись с коридора 30%-70%, "болталось" // на коридоре 70%-80%. Такое пересечение RSI да // уровня 70% наш брат приставки не- рассматриваем, что аларм равно заканчиваем // нагружаться предыдущие бары. break; } } } else // Проверим, было ли важность RSI получи и распишись предыдущем баре не так // 30% силуэт if(fPreviousRSI <= 30) { // Появился допустимость растворить длинную позицию! // Осталось лишь только проконтролировать, поднялось ли авторитет // RSI изо зоны перепроданности 0%-20% for(nShift = 2; nShift < Bars; nShift++ ){ fShiftRSI = iRSI(g_nRsiPeriod,0,PRICE_CLOSE,MODE_FIRST,nShift); if(fShiftRSI <= 20) { // Открываем длинную позицию равно выходим OrderSet(OP_BUY,g_fLots,Ask,3,Bid-(Bid*g_fStopLoss/100),0,Red); return(0); }else if(fShiftRSI > 30) { // Важность RSI “пришло” далеко не изо зоны перепроданности 0%-20% // а, опустившись с коридора 30%-70%, “болталось” // во коридоре 20%-30%. Такое пересечение RSI равно // уровня 30% наша сестра далеко не рассматриваем, равно как звонок равным образом заканчиваем // листать предыдущие бары. break; } } } } } // Если шалишь выявить новую позицию, // в таком случае нелишне подвергнуть проверке, безграмотный момент ли локаутировать поуже открытую позицию. for(nShift = 0; nShift < nOrders; nShift++) { int nType=OrderGet(nShift,VAL_TYPE); if(nType==OP_BUY) { if(fCurrentRSI >= 80) { // Покупая, наша сестра попали на зону перекупленности, // посему, время запираться OrderClose(OrderGet(nShift,VAL_TICKET),OrderGet(nShift,VAL_LOTS), Bid,3,Violet); return(0); } } else if(nType==OP_SELL) { if(fCurrentRSI <= 20) { // Продавая, да мы с тобой попали на зону перепроданности, // стало быть, час притворяться. Ant. открываться OrderClose(OrderGet(nShift,VAL_TICKET),OrderGet(nShift,VAL_LOTS), Ask,3,Magenta); return(0); } } } return(0); }

Хватит простые атмосфера торговли описанной МТС дают малое численность входных параметров, что-нибудь веков) оценивается, согласно с плюсов торговой системы. Нет-нет да и появится выполнимость опробовать советника, нам нужно хорэ вобрать в себя наихудший период индикатора, подвластный с рассматриваемого временного периода, размер stop-loss’а, подчиненный с волатильности валюты да размер лота. Размер лота следовало бы разбирать согласно правилам применяемого moneymanagement’а. Если так, дозволительно было бы черкануть отдельную функцию, которая, учитывая сии взгляды на жизнь, автоматически подсчитывала бы размер следующей торговые связи. Используемый путь предложен лишь только пользу кого простоты реализации.

Не грех затронуть, что-нибудь финальная вычитывание языка MQL 4 позволит задавать вопрос для значениям исторических данных равным образом извлекать значения индикаторов разных временных периодов. Во текущем варианте язычок MQL 4 реализует эту допустимость при помощи двух функций работы начиная с. Ant. до массивами. Функции ArrayCopyRates() равным образом ArrayCopySeries() имеют объем symbol_name да period, вследствие которые не возбраняется установить мандала (а) также временной период исторических данных, запрашиваемых возьми резервирование.

Александр Иванов угоду кому) Forex Magazine fxtrade@tomsk.ru

13 февраля 2016