Почему то вместо закрытия идет открытие позиции .
Тут описаны функции советника .
//+------------------------------------------------------------------+ //| myscript.mq5 | //| Copyright 2016, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ void mPositionClose(int Magic) { CTrade mtrade; CPositionInfo pos; int total=PositionsTotal(); for(int i=0; i<total; i++) { if(!pos.SelectByIndex(i))continue; if(pos.Magic()!=Magic)continue; if(pos.Symbol()!=_Symbol)continue; mtrade.PositionClose(pos.Identifier()); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void BUY(int magick,double volume) { MqlTick last_tick={0}; SymbolInfoTick(_Symbol,last_tick); //--- готовим запрос MqlTradeRequest request={0}; request.action=TRADE_ACTION_DEAL; // установка отложенного ордера request.magic=magick; // ORDER_MAGIC // request.order=2111; // Тикет ордера request.symbol=_Symbol; // инструмент request.volume=volume; // объем в 0.1 лот request.sl=0; // Stop Loss не указан request.tp=0; // Take Profit не указан //--- сформируем тип ордера request.type=ORDER_TYPE_BUY; // тип ордера //---сформируем цену для отложенного ордера request.price=last_tick.bid; // оттолкнемся от цены Bid // цена для открытия //--- отправим торговый приказ MqlTradeResult result={0}; OrderSend(request,result); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double PositionProfit(int Magic) { CTrade trade; CPositionInfo pos; double prof; prof=0; int total=PositionsTotal(); for(int i=0; i<total; i++) { if(!pos.SelectByIndex(i))continue; if(pos.Magic()!=Magic)continue; if(pos.Symbol()!=_Symbol)continue; // if(pos.Profit()>=Profit) // { // trade.PositionClose(pos.Identifier()); // } prof=pos.Profit(); } return prof; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool mag(int Magic) { CTrade trade; CPositionInfo pos; bool m; m=false; int total=PositionsTotal(); for(int i=0; i<total; i++) { if(!pos.SelectByIndex(i))continue; if(pos.Magic()!=Magic)continue; if(pos.Symbol()!=_Symbol)continue; m=true; } return m; } //+------------------------------------------------------------------+ //| Возвращает true, если появился новый бар для пары символ/период | //+------------------------------------------------------------------+ bool isNewBar() { //--- в статической переменной будем помнить время открытия последнего бара static datetime last_time=0; //--- текущее время datetime lastbar_time=SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE); //--- если это первый вызов функции if(last_time==0) { //--- установим время и выйдем last_time=lastbar_time; return(false); } //--- если время отличается if(last_time!=lastbar_time) { //--- запомним время и вернем true last_time=lastbar_time; return(true); } //--- дошли до этого места - значит бар не новый, вернем false return(false); } //+------------------------------------------------------------------+ //| ПРОВЕРКА НОВОГО БАРА | //+------------------------------------------------------------------+ bool CheckNewBar() { //--- Переменная для времени открытия текущего бара static datetime new_bar=NULL; //--- Массив для получения времени открытия текущего бара static datetime time_last_bar[1]={0}; //--- Получим время открытия текущего бара // Если возникла ошибка при получении, сообщим об этом if(CopyTime(_Symbol,Period(),0,1,time_last_bar)==-1) { Print(__FUNCTION__,": Ошибка копирования времени открытия бара: "+IntegerToString(GetLastError())+""); } //--- Если это первый вызов функции if(new_bar==NULL) { // Установим время new_bar=time_last_bar[0]; Print(__FUNCTION__,": Инициализация ["+_Symbol+"][TF: "+TimeframeToString(Period())+"][" +TimeToString(time_last_bar[0],TIME_DATE|TIME_MINUTES|TIME_SECONDS)+"]"); return(false); // Вернём false и выйдем } //--- Если время отличается if(new_bar!=time_last_bar[0]) { new_bar=time_last_bar[0]; // Установим время и выйдем return(true); // Запомним время и вернем true } //--- Дошли до этого места - значит бар не новый, вернем false return(false); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ string TimeframeToString(ENUM_TIMEFRAMES timeframe) { string str=""; //--- Если переданное значение некорректно, берем таймфрейм текущего графика if(timeframe==WRONG_VALUE|| timeframe== NULL) timeframe= Period(); switch(timeframe) { case PERIOD_M1 : str="M1"; break; case PERIOD_M2 : str="M2"; break; case PERIOD_M3 : str="M3"; break; case PERIOD_M4 : str="M4"; break; case PERIOD_M5 : str="M5"; break; case PERIOD_M6 : str="M6"; break; case PERIOD_M10 : str="M10"; break; case PERIOD_M12 : str="M12"; break; case PERIOD_M15 : str="M15"; break; case PERIOD_M20 : str="M20"; break; case PERIOD_M30 : str="M30"; break; case PERIOD_H1 : str="H1"; break; case PERIOD_H2 : str="H2"; break; case PERIOD_H3 : str="H3"; break; case PERIOD_H4 : str="H4"; break; case PERIOD_H6 : str="H6"; break; case PERIOD_H8 : str="H8"; break; case PERIOD_H12 : str="H12"; break; case PERIOD_D1 : str="D1"; break; case PERIOD_W1 : str="W1"; break; case PERIOD_MN1 : str="MN1"; break; } //--- return(str); } //+------------------------------------------------------------------+
Народ , кто разобрался с закрытием поз ?
Или торгуете не закрывая :)))
Народ , кто разобрался с закрытием поз ?
Или торгуете не закрывая :)))
Сергей привет.
Мне нужно закрыть позу , вызвав функцию
mPositionClose(int Magic)
Вместо этого идет массовое открытие поз на каждом баре.
void mPositionClose(int Magic) { CTrade mtrade; CPositionInfo pos; int total=PositionsTotal(); for(int i=0; i<total; i++) { if(!pos.SelectByIndex(i))continue; if(pos.Magic()!=Magic)continue; if(pos.Symbol()!=_Symbol)continue; mtrade.PositionClose(pos.Identifier()); } }
Это похоже на автомобиль ,у которого нажатие на тормоз вызывает ,
вместо остановки ускорение .
То есть в машине две педали ГАЗ .
Одна замаскирована под тормоз.
Успешное нажатие на педаль тормоза не всегда означает успешное торможение.
Необходимо убедится , что ВЫ не врубились в препятсвие , проверкой автомобиля не целостность .
E У вас явно с логикой совы что-то не то. И не указано на каком типе счета запускаете неттинг или хедж
Счет хеджевый в Альпари. Открывался осознанно. Ставил галку при открытии счета , что мне нужен хедж.
Логика такая , что при вызове
mtrade.PositionClose(pos.Identifier());
я ожидаю закрытие позы.
- отзывов: 7
- www.mql5.com
Успешное нажатие на педаль тормоза не всегда означает успешное торможение.
Необходимо убедится , что ВЫ не врубились в препятсвие , проверкой автомобиля не целостность .
Счет хеджевый в Альпари. Открывался осознанно. Ставил галку при открытии счета , что мне нужен хедж.
Логика такая , что при вызове
я ожидаю закрытие позы.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте
В советнике есть строки