Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Попробуйте нижеприведенный код:
Единственное, что докупаться позиция начинает почему то не через каждые 50 пунктов(+- проскальзывание допустим) а опять(как и в предыдущих версиях кода) через непонятный(пока что) мне алгоритм.? )
P.S. Если на будущее, необходимо будет докупаться по 2,3,4 и т.д. кругу - это надо будет для каждого, отдельно взятого круга создавать свой "If" ?
(Или это уже совсем другая история и там надо будет, что то более хитроумное изобретать?)
Что мне сейчас первое в голову приходит так это не умножать лот(0.01) на 2 а умножать его на какой то коэффициент, который должен будет менятся в зависимости от того, cколько уже на данный момент было сделано доливок.
(или сколько лотов куплено уже к настоящему моменту.)
+ условие для наращивания позиции необходимо будет как то модифицировать(если это возможно.), что бы оно было одно на все случаи жизни и постоянно могло доливаться с разными коэффициентами лотов.
(я в правильном направлении двигаюсь?)
... (Пытался просматривать код в одном из советников по мартину, но тот код мне непонятен + написан он однозначно неправильно с точки зрения оформления, как мне кажется.
...
Код подправил. Разберитесь хорошо с исправленным кодом.
Но есть моменты: )
Позиция по прежнему отказывается докупаться по тем параметрам, которые прописаны в коде. )
То есть по идее(в данном случае) доливаться должна сделка через каждые 100 пунктов(против себя) + удвоенным лотом.
Проверка на истории показывает, что позиция не удваивается а утраивается.
(начиная с момента наращивания объема.)
+ докупка осуществляется не через каждые 100 пунктов а через 50-90 пунктов +-(в зависимости от случая.)
P.S. Ещё хотел выяснить такой момент для себя:
У вас есть такой кусок кода:
По функции OrderCalcMargin() откройте справку и прочтите ее.
Не бойтесь пользоваться справкой, это только убыстрит процесс обучения программированию.
Написано:
"Возвращает true в случае успеха, иначе false."
Вот и все.
А что такое успех или не успех в данном случае мне не ясно.
(по этому и задал вопрос что означает "ложь" в данном случае.)
P.S. На счет всего остального постараюсь разобраться.
(Спасибо за подсказки и написанный код.)
Просто после последней версии вашего кода я подумал, что позиция должна докупаться по нормальному объему и цене т.к. вы написали что "Подправили код."
Если бы сказали сразу что он не будет работать идеально - я бы не задавал лишних вопросов в последнем сообщении и попытался бы в первую очередь понять почему это происходит. )
После разбора справки, думаю что нижеприведенный код Вам понятен до последнего символа:
Я только сейчас понял, что в справке помечены [in] или [out] - параметры которые я должен прописать и параметры которые функция должна вернуть.
Правда вот такое обозначение [in,out] мне не ясно до сих пор.. )
(возможно, что структура может и принимать и возвращать значения в тех или иных ситуациях..)
Вы не разобрались с кодом.
1. Насчет наращивания позиции подсказка: сколько будет 1 + 2 ? Или так 1 + 1*2 ?
2. Отличается ли цена открытия существующей позиции после доливки? Если отличается то почему?
3. Какая цена является отправной для увеличения объема позиции? Где эти данные в коде?
В общем за сегодня просидел над этим кодом уже часов 7-8 наверное в сумме. )
То есть мне не понятно(и пока идеи даже нет) почему цена именно после 3-го кругаВсе что пришло на ум(пока что) оказалось не эффективным.
Не смог понять причины изменения цены докупки(начиная с 3-го круга) и точно также не понял причину изменения объема лота.
С объемом можно в принципе разобраться при помощи изменения коэффициента. (Изменив число 2 на 1)
Цену 2-ой докупки можно нормализовать путём высчитывания операций не по биду(как было в коде) а по аску.
Но, как я уже сказал ранее, после 3-го круга проблема все равно имеет место.
В итоге у меня получился вот такой код:
(а не после 2-го допустим, когда начинается блок наращивания существующей позиции)
становится с дельтой в 2 раза меньшей, чем у предыдущих 2-х цен.
Задать какой то параметр(или функцию) высчитывания цены докупки именно из текущей цены(при помощи PositionGetDouble(POSITION_PRICE_CURRENT) к примеру)
тоже оказалось невозможным.(хотя это и логично конечно.)
P.S. Вот такие вот дела пока что. )
Возможно завтра ещё что то(какая то идея) на ум придёт - но пока, в любом случае, мои варианты исчерпаны..
То есть мне не понятно(и пока идеи даже нет) почему цена именно после 3-го круга
становится с дельтой в 2 раза меньшей, чем у предыдущих 2-х цен.
Вы используете PositionPriceOpen. Это усредненная цена всех сделок (т.е. имеющейся позиции), а не цена последней сделки.
P.S. Мне например и надо, что бы позиция докупалась через каждые 100 пунктов(в данном случае) именно по усреднённой цене.
(а не по цене последней сделки.)
Или вы хотите сказать, что в данном случае всё именно так и проиcходит?
P.S. Щас ещё раз внимательно посчитал и понял что действительно это все дело докупается именно по средней цене.
(просто в графе именно средняя цена нигде не указывается и нужно считать самому..)
Это усредненная цена всех сделок (т.е. имеющейся позиции), а не цена последней сделки. Читайте про неттинг, ордера, позиции, сделки. То же самое с объемами.
Вчера и сегодня пытался использовать ссылку которая есть в вышеизложенном сообщении.
И попробовал сделать вот такой вариант:
То есть этим кодом я хотел докупаться отталкиваясь от цены последней докупки.
Но позиция в этом варианте вообще перестала докупаться.
Хотя в принте
в журнале такая цена существует.Почему же тогда условие на неё не ориентируется и позиция не докупается соответственно?
P.S. На счет журнала - я в принципе постоянно так и делаю.
Пользуюсь принтами и смотрю как это выводится потом..
То есть этим кодом я хотел докупаться отталкиваясь от цены последней сделки.