Доброго времени суток. Вопрос следующего содержания: почему среди идентификаторов запроса функции MarketInfo есть параметр MODE_MARGINREQUIRED для определения количества свободных средств, необходимых для открытия 1 лота на покупку, но нет параметра для определения количества свободных средств, необходимых для открытия 1 лота на продажу? И как в таком случае определить, сколько надо иметь свободных средств, чтобы открыть 1 лот на продажу в том или ином ДЦ?
P.S. Чтобы не захламлять форум, заранее благодарю за ответ.
На продажу нужно чуть меньше средств, поэтому на практике можно пользоваться этим одним параметром.
Доброго времени суток. У меня к вам вопрос.... Вход по сигралу стохастика(5,14,3) выход тоже по стохастику только с другим периодом (5,3,3). Вот я не пойму как можно зделать выход по стохастику, а не по обратному сигнагалу? У меня появилась проблема и я не представляю как ее можно решить постараюсь объяснить. Значит в коде есть, который я выложил, есть 2 функции
//+------------------------------------------------------------------+//| подготовить массив тикетов для закрытия |//+------------------------------------------------------------------+void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9])
{
int size=ArrayRange(arrayTickets,0);
//----if (size==0) return;
int i,type,ticket,closeSize;
for (i=0;i<size;i++)
{
type=arrayTickets[i][1];
// если тип ордера не рыночный, то пропускаемif (type>OP_SELL) continue;
if (Revers) // перевернем тип рыночного ордера
{
if (type==OP_BUY) type=OP_SELL; else type=OP_BUY;
}
// тут решаем для каждого открытого ордера его судьбу// оставить в рынке или добавить в массив на закрытиеif (type==OP_BUY)
{
//// код разрешающий оставить покупку// как примерif (signal==OP_BUY) continue;
}
if (type==OP_SELL)
{
//// код разрешающий оставить продажу// как примерif (signal==OP_SELL) continue;
}
closeSize=ArrayRange(ticketsClose,0);
ArrayResize(ticketsClose,closeSize+1);
ArrayResize(lots,closeSize+1);
ticketsClose[closeSize][0] = arrayTickets[i][0]; // # тикета
ticketsClose[closeSize][1] = arrayTickets[i][1]; // тип ордера// здесь укажем сколько лотов нужно закрыть
lots[closeSize] = arrayTickets[i][2]; // закрываемый объем// можно закрывать частично, тогда нужно переписать строку сверху
}
//----return;
}
//+------------------------------------------------------------------+//| Закрывает ордера с указанными тикетами |//+------------------------------------------------------------------+void CloseMarketOrders(int ticketsArray[][2], double lotsArray[])
{
//----int i,size=ArrayRange(ticketsArray,0);
if (size==0) return;
int ticket,type;
double lots;
bool res;
int total=OrdersTotal();
for (i=0;i<size;i++)
{
ticket = ticketsArray[i][0];
type = ticketsArray[i][1];
lots = lotsArray[i];
RefreshRates(); // на всякий случай обновим сведения о рыночном окружении// блок закрытия покупокif (type==OP_BUY)
{
res = OrderClose(ticket,lots,Bid,Slippage,Orange);
if (!res)
{
Print("Не удалось закрыть ордер в покупку #",ticket,"! Ошибка №",GetLastError());
// дальнейшая обработка ошибки, написать самостоятельно
}
}
// блок закрытия продажif (type==OP_SELL)
{
res = OrderClose(ticket,lots,Ask,Slippage,Orange);
if (!res)
{
Print("Не удалось закрыть ордер в продажу #",ticket,"! Ошибка №",GetLastError());
// дальнейшая обработка ошибки, написать самостоятельно
}
}
}
//----return;
}
В функции void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) нужно поставить условие после которого решиться оставлять ордер или закрывать его... Пробовал ставить условия но ничего не получается.... Может кто нибуть посмотрит и покажет есть ли в этих функциях ошибка или это я накасячил....
belous: Доброго времени суток. У меня к вам вопрос.... Вход по сигралу стохастика(5,14,3) выход тоже по стохастику только с другим периодом (5,3,3). Вот я не пойму как можно зделать выход по стохастику, а не по обратному сигнагалу? У меня появилась проблема и я не представляю как ее можно решить постараюсь объяснить. Значит в коде есть, который я выложил, есть 2 функции В функции void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) нужно поставить условие после которого решиться оставлять ордер или закрывать его... Пробовал ставить условия но ничего не получается.... Может кто нибуть посмотрит и покажет есть ли в этих функциях ошибка или это я накасячил....
Может будет полезно. Ваш код не смотрел. Функции Кима.
//========================================================================================================================// Закрытие открытых позиций на продажу //-------------------------------------------------------------------------------------------------------------------------if(ExistPositions(NULL, OP_SELL, Magic, 0) == true) //если открыта позиция sell
{
if() // условие на закритие
{
ClosePosFirstProfit(NULL, OP_SELL, Magic); //закрываем позицию
}
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 06.03.2008 |//| Описание : Возвращает флаг существования позиций |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//| ot - время открытия ( 0 - любое время открытия) |//+----------------------------------------------------------------------------+bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=0) {
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (ot<=OrderOpenTime()) return(True);
}
}
}
}
}
}
return(False);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание: Закрытие одной предварительно выбранной позиции |//+----------------------------------------------------------------------------+void ClosePosBySelect() {
bool fc;
color clClose;
double ll, pa, pb, pp;
int dg=MarketInfo(OrderSymbol(), MODE_DIGITS), err, 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();
pp=NormalizeDouble(pp, dg);
fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
if (fc) {
if (UseSound) PlaySound(SoundSuccess); //break;
} else {
err=GetLastError();
if (UseSound) PlaySound(SoundError);
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 |//| Описание : Закрытие позиций по рыночной цене сначала прибыльных |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+void ClosePosFirstProfit(string sy="", int op=-1, int mn=-1) {
int i, 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()+OrderCommission()+OrderSwap()>0) ClosePosBySelect();
}
}
}
}
}
// Потом все остальные
k=OrdersTotal();
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) ClosePosBySelect();
}
}
}
}
}
belous: Доброго времени суток. У меня к вам вопрос.... Вход по сигралу стохастика(5,14,3) выход тоже по стохастику только с другим периодом (5,3,3). Вот я не пойму как можно зделать выход по стохастику, а не по обратному сигнагалу?
Имхо, я бы не стал создавать массив тикетов для закрытия, а в цикле перебора рыночных ордеров проверил каждый ордер, подавая его тикет на вход закрывающей функции с проверкой возможных условий.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Доброго времени суток. Вопрос следующего содержания: почему среди идентификаторов запроса функции MarketInfo есть параметр MODE_MARGINREQUIRED для определения количества свободных средств, необходимых для открытия 1 лота на покупку, но нет параметра для определения количества свободных средств, необходимых для открытия 1 лота на продажу? И как в таком случае определить, сколько надо иметь свободных средств, чтобы открыть 1 лот на продажу в том или ином ДЦ?
P.S. Чтобы не захламлять форум, заранее благодарю за ответ.
Не подскажите, есть ли в возможность раскидать по папкам экспертов,а не хранить все в одной папке ...\experts?
И чтобы еще они из этих папок работали.
А то 20 версий одного эксперта, 20 другого и разобраться уже невозможно полным полно файлов.
Добрый день.
поиск не помог.
может кто-то видел подобный скрипт.
суть: в скрипте указывается: символ, buy/sell, объем
необходимо 5-7 таких полей.
для одновременного открытия по нескольким символам, объем которых не равен 0.
спасибо.
с ув.
У меня появилась проблема и я не представляю как ее можно решить постараюсь объяснить.
Значит в коде есть, который я выложил, есть 2 функции
В функции void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) нужно поставить условие после которого решиться оставлять ордер или закрывать его...
Пробовал ставить условия но ничего не получается....
Может кто нибуть посмотрит и покажет есть ли в этих функциях ошибка или это я накасячил....
Добрый день.
поиск не помог.
может кто-то видел подобный скрипт.
суть: в скрипте указывается: символ, buy/sell, объем
необходимо 5-7 таких полей.
для одновременного открытия по нескольким символам, объем которых не равен 0.
спасибо.
с ув.
Ну и формулировочка - чёрт ногу поломает. О чём спрашивает вопрошающий...
Доброго времени суток. У меня к вам вопрос.... Вход по сигралу стохастика(5,14,3) выход тоже по стохастику только с другим периодом (5,3,3). Вот я не пойму как можно зделать выход по стохастику, а не по обратному сигнагалу?
У меня появилась проблема и я не представляю как ее можно решить постараюсь объяснить.
Значит в коде есть, который я выложил, есть 2 функции
В функции void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) нужно поставить условие после которого решиться оставлять ордер или закрывать его...
Пробовал ставить условия но ничего не получается....
Может кто нибуть посмотрит и покажет есть ли в этих функциях ошибка или это я накасячил....
Может будет полезно. Ваш код не смотрел.
Функции Кима.
Доброго времени суток. У меня к вам вопрос.... Вход по сигралу стохастика(5,14,3) выход тоже по стохастику только с другим периодом (5,3,3). Вот я не пойму как можно зделать выход по стохастику, а не по обратному сигнагалу?
Имхо, я бы не стал создавать массив тикетов для закрытия, а в цикле перебора рыночных ордеров проверил каждый ордер, подавая его тикет на вход закрывающей функции с проверкой возможных условий.
Может ли bid быть равен 0 в какой либо момент?
Ну и формулировочка - чёрт ногу поломает. О чём спрашивает вопрошающий...
есть скрипты, которые одновременно открывают на одном символе sell на втором buy.
а меня интересует скрипт, который одновременно может открыть sell/buy на 7-10 символах, указанным для каждого символа объемом, по текущим ценам.
Пример:
sell EURUSD 1
buy GBPUSD 1.5
sell USDCAD 1.2
buy AUDUSD 1.1
buy NZDUSD 2
buy USDCHF 3
скрипт MultiOrders почти идеален, только там 5 полей для символов. и не знаю, как добавить еще .