ВРОДЕ ВСЁ ПРОСТО,НО НЕ ПОЛУЧАЕТСЯ ВЫСТАВИТЬ ЛИМИТ ОРДЕРА НА
ЗНАЧЕНИЯХ СРЕДНИХ И ПРОВЕСТИ ИХ МОДИФИКАЦИЮ НА КАЖДОМ БАРЕ.
МОЖЕТ КОГО ЗАИНТЕРЕСУЕТ СИСТЕМКА И СПЕЦЫ ПО-БЫСТРОМУ ВЫЛОЖАТ КОД?
ЗАРАНЕЕ СПАСИБО ЗА ПОМОЩЬ.
//+------------------------------------------------------------------+ //| функция выдачи торговых сиглналов | //+------------------------------------------------------------------+ int yourFunction(int workPeriod) { int res=OP_BALANCE; //---- double iMA1 = iMA(Symbol(),workPeriod,MovingPeriod1,0,MODE_SMMA,4,MODE_SIGNAL); double iMA2 = iMA(Symbol(),workPeriod,MovingPeriod2,0,MODE_SMMA,4,MODE_SIGNAL); double iMA3 = iMA(Symbol(),workPeriod,MovingPeriod3,0,MODE_SMMA,4,MODE_SIGNAL);
if (iMA3<iMA2 && iMA2<iMA3) res=OP_SELLLIMIT;
//---- return (res); } //---- input parameters extern int MovingPeriod1 = 13; extern int MovingPeriod2 = 18; extern int MovingPeriod3 = 5; extern int StopLoss=150; extern int TakeProfit=35; extern double Lots=0.1;
Описание торговой системы
Использую три мувинга
периоды 5, 8 и 13. Метод сглаживания усреднённый. Параметр для расчёта
- средняя цена ( high + low / 2). Без сдвига. Масштаб Н1, GBP/USD Допущения: 1. Если значения МА расположены по-порядку, - значит на данном периоде
есть тренд. (Например: значение самой быстрой больше значений других, а
значение самой медленной меньше всех, то на данном ТФ восходящая
тенденция). 2. Наиболее выгодная цена для покупки во время ралли - ниже своего среднего значения 3. Наиболее выгодная цена для продажи на медвежьем рынке - выше своего среднего значения. Сигнал к открытию генерируется следующим образом: 1. Определяется наличие и направление тренда (метод см. выше). Торговля осуществляется в направлении тренда. 2. Отложный ордер (limit) ставится за средней МА и за медленной МА. Не
за быстрой МА, как наиболее консервативный вариант вступления в торги. Закрытие позиций происходит по тейк-профиту, стоп-лоссу либо при
появлении аналогичного сигнала в другую сторону(модификация ордеров
ежечасно,по открытию новой свечи). Управление рисками. (тп=35п, сл=150п, ордер=0.1, депозит=1000$, максимальное кол-во
одновременно открытых сделок=2, время установки ордеров с 9.00 до 19.00
мск)
Не могу разобраться как в этот шаблон добавить возможность использовать индикаторы на нескольких периодах. http://forum.mql4.com/ru/36501 - здесь задал по этому поводу вопрос. Надеюсь кто нибудь сможет помоч.
Статья познавательная для программистов mql4! Немного корректировки (может в комментариях уже говорили, не всё читал).
Тут много функций, но это перегруз для шаблона. Им место в библиотеке, которую надо подключить к шаблону добавив в шаблон всего одну строку (#include ...). К тому же эти функции могут понадобиться и в скриптах, и в индикаторах.
По всему коду проходят функция переворачивания. Это совсем не надо. Достаточно сделать ТОЛЬКО функцию открытия ордера, которая открывает ордер по указанному типу переворачивая Ask и Bid в зависимости от этого типа. (например OpenOrder(type, lot, setprice, sl, tp);) И ВСЁ!.. А переключатель переворота сигнала должен быть на выходе из функции анализатора (модуля программы который согласно ТС по разным индикатором и методам выдаёт всего один сигнал - со значением в каком направлении открываться). Вот этот сигнал переворачиваем если надо, и дальше отправляем в функцию OpenOrder. (А вообще, тесты показывают что перевороты сигналов индикаторов не работают, это давно бы пора в словарике каком-нить прописать как аксиому, чтобы каждый новый программист не тратил месяцы своей жизни на что давно всем известно и проверенно миллионами тестов до него.)
Мне кажется в функции "isNewBar(inttimeFrame)" ошибка, в case1 наверно должно быть i=1:
Объясните пожалуйста неопытному, где нужно прописывать код, чтобы ордер закрывался по обратному сигналу индикатора?
Я так понял что вот в эту функцию
PrepareTicketsToClose
но почему то ничего не получается...
//+------------------------------------------------------------------+//| подготовить массив тикетов для закрытия |//+------------------------------------------------------------------+voidPrepareTicketsToClose(intsignal, boolRevers, int & ticketsClose[][2],
double & lots[],doublearrayTickets[][9]){intsize=ArrayRange(arrayTickets,0);
double SAR=iSAR(0,0,0.02,0.2,1);
//----if(size==0)return;
inti,type,ticket,closeSize;
for(i=0;i<size;i++){type=arrayTickets[i][1];
// если тип ордера не рыночный, то пропуcкаемif(type>OP_SELL)continue;
if(Revers)// перевернем тип рыночного ордера{if(type==OP_BUY)type=OP_SELL; elsetype=OP_BUY;
}// тут решаем для каждого открытого ордера его судьбу// оставить в рынке или добавить в массив на закрытиеif(type==OP_BUY){// // код разрешающий оставить покупкуЗдесь решаем - оставить ордер BUY или закрыть// как примерif(signal==OP_BUY && SAR>Close[1])continue;
}if(type==OP_SELL){// // код разрешающий оставить продажуЗдесь решаем - оставить ордер SELL или закрыть// как примерif(signal==OP_SELL && SAR<Close[1])continue;
}closeSize=ArrayRange(ticketsClose,0);
ArrayResize(ticketsClose,closeSize+1);
ArrayResize(lots,closeSize+1);
ticketsClose[closeSize][0] = arrayTickets[i][0]; // # тикетаticketsClose[closeSize][1] = arrayTickets[i][1]; // тип ордераPrint("arrayTickets[i][0]=",arrayTickets[i][0]," ticketsClose[closeSize][0]=",ticketsClose[closeSize][0]);
// здесь укажем сколько лотов нужно закрытьlots[closeSize] = arrayTickets[i][2]; // закрываемый объем// можно закрывать частично, тогда нужно переписать строку сверху}//----return;
}
Скажите что я здесь делаю не так?
Статья познавательная для программистов mql4! Немного корректировки (может в комментариях уже говорили, не всё читал).
Тут много функций, но это перегруз для шаблона. Им место в библиотеке, которую надо подключить к шаблону добавив в шаблон всего одну строку (#include ...). К тому же эти функции могут понадобиться и в скриптах, и в индикаторах.
По всему коду проходят функция переворачивания. Это совсем не надо. Достаточно сделать ТОЛЬКО функцию открытия ордера, которая открывает ордер по указанному типу переворачивая Ask и Bid в зависимости от этого типа. (например OpenOrder(type, lot, setprice, sl, tp);) И ВСЁ!.. А переключатель переворота сигнала должен быть на выходе из функции анализатора (модуля программы который согласно ТС по разным индикатором и методам выдаёт всего один сигнал - со значением в каком направлении открываться). Вот этот сигнал переворачиваем если надо, и дальше отправляем в функцию OpenOrder.
И так можно, наверно. Нужно смотреть как поведут себя операции с Stop Loss и Take Profit.
(А вообще, тесты показывают что перевороты сигналов индикаторов не работают, это давно бы пора в словарике каком-нить прописать как аксиому, чтобы каждый новый программист не тратил месяцы своей жизни на что давно всем известно и проверенно миллионами тестов до него.)
Не факт. Вы можете обнаружить, что в сильном тренде традиционные сигналы осцилляторов подведут вас под монастырь. Я переворачивал некоторые системы, работали :)
ПОМОГИТЕ НОВИЧКУ СДЕЛАТЬ СОВЕТНИК ПО СИСТЕМЕ.
ВРОДЕ ВСЁ ПРОСТО,НО НЕ ПОЛУЧАЕТСЯ ВЫСТАВИТЬ ЛИМИТ ОРДЕРА НА
ЗНАЧЕНИЯХ СРЕДНИХ И ПРОВЕСТИ ИХ МОДИФИКАЦИЮ НА КАЖДОМ БАРЕ.
МОЖЕТ КОГО ЗАИНТЕРЕСУЕТ СИСТЕМКА И СПЕЦЫ ПО-БЫСТРОМУ ВЫЛОЖАТ КОД?
ЗАРАНЕЕ СПАСИБО ЗА ПОМОЩЬ.
//+------------------------------------------------------------------+//| функция выдачи торговых сиглналов |
//+------------------------------------------------------------------+
int yourFunction(int workPeriod)
{
int res=OP_BALANCE;
//----
double iMA1 = iMA(Symbol(),workPeriod,MovingPeriod1,0,MODE_SMMA,4,MODE_SIGNAL);
double iMA2 = iMA(Symbol(),workPeriod,MovingPeriod2,0,MODE_SMMA,4,MODE_SIGNAL);
double iMA3 = iMA(Symbol(),workPeriod,MovingPeriod3,0,MODE_SMMA,4,MODE_SIGNAL);
if (iMA3<iMA2 && iMA2<iMA3) res=OP_SELLLIMIT;
//----
return (res);
}
//---- input parameters
extern int MovingPeriod1 = 13;
extern int MovingPeriod2 = 18;
extern int MovingPeriod3 = 5;
extern int StopLoss=150;
extern int TakeProfit=35;
extern double Lots=0.1;
Описание торговой системы
Использую три мувинга периоды 5, 8 и 13. Метод сглаживания усреднённый. Параметр для расчёта - средняя цена ( high + low / 2). Без сдвига. Масштаб Н1, GBP/USD
Допущения:
1. Если значения МА расположены по-порядку, - значит на данном периоде есть тренд. (Например: значение самой быстрой больше значений других, а значение самой медленной меньше всех, то на данном ТФ восходящая тенденция).
2. Наиболее выгодная цена для покупки во время ралли - ниже своего среднего значения
3. Наиболее выгодная цена для продажи на медвежьем рынке - выше своего среднего значения.
Сигнал к открытию генерируется следующим образом:
1. Определяется наличие и направление тренда (метод см. выше). Торговля осуществляется в направлении тренда.
2. Отложный ордер (limit) ставится за средней МА и за медленной МА. Не за быстрой МА, как наиболее консервативный вариант вступления в торги.
Закрытие позиций происходит по тейк-профиту, стоп-лоссу либо при появлении аналогичного сигнала в другую сторону(модификация ордеров ежечасно,по открытию новой свечи).
Управление рисками.
(тп=35п, сл=150п, ордер=0.1, депозит=1000$, максимальное кол-во одновременно открытых сделок=2, время установки ордеров с 9.00 до 19.00 мск)
Статья познавательная для программистов mql4! Немного корректировки (может в комментариях уже говорили, не всё читал).
А переключатель переворота сигнала должен быть на выходе из функции анализатора (модуля программы который согласно ТС по разным индикатором и методам выдаёт всего один сигнал - со значением в каком направлении открываться). Вот этот сигнал переворачиваем если надо, и дальше отправляем в функцию OpenOrder.
(А вообще, тесты показывают что перевороты сигналов индикаторов не работают, это давно бы пора в словарике каком-нить прописать как аксиому, чтобы каждый новый программист не тратил месяцы своей жизни на что давно всем известно и проверенно миллионами тестов до него.)
Объясните пожалуйста неопытному, где нужно прописывать код, чтобы ордер закрывался по обратному сигналу индикатора?
Я так понял что вот в эту функцию
Статья познавательная для программистов mql4! Немного корректировки (может в комментариях уже говорили, не всё читал).
А переключатель переворота сигнала должен быть на выходе из функции анализатора (модуля программы который согласно ТС по разным индикатором и методам выдаёт всего один сигнал - со значением в каком направлении открываться). Вот этот сигнал переворачиваем если надо, и дальше отправляем в функцию OpenOrder.
Не факт. Вы можете обнаружить, что в сильном тренде традиционные сигналы осцилляторов подведут вас под монастырь. Я переворачивал некоторые системы, работали :)
Не могу сказать, нужно проверять.