Давно не писал на 4-ке, нужно будет дописать функции закрытия и удаления, но примерно так:
перед OnTick пишем int orders = 0;
В конце OnTick добавляем:
orders = OrdersTotal();
в начале OnTick -
if (OrdersTotal()<orders) { for (int i = OrdersTotal()-1; i>-0; i--) { if(OrdersType() <2) CloseOrder(Orderticket(), и что-то еще) ; else OrderDelete(OrderTicket(); } }
kokon37:
Коллеги, привет! пишу себе советника. все получилось по установке и открытию сделок на основе индикатора. не могу решить одну проблему(((
может кто подскажет.
...Вставляйте правильно код -
----------------
MQL5.community - Памятка пользователя
Кнопка предназначена для вставки исходного кода в текст сообщения. При нажатии появляется пустое окно, в которое необходимо вставить код и далее нажать кнопку Вставить. Для отмены вставки кода необходимо нажать кнопку Отмена.
MQL5.community - Памятка пользователя
- www.mql5.com
Вы недавно зарегистрировались и у вас возникли вопросы: Как вставить картинку в сообщение на форуме, как красиво оформить исходный код MQL5, где находятся ваши Личные сообщения? В этой статье мы подготовили для вас несколько практических советов, которые помогут быстрее освоиться на сайте MQL5.community и позволят в полной мере воспользоваться доступными функциональными возможностями.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Коллеги, привет! пишу себе советника. все получилось по установке и открытию сделок на основе индикатора. не могу решить одну проблему(((
может кто подскажет.
при сработывании сигнала открывается сделка и 2 отложки.
надо, чтобы при закрытии любой сделки остальные тоже закрывались.
с учетом 3 ордеров есть 3 варианта
1. закрылся рыночный ордер, осталось 2 отложки - надо снести отложки
2. закрылась по ТП 1 отложка - надо сразу закрыть второй рыночный и снести отложку
3. закрылась по ТП 2 отложка - надо сразу закрыть 2 других открытых ордера
в итоге получается, что если одновременно на графике становиться не 3 ордера(открытые и/или отложки)6 а 2 ордера - их надо снести.
нашел кучу скриптов, но ни один не сработал.
может не в ту часть кода вписываю(((
помогите, кто может)))
Заранее спасибо
вот код без функции удаления ордеров
//+------------------------------------------------------------------+
//| свой.mq4 |
//| Copyright 2023, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property strict
datetime dt;
input int InpBandsPeriods = 20;
input double InpBandsDeviations = 2;
input ENUM_APPLIED_PRICE InpBandsAPPLIEDPRICE = PRICE_CLOSE;
input int InpMagicNumber = 777;
input string InpTradeComment = __FILE__;
int OnInit()
{
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
}
void OnTick()
{
if(!IsNewBar()) return;
double close1 = iClose(Symbol(), Period(), 1);
double high1 = iHigh(Symbol(), Period(), 1);
double low1 = iLow(Symbol(), Period(), 1);
double open1 = iOpen(Symbol(), Period(), 1);
double close2 = iClose(Symbol(), Period(), 2);
double high2 = iHigh(Symbol(), Period(), 2);
double low2 = iLow(Symbol(), Period(), 2);
double open2 = iOpen(Symbol(), Period(), 2);
double upper1 = iBands(Symbol(), Period(), InpBandsPeriods, InpBandsDeviations, 0, InpBandsAPPLIEDPRICE, MODE_UPPER, 1);
double lower1 = iBands(Symbol(), Period(), InpBandsPeriods, InpBandsDeviations, 0, InpBandsAPPLIEDPRICE, MODE_LOWER, 1);
double upper2 = iBands(Symbol(), Period(), InpBandsPeriods, InpBandsDeviations, 0, InpBandsAPPLIEDPRICE, MODE_UPPER, 2);
double lower2 = iBands(Symbol(), Period(), InpBandsPeriods, InpBandsDeviations, 0, InpBandsAPPLIEDPRICE, MODE_LOWER, 2);
if (close2>upper2 && close1<open1) {
if (OrdersTotal()<1){
OrderSend(Symbol(), OP_SELLLIMIT, 0.06, Bid+200*Point, 3, Ask+300*Point, Ask+100*Point, NULL, 333);
OrderSend(Symbol(), OP_SELLLIMIT, 0.02, Bid+100*Point, 3, Ask+200*Point, Ask, NULL, 222);
OrderSend(Symbol(), OP_SELL, 0.01, Bid, 3, Ask+300*Point, Ask-100*Point, NULL, 111);
}
}
if (close2<lower2 && close1>open1) {
if (OrdersTotal()<1){
OrderSend(Symbol(), OP_BUYLIMIT, 0.02, Ask-100*Point, 3, Bid-200*Point, Bid, NULL, 555);
OrderSend(Symbol(), OP_BUYLIMIT, 0.06, Ask-200*Point, 3, Bid-300*Point, Bid-100*Point, NULL, 666);
OrderSend(Symbol(), OP_BUY, 0.01, Ask, 3, Bid+300*Point, Bid-100*Point, NULL, 444);
}
}
return;
}
bool IsNewBar() {
if(Time[0] != dt) {
dt = Time[0];
return(TRUE);
}
return(FALSE);