Уважаемые, как при помощи советника (скрипта) произвести
одноразово или одновременно (если это возможно) закрытие
всех открытых позиций.
- Закрытие перекрытых ордеров в эксперте?
- [Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2.
- Библиотеки: Закрытие всех перекрытых ордеров
Если можно подскажите еще как правильно прописать закрытие всех открытых позиций при условии увеличения депо скажем на 20% или 1/5 часть
hoziain писал (а):
Если можно подскажите еще как правильно прописать закрытие всех открытых позиций при условии увеличения депо скажем на 20% или 1/5 часть
Если можно подскажите еще как правильно прописать закрытие всех открытых позиций при условии увеличения депо скажем на 20% или 1/5 часть
extern int percents = 25; // Закрывает все при увилечении депо на 25 процентов extern int Slippage = 5; // Проскальзывание double balance; int start(){ if (OrdersTotal()==0){ balance=AccountBalance(); return(0); } if ((AccountEquity()/balance-1)*100>percents) _CloseAllBuySell(); } //+------------------------------------------------------------------+ //| _CloseAllBuySell.mq4 | //| "СКРИПТЫ ДЛЯ ЛЕНИВОГО" | //| Скрипт закрывает все открытые Buy и Sell в активном окне | //| Bookkeeper, 2006, yuzefovich@gmail.com | //+------------------------------------------------------------------+ int _CloseAllBuySell(){ bool Result; int i,Pos,Error,Total; //---- Total=OrdersTotal(); if(Total>0) { for(i=Total-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true) { Pos=OrderType(); if(Pos==OP_BUY || Pos==OP_SELL) // Только Buy и Sell { if(Pos==OP_BUY) Result=OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, CLR_NONE); else Result=OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, CLR_NONE); if(Result!=true) { Error=GetLastError(); Print("LastError = ",Error); } else Error=0; } } } } return(0); }
Ronen:
hoziain писал (а):
Если можно подскажите еще как правильно прописать закрытие всех открытых позиций при условии увеличения депо скажем на 20% или 1/5 часть
Если можно подскажите еще как правильно прописать закрытие всех открытых позиций при условии увеличения депо скажем на 20% или 1/5 часть
extern int percents = 25; // Закрывает все при увилечении депо на 25 процентов extern int Slippage = 5; // Проскальзывание double balance; int start(){ if (OrdersTotal()==0){ balance=AccountBalance(); return(0); } if ((AccountEquity()/balance-1)*100>percents) _CloseAllBuySell(); } //+------------------------------------------------------------------+ //| _CloseAllBuySell.mq4 | //| "СКРИПТЫ ДЛЯ ЛЕНИВОГО" | //| Скрипт закрывает все открытые Buy и Sell в активном окне | //| Bookkeeper, 2006, yuzefovich@gmail.com | //+------------------------------------------------------------------+ int _CloseAllBuySell(){ bool Result; int i,Pos,Error,Total; //---- Total=OrdersTotal(); if(Total>0) { for(i=Total-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true) { Pos=OrderType(); if(Pos==OP_BUY || Pos==OP_SELL) // Только Buy и Sell { if(Pos==OP_BUY) Result=OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, CLR_NONE); else Result=OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, CLR_NONE); if(Result!=true) { Error=GetLastError(); Print("LastError = ",Error); } else Error=0; } } } } return(0); }
Добрый день. Вставил данный скрипт в советник, работает, но проблема оптимального выхода не получается, т.к. при выполнении условия (увеличение баланса на 25%, открытые позиции при принудительном закрытии могут иметь отрицательный профит, что и нивелирует указанное увеличение. Вопрос - можно ли закрывать в тот момент, когда средства по открытым позициям превышают текущий баланс на указаную величину? И как это прописать?
Заранее благодарен за оказанную помощь.
С Уважением
Александр
Не понял вопроса..... Приведите пример...
Этот код,сначала проверяет,а потом закрывает все позиции...
Допустим депо 100 и 3 поз. +25 +20 -20... вместе они дадут прибыль 25%..
. и все закроются..
Ronen:
Не понял вопроса..... Приведите пример...
Этот код,сначала проверяет,а потом закрывает все позиции...
Допустим депо 100 и 3 поз. +25 +20 -20... вместе они дадут прибыль 25%.. . и все закроются..
Добрый день Ronen. Вот та часть программы. При движении цены в противоположном направлении от открытой позиции, я пытаюсь доливаться некоторым колличеством ордеров. В них нет ограничений по стоплосу и профиту. Бывает так , что баланс еще не изменился(нет закрытых позиций), а средства (текущее состояние) превышают депо в 2-3 раза. Как можно добиться того. чтобы
велся контроль над текущими позициями по профиту и при получении положительного результата ,превышающего отрицательные позиции, закрывать их все одноразово в конце всего цикла.Затем советник начинает сначала.
Извеняюсь, если, что не так сформулировал.
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol()) // check for symbol
{
if(OrderType()==OP_BUY) // long position is opened
{
// should it be closed?
if(Bid-OrderOpenPrice()<Point*3)
{
total=OrdersTotal();
if(total<11)
{
OrderSend(Symbol(),OP_BUY,LotsOptimized(), Ask,3, 0,0, "reverse", Magic_№, 0,Red);
Sleep(10000);
}
else
if(Bid-OrderOpenPrice()>=Point*4)
{
OrderClose(OrderTicket(), OrderLots(), Ask, 3,Violet); // close position
return(0);
}
// check for trailing stop
if(StopLoss>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()>Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(), OrderOpenPrice(), Bid-Point*TrailingStop, OrderTakeProfit(), 0,Green);
return(0);
}
}
}
}
}
else // go to short position
Надеюсь это поможет...
extern int percents = 25; // Закрывает все при увилечении депо на 25 процентов extern int Slippage = 5; // Проскальзывание double balance; int start(){ // Тут сохраняется последний известный баланс,до первой открытой позиции if (OrdersTotal()==0){ balance=AccountBalance(); return(0); } //потом проверяет сколько процентов прибыли дают все открытые позиции вместе //--- //...велся контроль над текущими позициями по профиту и при получении положительного результата, //превышающего отрицательные позиции, закрывать их все одноразово в конце всего цикла.Затем советник начинает сначала. // "получении положительного результата" = увеличьте значение percents на чтото больше нуля! // и тогда когда эквити будет больше баланса,будет все закрывать... //--- if ((AccountEquity()/balance-1)*100>percents) _CloseAllBuySell(); // а тут нужно вставить код который будет добавлять позиции в случае если все // позиции вместе все еще в минусе //--- // ... код... //--- } //+------------------------------------------------------------------+ //| _CloseAllBuySell.mq4 | //| "СКРИПТЫ ДЛЯ ЛЕНИВОГО" | //| Скрипт закрывает все открытые Buy и Sell в активном окне | //| Bookkeeper, 2006, yuzefovich@gmail.com | //+------------------------------------------------------------------+ int _CloseAllBuySell(){ bool Result; int i,Pos,Error,Total; //---- Total=OrdersTotal(); if(Total>0) { for(i=Total-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true) { Pos=OrderType(); if(Pos==OP_BUY || Pos==OP_SELL) // Только Buy и Sell { if(Pos==OP_BUY) Result=OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, CLR_NONE); else Result=OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, CLR_NONE); if(Result!=true) { Error=GetLastError(); Print("LastError = ",Error); } else Error=0; } } } } return(0); }
2 hoziain:
Для начала - усреднение ПРОТИВ рынка ИМХО не есть хорошо.
Все, предупредил. :)
Теперь по сути проблемы.
Как я понял для примера у Вас открыт Buy а цена идет вниз, Вы открываете дополнительный Buy с точки пониже (усредняете суммарную точку открытия), цена опять вниз, Вы опять Buy и т.п. Я все правильно понял?
Далее Вы хотите при движении цены в вашем направлении, когда суммарная прибыль по всем позам станет положительной - прикрыть все позиции. Так?
Если я все понял правильно, то Вам надо контролировать Баланс (Balance) и Средства (Equity). Баланс показывает состояние только по закрытым позам. Средства показывают состояние с учетом прибыли/убытка по открытым позам. Т.е. Когда Средства превышают Баланс на нужную величину и нужно крыть все открытые позы. Теперь непосредственно о способе закрытия. Ордеров может быть много и одновременно закрыть их в одной точке циклом достаточно проблематично (никакой гарантии), поэтому лучше открыть встречную позицию (Sell в нашем примере) объемом равным СУММАРНОМУ объему ВСЕХ открытых Buy-позиций. Получаем ЛОК. А дальше спокойно разруливаем его взаимозакрытиями (лишний спред при этом аннулируется). Соответственно в результате получаем позы закрытые РОВНО в нужной точке.
Да, не забываем учитывать что возможно понадобится дополнительная маржа для встречной позиции (но это уже в зависимости от того как брокер считает маржевый залог под локи).
Для начала - усреднение ПРОТИВ рынка ИМХО не есть хорошо.
Все, предупредил. :)
Теперь по сути проблемы.
Как я понял для примера у Вас открыт Buy а цена идет вниз, Вы открываете дополнительный Buy с точки пониже (усредняете суммарную точку открытия), цена опять вниз, Вы опять Buy и т.п. Я все правильно понял?
Далее Вы хотите при движении цены в вашем направлении, когда суммарная прибыль по всем позам станет положительной - прикрыть все позиции. Так?
Если я все понял правильно, то Вам надо контролировать Баланс (Balance) и Средства (Equity). Баланс показывает состояние только по закрытым позам. Средства показывают состояние с учетом прибыли/убытка по открытым позам. Т.е. Когда Средства превышают Баланс на нужную величину и нужно крыть все открытые позы. Теперь непосредственно о способе закрытия. Ордеров может быть много и одновременно закрыть их в одной точке циклом достаточно проблематично (никакой гарантии), поэтому лучше открыть встречную позицию (Sell в нашем примере) объемом равным СУММАРНОМУ объему ВСЕХ открытых Buy-позиций. Получаем ЛОК. А дальше спокойно разруливаем его взаимозакрытиями (лишний спред при этом аннулируется). Соответственно в результате получаем позы закрытые РОВНО в нужной точке.
Да, не забываем учитывать что возможно понадобится дополнительная маржа для встречной позиции (но это уже в зависимости от того как брокер считает маржевый залог под локи).
Simca:
2 hoziain:
Для начала - усреднение ПРОТИВ рынка ИМХО не есть хорошо.
Все, предупредил. :)
Теперь по сути проблемы.
Как я понял для примера у Вас открыт Buy а цена идет вниз, Вы открываете дополнительный Buy с точки пониже (усредняете суммарную точку открытия), цена опять вниз, Вы опять Buy и т.п. Я все правильно понял?
Далее Вы хотите при движении цены в вашем направлении, когда суммарная прибыль по всем позам станет положительной - прикрыть все позиции. Так?
Если я все понял правильно, то Вам надо контролировать Баланс (Balance) и Средства (Equity). Баланс показывает состояние только по закрытым позам. Средства показывают состояние с учетом прибыли/убытка по открытым позам. Т.е. Когда Средства превышают Баланс на нужную величину и нужно крыть все открытые позы. Теперь непосредственно о способе закрытия. Ордеров может быть много и одновременно закрыть их в одной точке циклом достаточно проблематично (никакой гарантии), поэтому лучше открыть встречную позицию (Sell в нашем примере) объемом равным СУММАРНОМУ объему ВСЕХ открытых Buy-позиций. Получаем ЛОК. А дальше спокойно разруливаем его взаимозакрытиями (лишний спред при этом аннулируется). Соответственно в результате получаем позы закрытые РОВНО в нужной точке.
Да, не забываем учитывать что возможно понадобится дополнительная маржа для встречной позиции (но это уже в зависимости от того как брокер считает маржевый залог под локи).
2 hoziain:
Для начала - усреднение ПРОТИВ рынка ИМХО не есть хорошо.
Все, предупредил. :)
Теперь по сути проблемы.
Как я понял для примера у Вас открыт Buy а цена идет вниз, Вы открываете дополнительный Buy с точки пониже (усредняете суммарную точку открытия), цена опять вниз, Вы опять Buy и т.п. Я все правильно понял?
Далее Вы хотите при движении цены в вашем направлении, когда суммарная прибыль по всем позам станет положительной - прикрыть все позиции. Так?
Если я все понял правильно, то Вам надо контролировать Баланс (Balance) и Средства (Equity). Баланс показывает состояние только по закрытым позам. Средства показывают состояние с учетом прибыли/убытка по открытым позам. Т.е. Когда Средства превышают Баланс на нужную величину и нужно крыть все открытые позы. Теперь непосредственно о способе закрытия. Ордеров может быть много и одновременно закрыть их в одной точке циклом достаточно проблематично (никакой гарантии), поэтому лучше открыть встречную позицию (Sell в нашем примере) объемом равным СУММАРНОМУ объему ВСЕХ открытых Buy-позиций. Получаем ЛОК. А дальше спокойно разруливаем его взаимозакрытиями (лишний спред при этом аннулируется). Соответственно в результате получаем позы закрытые РОВНО в нужной точке.
Да, не забываем учитывать что возможно понадобится дополнительная маржа для встречной позиции (но это уже в зависимости от того как брокер считает маржевый залог под локи).
Доброй ночи,:)
Я попрбовал последовать Вашему совету, не идти против рынка, т.е. заменил доливку на встречную, если получится прикрепить файл, см.

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь