ПоМоЖиТе вляпать тралл в советник...

 
Есть советник, надо включить в него E-Trailing. Как ни пытался-все пустое, не хочет он видеть как надо. Пока приходится двумя разными совами держать на 2-х графиках. Тралл Игоря Кима, вставлял в конец своего советника, ну после того, как заканчивается start, как и надо по идее, но что то не получается.-
extern bool   AllPositions  =True;         // Управлять всеми позициями
extern bool   ProfitTrailing=True;          // Тралить только профит
extern int    TrailingStop  =15;            // Фиксированный размер трала
extern int    TrailingStep  =2;             // Шаг трала
extern bool   UseSound      =True;          // Использовать звуковой сигнал
extern string NameFileSound ="expert.wav";  // Наименование звукового файла
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
  void start() 
  {
     for(int i=0; i<OrdersTotal(); i++) 
     {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
        {
           if (AllPositions || OrderSymbol()==Symbol()) 
           {
            TrailingPositions();
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Сопровождение позиции простым тралом                             |
//+------------------------------------------------------------------+
  void TrailingPositions() 
  {
   double pBid, pAsk, pp;
//----
   pp=MarketInfo(OrderSymbol(), MODE_POINT);
     if (OrderType()==OP_BUY) 
     {
      pBid=MarketInfo(OrderSymbol(), MODE_BID);
        if (!ProfitTrailing || (pBid-OrderOpenPrice())>TrailingStop*pp) 
        {
           if (OrderStopLoss()<pBid-(TrailingStop+TrailingStep-1)*pp) 
           {
            ModifyStopLoss(pBid-TrailingStop*pp);
            return;
           }
        }
     }
     if (OrderType()==OP_SELL) 
     {
      pAsk=MarketInfo(OrderSymbol(), MODE_ASK);
        if (!ProfitTrailing || OrderOpenPrice()-pAsk>TrailingStop*pp) 
        {
           if (OrderStopLoss()>pAsk+(TrailingStop+TrailingStep-1)*pp || OrderStopLoss()==0) 
           {
            ModifyStopLoss(pAsk+TrailingStop*pp);
            return;
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
  void ModifyStopLoss(double ldStopLoss) 
  {
   bool fm;
   fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
   if (fm && UseSound) PlaySound(NameFileSound);
  }
//+------------------------------------------------------------------+
 
Вот если бы заляпать - тогда запросто. А вляпать - это сложнее :)))
 

Низнаю что такое Е-Трейлинг. сам лично пользуюсь  таким вот тралом:       (Автора не помню, но огромное ему спасибо, наз. функция Стоплоси)

Пишем

extern double StopLoss = 18;

после старта

int Trailingstoplossi ();  (но нужны еще int cnt, ticket, total; )

и в низу

void Trailingstoplossi ()
{
int cnt, total;
total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol()) // check for symbol
{
if(OrderType()==OP_BUY) // long position is opened
{
// should it be closed?
// check for trailing stop
if(TrailingStop>0)
{
if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(Point*TrailingStop,Digits))
{
if(OrderStopLoss()<NormalizeDouble(Bid-Point*TrailingStop, Digits) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble((Bid-Point*TrailingStop),Digits),OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else // go to short position
{
// should it be closed?
// check for trailing stop
if(TrailingStop>0)
{
if(NormalizeDouble((OrderOpenPrice()-Ask),Digits)>NormalizeDouble((Point*TrailingStop),Digits))
{
if((NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble((Ask+Point*TrailingStop),Digits)) || (OrderStopLoss()==0))
{
Print("stop=",NormalizeDouble((Ask+Point*TrailingStop),Digits));
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble((Ask+Point*TrailingStop),Digits),OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
return(0);
}



 
Shniperson >>:

Низнаю что такое Е-Трейлинг. сам лично пользуюсь  таким вот тралом:       (Автора не помню, но огромное ему спасибо, наз. функция Стоплоси)

Пишем

extern double StopLoss = 18;

после старта

int Trailingstoplossi ();  (но нужны еще int cnt, ticket, total; )

и в низу

void Trailingstoplossi ()
{
int cnt, total;
total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol()) // check for symbol
{
if(OrderType()==OP_BUY) // long position is opened
{
// should it be closed?
// check for trailing stop
if(TrailingStop>0)
{
if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(Point*TrailingStop,Digits))
{
if(OrderStopLoss()<NormalizeDouble(Bid-Point*TrailingStop, Digits) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble((Bid-Point*TrailingStop),Digits),OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else // go to short position
{
// should it be closed?
// check for trailing stop
if(TrailingStop>0)
{
if(NormalizeDouble((OrderOpenPrice()-Ask),Digits)>NormalizeDouble((Point*TrailingStop),Digits))
{
if((NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble((Ask+Point*TrailingStop),Digits)) || (OrderStopLoss()==0))
{
Print("stop=",NormalizeDouble((Ask+Point*TrailingStop),Digits));
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble((Ask+Point*TrailingStop),Digits),OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
return(0);
}



А этот тралл подтягивается???

 
Hoper23 >>:

А этот тралл подтягивается???

Естественно )))   иначе зачем же он нужен.....

 

У  меня просто не пишет ошибку, пишет вот такое предупреждение -

Function "Trailing" is not referenced and will be removed from exp-file
Function "TrailingPositions" is not referenced and will be removed from exp-file
Function "ModifyStopLoss" is not referenced and will be removed from exp-file

Как с этим жить?


 

Ща ламе разбираться, но попробуйте процедуру start() сделать функцией start()

void start() меняем на int start()


 
zxc >>:

Ща ламе разбираться, но попробуйте процедуру start() сделать функцией start()

void start() меняем на int start()

Але, гараж, тут не ламеры сидят. У меня и так int start(). Вот только Тралл для void...

 

Hoper23 >>:

Але, гараж, тут не ламеры сидят. У меня и так int start(). Вот только Тралл для void...


Hoper23 писал(а) >>
Есть советник, надо включить в него E-Trailing. Как ни пытался-все пустое, не хочет он видеть как надо. Пока приходится двумя разными совами держать на 2-х графиках. Тралл Игоря Кима, вставлял в конец своего советника, ну после того, как заканчивается start, как и надо по идее, но что то не получается.-

extern bool   AllPositions  =True;         // Управлять всеми позициями
extern bool   ProfitTrailing=True;          // Тралить только профит
extern int    TrailingStop  =15;            // Фиксированный размер трала
extern int    TrailingStep  =2;             // Шаг трала
extern bool   UseSound      =True;          // Использовать звуковой сигнал
extern string NameFileSound ="expert.wav";  // Наименование звукового файла
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
  void start() 
  {
     for(int i=0; i<OrdersTotal(); i++) 
     {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
        {
           if (AllPositions || OrderSymbol()==Symbol()) 
           {
            TrailingPositions();
           }
        }
     }
  }

Ну,.. тады извиняйте.

 
zxc >>:


Ну,.. тады извиняйте.

НУ я же тебе говорю, тралл под VOID а сам советник INT.

double GetSizeLot;
extern bool   AllPositions  =True;         // Управлять всеми позициями
extern bool   ProfitTrailing=True;          // Тралить только профит
extern int    TrailingStop  =15;            // Фиксированный размер трала
extern int    TrailingStep  =2;             // Шаг трала
extern bool   UseSound      =True;          // Использовать звуковой сигнал
extern string NameFileSound ="expert.wav";  // Наименование звукового файла
int TRAL;

int start() 
   {
   double MidLot; 
   double profit=0;
   int j=OrdersTotal()-1; ..................
(И В КОНЦЕ)
   dLot = LotsMax;   
   return(dLot);  
   } 
void TRAL() 
  {
     for(int i=0; i<OrdersTotal(); i++) 
     {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
        {
           if (AllPositions || OrderSymbol()==Symbol()) .......................

И на все это выдается предупреждение АЛЯ-

Function "Trailing" is not referenced and will be removed from exp-file

Function "TrailingPositions" is not referenced and will be removed from exp-file
Function "ModifyStopLoss" is not referenced and will be removed from exp-file

ВОТ ЧТО ЭТО ТАКОЕ??? И КАК МНЕ ВМАЗАТЬ ИМЕННО ЭТОТ ТРАЛЛ???

 

Да нет никакой разницы, если вам не надо возвращать значение из функции, просто вызывайте ее, и все

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