Как можно тестировать советник по ценам открытия если в коде нет контроля открытия бара?
Самый простой способ проверить сравнить результаты на этой модели и точной. А вообще смотреть нужно внимательней.
SMA5 = iMA(NULL,PERIOD_M30,per_SMA5,0,MODE_SMA,PRICE_MEDIAN,1); SMA20 = iMA(NULL,PERIOD_M30,per_SMA20,0,MODE_SMA,PRICE_MEDIAN,1); SMA40_prew = iMA(NULL,PERIOD_M30,per_SMA40,0,MODE_SMA,PRICE_MEDIAN,2); SMA40 = iMA(NULL,PERIOD_M30,per_SMA40,0,MODE_SMA,PRICE_MEDIAN,1); SMA60 = iMA(NULL,PERIOD_M30,per_SMA60,0,MODE_SMA,PRICE_MEDIAN,1);
В течение всего тика значения переменных не изменяются, т.к. берутся за прошлый тик. Засада может быть только если условия подходят и под условия открытия и закрытия. Тогда за 1 тик советник поставит что-то около сотни ордеров ). Так что будьте внимательны при тестировании и переделывании.
Удачи.
ЗЫЖ: лучше таки ввести контроль:
int start() { if (Volume[0] > 1) return(0); // code }
1. Разницу в скорости будет отлично видно в тестере.
2. Даже в случае перехлеста условий (что довольно маловероятно) за один тик будет торговаться максимум одна ставка.
Вставил в код volume[0]>1 и уже не открывает много ордеров,так лучше.Но есть вопрос еще:каким образом можно по одному сигналу входа открыть два независимых ордера по рынку,пример-в место одной продажи 0,2 сделать две продажи по 0,1 с задержкой секунд на 10 для надежности срабатывания?
Ищем строчку:
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"Покупаем",16384,0,Green);
Заменяем ее на код:
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"Покупаем",16384,0,Green); Sleep(10000);//10 секунд RefreshRates(); OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"Покупаем",16384,0,Green);
Делаем то же самое для SELL. И выставляем переменную Lots в 2 раза меньше. Вообще по хорошему это в отдельную функцию вынести надо. Код культурнее смотреться будет.
Сейчас в коде вроде закрываются все ордера, но при модификации осторожно.
Удачи.
Прикольный советник, вот только плохо, что он закрывает сделки при повторном пересечении, с одной стороны это неплохо, но когда линии налаживается, то тут убыточная сделка. И судя по результатам, цена идёт в нужном направлении, а сделки закрываются :( . Пытался сам разобраться как отключить или изменить его, но опыта в скриптах нет...А было бы неплохо чтоб он как то давал задерку после открытия и не закрывался сразу если линии налаживаются, или отключить эту функцию закрытия при повторном пересечении. Может кто подскажет где-что заменить-добавить что-бы дать задержку, или если это не поможет при тестировании, как отключить закрытие при пересечении ? Спасибо. Надеюсь поймёте что я тут хотел сказать :)
В эксперте закрытием сделки по обратному пересечению ведают следующие строчки:
Покупку закрываетif(SMA40<=SMA60)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
Buy=0;
// return(0); // exit
}
Продажу закрывает
if(SMA40>=SMA60)Вы можете либо убрать эти строчки из своего советника, либо закоментировать их.
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
Sell=0;
// return(0); // exit
}
КАКОЙ КОД БУДЕТ ДЛЯ MOVING AVERAGE С ПЕРИОДАМИ LWMA5 LWMA8 EMA18 EMA28?? ЭТОТ ЯЗЫК ДЛЯ ПРОСТЫХ ЛЮДЕЙ СЛИШКОМ СЛОЖНЫЙ!!!!!
КАКОЙ КОД БУДЕТ ДЛЯ MOVING AVERAGE С ПЕРИОДАМИ LWMA5 LWMA8 EMA18 EMA28?? ЭТОТ ЯЗЫК ДЛЯ ПРОСТЫХ ЛЮДЕЙ СЛИШКОМ СЛОЖНЫЙ!!!!!
Периоды MOVING AVERAGE можно поменять в тестере в свойствах эксперта при тестировании, или к коде программы напротив соответствующих параметров
extern int per_SMA5 = 5;
extern int per_SMA20 = 20;
extern int per_SMA40 = 40;
extern int per_SMA60 = 60;
Чтобы изменить метод вычисления скользящего среднего (Moving Average) с текущего SMA на LWMA и EMA надо заменить вот эти строки кода:
// Вычисляем начальные параметры индикаторов для поиска условий входа
SMA5 = iMA(NULL,PERIOD_M30,per_SMA5,0,MODE_SMA,PRICE_MEDIAN,1);
SMA20 = iMA(NULL,PERIOD_M30,per_SMA20,0,MODE_SMA,PRICE_MEDIAN,1);
SMA40_prew = iMA(NULL,PERIOD_M30,per_SMA40,0,MODE_SMA,PRICE_MEDIAN,2);
SMA40 = iMA(NULL,PERIOD_M30,per_SMA40,0,MODE_SMA,PRICE_MEDIAN,1);
SMA60 = iMA(NULL,PERIOD_M30,per_SMA60,0,MODE_SMA,PRICE_MEDIAN,1);
на эти:
// Вычисляем начальные параметры индикаторов для поиска условий входа
SMA5 = iMA(NULL,PERIOD_M30,per_SMA5,0,MODE_LWMA,PRICE_MEDIAN,1);
SMA20 = iMA(NULL,PERIOD_M30,per_SMA20,0,MODE_LWMA,PRICE_MEDIAN,1);
SMA40_prew = iMA(NULL,PERIOD_M30,per_SMA40,0,MODE_EMA,PRICE_MEDIAN,2);
SMA40 = iMA(NULL,PERIOD_M30,per_SMA40,0,MODE_EMA,PRICE_MEDIAN,1);
SMA60 = iMA(NULL,PERIOD_M30,per_SMA60,0,MODE_EMA,PRICE_MEDIAN,1);
Не забудьте откомпилировать эксперта, после всех изменений.
Спасибо.Ещё есть вопрос по тестированию Moving Average с периодами lwma5 lwma8 ema18 ema28. Почему sell и buy на графике происходят непонятно когда? Можно ли сделать код, чтобы sell и buy были только в точке чуть выше или ниже пересечения линий?
КАКОЙ КОД БУДЕТ ДЛЯ MOVING AVERAGE С ПЕРИОДАМИ LWMA5 LWMA8 EMA18 EMA28?? ЭТОТ ЯЗЫК ДЛЯ ПРОСТЫХ ЛЮДЕЙ СЛИШКОМ СЛОЖНЫЙ!!!!!
Периоды MOVING AVERAGE можно поменять в тестере в свойствах эксперта при тестировании, или к коде программы напротив соответствующих параметров
extern int per_SMA5 = 5;
extern int per_SMA20 = 20;
extern int per_SMA40 = 40;
extern int per_SMA60 = 60;
Чтобы изменить метод вычисления скользящего среднего (Moving Average) с текущего SMA на LWMA и EMA надо заменить вот эти строки кода:
// Вычисляем начальные параметры индикаторов для поиска условий входа
SMA5 = iMA(NULL,PERIOD_M30,per_SMA5,0,MODE_SMA,PRICE_MEDIAN,1);
SMA20 = iMA(NULL,PERIOD_M30,per_SMA20,0,MODE_SMA,PRICE_MEDIAN,1);
SMA40_prew = iMA(NULL,PERIOD_M30,per_SMA40,0,MODE_SMA,PRICE_MEDIAN,2);
SMA40 = iMA(NULL,PERIOD_M30,per_SMA40,0,MODE_SMA,PRICE_MEDIAN,1);
SMA60 = iMA(NULL,PERIOD_M30,per_SMA60,0,MODE_SMA,PRICE_MEDIAN,1);
на эти:
// Вычисляем начальные параметры индикаторов для поиска условий входа
SMA5 = iMA(NULL,PERIOD_M30,per_SMA5,0,MODE_LWMA,PRICE_MEDIAN,1);
SMA20 = iMA(NULL,PERIOD_M30,per_SMA20,0,MODE_LWMA,PRICE_MEDIAN,1);
SMA40_prew = iMA(NULL,PERIOD_M30,per_SMA40,0,MODE_EMA,PRICE_MEDIAN,2);
SMA40 = iMA(NULL,PERIOD_M30,per_SMA40,0,MODE_EMA,PRICE_MEDIAN,1);
SMA60 = iMA(NULL,PERIOD_M30,per_SMA60,0,MODE_EMA,PRICE_MEDIAN,1);
Не забудьте откомпилировать эксперта, после всех изменений.
Спасибо.Ещё есть вопрос по тестированию Moving Average с периодами lwma5 lwma8 ema18 ema28. Почему sell и buy на графике происходят непонятно когда? Можно ли сделать код, чтобы sell и buy были только в точке чуть выше или ниже пересечения линий?
Спасибо.Ещё есть вопрос по тестированию Moving Average с периодами lwma5 lwma8 ema18 ema28. Почему sell и buy на графике происходят непонятно когда? Можно ли сделать код, чтобы sell и buy были только в точке чуть выше или ниже пересечения линий?
// Проверка условий для совершения сделкивыставив нужные Вам условия.
if(Buy<1 && SMA5>SMA20 && SMA20>SMA40 && (SMA40-SMA60)>=0.0001 && SMA40_prew<=SMA60)
{
...
}
if(Sell<1 && SMA5<SMA20 && SMA20<SMA40 && (SMA60-SMA40)>=0.0001 && SMA40_prew>=SMA60)
{
...
}
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Moving Average Trade System:
Author: Юрий