#define EXPERT_MAGIC 123456 // MagicNumber
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- объявляем и инициализируем структуры запроса и результата
MqlTradeRequest request={};
MqlTradeResult result ={};
//--- заполним параметры торгового запроса для открытия длинной позиции
request.action = TRADE_ACTION_DEAL; // тип торговой операции
request.symbol = Symbol(); // символ
request.volume = 0.1; // объем в 0.1 лот
request.type = ORDER_TYPE_BUY; // тип ордера
request.price = SymbolInfoDouble(Symbol(), SYMBOL_ASK); // цена для открытия
request.deviation = 5; // допустимое отклонение от цены
request.magic = EXPERT_MAGIC; // MagicNumber ордера
//--- отправляем запрос, если отправить запрос не удалось, выводим код ошибки и завершаем работу
if(!OrderSend(request, result))
{
PrintFormat("OrderSend error ", GetLastError());
return;
}
//--- выведем информацию об операции
PrintFormat("Trade request result: retcode: %u, deal: %I64u, order: %I64u", result.retcode, result.deal, result.order);
//--- получим тикет позиции из результата торговой операции и выберем позицию по тикету
//--- тикет только что открытой позиции соответствует тикету ордера, породившего сделку
ulong ticket=result.order;
ResetLastError();
if(!PositionSelectByTicket(ticket))
{
PrintFormat("PositionSelectByTicket(%I64u) failed. Error %d", ticket, GetLastError());
return;
}
//--- выведем в журнал данные выбранной по тикету позиции
ENUM_POSITION_TYPE type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
long time = PositionGetInteger(POSITION_TIME_MSC);
double price = PositionGetDouble(POSITION_PRICE_OPEN);
double volume= PositionGetDouble(POSITION_VOLUME);
string symbol= PositionGetString(POSITION_SYMBOL);
int digits= (int)SymbolInfoInteger(symbol, SYMBOL_DIGITS);
PrintFormat("Current selected position: %s %.2f %s #%I64u at %.*f, %s",
symbol, volume, (type==POSITION_TYPE_BUY ? "Buy" : "Sell"), ticket, digits, price, TimeMscToString(time));
/*
результат:
Trade request result: retcode: 10009, deal: 2778100901, order: 2803905975
Current selected position: EURUSD 0.10 Buy #2803905975 at 1.10672, 2024.09.02 12:09:51.239
*/
}
//+------------------------------------------------------------------+
//| Возвращает время с миллисекундами |
//+------------------------------------------------------------------+
string TimeMscToString(const long time_msc, int flags=TIME_DATE|TIME_MINUTES|TIME_SECONDS)
{
return(TimeToString(time_msc/1000, flags) + "." + IntegerToString(time_msc %1000, 3, '0'));
}
|