Как логическое продолжение темы
zakaz.opentraders.ru/23559.html, прошу программистов добавить следующие функции в уже разработанный советник-усреднитель:
1) ТП в пунктах (для четырезнака) — тейкпрофит серии ордеров от уровня безубытка (с учетом свопов);
2) СЛ в пунктах (для четырезнака) — стоп-лосс всей сетки открытых ордеров в пунктах от первого ордера;
3) параметры k, m увеличения лотности ордеров сетки по формуле (k*(объем первого ордера)+m);
4) возможность выбора в параметрах советника выставления сетки buy- или sell- лимитных ордеров.
Сетка ордеров закрывается при достижении ТП или СЛ.
На графике должно отображаться: уровень безубытка (с учетом свопов), уровень СЛ и уровень закрытия серии ордеров по ТП.
Комментарии (98)
Где здесь будет своп?
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
А как бы мне его приложить?)
Ну или Вам передать. Редактирован: 24 марта 2015, 21:30
12 Inthenight Автор Сообщений: 77
Или на любой файлообменник (к примеру, яндекс диск)
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
вот ссылка на индикатор
12 Inthenight Автор Сообщений: 77
Мне не очень понравилась формула расчета БУ используемая там. Какие то жестко заданные коэфф = 100000
Лучше адаптировать вот такое:
13 Fargo Сообщений: 495
Вам, программистам, виднее)
Я его для примера нашел, как вариант «свопы прикручивать» Редактирован: 25 марта 2015, 14:31
12 Inthenight Автор Сообщений: 77
Только вопрос, эта формула будет работать на парах типа USDCHF и на кросс-курсах? Где параметр MODE_TICKVALUE меняющийся. Ведь на цене безубытка цена за тик будет другая, чем на текущей цене Редактирован: 25 марта 2015, 20:46
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
На кроссах?
Тогда не знаю . Если только высчитывать приблизительно
Эту формулу не я придумывал, а нашел на просторах (сам долго искал)
Да…
Для общего БУ делается так:
Редактирован: 25 марта 2015, 22:04
13 Fargo Сообщений: 495
Это же основы форекса.
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
Тогда для минимизации погрешности так.
1.1. Находим уровень БУ как обычно, без свопов и комиссий.
if (lots!=0) zeroprice=sum/lots;
1.2. Здесь же отдельно считаем сумму свопов и комиссий, а также объемы позиций LostBuy, LotsSell
SSVP+=OrderCommission()+OrderSwap();
DLot=LostBuy-LotsSell;
2. Находим стоимость одного пункта для мин лота на этом уровне.
double lot_size = MarketInfo(Symbol(), MODE_LOTSIZE);
double min_lot = MarketInfo(Symbol(), MODE_MINLOT);
double point_size= MarketInfo(Symbol(), MODE_POINT);
tic_val=(lot_size*min_lot*point_size)/zeroprice;
3. Приводим накопленую сумму свопов(комиссий) к минимальному лоту и делим на стоимость пункта. Таким образом получаем коррекцию к найденому ранее уровню БУ.
DZP= (((SSVP*min_lot)/DLots)/tic_val)*Point;
4. Корректируем
if (DLot>0){ //бай перевешивает
ZLev= zeroprice-DZP ;} //уровень безубытка для Buy ордеров
if (DLot<0){
ZLev=zeroprice+ DZP;}
Вроде так получается. Погрешность конечно будет, но уже меньше.
Ну и пункты 2,3,4 можно совместить в одной зубодробительной формуле
ПС: Это относится к парам USD/Валюта. А вот как для кроссов рассчитать второй пункт я пока не придумал. Редактирован: 26 марта 2015, 12:13
13 Fargo Сообщений: 495
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
Пункт = Размер тика * Размер лота * Текущую котировку базовой валюты относительно USD / Текущую котировку пары.
Вот эта переменная (Текущую котировку базовой валюты относительно USD) превращает расчет в гадание на кофейной гуще. Так что можно смело брать значение ticvalue из MarketInfo, что бы хоть как то учитывать свопы.
Буду рад, если я ошибаюсь
13 Fargo Сообщений: 495
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
Для этого находим уровень БУ без учета свопов (так как это сделано в том же ZeroLevel).
Потом рассчитываем стоимость пункта на уровне zero (для минимального лота).
И корректируем найденный уровень БУ на величину необходимую для учета свопов и комиссий.
Для этого всю сумму свопов делим на разницу между объмами бай и селл — что даст нам величину свопов на 1 мин. лот.
Разделив полученное на стоимость одного пункта для мин.лота — получаем сколько нужно пройти этим мин. лотом что бы компенсировать своп. Т.е. это будет величина коррекции найденого ранее уровня БУ.
13 Fargo Сообщений: 495
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
13 Fargo Сообщений: 495
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
Т.е. для первого ордера Protit_1*K_order.
И объем также Lots_1*K_order
Ну тоесть как бы считаем что у нас усредняемый ордер не объемом 1,0 а например 0.2 — если мы хотим усреднить 20% от первого ордера (K_order=0.2) Редактирован: 26 марта 2015, 10:43
13 Fargo Сообщений: 495
БУ=(цена1*лот1*K+цена2*лот2+...)/(лот1*K+лот2+...)-(своп1*K+своп2+...)/(10000*(лот1*K+лот2+...)),
где 10000 — для четырехзнаковых ДЦ,
к своповой поправке "-" — для ордеров на покупку, соответственно если на продажу, то надо знак "+".
Полагаю, коэффициенты 100000 в индике, о которых писал Fargo, как раз для корректной работы на 5- и 4-знаке Редактирован: 26 марта 2015, 12:24
12 Inthenight Автор Сообщений: 77
13 Fargo Сообщений: 495
12 Inthenight Автор Сообщений: 77
13 Fargo Сообщений: 495
12 Inthenight Автор Сообщений: 77
в первом слагаемом денег нет
там чисто математическое среднее считается
возьмем три лота:
номер объем цена
1 ____ 2 ____ 3
2 ____ 4 ____ 5
3 ____ 1 ____ 7
по формуле (2*3+4*5+1*7)/(2+4+1)
тоже самое (3+3+5+5+5+5+7)/(1+1+1+1+1+1+1)
Денег здесь нет
13 Fargo Сообщений: 495
12 Inthenight Автор Сообщений: 77
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
12 Inthenight Автор Сообщений: 77
Но я вставлю, какую захотите. Поместите сюда в комментарий формулу и я её вставлю.
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
12 Inthenight Автор Сообщений: 77
А для йены это сколько будет в деньгах? Котирока 118,559, объем 0,5?
И как для нее учесть своп в размере допустим 1,22$ Редактирован: 26 марта 2015, 13:13
13 Fargo Сообщений: 495
12 Inthenight Автор Сообщений: 77
Увы, мало данных для той формулы) Редактирован: 26 марта 2015, 13:48
12 Inthenight Автор Сообщений: 77
118.559 lot 0.5 своп 1.22$
117.559 lot 0.2 своп 0 (лот свежий, еще не ночевал )
13 Fargo Сообщений: 495
12 Inthenight Автор Сообщений: 77
Хорошо, хорошо…
по первой части посчитали 118.059 — это что? йены, да?
а вычитаем 0,00122 доллара — это тогда как?
из помидоров вычитаем огурцы
13 Fargo Сообщений: 495
Да хоть грибы
Где там Вы видите доллары, а? Там есть коэффициент неизвестной размерности, так что аллегория не проходит.
Согласен в другом, в том написании формула — для котировок с USD в качестве базовой валюты. Можно ее преобразовать в следующий вид:
БУ=(цена1*лот1*K+цена2*лот2+...)/(лот1*K+лот2+...)-(своп1*K+своп2+...)/(W*(лот1*K+лот2+...)),
где W=10000 — для инструмента с USD в качестве базовой валюты,
W=10000/текущ.котир. — для инструмента с USD «сверху» (ДЦ-4-знак)
В Вашем примере тогда получается ~ на 0,014 пунктов ниже безубыток.
Конечно, еще все это проверить на демо- надо на парах с USD «сверху».
12 Inthenight Автор Сообщений: 77
Одного не пойму, у вас в разговоре периодически возникали цифры 10 000 или 100 000 и они каким-то боком у вас относятся к цене с 4-мя знаками или 5-ю знаками. Вообще-то это сумма, с которой производится сделка.
Индикатор просто создавал тот, кто не особо вникал в формулу:
Редактирован: 26 марта 2015, 20:04
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
Вообще, я и не подозревал, что с определением безубытка могут быть такие сложности — это же основа основ любого советника-усреднителя. В итоге пришлось вспомнить молодость, посидеть-порешать уравнения
Надеюсь, последний вариант формулы БУ получится реализовать?
12 Inthenight Автор Сообщений: 77
Я просто сейчас задумалась над фразой:
Как в коде распознать валюту — с прямой котировкой она или с обратной Или просто перечислить все с обратной, а остальные будут подразумеваться, что с прямой.
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
12 Inthenight Автор Сообщений: 77
БУ=(цена1*лот1*K+цена2*лот2+...)/(лот1*K+лот2+...)-(своп1*K+своп2+...)/(W*(лот1*K+лот2+...)),
где W=10000 — для инструмента с USD в качестве базовой валюты
т.е. для пар eurusd, gbpusd
Будет ли работать — еще не в курсе.
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
12 Inthenight Автор Сообщений: 77
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
Погонял советника на австрале, безубыток как будто бы определяет верно (где бы еще взять ордер с большим свопом для проверки советника просчетом по формуле и с полученным результатом не в один пункт)))
Однако, обнаружился новый нюанс — у разных ДЦ идет разный объем сделки при одинаковом лоте. И если на инсте формула верная, то для ф4ю коэффициент должен быть 100000 вместо 10000.
Поэтому прошу Вас вынести этот коэффициент в параметры советника (по умолчанию пусть стоит значение 10000). Спасибо!
12 Inthenight Автор Сообщений: 77
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
А с парами, где USD сверху, Вы не придумали, как реализовать формулу?
12 Inthenight Автор Сообщений: 77
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
Я спросил про ее реализацию — т.е. вот это:
12 Inthenight Автор Сообщений: 77
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
Можно с определенной долей приближения высчитывать для какой-то фиксированной цены на данный момент и ставить коэффициент «для расчета лота», как он у нас в последней версии назван, константой (допуская, что котировка +- далеко не уйдет отсюда). Например, для USDCAD на сейчас: W=10000/1,2568=7957.
Цена ушла +100 пунктов: W=10000/1,2668=7893.
-100п: W=10000/1,2468=8020.
Учитывая, что 200п предостаточно для отработки советника, а также небольшую величину свопов, можно считать, что принятие W=константе не окажет большой погрешности для расчета БУ.
12 Inthenight Автор Сообщений: 77
W=10000
Для всех прочих: USD сверху или без USD
W=10000/1,2568 (делим на котировку)
opentraders.ru/downloads/649/
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
12 Inthenight Автор Сообщений: 77
12 Inthenight Автор Сообщений: 77
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
12 Inthenight Автор Сообщений: 77
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
12 Inthenight Автор Сообщений: 77
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
Согласно Правил project.opentraders.ru/20424.html
В любом случае Oxy спасибо за труды, правда, если на этом продукте остановились, то считаю время потрачено нами было впустую, так, для галочки
Для тех, кто будет скачивать, хочу пояснить принцип работы совов (т.к. то, что реализовано на деле, во многом не соответствует описанию в топиках и является, по сути, лишь прообразом того, что должно было получиться).
Итак, сов №1 zakaz.opentraders.ru/23559.html — выставляет сетку n лимитников с заданным шагом (для усреднения части К убыточного ордера) — на покупку для ордера buy, на продажу — для sell (выбор buy или sell — не реализован). Лот первого ордера сетки — (К*убыт.лот) (выбор объема первого лота не реализован), последующие идут с удвоением! (выбор параметров прогрессии лотов последующих ордеров сетки не реализован). Закрывает сетку не по ТП (не реализовано), а в безубытке. СЛ не реализован.
В этой версии совы (№2) к расчету БУ добавлена поправка на свопы открытых ордеров.
12 Inthenight Автор Сообщений: 77
Ладно, ваше право так думать.
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
Я создал второй топик по вашей просьбе потому, что, как я понял, вы хотели зафиксировать полученный результат как отдельную разработку. Вот и все. А ТЗ взято из первого и просто переформулировано Ничего нового не было добавлено.
12 Inthenight Автор Сообщений: 77
Хотя я вам в первом топике писала: «Единственное, столкнулась с трудностями переноса TP в минус — через раз переносит (и я даже знаю, почему). Решила это просто. Сам TP у открытых ордеров не выставляется, но он рассчитывается и отображается в комментариях слева сверху. И при достижении ценой этого значения — происходит закрытие/удаление ордеров и уменьшение объема ордера, с которым первоначально начали работать.»
zakaz.opentraders.ru/23559.html#comment100710
Я поэтому и не поняла, почему вы опять это от меня просите.
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
Могу вам поставить stop loss один общий для всех. Только stop loss должен быть всегда больше (шаг лимитных ордеров * количество ордеров). Можно конечно стоп-лосс отсчитать от последнего, крайнего ордера и у всех также выставить.
Лот тоже в принципе не проблема увеличить. Только если формула безубытка вдруг не будет работать (т.е. цена перестанет быть безубытком), то править уже не буду. Но, возможно, формула правильная.
Выбор бай или селл лимит ордеров — можно попробовать сделать — тоже не уверена, что логика безубытка не поедет в советнике.
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
Просто на данный момент это не реализовано, вот и прошу
А как это будет реализовано — ТП у ордеров, или расчетной величиной без фактического выставления ТП у ордеров — не суть важно. На данный момент закрывает в БУ, а нужно, чтобы в ТП-пунктах от БУ (задаем в параметрах) Редактирован: 12 апреля 2015, 19:01
12 Inthenight Автор Сообщений: 77
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
12 Inthenight Автор Сообщений: 77
Получил ваше письмо, спасибо за вашу готовность довести эту разработку до финала, хотя, в какой-то момент, уже засомневался в этом
Сейчас, полагаю, осталась одна ошибка в нем — а именно расчет БУ при разнонаправленных ордерах (т.е. когда усредняем убыточный buy сеткой sell-лимитников или наоборот). Очевидно (да и, посидев вечер над формулами, — подтвердил для себя выкладками), что для учета направления ордера, достаточно в нашу формулу БУ к значению лота ордеров (лот1, лот2, ...) присоединить знак "+" — для ордеров «buy», и знак "-" — для ордеров sell.
Формула будет иметь вид:
БУ=(цена1*(+-лот1)*K+цена2*(+-лот2)+...)/((+-лот1)*K+(+-лот2)+...)-(своп1*K+своп2+...)/(W*((+-лот1)*K+(+-лот2)+...)) (м.б. где-то лишние скобки, но это чтобы не запутаться в знаках и не потерять чего), соответственно для всех (+-лот) берем "+" для бай и "-" для селл-ордеров.
Другой нюанс при выборе разнонаправленных ордеров — при сработке первого лимитника в нашей формуле будет деление на 0. Для избежания этого предлагаю лот первого ордера сетки принять (2*K).
Редактирован: 14 апреля 2015, 22:58
12 Inthenight Автор Сообщений: 77
— первоначальный лот был buy и последующие ставились buy limit (buy + buy limit),
— первоначальный лот был sell и последующие ставились sell limit (sell + sell limit).
Сбоить стало, когда появилась возможность:
— при первоначальном лоте buy выставлять ордера sell limit (buy + sell limit),
— при первоначальном лоте sell выставлять ордера buy limit (sell + buy limit).
Мы знак в формуле меняем при этих двух последних случаях?
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
Но мне жутко интересно…
А можно картинку, как это выглядит — усреднение убыточного ордера BUY, сеткой ордеров SELLLIMIT? Редактирован: 15 апреля 2015, 01:44
13 Fargo Сообщений: 495
По срокам редактирования формул в советнике — я озвучила — до конца апреля.
Готова формулы менять в советнике каждый день (кроме выходных) не чаще 2 раз в день.
Только бы понять, что именно менять на что.
Так что наблюдай со стороны
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
13 Fargo Сообщений: 495
знак "-" должен фигурировать (как минимум) в поправке на своп, т.к. для ордера на продажу поправка на своп должна смещать БУ в большую сторону
(вверх, т.е. поправка должна прибавляться).
И в случаях
знаки также обязательны.
В остальных случаях и в первом слагаемом формулы для они не обязательны, но могут быть (на результате расчета БУ они не отразятся)
12 Inthenight Автор Сообщений: 77
( (цена первая)*(лот первый)*(часть лота) + сумма((цена)*(лот)) )
/ ( (лот первый)*(часть лота) + сумма(лотов) )
— (своп первый*часть + сумма(свопов)) / ( 10 000*((лот первый)*(часть лота) + сумма(лотов)) )
Без лишних рассуждений, которых мне не понять, какую мне формулу ставить для (buy + sell limit) и (sell + buy limit)?
Вот эту?
( (цена первая)*(лот первый)*(часть лота) — сумма((цена)*(лот)) )
/ ( (лот первый)*(часть лота) — сумма(лотов) )
+ (своп первый*часть — сумма(свопов)) / ( 10 000*((лот первый)*(часть лота) — сумма(лотов)) )
Или другую? То какую?
Редактирован: 15 апреля 2015, 17:16
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
1.
( (цена первая)*(лот первый)*(часть лота) + сумма((цена)*(лот)) )
/ ( (лот первый)*(часть лота) + сумма(лотов) )
— (своп первый*часть + сумма(свопов)) / ( W*((лот первый)*(часть лота) + сумма(лотов)) )
2.
( (цена первая)*(лот первый)*(часть лота) + сумма((цена)*(лот)) )
/ ( (лот первый)*(часть лота) + сумма(лотов) )
+ (своп первый*часть + сумма(свопов)) / ( W*((лот первый)*(часть лота) + сумма(лотов)) )
3.
( (цена первая)*(лот первый)*(часть лота) — сумма((цена)*(лот)) )
/ ( (лот первый)*(часть лота) — сумма(лотов) )
— (своп первый*часть + сумма(свопов)) / ( W*((лот первый)*(часть лота) — сумма(лотов)) )
4.
( (цена первая)*(лот первый)*(часть лота) — сумма((цена)*(лот)) )
/ ( (лот первый)*(часть лота) — сумма(лотов) )
+ (своп первый*часть + сумма(свопов)) / ( W*((лот первый)*(часть лота) — сумма(лотов)) )
12 Inthenight Автор Сообщений: 77
Файл: opentraders.ru/downloads/649/
Чтобы проверить безубыточность у значения TakeProfit должно быть 0
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
12 Inthenight Автор Сообщений: 77
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
12 Inthenight Автор Сообщений: 77
Это хорошо при ситуации (buy + buy limit) и (sell + sell limit)
А при двух других ситуаций как правильно?
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
сетка на покупку — ТП прибавляем;
сетка на продажу — ТП отнимаем от БУ
(лотность сетки всегда больше или равна лотности первого ордера*К, соответственно ТП всегда будет по направлению сетки)
12 Inthenight Автор Сообщений: 77
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
12 Inthenight Автор Сообщений: 77
prntscr.com/6ud1zx
prntscr.com/6ud25o
Да и не закрывал сетку (хотя ТП и БУ были достигнуты — скрин увы не сделал)
Если не ошибаюсь, то сбой идет из-за деления на 0 в случае разнонаправленных ордеров.
Здесь помогло бы
Редактирован: 16 апреля 2015, 12:22
12 Inthenight Автор Сообщений: 77
Я поняла, что ошибка из-за деления на 0
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
12 Inthenight Автор Сообщений: 77
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
12 Inthenight Автор Сообщений: 77
( (цена первая)*(лот первый)*(часть лота) + сумма((цена)*(лот)) )
/ ( (лот первый)*(часть лота) + сумма(лотов) )
— (своп первый*часть + сумма(свопов)) / ( W*((лот первый)*(часть лота) + сумма(лотов)) )
, но у лота (в т.ч. первого) приписывать знак "-", если ордер «селл» (как удобнее)
12 Inthenight Автор Сообщений: 77
Заметил один нюанс — при перемене ТП (да и вообще любого параметра) во время работы совы он перестает отображать ТП и БУ, и не работает дальше. А возможно ли реализовать возможность «горячей» замены ТП у совы? Если нет или это потребует большой переделки, то — нет
В любом случае благодарен вам за получившийся продукт! Т. к. он — работает.
12 Inthenight Автор Сообщений: 77
А так, все ошибки и все действия советник пишет во вкладках «Эксперты» и «Журнал»
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
12 Inthenight Автор Сообщений: 77
Вы же в курсе, что мне не понять в чем ошибка, пока вы мне не предоставите скрины вкладок «Эксперты» и «Журнал».
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
prntscr.com/6wuth3
prntscr.com/6wutos
prntscr.com/6wutum
prntscr.com/6wuu0t
prntscr.com/6wuu6r
12 Inthenight Автор Сообщений: 77
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
название тоже
27 Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..
12 Inthenight Автор Сообщений: 77
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий