Индикатор на который ни кто не обращает внимание. - страница 3

 
supergiz:


Чё создавать то идею? она уже есть)). Эксперт надо сделать, который будет открыватся по сигналам rsi и двух MA.

Не стоит эта идея выеденного яйца. (особенно в подобной реализации). Поправил индикатор и понял что от него надо держаться подальше
 
а вот чё я своими кривыми руками и опытом програмирования 3 дня, сделал.
Файлы:
a_sidus.mq4  4 kb
 
Скачай, потести на периоде пол года.
 
Или больше.
 
Vinin:

Не стоит эта идея выеденного яйца. (особенно в подобной реализации). Поправил индикатор и понял что от него надо держаться подальше


Это же недолго. просто по тестеру прогони.
 
В этом эксперте можно поставить лот равным 0.1 даже при депо в 50 баксов.
supergiz:


Это же недолго. просто по тестеру прогони.


В этом эксперте можно поставить лот равным 0.1 даже при депо в 50 баксов.
 
Андрей Кирилёв.
 
О! А я как раз его сейчас потрошу и заодно учу MQl4 =)
 
supergiz:
а вот чё я своими кривыми руками и опытом програмирования 3 дня, сделал.

А что значит:

Low[1]-offset*Point

High[1]+offset*Point
?
 

На основе сидуса и Moving Average Simple

Только я еще учусь и даже не знаю, что значит ...

Low[1]-offset*Point

High[1]+offset*Point

... и тут один ордер закрывает другой (без TP и SL)

//+------------------------------------------------------------------+
//|                                    Moving Average+Идея Сидус.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#define MAGICMA  20110505
extern double Lots               = 0.1;
extern double MaximumRisk        = 0.02;
extern double DecreaseFactor     = 3;
extern double MovingPeriodFast   = 5;
extern double MovingPeriodSlow   = 12;
extern double RSIPeriod          = 21;
//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//---- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double LotsOptimized()
  {
   double lot=Lots;
   int    orders=HistoryTotal();     // history orders total
   int    losses=0;                  // number of losses orders without a break
//---- select lot size
   lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
//---- calcuulate number of losses orders without a break
   if(DecreaseFactor>0)
     {
      for(int i=orders-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
         if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;
         //----
         if(OrderProfit()>0) break;
         if(OrderProfit()<0) losses++;
        }
      if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
     }
//---- return lot size
   if(lot<0.1) lot=0.1;
   return(lot);
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double FastMA;
   double SlowMA;
   double RsiSig=0;
   int    res;
   int    sigCurrent=0;
   int    sigPrevious=0;
   double pipdiffCurrent=0;
   double pipdiffPrevious=0;

//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//---- get Moving Average 
   FastMA=iMA(NULL,0,MovingPeriodFast,0,MODE_EMA,PRICE_CLOSE,0);
   SlowMA=iMA(NULL,0,MovingPeriodSlow,0,MODE_EMA,PRICE_CLOSE,0);
   RsiSig=iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, 0);
   pipdiffCurrent=(FastMA-SlowMA);
   Comment("pipdiffCurrent = "+pipdiffCurrent+" ");
     if (pipdiffCurrent>0 && RsiSig>50) 
          {
           sigCurrent = 1;  //Up
          }
     else if (pipdiffCurrent<0 && RsiSig<50)
          {
             sigCurrent = 2;  //Down
          }
 
//---- sell conditions
if(sigCurrent == 2)  
{res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red); return;}
//---- buy conditions
if(sigCurrent == 1)  
{res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue);return;}
//----
}
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   double FastMA;
   double SlowMA;
   double RsiSig=0;
   int sigCurrent=0;
   int sigPrevious=0;
   double pipdiffCurrent=0;
   double pipdiffPrevious=0;
//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//---- get Moving Average 
   FastMA=iMA(NULL,0,MovingPeriodFast,0,MODE_EMA,PRICE_CLOSE,0);
   SlowMA=iMA(NULL,0,MovingPeriodSlow,0,MODE_EMA,PRICE_CLOSE,0);
   RsiSig=iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, 0);
   pipdiffCurrent=(FastMA-SlowMA);
   Comment("pipdiffCurrent = "+pipdiffCurrent+" ");
     if (pipdiffCurrent>0 && RsiSig>50) 
     {
       sigCurrent = 1;  //Up

     }
     else if (pipdiffCurrent<0 && RsiSig<50)
     {
       sigCurrent = 2;  //Down

     }
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
      //---- check order type 
      if(OrderType()==OP_BUY)
        {
         if(sigCurrent == 2) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(sigCurrent == 1) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
         break;
        }
     }
//----
  }
//+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+
void start()
  {
//---- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
   if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
   else                                    CheckForClose();
//----
  }
//+------------------------------------------------------------------+
Причина обращения: