А где же этот, как его, а, код "ниже представленный"
А где же этот, как его, а, код "ниже представленный"
Пардон. Отредактировал выше. :)
Пардон. Отредактировал выше. :)
Проблема похоже в другом месте зарыта. Поставь принты во всех возможных проблемных местах и отслеживай значения.
Проблема похоже в другом месте зарыта. Поставь принты во всех возможных проблемных местах и отслеживай значения.
Хорошо. Так и сделаю.
В общем. Я сам удивлен! Подумал, может, что я в условиях не так намудрил. Буду искать причину. Спасибо за помощь! :)
Проблема в том, что в условиях или еще где-то я сделал что-то не правильно и получается так, первая позиция не открывается, пока в открытых ордерах, ни одного нету. А если открою рукой, то далее начинается выполняться код. В не зависимости, что в условиях указанно, при наличии каких открытых ордеров, новый открывать запрещено
Что в общем-то и логично. Пока ордеров нет, TotalOrders() == 0, цикл ни разу не исполняется. Проверяй "если ордеров" нет отдельно.
А вообще получится у тебя если в цикле первый попавшийся ордер позволяет по условию открыть новый ордер - то он откроестя вне зависимости от того, что следующие ордера могут это открытие запрещать. Заведи флаг.
Что в общем-то и логично. Пока ордеров нет, TotalOrders() == 0, цикл ни разу не исполняется. Проверяй "если ордеров" нет отдельно.
А вообще получится у тебя если в цикле первый попавшийся ордер позволяет по условию открыть новый ордер - то он откроестя вне зависимости от того, что следующие ордера могут это открытие запрещать. Заведи флаг.
По поводу установления флага. А можно Ваш пример реализации данной задачи, по условиям выше описанных мной? Спасибо. :)
MrSerj:
В общем итоге мне нужно сделать, чтобы выполнялись 3 подобных условия:
1) if (Mag != Magic1a1 && Mag != Magic2a2) // Если в открытых нету позиций с магическими номерами Magic1a1 и Magic2a2.
2) if (Mag == Magic && Mag != Magic2a2) // Если в открытых присутствует позиция с магическим номером Magic, но нету позиции с Magic2a2.
3) if (Mag == Magic || Mag = = Magic1a1 && Mag != Magic3a3) // Если в открытых присутствуют позиции с магическими номерами Magic, Magic1a1, но при этом чтобы не было в открытых с номером Magic3a3.
По поводу установления флага. А можно Ваш пример реализации данной задачи, по условиям выше описанных мной? Спасибо. :)
По поводу поиска ордеров с заданным меджиком:
//+--------------------------------//функция поиска ордера//+ bool getOrders(int magic){ int index = 0; while(OrdersTotal() != 0 && OrderSelect(index, SELECT_BY_POS)){ if(OrderMagicNumber() == magic)return(true); index++; } return(false); } //+------------------------------------------------------------------+
По поводу выполнения 3 подобных условий:
if(!getOrders(Magic1a1) && !getOrders(Magic2a2)){ // Если в открытых нету позиций с магическими номерами Magic1a1 и Magic2a2. } if(getOrders(Magic) && !getOrders(Magic2a2)){ //Если в открытых присутствует позиция с магическим номером Magic, но нету позиции с Magic2a2. } if(getOrders(Magic) && getOrders(Magic1a1) && !getOrders(Magic3a3)){ // Если в открытых присутствуют позиции с магическими номерами Magic, Magic1a1, но при этом чтобы не было в открытых с номером Magic3a3. }
Ну как то так.
По поводу поиска ордеров с заданным меджиком:
По поводу выполнения 3 подобных условий:
Ну как то так.
Благодарю Вас! :)
По поводу поиска ордеров с заданным меджиком:
По поводу выполнения 3 подобных условий:
Ну как то так.
К сожалению, проблема не устранена? Советник странно себя ведет. То открывает, вроде бы по правилам. То начинает открывать все сразу? Не смотря на ограничения? Прикрепил советника. Посмотрите, пожалуйста, что в нем не так. Где ошибка? В архиве советник и функция к нему. Кода там мало. Думаю каждому будет понятно, что и где там у меня. Комментарии есть. :)
Кусок кода с условиями из советника: Условия вроде указал правильно, Но!?
//-------------------------------------------------------------------+ //------------------- Проверка условий на открытие ------------------+ //-------------------------------------------------------------------+ //--------- 1 // Если в открытых нету позиций с магическими номерами Magicq1 и Magicq2. if(OrdersTotal()==0 && !getOrders(Magicq1) && !getOrders(Magicq2)) BUY = true; //--------- 2 // Если в открытых присутствует позиция с магическим номером Magic, но нету позиции с Magicq2 и Magicq3. if(getOrders(Magic) && !getOrders(Magicq2) && !getOrders(Magicq3)) SELL = true; //--------- 3 // Если в открытых присутствуют позиции с магическими номерами Magic или Magicq1, но при этом чтобы не было в открытых с номером Magicq4. if(getOrders(Magic) || getOrders(Magicq1) && !getOrders(Magicq3)) BUYq1 = true; //--------- 4 // Если в открытых нету ордера с магиком Magicq4 или Magicq5 и есть открытый ордер с магиком Magicq2 if(!getOrders(Magicq4) || !getOrders(Magicq5) && getOrders(Magicq2)) SELLq1 = true; //-------------------------------------------------------------------+ //---------------- Конец проверки условий на открытие ---------------+ //-------------------------------------------------------------------+
Посмотрел код, немного не понял суть стратегии, например,
зачем открывать сразу 2 ордера на покупку, практически по одной цене? Так
должно быть или это ошибка?
В общем, обрисуйте суть торговой системы, так будет
проще понять в чем косяк.
Из того что бросилось в глаза по условиям:
// Если в открытых нету позиций с магическими номерами Magicq1 и Magicq2. if(OrdersTotal()==0 && !getOrders(Magicq1) && !getOrders(Magicq2)) BUY = true;
Если ордеров нет (OrdersTotal()==0), зачем проверять есть среди них ордера с заданным
меджиком или нет?
И вот еще:
// Если в открытых присутствуют позиции с магическими номерами Magic или Magicq1, но при этом чтобы не было в открытых с номером Magicq4. if(getOrders(Magic) || getOrders(Magicq1) && !getOrders(Magicq3)) BUYq1 = true;Про Magicq4 в условии нет ничего, там про меджик Magicq3.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Коллеги! Помогите найти ошибку. В ниже представленном коде, прохожу по всем открытым ордерам. Далее, если из всех открытых позиций, пресутсвуют те у которых магические номера Magic1a1 и Magic2a2, то открытие ордера запрещено. То есть получается если через условие if (), то выполнение кода пропускается. Если же нету в открытых, позиций с магическими номера Magic1a1 и Magic2a2, то блок открытия нового ордера выполняется. Проблема в том, что в условиях или еще где-то я сделал что-то не правильно и получается так, первая позиция не открывается, пока в открытых ордерах, ни одного нету. А если открою рукой, то далее начинается выполняться код. В не зависимости, что в условиях указанно, при наличии каких открытых ордеров, новый открывать запрещено. За любую помощь, буду премного благодарен.
В общем итоге мне нужно сделать, чтобы выполнялись 3 подобных условия:
1) if (Mag != Magic1a1 && Mag != Magic2a2) // Если в открытых нету позиций с магическими номерами Magic1a1 и Magic2a2.
2) if (Mag == Magic && Mag != Magic2a2) // Если в открытых присутствует позиция с магическим номером Magic, но нету позиции с Magic2a2.
3) if (Mag == Magic || Mag = = Magic1a1 && Mag != Magic3a3) // Если в открытых присутствуют позиции с магическими номерами Magic, Magic1a1, но при этом чтобы не было в открытых с номером Magic3a3.
Что я сделал не правильно и как будет правильно выглядеть и выполняться как нужно?