Набросал простого советника торговля только одним ордером, без доливок и мартинов и прогнал по истории за этот год минимальным лотом ( azzx_ema_rsi_1_0), результат положительный, автору Респект и оценка 10+
Набросал простого советника торговля только одним ордером, без доливок и мартинов и прогнал по истории за этот год минимальным лотом ( azzx_ema_rsi_1_0), результат положительный, автору Респект и оценка 10+
Набросал простого советника торговля только одним ордером, без доливок и мартинов и прогнал по истории за этот год минимальным лотом ( azzx_ema_rsi_1_0), результат положительный, автору Респект и оценка 10+
Набросал простого советника торговля только одним ордером, без доливок и мартинов и прогнал по истории за этот год минимальным лотом ( azzx_ema_rsi_1_0), результат положительный, автору Респект и оценка 10+
а в советнике только этот индикатор используется?
Набросал простого советника торговля только одним ордером, без доливок и мартинов и прогнал по истории за этот год минимальным лотом ( azzx_ema_rsi_1_0), результат положительный, автору Респект и оценка 10+
присоединяюсь к просьбе...
Набросал простого советника торговля только одним ордером, без доливок и мартинов и прогнал по истории за этот год минимальным лотом ( azzx_ema_rsi_1_0), результат положительный, автору Респект и оценка 10+
присоединяюсь к просьбе...
Поделиться советником невопрос, только на первом результате качество моделирования всего 25%, с более точным моделированием результат отличается, с начала лета советник топчется на месте, что будет с сентября неизвестно.
Сам код советника, на реал очень не рекомендую, настройки по умолчанию под 4х знак, может общими усилиями что то и получится толковое ? оптимально на EUR-USD H1
#property copyright "Scam Laboratory 2012" #property link "http://www.forex4you.org/?affid=bdbda7b" //=============== Меню =============================================== extern string Name="RSI (12.08.2012)"; extern string MM = "Если risk>0, ММ от FreeMargin"; extern double risk = 0; // ММ 0.01 - итд. extern int balans = 100; // баланс реинвестирования, на каждую 100 депо будет умножатся лот на риск extern double Lots = 0.01; // теперь можно и микролоты 0.01 при этом если стоит 0.1 то следующий лот в серии будет 0.16 extern string Indicators="Параметры индикаторов"; extern int RSImax=60; extern int RSImin=40; extern string TradeManagement="Управление торговлей"; extern bool BUY = true; // разрешить BUY extern bool SELL = true; // разрешить SELL extern int TakeProfit = 135; // фиксированный профит extern int StopLoss = 15; // фиксированный стоп extern int MinTP = 5; // минимальный виртуальный тейк профит extern int MinSL = 5; // минимальный виртуальный стоп лосс extern string TradeTime="Время торговли (по ДЦ)"; extern int MondayStart = 0; // открытие первой сделки в понедельник не раньше этого времени по ДЦ extern int FridayStop = 20; // не открываем позиции в пятницу после это времени по ДЦ, но закрываем extern int FridayClose = 22; // закрытие прибыльных позиций в пятницу в это время по ДЦ extern string Magic="Магическое число"; extern int mn=888; // "магический номер" для отличия своих ордеров от чужих extern string Server="Параметры сервера"; extern int Slippage=3; // допустимое проскальзование цены extern int Pause = 5000; // пауза в миллисекундах между запросами на сервер //============== Переменные ========================================== double RSI; // величина индикатора "azzx_ema_rsi_1_0" double NewBuy; // сигнал открытия покупки double NewSell; // сигнал открытия продажи string GetNameOP="RSI"; // комментарии в открытом ордере double Trade; // разрешение или запрет работы //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { if (!IsTesting()) { if (IsExpertEnabled()) { Comment("Советник будет запущен следующим тиком"); } else { Comment("Отжата кнопка \"Разрешить запуск советников\""); } } return (0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() {//0 //======== получение данных с индикатора ============================= {//1 RSI=iCustom(NULL,0,"azzx_ema_rsi_1_0",0,0); RefreshRates(); }//1 // ================= Обработка сигналов ============================== {//2 if ((RSI<RSImin)&&(Minute()==15)) NewBuy=1; else NewBuy=0; if ((RSI>RSImax)&&(Minute()==15)) NewSell=1; else NewSell=0; // ======= вычисляем время торговли ====== // (воскресенье-0,1,2,3,4,5,6) if((DayOfWeek() == 1 && Hour() >= MondayStart) ||DayOfWeek() == 2 || DayOfWeek() == 3 || DayOfWeek() == 4 || (DayOfWeek() == 5 && Hour() < FridayStop)) Trade = 1; else Trade = 0; }//2 // ================= Открытие сделки ================================= {//3 // открытие BUY if ((NewBuy == 1) && (ExistPositions() == false) && (Trade == 1) && (BUY==true)) { OrderSend(Symbol(),OP_BUY,GetLots(),Ask,Slippage,0,0,GetNameOP,mn,0,Blue); Sleep (Pause); OrderModify(GetTicketLastPos(),OrderOpenPrice(),(Ask-Point*StopLoss),(Ask+Point*TakeProfit),0,Red); } // открытие Sell if ((NewSell == 1) && (ExistPositions() == false) && (Trade == 1) && (SELL==true)) { OrderSend(Symbol(),OP_SELL,GetLots(),Bid,Slippage,0,0,GetNameOP,mn,0,OrangeRed); Sleep (Pause); OrderModify(GetTicketLastPos(),OrderOpenPrice(),(Bid+Point*StopLoss),(Bid-Point*TakeProfit),0,Red); } }//3 // ================= Закрытие сделки ================================== {//4 if (NewBuy == 1) { ClossAllProfitSell (); ClossAllLossSell(); Sleep(Pause); } if (NewSell == 1) { ClossAllProfitBuy (); ClossAllLossBuy(); Sleep(Pause); } if (DayOfWeek() == 5 && Hour() >= FridayClose) // закрываем в пятницу вечером все прибыльные ордера { ClossAllProfitBuy (); ClossAllProfitSell (); Sleep(Pause); } }//4 // ====== Получение данных по истории пунктов закрытых позиций ======== {//5 { if (!IsTesting()) if (OrdClose_b() != 0) // исключаем деление на ноль { int OrdClose=OrdClose_b(); double PointProfit=PointProfit_b()/1; double OrdPoint=NormalizeDouble(PointProfit/OrdClose,1); } } }//5 // ================= Комментарии ====================================== {//6 if (!IsTesting()) { Comment("BrokerTime=", Hour() + ":" + Minute()," Market-ордеров=",OrdClose," шт."," Общая прибыль=",PointProfit," пп."," Удельная прибыль=",OrdPoint," пп./орд."); // Комментарий в угол окна } }//6 //-END return(0); }//0 //+-------------------------------------------------------------------+ // ================= Функции ========================================== //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 06.03.2008 | //| Описание : Возвращает флаг существования позиций | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //| ot - время открытия ( 0 - любое время открытия) | //+----------------------------------------------------------------------------+ bool ExistPositions(string sy="", int op=-1, datetime ot=0) { int i, k=OrdersTotal(); if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (ot<=OrderOpenTime()) return(True); } } } } } } return(False); } //END //+------------------------------------------------------------------+ //| Закрыть прибыльные ордера | //+------------------------------------------------------------------+ // ====================== Закрыть BUY в профите =============================== double ClossAllProfitBuy () { int Profit1=MinTP; int col1=Lime; int ask1, bid1, open1; double point1; for (int i1=OrdersTotal()-1; i1>=0; i1--) { if (!OrderSelect(i1,SELECT_BY_POS,MODE_TRADES)) break; if ((OrderType()==OP_BUY) && (OrderMagicNumber()==mn)) { point1=MarketInfo(Symbol(),MODE_POINT); if (point1==0) break; bid1=MathRound(MarketInfo(OrderSymbol(),MODE_BID)/point1); open1=MathRound(OrderOpenPrice()/point1); if (bid1-open1<Profit1) continue; OrderClose(OrderTicket(),OrderLots(),bid1*point1,Slippage,col1); } } } // End // ====================== Закрыть SELL в профите =============================== double ClossAllProfitSell () { int Profit2=MinTP; int col2=Lime; int ask2, bid2, open2; double point2; for (int i2=OrdersTotal()-1; i2>=0; i2--) { if (!OrderSelect(i2,SELECT_BY_POS,MODE_TRADES)) break; if ((OrderType()==OP_SELL) && (OrderMagicNumber()==mn)) { point2=MarketInfo(Symbol(),MODE_POINT); if (point2==0) break; ask2=MathRound(MarketInfo(OrderSymbol(),MODE_ASK)/point2); open2=MathRound(OrderOpenPrice()/point2); if (open2-ask2<Profit2) continue; OrderClose (OrderTicket(),OrderLots(),ask2*point2,Slippage,col2) ; } } } // End //+------------------------------------------------------------------+ //| Закрыть убыточные ордера | //+------------------------------------------------------------------+ // ====================== Закрыть BUY в убытке =============================== double ClossAllLossBuy() { int Stop4=MinSL; int ask4, bid4, open4; double point4; for (int i4=OrdersTotal()-1; i4>=0; i4--) { if (!OrderSelect(i4,SELECT_BY_POS,MODE_TRADES)) break; if ((OrderType()==OP_BUY) && (OrderMagicNumber()==mn)) { point4=MarketInfo(Symbol(),MODE_POINT); if (point4==0) break; bid4=MathRound(MarketInfo(Symbol(),MODE_BID)/point4); open4=MathRound(OrderOpenPrice()/point4); if (open4-bid4<Stop4) continue; OrderClose(OrderTicket(),OrderLots(),bid4*point4,Slippage,Red); } } } // End // ====================== Закрыть SELL в убытке =============================== double ClossAllLossSell() { int Stop5=MinSL; int ask5, bid5, open5; double point5; for (int i5=OrdersTotal()-1; i5>=0; i5--) { if (!OrderSelect(i5,SELECT_BY_POS,MODE_TRADES)) break; if ((OrderType()==OP_SELL) && (OrderMagicNumber()==mn)) { point5=MarketInfo(Symbol(),MODE_POINT); if (point5==0) break; ask5=MathRound(MarketInfo(Symbol(),MODE_ASK)/point5); open5=MathRound(OrderOpenPrice()/point5); if (ask5-open5<Stop5) continue; OrderClose (OrderTicket(),OrderLots(),ask5*point5,Slippage,Red); } } } // End //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Возвращает тикет последней открытой позиции или -1 | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int GetTicketLastPos(string sy="", int op=-1) { datetime o; int i, k=OrdersTotal(), r=-1; if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (o<OrderOpenTime()) { o=OrderOpenTime(); r=OrderTicket(); } } } } } } } return(r); } // END //+------------------------------------------------------------------+ //| ММ Изменяем лот от свободных средств | //+------------------------------------------------------------------+ double GetLots() { double minlot = MarketInfo(Symbol(), MODE_MINLOT); double maxlot = MarketInfo(Symbol(), MODE_MAXLOT); if(risk!=0) { double lot = NormalizeDouble(AccountFreeMargin() * risk /100 / balans, 2); if(lot < minlot) lot = minlot; if(lot > maxlot) lot = maxlot; } else lot=Lots; return(lot);} //=============== Подсчет количества пунтков ===============================// // // // int OrdClose=OrdClose_b(); // // double PointProfit=PointProfit_b(); // // double OrdPoint=NormalizeDouble(PointProfit/OrdClose,1); // // // //==========================================================================// double PointProfit_b() { int i; double OrdOpenPrice=0; double OrdClosePrice=0; double OrdPrice=0; double MarketPoint=0; double PointProfit=0; string SMB; for(i=OrdersHistoryTotal()-1;i>=0;i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) == true) { if((OrderType()==OP_BUY || OrderType()==OP_SELL) && (OrderMagicNumber()==mn)) { if(OrdOpenPrice<OrderOpenPrice()) { OrdOpenPrice=OrderOpenPrice(); } if(OrdClosePrice<OrderClosePrice()) { OrdClosePrice=OrderClosePrice(); } if(OrderType()==OP_BUY) OrdPrice=OrdClosePrice-OrdOpenPrice; if(OrderType()==OP_SELL) OrdPrice=OrdOpenPrice-OrdClosePrice; SMB=OrderSymbol(); MarketPoint=MarketInfo(SMB,MODE_POINT); PointProfit+=NormalizeDouble(OrdPrice/MarketPoint,0); } } OrdOpenPrice=0; OrdClosePrice=0; OrdPrice=0; MarketPoint=0; } return(PointProfit); } int OrdClose_b() { int OrdClose=0; int i; for(i=OrdersHistoryTotal()-1;i>=0;i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) == true) { if((OrderType()==OP_BUY || OrderType()==OP_SELL) && (OrderMagicNumber()==mn)) { OrdClose++; } } } return(OrdClose); } //END
Сам код советника, на реал очень не рекомендую, настройки по умолчанию под 4х знак, может общими усилиями что то и получится толковое ? оптимально на EUR-USD H1
Забавно. Это как раз мой "любимый" таймфрейм и пара. :) В основном проверку идей веду здесь, хотя на реале вот недавно поставил советники на M13 и M30 ещё - профит-фактор у них достаточный, чтобы приятно сгладить эквити (риск к депо, конечно, меньше, чем для H1).
А про сам индикатор - к сожалению, у меня нет достойных идей, как его задействовать. То, что демонстрирует ваш советник - это задействование в режиме "фильтра", а не базовой системы. Сомневаюсь, что вам удастся найти хоть мало-мальски устойчивые параметры советника (хотя код не смотрел, каюсь - слишком сложно для тестового советника, имхо).
Почему же в режиме фильтра, это единственный индикатор в советнике, по показанием которого открывается сделка, а код конечно можно и облегчить.
//+------------------------------------------------------------------+ //| RSILight.mq4 | //| Copyright 2012, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright 2012, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" //=============== Меню =============================================== extern double Lot = 0.01; extern int RSImax=60; extern int RSImin=40; extern int TakeProfit = 20; extern int StopLoss = 10; //============== Переменные ========================================== double RSI; double NewBuy; double NewSell; string GetNameOP="RSI"; int t; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //======== получение данных с индикатора ============================= {//1 RSI=iCustom(NULL,0,"azzx_ema_rsi_1_0",0,0); RefreshRates(); }//1 // ================= Обработка сигналов ============================== {//2 if ((RSI<RSImin)&&(Minute()==15)) NewBuy=1; else NewBuy=0; if ((RSI>RSImax)&&(Minute()==15)) NewSell=1; else NewSell=0; }//2 // ================= Открытие сделки ================================= {//3 // открытие BUY if (NewBuy == 1 && OrdersTotal() == 0) { t=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,0,"RSI",0,0,Blue); Sleep (5000); OrderModify (t,OrderOpenPrice(),(Ask-Point*StopLoss),(Ask+Point*TakeProfit),0,Red); } // открытие Sell if (NewSell == 1 && OrdersTotal()==0) { t=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,0,0,"RSI",0,0,OrangeRed); Sleep (5000); OrderModify (t,OrderOpenPrice(),(Bid+Point*StopLoss),(Bid-Point*TakeProfit),0,Red); } }//3 //END return(0); } //+------------------------------------------------------------------+
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
RSI. Просто RSI.:
Author: Лёха