Чисто из любопытства попробуйте при наборе следующего сообщения нажать <Ctrl> + <Alt> + <M>...
#property copyright "Mr.Red" #property link "" extern double TakeProfit = 20, Lock=50; extern double Lots = 0.1; //extern double StopLoss =40; bool New_Bar=false; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int start() { int M=1;// меджик намбер if(OrderSelect(0,SELECT_BY_POS, MODE_TRADES)==true) { M++; } //+------------------------------------------------------------------+ for(int i=0;i< OrdersHistoryTotal();i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY )==true)// поиск и проверка позиции БАЙ { if (OrderSymbol()==Symbol()&& OrderType() == OP_BUY&& OrderMagicNumber()==M && OrderProfit()>0) // если БАЙ получил текущий ПРОФИТ то { for(int a=0; a<OrdersTotal(); a++) { OrderSelect(a, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol()==Symbol()&&OrderType() == OP_SELLSTOP&& OrderMagicNumber()==M) // то находим отложенный СЕЛЛ { OrderDelete(OrderTicket(),Red); // и закрываем его } } for(int s=0; s<OrdersTotal(); s++) { if(OrderSelect(s, SELECT_BY_POS, MODE_TRADES)==true) { if(OrderSymbol()==Symbol()&&OrderType() == OP_SELL&& OrderMagicNumber()==M-1) // ищем пару СЕЛЛ БАЙ что бы закрыть замок (если он есть) { for(int w=0; w<OrdersTotal(); w++) { OrderSelect(w, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol()==Symbol()&&OrderType() == OP_BUY&& OrderMagicNumber()==M-1) // находим пару { OrderClose(OrderTicket(),Lots,Bid,3, Yellow); // и закрываем сначала БАЙ for(int y=0; y<OrdersTotal(); y++) { OrderSelect(y, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol()==Symbol()&&OrderType() == OP_SELL&& OrderMagicNumber()==M-1) // ищем СЕЛЛ { OrderClose(OrderTicket(),Lots,Ask,3, Yellow); //закрываем СЕЛЛ } } } } } } } } } } for(int n=0; n<OrdersTotal(); n++) { if(OrderSelect(n, SELECT_BY_POS, MODE_TRADES)==true) { if(OrderSymbol()==Symbol()&&OrderType() == OP_SELL&& OrderMagicNumber()==M) //если открылся ЛОК то { for(int q=0; q<OrdersTotal(); q++)//ищем бай { OrderSelect(q, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol()==Symbol()&&OrderType() == OP_BUY&& OrderMagicNumber()==M) // { OrderModify (OrderTicket(), OrderOpenPrice(), 0, 0, 0, Blue); // удаляем ТЕЙК ПРОФИТ из БАЯ } } } } } //-------------------------------------------------------------------- Fun_New_Bar(); if (New_Bar==false) return; int ticket; if(.... ..)// Условие входа в сделку, если наступил новый бар { ticket=OrderSend(Symbol(),OP_BUY,Lots, Ask,3, 0,Ask+TakeProfit*Point, 0,M,0, Red); ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Lock*Point,0, 0,0, 0,M,0, Red); Alert (GetLastError()); return; } } //-------------------------------------------------------------------- void Fun_New_Bar() // Ф-ия обнаружения .. { // .. нового бара static datetime New_Time=0; // Время текущего бара New_Bar=false; // Нового бара нет if(New_Time!=Time[0]) // Сравниваем время {New_Time=Time[0]; // Теперь время такое New_Bar=true; // Поймался новый бар } } //--------------------------------------------------------------------
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Пожалуйста помогите разобраться с Локированием позиций
Набранный мною код позиций не Локирует
Ошибку найти не могу - не хватает опыта
Для упрощения рассм. только Локирование BUY позиций
Рассмотрите, пожалйста, возможность упрощения кода
Что хотел сделать: Открывается позиция BUY одновременно с отложенным ордером SELL
Если отложенный ордер SELL срабатывает - Удаляем из BUY TakeProfit
Если BUY получил Profit - удаляем отложенный SELL, который шел к нему в паре--
Если при этом существует Локированная пара BUY-SELL - то закрываем эту пару
Каждой паре присваивается MagicNumber, равный номеру предыдущей пары +1
Благодарю за оказанную помощь.