Для тех у кого возникают вопросы по работе с группой ордеров, я написал этот урок. Здесь мы немного затронем объектно-ориентированное программирование, а именно создание структур.
Создадим советник и массив структур, где будем хранить информацию об ордерах:
struct OrdersInfo
{
int tick; // тикет
string symb; // символ
int cmd; // торговая операция
double oop; // цена открытия
double ocp; // цена закрытия
datetime oot; // время открытия
datetime oct; // время закрытия
double prof; // профит
double lot; // количество лотов
int slip; // проскальзывание
double sl; // stop loss
double tp; // take profit
string cmt; // комментарий
int mgc; // идентификатор
datetime expr; // срок истечения ордера
};
OrdersInfo ord[];
Изменим размерность массива и заполним данные об ордерах:
ArrayResize(ord,OrdersTotal(),1);
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
ord[i].tick=OrderTicket();
ord[i].symb=OrderSymbol();
ord[i].cmd=OrderType();
ord[i].oop=OrderOpenPrice();
ord[i].ocp=OrderClosePrice();
ord[i].oot=OrderOpenTime();
ord[i].oct=OrderCloseTime();
ord[i].prof=OrderProfit();
ord[i].lot=OrderLots();
ord[i].sl=OrderStopLoss();
ord[i].tp=OrderTakeProfit();
ord[i].cmt=OrderComment();
ord[i].mgc=OrderMagicNumber();
ord[i].expr=OrderExpiration();
}
}
И наконец пробежимся по массиву и выведем несколько параметров на экран:
string cm="\n";
for(int i=0;i<ArraySize(ord);i++)
{
cm+=((string)ord[i].tick+" "+ord[i].symb+" "+(string)ord[i].cmd+" "+(string)ord[i].prof+"\n");
}
Comment(cm);
Чтобы продемонстрировать работу советника, я открыл по одному ордеру на трех парах:
Точно таким же образом можно вывести на экран все остальные параметры ордеров.
Вот и весь код эксперта:
//+------------------------------------------------------------------+
//| SymbolsInfo.mq4 |
//| Copyright 2015, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
struct OrdersInfo
{
int tick; // тикет
string symb; // символ
int cmd; // торговая операция
double oop; // цена открытия
double ocp; // цена закрытия
datetime oot; // время открытия
datetime oct; // время закрытия
double prof; // профит
double lot; // количество лотов
int slip; // проскальзывание
double sl; // stop loss
double tp; // take profit
string cmt; // комментарий
int mgc; // идентификатор
datetime expr; // срок истечения ордера
};
OrdersInfo ord[];
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Comment("");
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
ArrayResize(ord,OrdersTotal(),1);
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
ord[i].tick=OrderTicket();
ord[i].symb=OrderSymbol();
ord[i].cmd=OrderType();
ord[i].oop=OrderOpenPrice();
ord[i].ocp=OrderClosePrice();
ord[i].oot=OrderOpenTime();
ord[i].oct=OrderCloseTime();
ord[i].prof=OrderProfit();
ord[i].lot=OrderLots();
ord[i].sl=OrderStopLoss();
ord[i].tp=OrderTakeProfit();
ord[i].cmt=OrderComment();
ord[i].mgc=OrderMagicNumber();
ord[i].expr=OrderExpiration();
}
}
string cm="\n";
for(int i=0;i<ArraySize(ord);i++)
{
cm+=((string)ord[i].tick+" "+ord[i].symb+" "+(string)ord[i].cmd+" "+(string)ord[i].prof+"\n");
}
Comment(cm);
}
//+------------------------------------------------------------------+
Скачать советник файлом:
www.opentraders.ru/downloads/1317/
Комментарии (5)
8 Kudryashov Сообщений: 129
34 AM2 Автор Сообщений: 16232 - Андрей
24 ShamanHand Сообщений: 1092 - Наношу добро, причиняю пользу.
Странно, но он вроде как работает
Однако вопросЫ:
1. Нет ли в коде ошибки?
2. Если понадобиться отдельно закрывать OP_BUY или OP_SELL тогда нужен 2 мерный массиив?
Спасибо!
8 Kudryashov Сообщений: 129
8 Kudryashov Сообщений: 129
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий