P.S.: к сожалению местный редактор всю табуляцию посдвигал... так что читать не очень удобно
При оформлении кода Вы можете использовать тег code.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
extern int step = 10, // шаг slippage = 5, // ну, это понятно sim = 3; // переменная, округляющая символ для // того, чтобы шаги были исключительно // на круглых значениях (это блажь) //---- Локальные переменные (не обновляющиеся) double lots = 0.1; //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- Локальные переменные (обновляющиеся) int cnt, // счетчик ticket, // переменная для работы с ордерами total; // total он и есть total bool opSell,opBuy, // Наличие отложенных ордеров Buy = true, // Разрешают отложить ордер (запрещают, если Sell = true; // на этом шаге ордер уже открыт) for(cnt = 0; cnt < total; cnt++) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) == true) { if(OrderSymbol() == Symbol()) { if(OrderType() == OP_SELL) { if(OrderOpenPrice() == NormalizeDouble(Bid,sim) - step*Point) Sell = false; // Запрещаем откладывать короткий ордер на это место -- ибо занято } if(OrderType() == OP_BUY) { if(OrderOpenPrice() == NormalizeDouble(Ask,sim) + step*Point) Buy = false; // Запрещаем откладывать длинный ордер на это место -- ибо занято } } } } //---- Проверка на наличие отложенного ордера. Подтягивание for(cnt = 0; cnt < total; cnt++) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) == true) { if(OrderSymbol() == Symbol()) { if(OrderType() == OP_SELLSTOP) { // Теперь, если надо (и если можно), будем подтягивать ордер за ценой opSell = true; // стало быть отложенный ордер существует if(OrderOpenPrice() < Bid - 2*step*Point && Sell == true ) { OrderModify(OrderTicket(),NormalizeDouble(Bid,sim) - step*Point,0,0,0,Red); return(0); } } if(OrderType() == OP_BUYSTOP) { // Теперь, если надо (и если можно), будем подтягивать ордер за ценой opBuy = true; if(OrderOpenPrice() > Ask + 2*step*Point && Buy == true) { OrderModify(OrderTicket(),NormalizeDouble(Ask,sim) + step*Point,0,0,0,LightBlue); return(0); } } } } } //-- Выставление отложенных ордеров (если можно) if(opSell == false // если отложенного SELL ордера пока нет && Sell == true ) // и если на том месте, куда мы собираемся его // отложить уже не открыт короткий ордер { ticket=OrderSend(Symbol(),OP_SELLSTOP,lots, NormalizeDouble(Bid,sim) - step*Point,0,0,0,NULL,0,0,Red); if(ticket<0) Print("Error opening SELL order &&&&&&&&&&&&&&&&&&&:",GetLastError()); return(0); } if(opBuy == false // если отложенного BUY ордера пока нет && Buy == true) // и если на том месте, куда мы собираемся его // отложить уже не открыт длинный ордер { ticket=OrderSend(Symbol(),OP_BUYSTOP,lots, NormalizeDouble(Ask,sim) + step*Point,0,0,0,NULL,0,0,LightBlue); if(ticket<0) Print("Error opening SELL order &&&&&&&&&&&&&&&&& : ",GetLastError()); return(0); } //---- Конец проверки на наличие отложенных ордеров. И подтягивания. return(0); } // конец функции StartПодскажите, что не так. Пожа-а-а-алуйста..
P.S.: к сожалению местный редактор всю табуляцию посдвигал... так что читать не очень удобно