CloseAllOrders() - страница 2

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- Форексный VPS бесплатно на 24 часа
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
меня заинтересовал предложенный Vladon код для закрытия всех позиций.
Я хочу вставить этоот код для закрытия всех позиций в терминале при достижении определённой
совокупной прибыли собранной по всем позициям
Вот он:
void CloseAllPosSell()
{
int pos=PositionsTotal(); // получим количество открытых позиций
for(int ip=0;ip<=pos;ip++)
{
string sSymbol=PositionGetSymbol(ip);
if(PositionSelect(sSymbol)==true)
CloseAllPosSellF(sSymbol,ip);
}
}
void CloseAllPosSellF(string sSymbol,int ip)
{
MqlTradeRequest request; // структура запроса
MqlTradeResult result; // структура ответа
request.symbol = sSymbol;
request.volume = PositionGetDouble( POSITION_VOLUME );
request.action=TRADE_ACTION_DEAL; // операция с рынка
request.tp=0;
request.sl=0;
request.deviation=(ulong) ((SymbolInfoDouble(sSymbol,SYMBOL_ASK)-SymbolInfoDouble(sSymbol,SYMBOL_BID))/SymbolInfoDouble(sSymbol,SYMBOL_POINT)) ; // по спреду
request.type_filling=ORDER_FILLING_CANCEL;
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
{
request.type=ORDER_TYPE_SELL;
request.price=SymbolInfoDouble(sSymbol,SYMBOL_BID);
}
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
{
request.type=ORDER_TYPE_BUY;
request.price=SymbolInfoDouble(sSymbol,SYMBOL_ASK);
}
if (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL){ OrderSend(request,result);}
}
при вставке этого кода в мой робот компилятор ругается на
void CloseAllPosSell()
и
void CloseAllPosSellF(string sSymbol,int ip)
говорит что 'void' - illegal use of 'void' tipe
если не очень сложно, ответьте пожалуйста что нужно сделать чтобы компилятор "проглотил" этот код
ответ конечно лежит на поверхности но фишка в том что я не программист
при вставке этого кода в мой робот компилятор ругается на
void CloseAllPosSell()
и
void CloseAllPosSellF(string sSymbol,int ip)
говорит что 'void' - illegal use of 'void' tipe
куда вы его вставляете? внутрь какой то функции?
это самостоятельные функции, и их надо в код вставлять отдельно от всех остальных. можете просто в самом низу
куда вы его вставляете? внутрь какой то функции?
это самостоятельные функции, и их надо в код вставлять отдельно от всех остальных. можете просто в самом низу
Сергееву респект и уважуха, я вставил код в самый низ и компилятор "заткнулся" )))
Если речь идёт о закрытии всех позиций, то вы, Валерий, несомненно правы. В данном же случае будут закрыты только позиции на продажу (SELL).
Если речь идёт о закрытии всех позиций, то вы, Валерий, несомненно правы. В данном же случае будут закрыты только позиции на продажу (SELL).
Ага, и для полного счастья нужно добавить аналогичную функцию закрытия ордеров на покупку, по которой можно будет закрывать вторую половину ордеров
void CloseAllPosBuy(){
int pos=PositionsTotal(); // получим количество открытых позиций
// for(int ip=0;ip<=pos;ip++)
//+------------------------------------------------------------------+
//| Valmars |
//| valmars@mail.primorye.ru |
//| https://www.mql5.com/ru/forum/1050 |
//+------------------------------------------------------------------+
//При закрытии позиций порядок перебора переменной цикла должен быть обратный,
// т.е. в Вашем случае:
for(int ip=pos-1;ip>=0;ip--)
//+------------------------------------------------------------------+
//| Vladon |
//| expoforex@yahoo.com |
//| expoforex@meta.ua |
//| https://www.mql5.com/ru/forum/1050 |
//+------------------------------------------------------------------+
{
string sSymbol=PositionGetSymbol(ip);
if(PositionSelect(sSymbol)==true)
CloseAllPosBuyF(sSymbol,ip);
}
}
void CloseAllPosBuyF(string sSymbol,int ip)
{
request.symbol = sSymbol;
// request.Profit = PositionGetDouble( POSITION_PROFIT );
request.action=TRADE_ACTION_DEAL; // операция с рынка
request.tp=0;
request.sl=0;
request.deviation=(ulong) ((SymbolInfoDouble(sSymbol,SYMBOL_ASK)-
SymbolInfoDouble(sSymbol,SYMBOL_BID))/SymbolInfoDouble(sSymbol,SYMBOL_POINT)) ; // по спреду
request.type_filling=ORDER_FILLING_CANCEL;
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
{
request.type=ORDER_TYPE_SELL;
request.price=SymbolInfoDouble(sSymbol,SYMBOL_BID);
}
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
{
request.type=ORDER_TYPE_BUY;
request.price=SymbolInfoDouble(sSymbol,SYMBOL_ASK);
}
if (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
{
OrderSend(request,result);
}
}
не могу понять только по какому сигналу у Vladon происходит закрытие всех позиций
Ответ конечно лежит на поверхности но фишка в том что я не программист
подскажите пожалуйсто, какой функцией закрывается позиция?
Открытием встречной позиции, однако...
Если учесть, что при создании объекта CTrade m_deviation устанавливается в 10, то при 5-значных котировках этого явно недостаточно, и нам необходимо принудительно устанавливать m_deviation
А какие рекомендации по проскальзыванию? Я использовал 10 на пятизначных на демо и на реале (правда не в МК) - никаких проблем. Особенно хотелось бы услышать ответ от организаторов чемпионата, чтобы чрезмерно не напрягать обработкой реквотов сервера.