Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Всё приходит, просто Вы ничего не контролируете. Нужно проверять как минимум в два этапа:
Так что, вот так будет правильнее?
for(int i=0;i<3 && !res;i++)
{
res=OrderSend(Request,Results);
if(res)
{
if(Results.deal>0)
{
if(Results.volume==volume) break;
else
{
Request.volume=volume-Results.volume;
res=false;
}
}
else res=false;
}
}
Геннадий!
Вы для какого рынка пишите ФОРТС или ФОРЕКС?
Геннадий!
Вы для какого рынка пишите ФОРТС или ФОРЕКС?
И так и так...это общая функция
Генадий выложите весь код от начала и до конца, легче будет понять что вы делаете не так.
Сергей, начальный код функции закрытия в самом начале поста...
теперь он уже немного модифицировался(с учетом всего вышесказанного), но я его еще не проверял...
bool ClosePosition(string symbol, ulong deviation=10, ENUM_ORDER_TYPE_FILLING filling=ORDER_FILLING_FOK, double volume=0)
{
PositionSelect(symbol);
if(volume==0) volume=PositionGetDouble(POSITION_VOLUME);
ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)PositionGetInteger(POSITION_TYPE);
MqlTradeRequest Request;
MqlTradeResult Results;
ZeroMemory(Request);
ZeroMemory(Results);
Request.action=TRADE_ACTION_DEAL;
if(type==ORDER_TYPE_BUY)
{
Request.type=ORDER_TYPE_SELL;
Request.price=SymbolInfoDouble(symbol,SYMBOL_BID);
}
else if(type==ORDER_TYPE_SELL)
{
Request.type=ORDER_TYPE_BUY;
Request.price=SymbolInfoDouble(symbol,SYMBOL_ASK);
}
Request.symbol=symbol;
Request.volume=volume;
Request.deviation=deviation;
Request.type_filling=filling;
bool res=false;
for(int i=0;i<3 && !res;i++)
{
res=OrderSend(Request,Results);
if(res)
{
if(Results.deal>0)
{
if(Results.volume==volume) break;
else
{
Request.volume-=Results.volume;
res=false;
}
}
else res=false;
}
}
if(res) return(true);
return(false);
}
Пожалуйста, вставляйте код правильно: Правильно вставляем код на форуме.
Так как код, который вставляете Вы, в виде текста, абсолютно не читаем.
Сергей, начальный код функции закрытия в самом начале поста...
теперь он уже немного модифицировался, но я его еще не проверял...
bool ClosePosition(string symbol, ulong deviation=10, ENUM_ORDER_TYPE_FILLING filling=ORDER_FILLING_FOK, double volume=0)
{
я просил не код функции, а весь код советника, может вы вызываете эту функцию по несколько раз подряд или еще что в логике нарушено. Я вот например активно пользуюсь стандартной библиотекой классов и мой код закрытия позиций выглядит так. Да и научитесь уже код вставлять правильно в сообщение.
{
int total=PositionsTotal();
for(int i=total-1;i>=0;i--)
{
if(!Position.SelectByIndex(i))continue;
if(Position.Magic()!=Magic)continue;
if(Position.Symbol()!=_Symbol)continue;
trade.PositionClose(Position.Identifier());
}
}
...
Пожалуйста, вставляйте код правильно: Правильно вставляем код на форуме.
Так как код, который вставляете Вы, в виде текста, абсолютно не читаем.
{
PositionSelect(symbol);
if(volume==0) volume=PositionGetDouble(POSITION_VOLUME);
ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
MqlTradeRequest Request;
MqlTradeResult Results;
ZeroMemory(Request);
ZeroMemory(Results);
Request.action=TRADE_ACTION_DEAL;
if(type==POSITION_TYPE_BUY)
{
Request.type=ORDER_TYPE_SELL;
Request.price=SymbolInfoDouble(symbol,SYMBOL_BID);
}
else if(type==POSITION_TYPE_SELL)
{
Request.type=ORDER_TYPE_BUY;
Request.price=SymbolInfoDouble(symbol,SYMBOL_ASK);
}
Request.symbol=symbol;
Request.volume=volume;
Request.deviation=deviation;
Request.type_filling=filling;
bool res=false;
for(int i=0;i<3 && !res;i++)
{
res=OrderSend(Request,Results);
if(res)
{
if(Results.deal>0)
{
if(Results.volume==volume) break;
else
{
Request.volume-=Results.volume;
res=false;
}
}
else res=false;
}
}
if(res) return(true);
return(false);
}
я просил не код функции, а весь код советника, может вы вызываете эту функцию по несколько раз подряд или еще что в логике нарушено. Я вот например активно пользуюсь стандартной библиотекой классов, и ой код закрытия позиций выглядит так. Да и научитесь уже код вставлять правильно в сообщение.
{
int total=PositionsTotal();
for(int i=total-1;i>=0;i--)
{
if(!Position.SelectByIndex(i))continue;
if(Position.Magic()!=Magic)continue;
if(Position.Symbol()!=_Symbol)continue;
trade.PositionClose(Position.Identifier());
}
}
...
код из стандартной библиотеки меня немного не устраивает, особенно при торговле на ФОРТС...
конечно, можно присвоить филлинг исполнение и при инициализации...но мне как то так спокойнее.
Да, теперь будет три попытки:
for(int i=0;i<3 && !res;i++)
{
res=OrderSend(Request,Results);
if(res)
{
if(Results.deal>0)
{
if(Results.volume==volume) break;
else
{
Request.volume-=Results.volume;
res=false;
}
}
else res=false;
}
}