Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Запусти агентов на свободном компьютере. Это принесет доход!
Константин Гранд
408
Константин Гранд 2009.08.05 20:45 
Знает ли кто-нибудь как применить iMA к индикатору iRSI в написании советника? (т.е. приведите пожалуйста пример как это сделать).
Виктор
Модератор
6560
Виктор 2009.08.05 20:50  
Посмотрите здесь и здесь.
Rid
3170
Rid 2009.08.05 22:05  
INFINITEITH >>:
Знает ли кто-нибудь как применить iMA к индикатору iRSI в написании советника? (т.е. приведите пожалуйста пример как это сделать).

образец:

#property copyright "leonid553 & co"
#property link      "http://www.tradersforum.net.ru/"

//---- input parameters---------
extern int     MagicLong=5675; 
extern int     MagicShort=8976; 
extern bool   Long =true;
extern bool   Short =true;
extern string   _____= "Параметры бай- позиций"; 
extern int     RSI_period  =20;
extern int     MA_period          =21;
extern int     TP=200;
extern int     SL=61;
extern int     lMinProfit         = 53;//порог начала работы трала
extern int     lTrailingStop      = 53;//размер трала
extern int     lTrailingStep      = 5;//шаг трала
extern string   ____= "Параметры селл- позиций";
extern int     RSI_period_SELL  =20;          
extern int     MA_period_SELL          =21;
extern int     TP_=200;
extern int     SL_=61;
extern int     sMinProfit              = 53;
extern int     sTrailingStop           = 53;
extern int     sTrailingStep           = 5;
//------------------------------
extern string     ______= "Общие Параметры ";
extern double  Lot=0.1;
extern int     Slippage=3;
extern bool UseTrailing = true;//трейлинг стоп
//-------------------
int ExpertBars;
int ticket;

int init()
  {ExpertBars = Bars;   return(0);  }

//+------------------------------------------------------------------+
int start()
  {
bool isNewBar=false;
if (ExpertBars !=Bars) {ExpertBars=Bars; isNewBar=true; }
if (isNewBar) { //если появился  новый бар
 
//===== Ищем возможность войти в рынок ======================
if (Long)                   {     //если "выключатель" включен
if (!ExpertOrder( MagicLong ))//если  нет открытых БАЙ позиций 
  {
 //------заполняем массив значениями RSI для БАЙ позиций 
double RSI_array_buy[50];int j=0; while (j<50) {
RSI_array_buy[j]= iRSI(NULL, 0, RSI_period, MODE_SMA, j);
j++;
 }//вешаем ма на рси
ArraySetAsSeries(RSI_array_buy,true);
double MA_low =iMAOnArray(RSI_array_buy,0,MA_period,1,MODE_SMA,0);
double RSI_0=iRSI(NULL, 0, RSI_period,MODE_SMA, 1);
double RSI_1=iRSI(NULL, 0, RSI_period,MODE_SMA, 2);   
//---------проверяем условие на покупку----------------------
  if   (           (RSI_1<MA_low)  &&
          (RSI_0>MA_low)  )
   {
  ticket=OrderSend(Symbol(),0,Lot,Ask,Slippage,Bid-SL*Point,Ask+TP*Point,NULL,MagicLong,0,CLR_NONE);
  if (ticket<0) { Print("Ошибка открытия ордера BUY #", GetLastError()); return (0);   }          
   }
   }}
   //--------------------------------------------------------------
if (Short)                   {     //если "выключатель" включен 
if (!ExpertOrder( MagicShort ))//если  нет открытых СЕЛЛ позиций 
  {  
 // ---заполняем массив значениями Stochastic для СЕЛЛ  позиций -------------
double RSI_array_sell[50];int    k=0; while (k<50) {
RSI_array_sell[k]= iRSI(NULL, 0,RSI_period_SELL, MODE_SMA, k);
k++;
 }//вешаем ма на рси
ArraySetAsSeries(RSI_array_sell,true);
double MA_up =iMAOnArray(RSI_array_sell,0, MA_period_SELL ,1,MODE_SMA,0);
double RSI_0s=iRSI(NULL, 0, RSI_period_SELL,MODE_SMA, 1);
double RSI_1s=iRSI(NULL, 0, RSI_period_SELL,MODE_SMA,2);
    
//--------проверяем условие на продажу------------------------------
  if  (           (RSI_1s > MA_up )  &&
          (RSI_0s < MA_up )) 
   {       
  ticket=OrderSend(Symbol(),1,Lot,Bid,Slippage,Bid+SL_*Point,Bid-TP_*Point,NULL,MagicShort,0,CLR_NONE);
  if (ticket<0) { Print("Ошибка открытия ордера SELL #", GetLastError()); return (0);  }     
   } 
   }} 
//------------------------------------------------------------------

if (UseTrailing) TrailPositions(); 
//----
} //isNewBar 
   return(0);
  }

//конец функции СТАРТ
//+------------------------------------------------------------------+
void TrailPositions() 
{
 int Orders = OrdersTotal();
  for (int i=0; i<Orders; i++) {
    if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
    if (OrderSymbol() != Symbol()) continue;  
    if (OrderType() == OP_BUY) {
      if (Bid-OrderOpenPrice() > lMinProfit*Point) {
        if (OrderStopLoss() < Bid-(lTrailingStop+lTrailingStep-1)*Point) {
          OrderModify(OrderTicket(), OrderOpenPrice(), Bid-lTrailingStop*Point,
                                                   OrderTakeProfit(), 0, Blue);
        }} }
    if (OrderType() == OP_SELL) {
      if (OrderOpenPrice()-Ask > sMinProfit*Point) {
        if (OrderStopLoss() > Ask+(sTrailingStop+sTrailingStep-1)*Point ||
                                                     OrderStopLoss() == 0) {
          OrderModify(OrderTicket(), OrderOpenPrice(), Ask+sTrailingStop*Point,
                                                   OrderTakeProfit(), 0, Blue);
        }}}}}


//---- Функция проверки наличия ордеров эксперта --+
//-----------------------------------------------------------------
// false - ордеров данного эксперта нет;                                           |
// true  - есть ордера данного эксперта;                                           |
//-------------------------------------------------------------------+
bool ExpertOrder (int VersionID){
bool result=false;
int  _OrdersTotal=OrdersTotal();
if (_OrdersTotal>0) {
    for (int v=0; v<_OrdersTotal; v++) {    
      if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES)) {
        if (OrderMagicNumber()==VersionID) 
           { result=true;  break; }       //Найден ордер принадлежащий эксперту
        else   
           { result=false; } 
       }      
     }        
   }
else { result=false; }  
//---------------------        
return(result);
}
dimarik0000
164
dimarik0000 2012.12.19 14:06  
rid:

образец:



а как сделать что-бы при тестировании ма отображалась на графике
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий