Пересечение MA...

 

ув. програмисты!

подскажите как решить проблему:

есть ma85, ma75, ma5.

когда ma5 пересекает ma85 и ma75 сверху вниз открытие sell

когда ma5 пересекает ma85 и ma75 снизу в верх открытие buy

закрытие по ТР.

и открывалось только одна сделка на одно пересечение.

 



if (iMA(Symbol(),NULL,5,0,MODE_EMA,PRICE_MEDIAN,1)>iMA(Symbol(),NULL,85,0,MODE_EMA,PRICE_MEDIAN,1)
     && iMA(Symbol(),NULL,5,0,MODE_EMA,PRICE_MEDIAN,0)<iMA(Symbol(),NULL,85,0,MODE_EMA,PRICE_MEDIAN,0))
    {
    if (Ticket_sell==0)
       {
       ticket_sell=OrderSend(Symbol(),OP_SELL,Lot,Bid,5,Stop_loss,Take_Profit);
       }
    } 


if(OrderSelect(ticket_sell, SELECT_BY_TICKET,MODE_HISTORY)==true)
   {
   t_close=OrderCloseTime();
   if (t_close!=0) 
      {
      t_close=0;
      ticket_sell=0;
      }
   }

Примерно так. А первое условие непонятно зачем нужно. Если MA5 пересекает МА85, то сомо собой она уже до этого персекла МА75. Если необходимо одновременное пересечение, то сверху надо поставить соответствующее условие.

Примерно так надо. Если надо написать полностью советник, то пишите в личку.


 
if (iMA(Symbol(),NULL,5,0,MODE_EMA,PRICE_MEDIAN,1)>iMA(Symbol(),NULL,75,0,MODE_EMA,PRICE_MEDIAN,1)
     && iMA(Symbol(),NULL,5,0,MODE_EMA,PRICE_MEDIAN,0)<iMA(Symbol(),NULL,75,0,MODE_EMA,PRICE_MEDIAN,0))
   {
   Ticket_sell=-1;
   }

if (iMA(Symbol(),NULL,5,0,MODE_EMA,PRICE_MEDIAN,0)>iMA(Symbol(),NULL,75,0,MODE_EMA,PRICE_MEDIAN,0) && Ticket_sell<0)
   {
   Ticket_sell=0;
   }


if (iMA(Symbol(),NULL,5,0,MODE_EMA,PRICE_MEDIAN,1)>iMA(Symbol(),NULL,85,0,MODE_EMA,PRICE_MEDIAN,1)
     && iMA(Symbol(),NULL,5,0,MODE_EMA,PRICE_MEDIAN,0)<iMA(Symbol(),NULL,85,0,MODE_EMA,PRICE_MEDIAN,0))
    {
    if (Ticket_sell==-1)
       {
       Ticket_sell=OrderSend(Symbol(),OP_SELL,Lot,Bid,5,Stop_loss,Take_Profit);
       }
    } 


if(OrderSelect(Ticket_sell, SELECT_BY_TICKET,MODE_HISTORY)==true)
   {
   t_close=OrderCloseTime();
   if (t_close!=0) 
      {
      t_close=0;
      Ticket_sell=0;
      }
   }


Примерно Можно ещё так.

 
FOReignEXchange >>:


Примерно Можно ещё так.

спасибо. буду пробывать.

 
а вопрос если используеться ma5, ma 96 и ma65 - как сделать чтобы сделка открывалась один раз на пересечение? (выход по ТР или при обратном пересечении) ни как не могу собразить, как задать условие.
 
    if (Ticket_sell==-1)
       {
       Ticket_sell=OrderSend(Symbol(),OP_SELL,Lot,Bid,5,Stop_loss,Take_Profit);
       }
    }


Тут только одна сделка открывается. Параметры МА описываются Выше. Вообще не понятно что Вы хотите спросить. Убейте пару дней и прочтите учебник. Если нет времени, то все рады выполнить Ваш заказ.

 
if (iMA(Symbol(),NULL,5,0,MODE_EMA,PRICE_MEDIAN,1)>iMA(Symbol(),NULL,75,0,MODE_EMA,PRICE_MEDIAN,1)
     && iMA(Symbol(),NULL,5,0,MODE_EMA,PRICE_MEDIAN,0)<iMA(Symbol(),NULL,75,0,MODE_EMA,PRICE_MEDIAN,0)
     && Ticket_sell==0)
   {
   Ticket_sell=-1;
   }

if (iMA(Symbol(),NULL,5,0,MODE_EMA,PRICE_MEDIAN,0)>iMA(Symbol(),NULL,75,0,MODE_EMA,PRICE_MEDIAN,0) 
   && Ticket_sell<1)
   {
   Ticket_sell=0;
   }


if (iMA(Symbol(),NULL,5,0,MODE_EMA,PRICE_MEDIAN,1)>iMA(Symbol(),NULL,85,0,MODE_EMA,PRICE_MEDIAN,1)
     && iMA(Symbol(),NULL,5,0,MODE_EMA,PRICE_MEDIAN,0)<iMA(Symbol(),NULL,85,0,MODE_EMA,PRICE_MEDIAN,0))
    {
    if (Ticket_sell==-1)
       {
       Ticket_sell=OrderSend(Symbol(),OP_SELL,Lot,Bid,5,Bid+Stop_loss*Point,Bid-Take_Profit*Point);
       }
    } 


if(OrderSelect(Ticket_sell, SELECT_BY_TICKET,MODE_HISTORY)==true)
   {
   t_close=OrderCloseTime();
   if (t_close!=0) 
      {
      t_close=0;
      Ticket_sell=0;
      }
   }
 
Примерно так, хотя могут быть ошибки и неточности. Ошибок не избежать. Наличие ошибок в алгоритме может обнаружить тестер. Этим он и хорошо помогает.
 
На тестере эта конфигурация заключает сделки в точности всегда правильно
 

главное что я теперь логику понял.... (ну как мне кажеться, надеюсь пока вопросов не будет)  :)

спасибо FOReignEXchange.

 

Алгоритм, навреное, своеобразный. Я не учился в специальных учреждениях. Поэтому, может такой код покажется странным грамотным спецам, но он работает. 

Можете подобрать свой алгоритм, главное чтоб он работал. Обучайтесь и удачи в деле!

Причина обращения: