Помощь по Mql4 (обращение к параметрам ордера)

 

Здравствуйте. Перелопатил овер 100 тем по обращению к параметрам ордера, но так и не смог вывести нужные данные.


Цель: обратится к закрытому ордеру, и если его уровень профита в пунктах (пипсах) > 70, то вывести параметры: (его лот, его профит в пунктах (пипсах), в какую сторону открыт (бай / сэлл).


Пробовал и циклами, и искусственно их создвал, выводит Профит 0.


Нужна ваша помощь! Помогите пожалуйста!

 
OrdersHistoryTotal - Торговые функции - Справочник MQL4
OrdersHistoryTotal - Торговые функции - Справочник MQL4
  • docs.mql4.com
Количество закрытых и удаленных ордеров в истории текущего счета, загруженной в клиентском терминале. Размер списка истории зависит от текущих настроек вкладки "История счета" терминала.
 
Не решает проблему. Уже пробовал.
 
Макс Сопельцев:
Не решает проблему. Уже пробовал.
Пример кода скиньте, может поправят...
 
extern int StopLoss = 200;
extern int TakeProfit = 100;
extern double Lot = 0.01;

int start()

{
int total = OrdersTotal();

if (total < 1){
   OrderSend(Symbol(),OP_BUY,Lot,Ask,30,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",132,0,Blue) && OrderSend(Symbol(),OP_SELL,Lot,Bid,30,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",132,0,Red);}
   for(int i = OrdersHistoryTotal();i>=0;i--){// Перебираем все закрытые ордера
               if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){//если ордер с таким номером (i) в списке закрытых ордеров есть (не путать с тикетом)
                  if(OrderSymbol() == Symbol()){//если выбранный ордер был открыт по нашей валютной паре
                     if((OrderClosePrice()-OrderOpenPrice())*Point>70){ //сравниваем его с переменно profit)
                        double LotsOrder1=OrderLots();//запоминает объем ордера
                        int profit1=((OrderClosePrice()-OrderOpenPrice())*Point);//если прибыль по ордеру больше чем profit, заодно запоминаем прибыль ордера
                        int typeOrder1=OrderType(); // запоминаем направление ордера  


}
}}}
Print (profit1);
}
      
 
Макс Сопельцев:
extern int StopLoss = 200;
extern int TakeProfit = 100;
extern double Lot = 0.01;

int start()

{
int total = OrdersTotal();

if (total < 1){
   OrderSend(Symbol(),OP_BUY,Lot,Ask,30,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",132,0,Blue) && OrderSend(Symbol(),OP_SELL,Lot,Bid,30,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",132,0,Red);}
   for(int i = OrdersHistoryTotal();i>=0;i--){// Перебираем все закрытые ордера
               if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){//если ордер с таким номером (i) в списке закрытых ордеров есть (не путать с тикетом)
                  if(OrderSymbol() == Symbol()){//если выбранный ордер был открыт по нашей валютной паре
                     if((OrderClosePrice()-OrderOpenPrice())*Point>70){ //сравниваем его с переменно profit)
                        double LotsOrder1=OrderLots();//запоминает объем ордера
                        int profit1=((OrderClosePrice()-OrderOpenPrice())*Point);//если прибыль по ордеру больше чем profit, заодно запоминаем прибыль ордера
                        int typeOrder1=OrderType(); // запоминаем направление ордера  


}
}}}
Print (profit1);
}
      

если открываете вкладку "История счета" и там есть закрытые ордера, идем дальше

начинаем втыкать print("Я тут - 1"); как бы изнутри цикла

не напечатало, переносим на уровень выше

и т.д.

 

Понял, ща попробую

 
Не прокатило. Не выводит. Вопрос в том, может ошибка в логике, и он берет не тот ордер ?
 
Макс Сопельцев:
Не прокатило. Не выводит. Вопрос в том, может ошибка в логике, и он берет не тот ордер ?

да ткните уже по ссылке и сравните

есть разница

 

Я переставил принт внутрь цикла - теперь вывода вообще нет.

extern int StopLoss = 200;

extern int TakeProfit = 100;

extern double Lot = 0.01;


int start()


{

int total = OrdersTotal();


if (total < 1){

   OrderSend(Symbol(),OP_BUY,Lot,Ask,30,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",132,0,Blue) && OrderSend(Symbol(),OP_SELL,Lot,Bid,30,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",132,0,Red);}

   for(int i = OrdersHistoryTotal();i>=0;i--){// Перебираем все закрытые ордера

               if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){//если ордер с таким номером (i) в списке закрытых ордеров есть (не путать с тикетом)

                  if(OrderSymbol() == Symbol()){//если выбранный ордер был открыт по нашей валютной паре

                     if((OrderClosePrice()-OrderOpenPrice())*Point>70){ //сравниваем его с переменно profit)

                        double LotsOrder1=OrderLots();//запоминает объем ордера

                        int profit1=((OrderClosePrice()-OrderOpenPrice())*Point);//если прибыль по ордеру больше чем profit, заодно запоминаем прибыль ордера

                        int typeOrder1=OrderType(); // запоминаем направление ордера  

                        Print (profit1);

                        break;

}


}


}


}


}

      

 

// retrieving info from trade history
  int i,accTotal=OrdersHistoryTotal();
  for(i=0;i<accTotal;i++)
    {
     //---- check selection result
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
       {
        Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
        break;
       }
     // работа с ордером ...
    }

это код из документации

---

пишем:

 int i;
  for(i=0;i<OrdersHistoryTotal();i++)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
       {
        Print("Оредер выбран, № п.п."+IntegerToString(i));

            //ИДЕМ ДАЛЬШЕ

            //ВАШИ ДЕЙСТВИЯ
       }
    }

Причина обращения: