[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 636
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Добрые люди, помогите, не могу разобраться, не работает 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!!!!!!!!
Это не ошибка - это сообщение, что достигнут мин. баланса - т.е. счет слит - проход завершается и начинается новый с очередным набором вх параметров - см. галочки и устанавливаемые предельные значения вкладки Оптимизация тестера:
Добрый день!! Мой советник убирает ордера вот этим местом.
Вот, раньше вроде все было путем- убирал нормально, во всяком случае пока ордеров было 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 как надо, если сделка открыта на SELL тралл работает нормально, а если открывается BUY то почему-то сразу модится стопак. Где ошибка не могу понять.... ВОТ КОД:
Есть такой момент, если в блоке TrailingStop поменять priceBUY на OrderOpenPrice(),то всё работает, но мне нужно чтоб тралил именно от уровня безубытка, а не от цены открытия..... На SELL работает, а на бай почему-то нет.... где ошибка не пойму.....SOS!!!!!!!!
Добрый день!! Мой советник убирает ордера вот этим местом.
Вот, раньше вроде все было путем- убирал нормально, во всяком случае пока ордеров было 2- 5 . Вот, а типерь ордеров в новом варианте скока хочешь- 20, 50 с каждой стороны. Короче, не убирает. Ну, два- три- четыре раза убирает, а потом вдруг нет!!!
Интересно, как это выглядит в тестере- в в общем возле цены убирает ряд ордеров, но не все!! Какие извращения можно предусмотреть- придумать, нафантозировать, что б верняком закрывать??
Правда, ну раньше же все путем біло??? Раньше же закрывало? Чтож ему еще нада-то?????
Э, ну так не пойдет.
Пока ордер не закрыт, его OrderClosePrice равна 0, а вы должны в это место подставить реальную цену, по которой закрываете ордер, т.е. Ask в случае ордера на SELL и Bid для BUY.
Э, ну так не пойдет.
Пока ордер не закрыт, его OrderClosePrice равна 0, а вы должны в это место подставить реальную цену, по которой закрываете ордер, т.е. Ask в случае ордера на SELL и Bid для BUY.
нет, OrderClosePrice() для не закрытого ордера не равна нулю - проверьте. OrderCloseTime() - да