Так прицепите к советнику и испытайте, вроде код работоспособный. Только в такой простой стратегии рыбы не будет, больше половины сигналов будут ложными или стоплосс сработает первым до достижения прибыли.
Так прицепите к советнику и испытайте, вроде код работоспособный. Только в такой простой стратегии рыбы не будет, больше половины сигналов будут ложными или стоплосс сработает первым до достижения прибыли.
//Советник основан на медвежьем или бычьем поглощении свечного паттерна. Так же учитываеются объёмы и показания RSI //+===============Внешние переменные====================+// extern int BeginHour = 7; //время начала работы советника extern int EndHour = 19; //время окончания работы советника extern int Period_RSI = 2; //период RSI extern int slippage = 0; //проскальзывание extern int buy_level = 30; //уровень покупки при пересечении линии по RSI extern int sell_level = 70; //уровень продажи при пересечении линии по RSI extern double Lot = 0.1; //объём лота //+=====================================================+// //+===============Глобальные переменные================+// int ticket1 = 0; //тикет ордера на покупку int ticket2 = 0; //тикет ордера на продажу double bullCandleSize1 = NormalizeDouble(Close[1] - Open[1],Digits()); // размер тела бычьей свечи по индексу 1 double bullCandeSize2 = NormalizeDouble(Close[2] - Open[2], Digits()); //размер телаа бычьей свечи по индексу 2 double bearCandleSize1 = NormalizeDouble(Open[1] - Close[1], Digits()); //размер тела медвежьей свечи по индексу 1 double bearCandleSize2 = NormalizeDouble(Open[2] - Close[2], Digits()); //размер тела медвежьей свечи по индексу 2 double RSI0 = iRSI(NULL,0,Period_RSI,PRICE_OPEN,0); double RSI1 = iRSI(NULL,0,Period_RSI,PRICE_OPEN,1); //+====================================================+// void OnTick() { //Начало работы советника if(Hour() >= BeginHour && Hour() < EndHour){ //Если наступает время работы советника, то можно работать //Проверяем условие на покупку if(Close[1] > Open[1] && //если свеча по индексу 1 бычья и... Close[2] < Open[2] && //если предыдущая свеча по индексу 2 медвежья и... bullCandleSize1 > bearCandleSize2 && //если размер тела бычьей свечи по индексу 1 больше размера медвежьей свечи по индексу 2 и.. Volume[1] > Volume[2] && //если объём бычьей свечи по индексу 1 больше объёма медвежьей по индексу 2 и... (RSI0 > buy_level && RSI1 < buy_level)){ //если RSI пробивает уровень 30 снизу вверх на закрытии свечи 1 //если настало время открытия новой свечи с индексом 0 if(newBar()){ ticket1 = OrderSend(Symbol(),OP_BUY,Lot,Ask,slippage,Open[1],0,NULL,0,0,clrRed); //открываем ордер на покупку if(ticket1 < 0) Print("Ошибка открытия ордера"); else Print("Ордер успешно открыт"); } } //Проверяем условие на продажу if(Close[1] < Open[1] && //если свеча по индексу 1 медвежье и.. Close[2] > Open[2] && //если предыдущая свеча по индексу 2 бычья и... bearCandleSize1 > bullCandleSize1 && //если размер тела медвежьей свечи по индексу 1 больше размера бычьей свечи по индексу 2 и... Volume[1] > Volume[2] && //если объём медвежьей свечи по индексу 1 больше объёма бычьей по индексу 2 и... (RSI0 < sell_level && RSI1 > sell_level)){ //если RSI пробивает уровень 70 сверху вниз на закрытии свечи 1 //если настало время открытия новой свечи с индексом 0 if(newBar()){ ticket2 = OrderSend(Symbol(), OP_SELL,Lot,Bid,slippage,Open[1],0,NULL,0,0,clrBlue); //открываем ордер на продажу if(ticket1 < 0) Print("Ошибк открытия ордера"); else Print("Ордер успешно открыт"); } } } } //+============================================================================+// //+=================================Начало функции newBar()=============================================================+// //Данная функция распознаёт, когда открывается новая свеча с индексом 0 bool newBar() { static datetime lastbar = 0; datetime curbar = Time[0]; bool ret = lastbar != curbar; if(ret) lastbar = curbar; return(ret); } //+======================================================================================================================+//
blade_runner: вы не посмотрите пожалуйста его, может посоветуйте что-нибудь
- Если результаты расчётов не будут применяться в качестве котировки в ордере, нормализация не требуется.
- Советник не знает, когда закрываться по профиту. Или будете сидеть мониторить вручную?
- Если предыдущая цена открытия примерно равна цене открытия текущей свечи (в пределах спреда), то ордер очень быстро закроется по стоплоссу, так и задумано?
- Если результаты расчётов не будут применяться в качестве котировки в ордере, нормализация не требуется.
- Советник не знает, когда закрываться по профиту. Или будете сидеть мониторить вручную?
- Если предыдущая цена открытия примерно равна цене открытия текущей свечи (в пределах спреда), то ордер очень быстро закроется по стоплоссу, так и задумано?
Насчет первого не совсем понял
Тейк профита я думал не ставить, так как не известно, сколько пройдёт свеча, сделка закрывается, когда закрывается свечка, на которой мы открывали ордер, то есть когда свеча[0] становится свечой[1].
Ннет, так не задумано, я просто алгоритм придумал, надо его дорабатывать ещё..
Сколько же мелочей разных и нюансов))
Можно с вами в личке общаться,или только так?
Насчет первого не совсем понял
Тейк профита я думал не ставить, так как не известно, сколько пройдёт свеча, сделка закрывается, когда закрывается свечка, на которой мы открывали ордер, то есть когда свеча[0] становится свечой[1].
Ннет, так не задумано, я просто алгоритм придумал, надо его дорабатывать ещё..
Сколько же мелочей разных и нюансов))
Можно с вами в личке общаться,или только так?
Насчет первого в строках
double bullCandleSize1 = NormalizeDouble(Close[1] - Open[1],Digits()); // размер тела бычьей свечи по индексу 1 ... double bearCandleSize2 = NormalizeDouble(Open[2] - Close[2], Digits()); //размер тела медвежьей свечи по индексу 2
NormalizeDouble - вовсе не обязателен, результат ведь идет на сравнение, а не в ордер.
Лишние функции - зло, тормозят исполнение, особенно когда кода не десяток строчек, а по паре тысяч.
А насчет закрытия сделки по закрытию свечи, в коде этого не было, потому и написал.
Общаться лучше не форуме, может у кого ещё умные мысли появятся.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования