| / | Форум |
|
dem220
18.06.2010 02:13
Здравствуйте. У меня в процессе написания советника возникла проблема в модификации ордеров. По задумке требуется чтобы после каждого нового открытого ордера происходила модификация тейков всех ранее открытых позиций. У всех должен быть одинаковый тейк. Но на деле происходит модификация только первого ордера, а после его срабатывания происходит многочисленное открытие ордеров без модификаций. Вот код самого советника. extern double Lots = 0.01; |
|
Увеличьте эффективность групповой работы Поставьте TeamWox и увеличьте эффективность групповой работы в вашей компании. TeamWox позволяет хранить всю рабочую информацию в одном месте: письма, документы, файлы, платежи и история сообщений в чате. Так решается проблема сохранности данных и удобной групповой работы с ними. |
|
sever30
18.06.2010 02:20
//hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh зачем стоко Х много? |
|
Mislaid
18.06.2010 08:31
dem220:
Здравствуйте. У меня в процессе написания советника возникла проблема в модификации ордеров. По задумке требуется чтобы после каждого нового открытого ордера происходила модификация тейков всех ранее открытых позиций. У всех должен быть одинаковый тейк. Но на деле происходит модификация только первого ордера, а после его срабатывания происходит многочисленное открытие ордеров без модификаций. Бросается в глаза сразу одна логическая ошибка. Нужно исправить все три оператора if, так правильно: if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumberBuy) continue; Поскольку: !(OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicNumberBuy) == ( !(OrderSymbol() == Symbol()) || !(OrderMagicNumber() == MagicNumberBuy) ) Насчет модификаций - не знаю, а с открытиями должно помочь Кстати, следующий if() будет не нужен |
|
api
18.06.2010 09:47
Почему бы Вам не написать вот так: OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(targetBuy,Digits),0,Red); |
|
dem220
18.06.2010 17:08
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumberBuy) continue; Спасибо, исправил. Но проблема с модификацией, как вы и говорили, осталась. |
|
Mislaid
18.06.2010 17:30
dem220:
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumberBuy) continue; Спасибо, исправил. Но проблема с модификацией, как вы и говорили, осталась.
Если, напротив, при торговле, то это легко объяснимо и поправимо (хотя и объемно) . |
7380 |
sergeev
18.06.2010 17:59
у вас ошибка в вычислении тейкпрофита if (VsegoBuy>1) { priceBuy=NormalizeDouble((OrderOpenPrice()-priceBuy)/2,Digits); targetBuy=NormalizeDouble(priceBuy+TakeProfit*Point, Digits); } else { priceBuy=NormalizeDouble(OrderOpenPrice(),Digits); targetBuy=NormalizeDouble(priceBuy+TakeProfit*Point, Digits); }
разберитесь с этими значяениями
Или объясните что должно быть на выходе в случае VsegoBuy>1, и VsegoBuy<=1
|
|
api
18.06.2010 18:00
Первый вариант я недоглядел. У вас рыночные ордеры модифицируются. Почему бы Вам не написать вот так: OrderModify(OrderTicket(),0,OrderStopLoss(),NormalizeDouble(targetBuy,Digits),0,Red); |
7380 |
sergeev
18.06.2010 18:02
api: Первый вариант я недоглядел. У вас рыночные ордеры модифицируются. Почему бы Вам не написать вот так:
Ошибка - в параметре targetBuy. Там на выходе поллучается цифра типа 0,00026. Что не есть корректно. |
|
api
18.06.2010 18:08
Когда-то столкнулся с проблемой, что рыночные ордера не модифицирует, если указывать цену открытия, отличную от нуля. С targetBuy действительно накручено, но я не проверял и не запускал. Когда работает эта ветка - врядли будет 0.00026 priceBuy=NormalizeDouble(OrderOpenPrice(),Digits); targetBuy=NormalizeDouble(priceBuy+TakeProfit/100000, Digits); |
7380 |
sergeev
18.06.2010 18:39
да. при первом запуске, когда выполняется else, то считает корректно. но потом какая то глупость. Но я не знаю что автор хотел тем вычислением сделать. то есть куда он хотел двигать этот тейкпрофит. |
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий