Спасибо, рабочий вариант. У меня массив контролируемых ордеров, и SL переносятся выше цены открытия - переход в БУ. Вместо if(!PositionSelect(Symbol())),
делаю перебор ы цикле. Всё Ок.
В Margin Mode: ACCOUNT_MARGIN_MODE_RETAIL_HEDGING !PositionSelect(Symbol()) работать не будет, так как в этом режиме позиция может быть не одна, поэтому, закрытие одной из позиций не приведет к !PositionSelect(Symbol()) == true, так как другие позиции продолжат оставаться в рынке.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
#property link "https://www.mql5.com"
#property version "1.00"
//
double pos_sl;
long pos_id;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(PositionSelect(Symbol()))
{
pos_sl = PositionGetDouble(POSITION_SL);
pos_id = long(PositionGetInteger(POSITION_IDENTIFIER));
}
}
//+------------------------------------------------------------------+
// Expert Trade Transaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
switch(trans.type)
{
case TRADE_TRANSACTION_DEAL_ADD:
if(!PositionSelect(Symbol())) //Позиции НЕТ закрыта
{
if(HistorySelectByPosition(pos_id))
{
//Смотрим всю необходимую инфу
}
}
break;
}
}
#property link "https://www.mql5.com"
#property version "1.00"
//
double pos_sl;
long pos_id;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
intOnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
voidOnTick()
{
if(PositionSelect(Symbol()))
{
pos_sl = PositionGetDouble(POSITION_SL);
pos_id = long(PositionGetInteger(POSITION_IDENTIFIER));
}
}
//+------------------------------------------------------------------+
// Expert Trade Transaction function |
//+------------------------------------------------------------------+
voidOnTradeTransaction(constMqlTradeTransaction &trans,
const MqlTradeRequest &request,
constMqlTradeResult &result)
{
switch(trans.type)
{
caseTRADE_TRANSACTION_DEAL_ADD:
if(!PositionSelect(Symbol())) //Позиции НЕТ закрыта
{
if(HistorySelectByPosition(pos_id))
{
//Смотрим всю необходимую инфу
}
}
break;
}
}
Спасибо, рабочий вариант. У меня массив контролируемых ордеров, и SL переносятся выше цены открытия - переход в БУ. Вместо if(!PositionSelect(Symbol())), делаю перебор ы цикле. Всё Ок.
#property link "https://www.mql5.com"
#property version "1.00"
//
double pos_sl;
long pos_id;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
intOnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
voidOnTick()
{
if(PositionSelect(Symbol()))
{
pos_sl = PositionGetDouble(POSITION_SL);
pos_id = long(PositionGetInteger(POSITION_IDENTIFIER));
}
}
//+------------------------------------------------------------------+
// Expert Trade Transaction function |
//+------------------------------------------------------------------+
voidOnTradeTransaction(constMqlTradeTransaction &trans,
const MqlTradeRequest &request,
constMqlTradeResult &result)
{
switch(trans.type)
{
caseTRADE_TRANSACTION_DEAL_ADD:
if(!PositionSelect(Symbol())) //Позиции НЕТ закрыта
{
if(HistorySelectByPosition(pos_id))
{
//Смотрим всю необходимую инфу
}
}
break;
}
}
В Margin Mode: ACCOUNT_MARGIN_MODE_RETAIL_HEDGING !PositionSelect(Symbol()) работать не будет, так как в этом режиме позиция может быть не одна, поэтому, закрытие одной из позиций не приведет к !PositionSelect(Symbol()) == true, так как другие позиции продолжат оставаться в рынке.