Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Читай форум и увеличивай свой рейтинг!
Олег
84
Олег 2012.03.12 14:34 
int start()                                  // Внутренние переменные
  {
  double MA1_1,MA1_2,MA2_1,MA2_2,MA3_1,MA3_2;
  double StochM_1,StochM_2,StochS_1,StochS_2,MACDS_1,MACDS_2;
  int    cnt=0, ticket, total;
  
  
  for(int a=0;a<4;a++)

//+------------------------------------------------------------------+
       
                                              //Описание функций технических индикаторов.
     MA1_2    = iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,a);              // МА_1 0 бар
     MA1_1    = iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,a+1);            // МА_1 1 бар
     MA2_2    = iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,a);             // МА_2 0 бар
     MA2_1    = iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,a+1);           // МА_2 1 бар
     MA3_2    = iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE,a);             // МА_3 0 бар
     MA3_1    = iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE,a+1);           // МА_3 1 бар
     StochM_2 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,a);    // Sto_M 0 бар
     StochM_1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,a+1);  // Sto_M 1 бар
     StochS_2 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,a);  // Sto_S 0 бар
     StochS_1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,a+1);// Sto_S 1 бар
     MACDS_2  = iMACD(NULL,0,5,7,3,PRICE_CLOSE,MODE_SIGNAL,a);       // MACD_S 0 бар
     MACDS_1  = iMACD(NULL,0,5,7,3,PRICE_CLOSE,MODE_SIGNAL,a+1);     // MACD_S 1 бар

                                                   //Проверка наличия открытых ордеров. 
total=OrdersTotal(); 
if(total<1)
  {
   //Определение торговых критериев.
   //Проверяем возможность открытия длинной позиции.                                              
   if(MACDS_1>0 && MA1_1<MA1_2 && MACDS_2>MACDS_1 && MA1_2>MA3_2)
     {   
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,30,Bid-StopLoss*Point,Bid+TakeProfit*Point);
      return(0);   
     }    
   //Проверяем возможность открытия короткой позиции.  
   if(MACDS_1<0 && MA1_1>MA1_2 && MACDS_2<MACDS_1 && MA1_2<MA3_2)
     {   
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,30,Ask+StopLoss*Point,Ask-TakeProfit*Point);
      return(0); 
     }
   return(0);                          
  }      

Здесь часть эксперта. Смысл такой. Надо проверить в цикле баров ( <4 ), как в начале указано, изменения индикаторов. То есть, последний бар это - "а", предпоследний "а+1", но как тогда правильно обозначить предпредпоследний бар (то есть 1-й в цикле - ?). Я пытаюсь написать, что "а+1" - это 1-й в цикле из 3-х, и "а" соответственно последний. В этих трех барах должны отразиться изменения, необходимые для открытия ордера. Не могу найти толкового описания этого вопроса. Или надо писать "а+2" как 1-й из трех баров?

А если надо цикл из четырех баров проследить? Никак не въеду, уже мозги кипят.Прошу прощения у специалистов за такое "подробное" описание проблемы.

Подскажите, люди добрые.С уважением к Вам.

witalik
7
witalik 2012.03.12 14:55  
for(int a=0;a<4;a++) {
//Описание функций технических индикаторов.
MA1_2 = iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,a); // МА_1 0 бар
MA1_1 = iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,a+1); // МА_1 1 бар
MA2_2 = iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,a); // МА_2 0 бар
MA2_1 = iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,a+1); // МА_2 1 бар
MA3_2 = iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE,a); // МА_3 0 бар
MA3_1 = iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE,a+1); // МА_3 1 бар
StochM_2 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,a); // Sto_M 0 бар
StochM_1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,a+1); // Sto_M 1 бар
StochS_2 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,a); // Sto_S 0 бар
StochS_1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,a+1);// Sto_S 1 бар
MACDS_2 = iMACD(NULL,0,5,7,3,PRICE_CLOSE,MODE_SIGNAL,a); // MACD_S 0 бар
MACDS_1 = iMACD(NULL,0,5,7,3,PRICE_CLOSE,MODE_SIGNAL,a+1); // MACD_S 1 бар
}

- просто добавь скобки {}

Олег
84
Олег 2012.03.12 15:03  
witalik:

- просто добавь скобки {}


И все? Не может быть.

Тогда еще один вопрос. Здесь же, при открытии buy, не срабатывает критерий MA1_2>MA3_2, то есть это условие не выполняется.

Ордер открывается, а МА1_2 еще ниже, чем МА3_2, то есть данные на последнем баре?

Заранее спасибо !!!

witalik
7
witalik 2012.03.12 15:45  

а если убрать строку цикла: for(int a=0;a<4;a++)
и ее заменить на int a=0

будут срабатывать Ваши критерии?

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