Я обычно реализую такой функционал:
//+----------------------------------------------------------------------------+ //| Управление позициями | //+----------------------------------------------------------------------------+ void ManagePositions() { double sl=0, tp=0; int ms[2]; ArrayInitialize(ms, 0); GetTradeSignal(ms); if (ExistPositions("", -1, Magic)) { if (ms[1]>0) ClosePositions("", OP_BUY , Magic); if (ms[1]<0) ClosePositions("", OP_SELL, Magic); } else { if (ms[0]>0) { if (StopLoss>0) sl=Ask-StopLoss*Point; else sl=0; if (TakeProfit>0) tp=Ask+TakeProfit*Point; else tp=0; OpenPosition(OP_BUY, sl, tp, Magic); } if (ms[0]<0) { if (StopLoss>0) sl=Bid+StopLoss*Point; else sl=0; if (TakeProfit>0) tp=Bid-TakeProfit*Point; else tp=0; OpenPosition(OP_SELL, sl, tp, Magic); } } }Как видите, написаны функции, выполняющие вполне конкретные действия. А потом эти функции соединяются таким образом, чтобы реализовать нужную тактику работы с позициями.
наверно что-то со Stochast_1, Stochast_0, все остальное нормально
Да нет..... Со стохастиками - всё в порядке. (работа по ценам открытия)
double Stochast_0 =iStochastic(NULL,0,Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN,0); double Stochast_1 =iStochastic(NULL,0,Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN,1);
Я вас правильно понял? Позиция Бай должна закрываться
OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);
А позиция Селл должна закрываться:
OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); ?Я вас правильно понял?
В целом правильно.
Всё равно не хотят позиции закрываться по стохастику! Оформил всё чин-чином! Во внешние параметры вставил выключатель. В конце кода - отдельно блок закрытия позиций! Закрытие предусмотрел зеленым треугольничком.
Тактика простая - пересечение быстрой МА границ канала, образованного медленными МА с отклонением вверх и вниз. Код простейший . Советник В закачке - ниже.
хотел выложить весь код - не принимет сервер! - пишет больше допустимого//********* Закрытие позиций **************************************** if (AutoClose) { //----переменные для закрытия позиций ---- double Stochast_0 =iStochastic(NULL,0,Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN,0); double Stochast_1 =iStochastic(NULL,0,Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN,1); //---------------------------------------------------------------------- for (int v=0; v<OrdersTotal(); v++) { if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicNum) { //----------------------------------------------------- if (OrderType() == OP_BUY) { if(Stochast_1>75 && Stochast_0<75) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // закрываем позицию return(0); // выходим } } //-------------------------------------------------------- if (OrderType() == OP_SELL) { if(Stochast_1<25 && Stochast_0>25) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // закрываем позицию return(0); // выходим } } //------------------------------------------------------- } // Symbol() } // select } //total } //Close_
Мож. кто глянет? И подскажет в чём дело....
Возможно, при открытии ордеров неточно поставлены биги и аски? Всегда с этим путался :
ticket=OrderSend(Symbol(),... ....Но одно исправил бы точно: вместо "if(Stochast_1>75 && Stochast_0<75)" сделал бы "if(Stochast_1>75 && Stochast_0<=75)".
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый вечер! Встала проблема.
Мне нужно закрыть позицию. По сигналу индикатора. Кроме того. Нужно, чтобы позиция так же могла закрыться и по стоплоссу или по тейкпрофиту. (На тот случай, если сигнал индикатора сильно запоздает. - Часто и такое бывает) Я открываю позиции :
В дальнейшем, чтобы закрыть открытые позиции я предусматриваю:
Однако, позиции всё равно закрываются только по стоплоссу или тейкпрофиту. (за оч. редким - единичным исключением!)
Хотя по индикатору на графике видно - что почти все открытые позиции должны закрываться именно по сигналу индикатора. Пож. подскажите, - где здесь может быть ошибка... ?