Долго думал получилось вот так, это правильно или есть логические ошибки ?
//+------------------------------------------------------------------+ //| schitaemProfit.mq5 | //| Copyright 2010, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2010, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- if(PositionSelect(_Symbol)) { long id=PositionGetInteger(POSITION_IDENTIFIER); double itProfit=PositionGetDouble(POSITION_PROFIT); //double itVol = PositionGetDouble(POSITION_VOLUME); //double itCommis = PositionGetDouble(POSITION_COMMISSION); double itSwap=PositionGetDouble(POSITION_SWAP); double priseAsk = SymbolInfoDouble(_Symbol,SYMBOL_ASK); double priseBid = SymbolInfoDouble(_Symbol,SYMBOL_BID); double Poin = SymbolInfoDouble(_Symbol,SYMBOL_POINT); int Spread=SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);//Размер спреда в пунктах HistorySelectByPosition(id); uint total=HistoryOrdersTotal();//PositionsTotal() ulong ticket; //Print("Количество действующих ордеров = "+total+" itProfit="+itProfit); ENUM_ORDER_TYPE startTyp; bool rezVozvrata=false; double profit; bool PerviyVhod = true; for(int i=total;i>=0;i--) { if(ticket=HistoryOrderGetTicket(i)) { ENUM_ORDER_TYPE typ=HistoryOrderGetInteger(ticket,ORDER_TYPE); if(PerviyVhod==false) { //уже не первый вход в цикл if(typ!=startTyp) { break; } } double initial_volume = HistoryOrderGetDouble(ticket, ORDER_VOLUME_INITIAL); double openPrise = HistoryOrderGetDouble(ticket, ORDER_PRICE_OPEN); if(typ==ORDER_TYPE_BUY) { profit=((priseAsk-openPrise-(Spread*Poin))*initial_volume/Poin)+itSwap; } if(typ==ORDER_TYPE_SELL) { profit=((openPrise-priseBid-(Spread*Poin))*initial_volume/Poin)+itSwap; } Print("Выбрали ордер "+i+" тип "+typ+" initial_volume="+initial_volume+" profit="+NormalizeDouble(profit,_Digits)); startTyp=typ; PerviyVhod=false; if(profit>0) { rezVozvrata=true; } if(profit<0) { rezVozvrata=false; break; } } } Print("По результату rezVozvrata="+rezVozvrata+", profit на первом ордере="+NormalizeDouble(profit,_Digits)); } } //+------------------------------------------------------------------+

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Добрый вечер! Пытаюсь решить задачу (mql4->mql5):
на mql4 она бы звучала так: если на всех однонаправленных ордерах есть в наличии нужный профит то вернуть истина, ну и закрываем сделки.
на mql5 как бы правильно сформулировать.... э... ну: поднять последние однонаправленные действующие ордера и просчитать а есть ли на первом нужный профит, так как будто он был один.
может этот код поможет......