Закрывает одну предварительно выбранную позицию. Эта функция является скорее вспомогательной, потому что вызывается из нескольких других функций, которые помогают выбрать позиции для закрытия по каким-либо условиям.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание: Закрытие одной предварительно выбранной позиции |//+----------------------------------------------------------------------------+voidClosePosBySelect(){boolfc;
colorclClose;
doublell, pa, pb, pp;
interr, it;
if(OrderType()==OP_BUY || OrderType()==OP_SELL){for(it=1; it<=NumberOfTry; it++){if(!IsTesting() && (!IsExpertEnabled() || IsStopped()))break;
while(!IsTradeAllowed())Sleep(5000);
RefreshRates();
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
if(OrderType()==OP_BUY){pp=pb; clClose=clCloseBuy;
}else{pp=pa; clClose=clCloseSell;
}ll=OrderLots();
fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
if(fc){if(UseSound)PlaySound(NameFileSound); break;
}else{err=GetLastError();
if(err==146)while(IsTradeContextBusy())Sleep(1000*11);
Print("Error(",err,") Close ",GetNameOP(OrderType()),"",
ErrorDescription(err),", try ",it);
Print(OrderTicket()," Ask=",pa," Bid=",pb," pp=",pp);
Print("sy=",OrderSymbol()," ll=",ll," sl=",OrderStopLoss(),
" tp=",OrderTakeProfit()," mn=",OrderMagicNumber());
Sleep(1000*5);
}}}elsePrint("Некорректная торговая операция. Close ",GetNameOP(OrderType()));
}
Закрывает одну предварительно выбранную позицию. Эта функция является скорее вспомогательной, потому что вызывается из нескольких других функций, которые помогают выбрать позиции для закрытия по каким-либо условиям.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание: Закрытие одной предварительно выбранной позиции |//+----------------------------------------------------------------------------+voidClosePosBySelect(){boolfc;
colorclClose;
doublell, pa, pb, pp;
interr, it;
if(OrderType()==OP_BUY || OrderType()==OP_SELL){for(it=1; it<=NumberOfTry; it++){if(!IsTesting() && (!IsExpertEnabled() || IsStopped()))break;
while(!IsTradeAllowed())Sleep(5000);
RefreshRates();
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
if(OrderType()==OP_BUY){pp=pb; clClose=clCloseBuy;
}else{pp=pa; clClose=clCloseSell;
}ll=OrderLots();
fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
if(fc){if(UseSound)PlaySound(NameFileSound); break;
}else{err=GetLastError();
if(err==146)while(IsTradeContextBusy())Sleep(1000*11);
Print("Error(",err,") Close ",GetNameOP(OrderType()),"",
ErrorDescription(err),", try ",it);
Print(OrderTicket()," Ask=",pa," Bid=",pb," pp=",pp);
Print("sy=",OrderSymbol()," ll=",ll," sl=",OrderStopLoss(),
" tp=",OrderTakeProfit()," mn=",OrderMagicNumber());
Sleep(1000*5);
}}}elsePrint("Некорректная торговая операция. Close ",GetNameOP(OrderType()));
}
Здравствуйте!
Прошу прощения !
1) Не могу понять смысл строки for(it=1; it<=NumberOfTry; it++)
что это за цикл?
2) а также не разумею условие if (!testing() ......) break;
3) и последнее что зто за функция ? ErrorDescription(err),",
1. Это цикл торговых попыток. Если торговый сервер будет возвращать ошибки, то функция будет делать NumberOfTry попыток всё-таки закрыть позицию. Я обычно ставлю NumberOfTry=5.
2. Таким условием реализована возможность корректного выхода из цикла попыток при остановке советника, работающего в онлайне. Без такого условия для вызова, например, свойств советника приходилось либо дожидаться, когда советник использует все торговые попытки, либо снимать советник с графика.
3. Загляните в файл ..\experts\libraries\stdlib.mq4
Эта функция выполняет закрытие только тех позиций, у которых профит в валюте депозита превысил некоторое заданное значение. Уточнить, какие именно позиции подлежат закрытию можно с помощью параметров функции:
sy - Наименование инструмента. Если задать этот параметр, то функция проверит позиции только заданного инструмента. NULL означает текущий инструмент, а "" (по умолчанию) - любой инструмент.
op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 - означает любую позицию.
mn - Идентификатор позиции (MagicNumber). Значение по умолчанию -1 - любой магик.
pr - Уровень профита в валюте депозита. Значение по умолчанию - 0.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Закрытие тех позиций, у которых профит в валюте депозита |//| превысил некоторое значение |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//| pr - профит |//+----------------------------------------------------------------------------+voidClosePosBySizeProfitInCurrency(stringsy="", intop=-1, intmn=-1, doublepr=0){inti, k=OrdersTotal();
if(sy=="0")sy=Symbol();
for(i=k-1; i>=0; i--){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)){if(OrderType()==OP_BUY || OrderType()==OP_SELL){if(mn<0 || OrderMagicNumber()==mn){if(OrderProfit()+OrderSwap()>pr)ClosePosBySelect();
}}}}}}
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Игорь, я в 'Библиотека функций для работы с INI-файлами.' задавал Вам вопрос, но ответа так и не поступило :(
Благодарю... ответил...
Функция ClosePosBySelect().
Закрывает одну предварительно выбранную позицию. Эта функция является скорее вспомогательной, потому что вызывается из нескольких других функций, которые помогают выбрать позиции для закрытия по каким-либо условиям.
Благодарю... ответил...
Еще один вопрос (точнее утверждение) там же :)
Функция ClosePosBySelect().
Закрывает одну предварительно выбранную позицию. Эта функция является скорее вспомогательной, потому что вызывается из нескольких других функций, которые помогают выбрать позиции для закрытия по каким-либо условиям.
Здравствуйте!
Прошу прощения !
1) Не могу понять смысл строки for (it=1; it<=NumberOfTry; it++)
что это за цикл?
2) а также не разумею условие if (!testing() ......) break;
3) и последнее что зто за функция ? ErrorDescription(err),",
Если не трудно, поясните .
1. Это цикл торговых попыток. Если торговый сервер будет возвращать ошибки, то функция будет делать NumberOfTry попыток всё-таки закрыть позицию. Я обычно ставлю NumberOfTry=5.
2. Таким условием реализована возможность корректного выхода из цикла попыток при остановке советника, работающего в онлайне. Без такого условия для вызова, например, свойств советника приходилось либо дожидаться, когда советник использует все торговые попытки, либо снимать советник с графика.
3. Загляните в файл ..\experts\libraries\stdlib.mq4
Я бы хотел спросить. как заставить советника работать в бесконечном цикле, притом чтоб был доступ к настройкам его параметров?
Я писал в start так
Но в таком случае советник зависает и нельзя ничего с ним сделать как не удалив с графика
Валера, сделайте так:
Функция ClosePosBySizeProfitInCurrency().
Эта функция выполняет закрытие только тех позиций, у которых профит в валюте депозита превысил некоторое заданное значение. Уточнить, какие именно позиции подлежат закрытию можно с помощью параметров функции:
Валера, сделайте так:
Увы, такое тоже вещает експерта и не дает доступ к его параметром покуда не убалишь его с графика
Увы, такое тоже вещает експерта и не дает доступ к его параметром покуда не убалишь его с графика
Зато даёт возможность остановить советник отжатием кнопки "Советники" на панели инструментов.