Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Опубликуй статью. Миллионы трейдеров ждут хороших идей!
dimarik0000
164
dimarik0000 2012.11.13 17:35 
Здравствуйте господа. не могу понять что не так ордер открывается только в одном направлении и один раз. 
Файлы:
k.mq4 3 kb
DmitriyN
2316
DmitriyN 2012.11.13 18:13  

Так будет работать:

//+------------------------------------------------------------------+
//|                                                            k.mq4 |
//|                                                          Димарик |
//|                                      http//dimarik0000@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Димарик"
#property link      "http//dimarik0000@yandex.ru"

extern double lot=0.1;
extern double SL=300;
extern double TP=900;
extern double TS=200;
extern int total=1;
double MA_Slow_1, MA_Slow_2, MA_Slow_3, MA_Fast_1, MA_Fast_2, MA_Fast_3;
int ticket; 
int type=0;

int start()
  {
   MA_Slow_1=NormalizeDouble(iMA(NULL,0,200,0,MODE_EMA,PRICE_CLOSE,0),Digits);
   MA_Slow_2=NormalizeDouble(iMA(NULL,0,200,0,MODE_EMA,PRICE_CLOSE,1),Digits);
   MA_Slow_3=NormalizeDouble(iMA(NULL,0,200,0,MODE_EMA,PRICE_CLOSE,2),Digits);
   
   MA_Fast_1=NormalizeDouble(iMA(NULL,0,20,0,MODE_EMA,PRICE_CLOSE,0),Digits);
   MA_Fast_2=NormalizeDouble(iMA(NULL,0,20,0,MODE_EMA,PRICE_CLOSE,1),Digits);
   MA_Fast_3=NormalizeDouble(iMA(NULL,0,20,0,MODE_EMA,PRICE_CLOSE,2),Digits);
            
   // учёт ордеров
   for(int i = 0; i <= OrdersTotal(); i++)// цыкл перебора ордеров
    {
     if (OrderSelect(OrderTicket(),SELECT_BY_TICKET, MODE_TRADES))
      {
       if(total<=0)
       return(-1);
      }
     else
      {
       if(total>=0) // есть один открытый ордер
       break;
      }
    }
   
   total=OrdersTotal()-1;
   if(total<0)
    {
     // проверка возможности открытия Buy
     if ( (MA_Slow_3 > MA_Fast_3) && (MA_Slow_1 < MA_Fast_1) )
      {
       OrderSend(Symbol(),OP_BUY,lot,Ask ,3,NormalizeDouble(Bid-SL*Point,Digits),
        NormalizeDouble(Ask+TP*Point,Digits), "Покупаем ",0,0,Blue);
         PlaySound("alert.wav");
          {
           Print ("При открытии произошла ошибка ", GetLastError());
           return;
          }
      }
     if ( (MA_Slow_3 < MA_Fast_3) && (MA_Slow_1 > MA_Fast_1) )
      {
       OrderSend(Symbol(),OP_SELL,lot,Bid ,3,NormalizeDouble(Ask+SL*Point,Digits),
        NormalizeDouble(Bid-TP*Point,Digits), "Покупаем ",0,0,Blue);
         PlaySound("alert.wav");
          {
           Print ("При открытии произошла ошибка ", GetLastError());
           return;
          }
      }
    }
  }

Удалены жесткие условия в центрах строк:

if ( (MA_Slow_3 > MA_Fast_3) && (MA_Slow_1 < MA_Fast_1) )

Такие условия работать не будут:

&& (MA_Slow_2 == MA_Fast_2) &&
dimarik0000
164
dimarik0000 2012.11.14 09:10  
DmitriyN:

Так будет работать:

Удалены жесткие условия в центрах строк:

Такие условия работать не будут:

&& (MA_Slow_2 == MA_Fast_2) &&

 


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