В своих советниках для биржевого исполнения использовал принудительное включение того или иного исполнения ордеров.
А возможно ли это автоматизировать в модуле Инит, например так
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Filling=(ENUM_ORDER_TYPE_FILLING)SymbolInfoInteger(_Symbol,SYMBOL_FILLING_MODE);
//---
return(INIT_SUCCEEDED);
}
думаю что возможно, если будете использовать класс CTrade, то можно так попробовать
по умолчанию в конструкторе класса CTrade задается тип ORDER_FILLING_FOK
m_magic(0),
m_deviation(10),
m_type_filling(ORDER_FILLING_FOK),
m_log_level(LOG_LEVEL_ERRORS)
думаю что возможно, если будете использовать класс CTrade, то можно так попробовать
по умолчанию в конструкторе класса CTrade задается тип ORDER_FILLING_FOK
m_magic(0),
m_deviation(10),
m_type_filling(ORDER_FILLING_FOK),
m_log_level(LOG_LEVEL_ERRORS)
В своих советниках для биржевого исполнения использовал принудительное включение того или иного исполнения ордеров.
А возможно ли это автоматизировать в модуле Инит, например так
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Filling=(ENUM_ORDER_TYPE_FILLING)SymbolInfoInteger(_Symbol,SYMBOL_FILLING_MODE);
//---
return(INIT_SUCCEEDED);
}
Может так и определяется?
Посмотрите в СTrade функцию FillingCheck(). Может поможет.
А разве это не зависит от SYMBOL_TRADE_EXEMODE из перечисления ENUM_SYMBOL_TRADE_EXECUTION
Может так и определяется?
Может и зависит, и скорее всего что да... но режим филлинга тоже очень важен, без его определения, если неправильно, не будет сделок.
А разные брокеры используют разные режимы, например на Финаме и Открытие ORDER_FILLING_IOC,
а у БКС ORDER_FILLING_RETURN...
Может и зависит, и скорее всего что да... но режим филлинга тоже очень важен, без его определения, если неправильно, не будет сделок.
А разные брокеры используют разные режимы, например на Финаме и Открытие ORDER_FILLING_IOC,
а у БКС ORDER_FILLING_RETURN...
Не знаю про ФОРТС ничего, но по форексу есть разница и я определяю именно по SYMBOL_TRADE_EXEMODE и именно по его значению заполняется поле структуры либо ORDER_FILLING_FOK либо ORDER_FILLING_RETURN, но ORDER_FILLING_IOC на форексе не используется, потому и предложение было осторожным. Проверь на разных вариантах. Ведь достаточно сляпать скрипт с получением одного единственного значения.
Написал один раз модуль, он тебе автоматом определил и не паришься.
Что то я не нашел такую...(
Что то я не нашел такую...(
Какой билд терминала? Вероятно, плохо искали. Как раз пример из СБ как там обрабатывается политика исполнения.
//| Checks and corrects type of filling policy |
//+------------------------------------------------------------------+
bool CTrade::FillingCheck(const string symbol)
{
//--- get execution mode of orders by symbol
ENUM_SYMBOL_TRADE_EXECUTION exec=(ENUM_SYMBOL_TRADE_EXECUTION)SymbolInfoInteger(symbol,SYMBOL_TRADE_EXEMODE);
//--- check execution mode
if(exec==SYMBOL_TRADE_EXECUTION_REQUEST || exec==SYMBOL_TRADE_EXECUTION_INSTANT)
{
//--- neccessary filling type will be placed automatically
return(true);
}
//--- get possible filling policy types by symbol
uint filling=(uint)SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE);
//--- check execution mode again
if(exec==SYMBOL_TRADE_EXECUTION_MARKET)
{
//--- for the MARKET execution mode
//--- analyze order
if(m_request.action!=TRADE_ACTION_PENDING)
{
//--- in case of instant execution order
//--- if the required filling policy is supported, add it to the request
if(m_type_filling==ORDER_FILLING_FOK && (filling & SYMBOL_FILLING_FOK)!=0)
{
m_request.type_filling=m_type_filling;
return(true);
}
if(m_type_filling==ORDER_FILLING_IOC && (filling & SYMBOL_FILLING_IOC)!=0)
{
m_request.type_filling=m_type_filling;
return(true);
}
//--- wrong filling policy, set error code
m_result.retcode=TRADE_RETCODE_INVALID_FILL;
return(false);
}
return(true);
}
//--- EXCHANGE execution mode
switch(m_type_filling)
{
case ORDER_FILLING_FOK:
//--- analyze order
if(m_request.action==TRADE_ACTION_PENDING)
{
//--- in case of pending order
//--- add the expiration mode to the request
if(!ExpirationCheck(symbol))
m_request.type_time=ORDER_TIME_DAY;
//--- stop order?
if(m_request.type==ORDER_TYPE_BUY_STOP || m_request.type==ORDER_TYPE_SELL_STOP)
{
//--- in case of stop order
//--- add the corresponding filling policy to the request
m_request.type_filling=ORDER_FILLING_RETURN;
return(true);
}
}
//--- in case of limit order or instant execution order
//--- if the required filling policy is supported, add it to the request
if((filling & SYMBOL_FILLING_FOK)!=0)
{
m_request.type_filling=m_type_filling;
return(true);
}
//--- wrong filling policy, set error code
m_result.retcode=TRADE_RETCODE_INVALID_FILL;
return(false);
case ORDER_FILLING_IOC:
//--- analyze order
if(m_request.action==TRADE_ACTION_PENDING)
{
//--- in case of pending order
//--- add the expiration mode to the request
if(!ExpirationCheck(symbol))
m_request.type_time=ORDER_TIME_DAY;
//--- stop order?
if(m_request.type==ORDER_TYPE_BUY_STOP || m_request.type==ORDER_TYPE_SELL_STOP)
{
//--- in case of stop order
//--- add the corresponding filling policy to the request
m_request.type_filling=ORDER_FILLING_RETURN;
return(true);
}
}
//--- in case of limit order or instant execution order
//--- if the required filling policy is supported, add it to the request
if((filling & SYMBOL_FILLING_IOC)!=0)
{
m_request.type_filling=m_type_filling;
return(true);
}
//--- wrong filling policy, set error code
m_result.retcode=TRADE_RETCODE_INVALID_FILL;
return(false);
case ORDER_FILLING_RETURN:
//--- add filling policy to the request
m_request.type_filling=m_type_filling;
return(true);
}
//--- unknown execution mode, set error code
m_result.retcode=TRADE_RETCODE_ERROR;
return(false);
}
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
В своих советниках для биржевого исполнения использовал принудительное включение того или иного исполнения ордеров.
А возможно ли это автоматизировать в модуле Инит, например так
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Filling=(ENUM_ORDER_TYPE_FILLING)SymbolInfoInteger(_Symbol,SYMBOL_FILLING_MODE);
//---
return(INIT_SUCCEEDED);
}