[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 636

 

Добрые люди, помогите, не могу разобраться, не работает TrailingStop как надо, если сделка открыта на SELL тралл работает нормально, а если открывается BUY то почему-то сразу модится стопак. Где ошибка не могу понять.... ВОТ КОД:

extern int TP = 50;
extern int SL = 50;
extern int Trailing = 15;

int init()
{return(0);}
int deinit()
{return(0);}

int start()
{
//========= Расчёт уровня безубытка ======
int i;
double lotsBUY=0;
double lotsSEL=0;
double sumBUY=0;
double sumSEL=0;

for (i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()==OP_BUY)
{
lotsBUY=lotsBUY+OrderLots();
sumBUY=sumBUY+OrderLots()*OrderOpenPrice();
}

if (OrderType()==OP_SELL)
{
lotsSEL=lotsSEL-OrderLots();
sumSEL=sumSEL-OrderLots()*OrderOpenPrice();
}
}
double priceBUY=0;
if (lotsBUY!=0) priceBUY=sumBUY/lotsBUY;
double priceSEL=0;
if (lotsSEL!=0) priceSEL=sumSEL/lotsSEL;

//======== Открытие позиции =====


double MA=iMA(NULL,0,14,0,MODE_SMMA,PRICE_CLOSE,0);

if (OrdersTotal() < 1 && Bid>MA)
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-SL*Point,Ask+TP*Point,0,0,0,Green);
if (OrdersTotal() < 1 && Ask<MA)
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+SL*Point,Bid-TP*Point,0,0,0,Red);


//======= Trailing Stop =======

for(i = 0; i <= OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if (OrderType()==OP_SELL && Trailing!=0)
{
if(priceSEL-Ask>=Trailing*Point && OrderStopLoss()>(Ask+Trailing*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Trailing*Point,OrderTakeProfit(),0,CLR_NONE);
}
}
if (OrderType()==OP_BUY && Trailing!=0)
{
if(Bid-priceBUY>=Trailing*Point && (Bid-Point*Trailing)>OrderStopLoss())
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*Trailing,OrderTakeProfit(),0,CLR_NONE);
}
}
}
return(0);

}

Есть такой момент, если в блоке TrailingStop поменять priceBUY на OrderOpenPrice(),то всё работает, но мне нужно чтоб тралил именно от уровня безубытка, а не от цены открытия..... На SELL работает, а на бай почему-то нет.... где ошибка не пойму.....SOS!!!!!!!!

 
Roman.:


Это не ошибка - это сообщение, что достигнут мин. баланса - т.е. счет слит - проход завершается и начинается новый с очередным набором вх параметров - см. галочки и устанавливаемые предельные значения вкладки Оптимизация тестера:

Спасибо!
 

Добрый день!! Мой советник убирает ордера вот этим местом.

 if(Summaprofita()>=Profit_v_balans )
        {
         for(int i=OrdersTotal()-1;i>=0;i--)
           {
              bool error=true;
            OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
            
            if( magic==OrderMagicNumber( ) && OrderSymbol()==Symbol())
              {
              
                 OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE); error=false;
                           Sleep(1000);
             OrderDelete(OrderTicket());error=false;
         } } }
        

Вот, раньше вроде все было путем- убирал нормально, во всяком случае пока ордеров было 2- 5 . Вот, а типерь ордеров в новом варианте скока хочешь- 20, 50 с каждой стороны. Короче, не убирает. Ну, два- три- четыре раза убирает, а потом вдруг нет!!!

Интересно, как это выглядит в тестере- в в общем возле цены убирает ряд ордеров, но не все!! Какие извращения можно предусмотреть- придумать, нафантозировать, что б верняком закрывать??

Правда, ну раньше же все путем біло??? Раньше же закрывало? Чтож ему еще нада-то?????

 

Добрые люди, помогите, не могу разобраться, не работает TrailingStop как надо, если сделка открыта на SELL тралл работает нормально, а если открывается BUY то почему-то сразу модится стопак. Где ошибка не могу понять.... ВОТ КОД:

extern int TP = 100;
extern int SL = 100;
extern int Trailing = 15;

int init()
{return(0);}
int deinit()
{return(0);}

int start()
{
//========= Расчёт уровня безубытка ======
int i;
double lotsBUY=0;
double lotsSEL=0;
double sumBUY=0;
double sumSEL=0;

for (i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()==OP_BUY)
{
lotsBUY=lotsBUY+OrderLots();
sumBUY=sumBUY+OrderLots()*OrderOpenPrice();
}

if (OrderType()==OP_SELL)
{
lotsSEL=lotsSEL-OrderLots();
sumSEL=sumSEL-OrderLots()*OrderOpenPrice();
}
}
double priceBUY=0;
if (lotsBUY!=0) priceBUY=sumBUY/lotsBUY;
double priceSEL=0;
if (lotsSEL!=0) priceSEL=sumSEL/lotsSEL;



//======== Открытие позиции =====


double MA=iMA(NULL,0,14,0,MODE_SMMA,PRICE_CLOSE,0);

if (OrdersTotal() < 1 && Bid>MA)
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-SL*Point,Ask+TP*Point,0,0,0,Green);
if (OrdersTotal() < 1 && Ask<MA)
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+SL*Point,Bid-TP*Point,0,0,0,Red);


//======= Trailing Stop =======

for(i = 0; i <= OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if (OrderType()==OP_SELL && Trailing!=0)
{
if(priceSEL-Ask>=Trailing*Point && OrderStopLoss()>(Ask+Trailing*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Trailing*Point,OrderTakeProfit(),0,CLR_NONE);
}
}
if (OrderType()==OP_BUY && Trailing!=0)
{
if(Bid-priceBUY>=Trailing*Point && (Bid-Point*Trailing)>OrderStopLoss())
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*Trailing,OrderTakeProfit(),0,CLR_NONE);
}
}
}
return(0);
}

Есть такой момент, если в блоке TrailingStop поменять priceBUY на OrderOpenPrice(),то всё работает, но мне нужно чтоб тралил именно от уровня безубытка, а не от цены открытия..... На SELL работает, а на бай почему-то нет.... где ошибка не пойму.....SOS!!!!!!!!
 
MIR-ASOV:

Добрые люди, помогите, не могу разобраться, не работает TrailingStop как надо, если сделка открыта на SELL тралл работает нормально, а если открывается BUY то почему-то сразу модится стопак. Где ошибка не могу понять.... ВОТ КОД:

Есть такой момент, если в блоке TrailingStop поменять priceBUY на OrderOpenPrice(),то всё работает, но мне нужно чтоб тралил именно от уровня безубытка, а не от цены открытия..... На SELL работает, а на бай почему-то нет.... где ошибка не пойму.....SOS!!!!!!!!

Попробуйте вывести с помощью Print() значение priceBUY перед модификацией, соответствует ли оно ожиданиям..
 
Попробуйте вывести с помощью Print() значение priceBUY перед модификацией, соответствует ли оно ожиданиям..
Да, я проверял, соответствует целиком и полностью...... По сути уровень безубытка для BUY равен цене открытия ордера, но почему-то не работает, ставлю OrderOpenPrice() всё работает, priceBUY ставлю, нет......
 
скорей всего в момент открытия у вас в переменной priceBUY сидит ноль, и таким образом Bid-priceBUY(0)==Bid, ну и соответственно
 
Dimka-novitsek:

Добрый день!! Мой советник убирает ордера вот этим местом.

Вот, раньше вроде все было путем- убирал нормально, во всяком случае пока ордеров было 2- 5 . Вот, а типерь ордеров в новом варианте скока хочешь- 20, 50 с каждой стороны. Короче, не убирает. Ну, два- три- четыре раза убирает, а потом вдруг нет!!!

Интересно, как это выглядит в тестере- в в общем возле цены убирает ряд ордеров, но не все!! Какие извращения можно предусмотреть- придумать, нафантозировать, что б верняком закрывать??

Правда, ну раньше же все путем біло??? Раньше же закрывало? Чтож ему еще нада-то?????

Э, ну так не пойдет.

  OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);

Пока ордер не закрыт, его OrderClosePrice равна 0, а вы должны в это место подставить реальную цену, по которой закрываете ордер, т.е. Ask в случае ордера на SELL и Bid для BUY.

 
alsu:

Э, ну так не пойдет.

Пока ордер не закрыт, его OrderClosePrice равна 0, а вы должны в это место подставить реальную цену, по которой закрываете ордер, т.е. Ask в случае ордера на SELL и Bid для BUY.


нет, OrderClosePrice() для не закрытого ордера не равна нулю - проверьте. OrderCloseTime() - да
 
Спасибо!! Ща попробую, я понял.
Причина обращения: