Jump to content
Andrew777

Напишу индикатор, советника... (БЕСПЛАТНО)

Recommended Posts

Circle
Теперь шаг действительно стал 30, но зато SL не идет за ценой, а болтается на месте плюс-минус эти 30 мп. Ордера закрываются по тейку или стопу.

 

По идеи должен идти за ценой.

Проверю сообщу результаты.


Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
Sergey5

Проверю сообщу результаты.

 

Спасибо.

Share this post


Link to post
Share on other sites
Circle

 

Спасибо.

 

Это я накосячил была логическая ошибка, исправил.

Поставить трал сюда.mq4


Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
Sergey5

исправил.

 

Спасибо, сейчас потестю.

Share this post


Link to post
Share on other sites
Sergey5

сейчас потестю.

extern double TakeProfit = 580;

extern double TrailingStop = 80;

extern double StopLoss = 200;

extern int TralStartProfit = 400;

extern int TrallStep = 30;

 

Получилось следующее:

- при селл стоп стартует на 30 в убыток и не двигается (закрыт в ТП);

- при бай встаёт на 30 в плюс и дальше идёт по 30 (закрыт по ТП).

Share this post


Link to post
Share on other sites
Circle
сейчас потестю.

extern double TakeProfit = 580;

extern double TrailingStop = 80;

extern double StopLoss = 200;

extern int TralStartProfit = 400;

extern int TrallStep = 30;

 

Получилось следующее:

- при селл стоп стартует на 30 в убыток и не двигается (закрыт в ТП);

- при бай встаёт на 30 в плюс и дальше идёт по 30 (закрыт по ТП).

 

if((OrderStopLoss()>Ask+(Point*TrailingStop+TrallStep*Point)) )

{

if (OrderOpenPrice()<OrderStopLoss()) stop=OrderOpenPrice()-TrallStep*Point;

else stop=OrderStopLoss()-TrallStep*Point;

OrderModify(OrderTicket(),OrderOpenPrice(),stop,OrderTakeProfit(),0,Red);

}

Там где if(type==OP_SELL) проверьте если плюс стоит поставьте минус.


Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
Sergey5

Исправил.

Теперь при селл встаёт на 30 в плюс и тралит по 30.

Share this post


Link to post
Share on other sites
Sergey5

Я наверное неправильно изложил свои пожелания, прошу прощения.

Изначально идея такова:

- покупка по 1000, сл 800, тп 1580;

- при цене 1480 сл перемещается на 1400;

- при цене 1510 сл перемещается на 1430 и т.д.

Share this post


Link to post
Share on other sites
Circle
Я наверное неправильно изложил свои пожелания, прошу прощения.

Изначально идея такова:

- покупка по 1000, сл 800, тп 1580;

- при цене 1480 сл перемещается на 1400;

- при цене 1510 сл перемещается на 1430 и т.д.

 

void TrailOrder(int type)
{
  double Tmp;
  double stop;
  if(TrailingStop>0 )
  {
     if(OrderMagicNumber() == MagicNumber)
     {
        if(type==OP_BUY)
        {
            if (OrderOpenPrice()>OrderStopLoss()) Tmp=Bid-OrderOpenPrice();
            else Tmp=Bid-OrderStopLoss();
	 	   if (Tmp<0) return;
		   if (TralStartProfit>0 && (Tmp/Point)>= TralStartProfit)
		   {
			   if(Tmp>Point*TrailingStop+TrallStep*Point)
			   {
			      if(OrderStopLoss()<Bid-(Point*TrailingStop+TrallStep*Point))
			      {
				     if (OrderOpenPrice()>OrderStopLoss()) stop=OrderOpenPrice()+TrallStep*Point;
				     else stop=OrderStopLoss()+TrallStep*Point;
				     OrderModify(OrderTicket(),OrderOpenPrice(),stop,OrderTakeProfit(),0,Green);
			      }
			   }
		   }
        }
        if(type==OP_SELL)
        {
        if (OrderOpenPrice()<OrderStopLoss()) Tmp=OrderOpenPrice()-Ask;
        else Tmp=OrderStopLoss()-Ask;
		   if (Tmp<0) return;
		   if (TralStartProfit>0 && (Tmp/Point)>= TralStartProfit)
		   {		 
			   if(Tmp>(Point*TrailingStop+TrallStep*Point))
			   {
			      if((OrderStopLoss()>Ask+(Point*TrailingStop+TrallStep*Point)) )
			      {
				     if (OrderOpenPrice()<OrderStopLoss()) stop=OrderOpenPrice()-TrallStep*Point;
				     else stop=OrderStopLoss()-TrallStep*Point;
				     OrderModify(OrderTicket(),OrderOpenPrice(),stop,OrderTakeProfit(),0,Red);
			      }
			   }
		   }
        }
     }
  }
}

Попробуйте такой вариант.

Алгоритм такой когда ордер имеет прибыль больше заданного TralStartProfit включается треллинг стоп.

При удалении цены от стоп лоса на заданное TrailingStop число пунктов стоп лосс перемещается на заданное TrallStep пунктов.

Edited by Circle

Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
Sergey5

Попробовал.

При старте сл всё равно встаёт + 30, дальше всё нормально.

Share this post


Link to post
Share on other sites
Circle
Попробовал.

При старте сл всё равно встаёт + 30, дальше всё нормально.

 

То есть вам надо, что бы первый шаг трелинга был равен значению TralStartProfit и в дальнейшем уже шагал по заданному значению TrallStep.?


Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
Sergey5
То есть вам надо, что бы первый шаг трелинга был равен значению TralStartProfit и в дальнейшем уже шагал по заданному значению TrallStep.?

 

Так точно!

с расстоянием до текущей цены в размере TrailingStop.

Share this post


Link to post
Share on other sites
Circle
Так точно!

с расстоянием до текущей цены в размере TrailingStop.

 

void TrailOrder(int type)
{
  double Tmp;
  double stop;
  if(TrailingStop>0 )
  {
     if(OrderMagicNumber() == MagicNumber)
     {
        if(type==OP_BUY)
        {
            if (OrderOpenPrice()>OrderStopLoss()) Tmp=Bid-OrderOpenPrice();
            else Tmp=Bid-OrderStopLoss();
	 	   if (Tmp<0) return;
		   if (OrderOpenPrice()>OrderStopLoss() && (Tmp/Point)>= TralStartProfit)
		   {
			  if(Tmp>Point*TrailingStop+TralStartProfit*Point)
			  {				   				   		 	   

  	           OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+TralStartProfit*Point,OrderTakeProfit(),0,Green);
             }
		   }else
		   {		 	   
			  if(Tmp>Point*TrailingStop+TrallStep*Point)
			  {				   				   		 	   
			     if(OrderStopLoss()<Bid-(Point*TrailingStop+TrallStep*Point))
			     {
				       if (OrderOpenPrice()>OrderStopLoss()) stop=OrderOpenPrice()+TrallStep*Point;
				       else stop=OrderStopLoss()+TrallStep*Point;
				       OrderModify(OrderTicket(),OrderOpenPrice(),stop,OrderTakeProfit(),0,Green);
			     }			      
		     }
		  }
        }
        if(type==OP_SELL)
        {
        if (OrderOpenPrice()<OrderStopLoss()) Tmp=OrderOpenPrice()-Ask;
        else Tmp=OrderStopLoss()-Ask;
		   if (Tmp<0) return;
		   if (OrderOpenPrice()<OrderStopLoss() && (Tmp/Point)>= TralStartProfit)
		   {
			  if(Tmp>Point*TrailingStop+TralStartProfit*Point)
			  {				   				   		 	   

  	           OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-TralStartProfit*Point,OrderTakeProfit(),0,Green);
             }
		   }else
		   {		 
			   if(Tmp>(Point*TrailingStop+TrallStep*Point))
			   {
			      if((OrderStopLoss()>Ask+(Point*TrailingStop+TrallStep*Point)) )
			      {
				     if (OrderOpenPrice()<OrderStopLoss()) stop=OrderOpenPrice()-TrallStep*Point;
				     else stop=OrderStopLoss()-TrallStep*Point;
				     OrderModify(OrderTicket(),OrderOpenPrice(),stop,OrderTakeProfit(),0,Red);
			      }
			   }
		   }
        }
     }
  }
}

Попробуйте эту функцию.

Поставить трал сюда.mq4

Edited by Circle

Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
Sergey5

Не помогло.

начинает с + 30 .

Share this post


Link to post
Share on other sites
Circle
Не помогло.

начинает с + 30 .

 

У меня тралит как задумано вами.

Настройки такие:

extern double TakeProfit = 500;

extern double TrailingStop = 150;

extern double StopLoss = 200;

extern int TralStartProfit = 200;

extern int TrallStep = 30;

post-94648-1404220212,7092_thumb.png


Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
Sergey5

У меня так же получается.

Но мне хотелось бы , чтобы первый трал вставал с размера TralStartProfit от цены входа.

Share this post


Link to post
Share on other sites
Sergey5

Время позднее.

И так много времени у Вас отнял, может, продолжим завтра?

Share this post


Link to post
Share on other sites
Circle
У меня так же получается.

Но мне хотелось бы , чтобы первый трал вставал с размера TralStartProfit от цены входа.

 

По алгоритму он и должен так вставать.

Почему тестер пишет первую модификацию ордера на 230 пипсов когда должен на 200 пипсов согласно настройкам не могу понять.

Условие для бай такое:

Если цена открытия больше стоплосс и текущая цена Бид минус цена открытия в пипсах больше или равна TralStartProfit и при этом цена Бид минус цена открытия больше Point*TrailingStop+TralStartProfit*Point

То модифицируем стоп лосс ордера на значение ордер на значение цена открытия + TralStartProfit

Иначе тоже самое только уже вместо TralStartProfit плюсуем TrallStep.


Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
Circle
Время позднее.

И так много времени у Вас отнял, может, продолжим завтра?

 

Думаю да завтра посмотрим свежим взглядом.


Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
Sergey5
Думаю да завтра посмотрим свежим взглядом.

 

Полностью согласен.

Большое Спасибо за уделённое мне время!

Share this post


Link to post
Share on other sites
Circle
Полностью согласен.

Большое Спасибо за уделённое мне время!

 

Попробуйте такой вариант, я сам не проверял.

Идея та же, но немного другая логика.

Поставить трал сюда (1).mq4


Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
Sergey5

Идея та же, но немного другая логика.

 

Добрый день.

Всё работает, как надо.

Большое Спасибо!

Share this post


Link to post
Share on other sites
Sergey5

Когда можно будет ещё обратиться ?

Надо добавить размер лота от маржи и исправить ошибку в размере ТП (ставит на 10 мп меньше заданого).

Share this post


Link to post
Share on other sites
Circle
Когда можно будет ещё обратиться ?

Надо добавить размер лота от маржи и исправить ошибку в размере ТП (ставит на 10 мп меньше заданого).

 

Ошибку размера ТП исправте сами, там не сложно.

В функции GetTakeProfit перепутан Bid и Ask (об этом Антон писал).

Вы их просто местами поменяйте там где написан Bid напишите Ask а где Ask напишите Bid.

....

Функцию управления капиталом попозже прикручу к советнику.

 

З.Ы.

И еще в этой же функции вместо return(TP);

напишите return(NormalizeDouble(TP,Digits)); так будет более правильнее.


Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
Sergey5

Спасибо, сейчас поменяю.

 

P.S.: Поменял, проверил - всё правильно.

 

Ещё раз Благодарю.

 

Вечером поставлю на оптимизацию за 2013, потом отправлю настройки.

Edited by Sergey5

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

×