[Советник] Написание советника по MIX

От SergShyko, 17 января, 2017 в Лаборатория ProfitFX

#526

Пару слов - на этой неделе процесс никак не закончу (в четверг думал, что уже все сделано, но во время тестирования понял, что весь алгоритм сетки заложен неправильный) сейчас алгоритм новый доработан и начал его реализовывать в коде. Так что меня не теряйте - процесс с большим скрипом но идет :">.

Нюансики, которые вылезли :
1 Все таки в имеющейся реализации доливок последний ордер периодически вылазит в большой минус и цепляется вытягивающей сеткой для закрытия минуса - как вариант возможного выхода, если у ордеров есть
БУ то СЛ при открытии нового доливочного ордера ставится на этот уровень, если нет БУ то пользователь сам решает с помощью параметров совы "СЛ" и "Убыток в пунктах для возможности открытия вытягивающей сетки", вытягивать убыток доливочного ордера или нет.
2 Будущий убыток ордеров ушедших в минус, при открытии нового колена вытягивающей сетки невозможно просчитать из-за например будущего свопа или проскальзывания при закрытии и получается,
что иногда будет минус по ордерам получаться если пользователь не будет использовать увеличивающий множитель лота.

#527

Добил таки вопрос :) И даже лето еще наступило )))

//v2.30
// 1. Убрана опция из версии 2.111 "Закрытие ордера при "Противоположный сигнал"="Вкл""
//
// 2. Изменен механизм открытия доливочных ордеров
// - При одновременном СЛ =0 и БУ=0 доливочные ордера не открываются.
// - Параметр советника "Расстояние для открытия доливки от пред. ордера"
// работает и в случае БУ>0, для работы этого параметра как в предыдущих версиях,
// в этом параметре необходимо проставить значение БУ.
// Таким образом реализована возможность открытия доливочных ордеров "не впритык"
// к уровню закрытия предыдущего доливочного ордера.
// В случае БУ>0 и "Расстояние для открытия доливки от пред. ордера">0
// для открытия доливочнго ордера должны быть выполнены оба условия
//
// 3.Добавлена опция открытия "вытягивающей" сетки ордеров
//
// Общая концепция сетки -
// в настройках указывается количество пунктов, при
// превышении которого в минус, советник "ловит"
// стандартный сигнал на открытие ордера.
// При получении такого сигнала, считается текущий убыток
// и открывается ордер с ТП из настроек советника, лотом который
// при достижении ТП перекроет все текущие убытки.
// При этом при достижении ТП последнего колена будут закрыты
// все открытые советником ордера.
//
// - Опция не работает если в настройках "ТП"=0 или "СЛ">0 или
// "Противоположный сигнал Вкл/Выкл" = true
// - Опция работает только по ордеру, который не был
// обрабатан опциями "Сейф и БУ"
// - Если опция сработала то пока вытягивающая сетка не закрыта
// опции Сейф, БУ, Доливки, Противоположный сигнал не работают
// - Блок управления вытягиваюшей сеткой
// Опция вкл/выкл - включение/отключение работы сетки
// Уровень убытка в пунктах, для возможной активации нового колена -
// открытие нового колнеа вытягивающий сетки возможно только
// при текущем привышении убытка последнего ордера в пунктах на эту величину
// Множитель лота нового колена -
// для получения прибыли от открытия нового колена
// если опиця равны 1,0 то сетка закрывается в безубытке
//
//
// - Нюансы/вопросы
// ??? Если на момент открытия нового колена убытка по закрытию
// по новому ТП у ордера нет, то новое колено открывается стандартным лотом*Множитель лота следующего колена
// ((ситуация возможна если "ТП"> "Уровень убытка в пунктах, для возможной активации нового колена ) )"
// !!! Округление при расчете лота стоит в большую сторону -> например если при рассчетах получится 0,011 лота, то
// будет округление лота до 0,02 (при открытии)
// ??? Сетка подхватывает в том числе и доливочные ордера, уходящие в минус
//


P.S. Внимательно тестим - изменение большое, а на полноценное тестирование у меня времени не хватает.

Mix_v2.30.ex418 скач.

#528
AndreyGold - что то неправильно идет в лотах открытия вытягивающих ордеров сетки, множитель поставил 1, по теории сетка должна рассчитываться и закрываться в БУ или с маленьким плюсом за счет округления в большую сторону, а получается что выскакивают лоты которые дают какую то сумасшедшую прибыль, хотя должны просто выводить в БУ при закрытии если не используется множитель. Все бы хорошо, но за счет неправильного расчета идет завышение лотности, а это ни есть хорошо.

PS присмотрелся к результатам, такое ощущение, что где то идет умножение на 10, в расчете следующего выставляемого ордера.

StrategyTester.gif
StrategyTester.htm16 скач.

Изменено 19 апреля, 2017 пользователем Сергей С

#529

Сергей С



AndreyGold - что то неправильно идет в лотах открытия вытягивающих ордеров сетки, множитель поставил 1, по теории сетка должна рассчитываться и закрываться в БУ или с маленьким плюсом за счет округления в большую сторону, а получается что выскакивают лоты которые дают какую то сумасшедшую прибыль, хотя должны просто выводить в БУ при закрытии если не используется множитель. Все бы хорошо, но за счет неправильного расчета идет завышение лотности, а это ни есть хорошо.

PS присмотрелся к результатам, такое ощущение, что где то идет умножение на 10, в расчете следующего выставляемого ордера.


Сергей С
У себя такого не вижу (на скрине график и кусок с результами из тестера). Фрагмент в результатах - там лот увеличивается в 40 раз с 0,01 до 0,38 и это как я понимаю нормально - закрылась сетка при множителе 1, состоящая из 14 ордеров с общей прибылью 14$.
Хотя я сейчас понял, что получается: пока скорее всего сделано, что сетка закрывается не в 0, а 0+прибыль от последнего ордера (то есть предполагаемая прибыль от открывающегося ордера (нового колена) не вычитается из имеющегося на момент открытия накопленного минуса)..... это я гляну и если это так, подправлю

На всякий случай - ответьте на вопросики:
Валютная пара ?
Есть ли комиссия у счета ?
Скрин "Куска", который смущает из вкладки результаты
И сетап совы нужен, чтобы я попытался воспроизвести Вашу ситуацию у себя.

P.S. Про завышение лота полностью согласен - оно должно происходить только подконтрольно (то есть по правильному рассчету)

PPS Сорррррри - не заметил, что у Вас два файла приложено к сообщению

2017-04-20_01-43-51.png
2017-04-20_01-41-57.png

Изменено 19 апреля, 2017 пользователем AndreyGold

#530


Валютная пара ?
Есть ли комиссия у счета ?
Скрин "Куска", который смущает из вкладки результаты
И сетап совы нужен, чтобы я попытался воспроизвести Вашу ситуацию у себя.


пара евро доллар
комиссия есть
Скрин и сет во вложении

скрин_по_расчету.jpg
Для_проверки_евро_бакс_М1.set8 скач.

#531

Да ужжжж - забавно у меня такого нет (см файл). Там результаты за 17 дней января по EURUSD по Вашему сету. Там видно что сетки закрываются в небольшой плюс.
А у Вас действительно тестер как-будто умножает лот на каждом колене на 10 (от необходимого) ....
Думаю разница где-то в финансовых настройках счетов - у вас комиссия + как я понял центовый счет.
Буду посмотреть )) на свежую голову, вплоть думаю до того, чтобы подключиться к аналогичному Вашему типу счета у вашего брокера. И сравнить какой параметр дает эту 10ку как множитель ....

P.S. Чувствую я : "как много нам открытий чудных готовит просвещенья дух"
Черкните брокера и тип счета пожалуйста ))

StrategyTester.gif
StrategyTester.htm6 скач.

#532
AndreyGold может быть из за билдов терминала идет разница, у Вас 971 у меня 1065, и где то идет вычисление 5 знака по другому, от туда и берется эта 10ка, но это только догадка, а так счет на Forex4you центовый 5 знак.
#533

Скачал терминал Forex4you, к сожалению подключиться к серверу Вашего типа счета мне не дали - типа если демо, могу подключиться только к демосерверу. Подключился к нему, запустил сову с Вашими настройками. Получается нормальная картина (см файлы) билд 1065. Правда получается 4ех знак и при этом лот ни разу не увеличился, хотя отработало все нормально .....
Пошел дальше ковырять проблему.


Добавлено: 20-04-2017 19:17:15

Сергей С Увеличил в Ваших настройках Лот до 10, остальные параметры те же. Прогнал в тестере Forex4you. Появились сетки, у которых лот отличается от стартового, но опять все в норме. Вы может как их клиент обсудите сложившуюся ситуацию, чтобы как-то мне все-таки получить доступ к тому же типу счета, (не открывая личный счет у них), на котором Вы имеете проблемы.

StrategyTester.gif
StrategyTester.htm8 скач.

Изменено 20 апреля, 2017 пользователем AndreyGold

#534
AndreyGold - не могли бы Вы, выложить фрагмент кода, где идет расчет следующего лота для открытия, может вместе посмотрим почему так происходит.
Если не получится дам пароль к терминалу, попробуете поковыряться.

PS побывал поставить коэффициент умножения следующего лота 0,1 в расчете на то что он поделит лот на 10, так вообще ни чего не происходит все остается так же, что весьма странно, в моем понятии в формуле расчета лота, он должен быть последним множителем полученного результата.

Изменено 21 апреля, 2017 пользователем Сергей С

#535
Сергей С Запустите у себя вложенный в это сообщение скрипт.

Он выводит на график в верхний левый угол три параметра :
1 TICKVALUE -Размер минимального изменения цены инструмента в валюте депозита
2 TICKSIZE - Минимальный шаг изменения цены инструмента в пунктах
3 POINT - Размер пункта в валюте котировки

У меня на Альпах это - 1.0, 1е-05, 1е-05
На Демо от Forex4you - 10, 0.0001, 0.0001

Я думаю что у Вас будет что-то среднее между этими двумя типами счетов, и тут я подозреваю зарыта собака и это приводит к нарушению пропорций и разнице в 10 раз)) Черкните плиз, что у Вас напишет

Info.ex45 скач.

#536

Запустите у себя вложенный в это сообщение скрипт.




PS поставил советник на 4-х знак, все работает нормально, судя по всему, где то идет ошибка при расчете дистанции пятизначной котировки, скрин с 4х знака во вложении

результат_скрипта.jpg
4-х_знак.jpg

Изменено 21 апреля, 2017 пользователем Сергей С

#537

Так у меня при таких параметрах на пятизнаке альпов работает. Один момент я не могу проверить как отрабатываюся рассчеты с комиссией. Почему-то при запуске тестера на счете с комиссией она берется нулевой (((

Ну тогда вот фрагмент расчета лота нового колена при Сетке на Sell:

TakeProfit=NormalizeDouble(Bid-TP*_Point,_Digits);

for(int i1057=max_count-1;i1057>=0;i1057--)
{
if(OrderSelect(i1057,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==_Symbol && OrderMagicNumber()==mgNumber && OrderType()==OP_SELL)
{
ubytok=ubytok+OrderSwap()+OrderCommission()+(OrderOpenPrice()-TakeProfit)*OrderLots() *MarketInfo(Symbol(),MODE_TICKVALUE)/(MarketInfo(Symbol(),MODE_TICKSIZE));
mn_comm=OrderCommission()/OrderLots();
}//if(OrderSymbol()==_Symbol && OrderMagicNumber()==mgNumber && OrderType()==OP_SELL)
}//if(OrderSelect(i1057,SELECT_BY_POS,MODE_TRADES))

}// for(int i1057=max_count-1;i>=0;i--)


lts=ubytok *MarketInfo(Symbol(),MODE_TICKSIZE)/((TP*_Point)*MarketInfo(Symbol(),MODE_TICKVALUE))*NetFactorLots+mn_comm*MathAbs((ubytok*MarketInfo(Symbol(),MODE_TICKSIZE)/((TP*_Point)*MarketInfo(Symbol(),MODE_TICKVALUE))));
if(lts else lts=NormalizeDouble(MathCeil(Vol*NetFactorLots*100)/100,2);

С этим Лотом=lts потом и открывается новое колено


Добавлено: 21-04-2017 14:58:19

То есть общий смысл
рассчитываем ТП будущего нового колена - TakeProfit
затем в цикле бежим по всем открытым ордерам - max_count
проверяем их на соответствие нашей сетке, вычисляем по ним по ним результат если ордер закроется на уровне - TakeProfit
ubytok

перебрав все ордера получаем по ним суммарный убыток, затем умножаем на множитель, пытаемся в убыток еще засунуть комиссию
нового колена, проверяем этот "убыток" получается в минус или плюс, делаем окончательные округления

Изменено 21 апреля, 2017 пользователем AndreyGold

#538
AndreyGold мне кажется вся загвоздка идет в этой функции _Point определения значности счета, в настройках у нас идет задание ТП в зависимости от значности счета, если Мы торгуем на 5 знаке то ТП указываем 100 если на 4х знаке указываем 10 , теперь если торговля идет на 4х знаке _Point = 1 если на 5 знаках _Point = 10 вот оно и множит на 10 наш ТП в настройках. Так и получается что расчитывается лот из расчета что до БУ расстояние в 10 раз больше.
Тут надо приводить ТП к общему знаменателю либо делать автоматическое определение 5 знака уже во всех функциях и все приводить к 4х значным настройкам.

Изменено 21 апреля, 2017 пользователем Сергей С

#539

Не - не так:
_Point это системная переменная - размер пункта текущего инструмента в валюте котировки
на 5ти знаке равен 0,00001, а на четырехзнаке равен 0,0001.
Соответственно если в настройках ТП=100 на пятзизнаке , то по факту это 0,001, ну а если 10 на 4ех знаке то ТП= те же 0,001.
Фактически Вы эту переменную выводили с помощью скрипта Info() - MODE_POINT

#540

Я могу и ошибаться, но точно все кроется в определении значений 5 ти знаков и 4х знаков иначе почему у меня на 4х знаках все работает.

Изменено 21 апреля, 2017 пользователем Сергей С

#541

Как я понимаю это, когда уже сова оттестирована и получены лучшие сеты, то чтобы народ руками не вбивал например ТП где 100, где 10 (в зависимости от того четырехзнак у них или пятизнак)- прописывают подобную функцию.
А у нас с Вами проблема другая - ну считается ТП более большим не 10 как хотелось бы а 100, из-за того что не учитывается нюанс, про который Вы указываете. При этом Сетка не будет перекрываться ордером с прибылью в 10 раз больше от того, что надо. Ну увеличатся и прибыль и убытки это все произойдет соразмерно и закрытие последнего колена сетки будет закрывать сетку в небольшой плюс.

Я когда доберусь до терминалов (уже не сегодня, пока не знаю когда) сделаю тесты на 5ти значном счете и на 4ех знаке и разница будет только в ТП 100 пунктов в первом случае и 10 во втором. И там и там картины будут разные, но при этом сетки закрываются корректно - я это проверял и вчера и сегодня. Результаты выложу.
А на выложенном Вами отчете там действительно у последнего колена сетки вместо например необходимой прибыли 40$ получается неправильные 400$. Ну в общем я пока не врубаюсь в чем проблема.

Я безусловно еще раз (а может и не раз :d )на свежую голову прочитаю Ваши соображения, может я что-то не так в них понимаю.


Добавлено: 21-04-2017 17:23:19

Попробуйте Сами поиграть размером ТП на 4ех значном Вашем счете и на 5значном Вашем счете, если все как я думаю - все отчеты на 4ех знаке у Вас будут нормальными, а на 5ти значном будет одна и таже проблема - суперзавышенной доходности, при этом если Вы скачаете демку например у Альпов там такой проблемы не будет.

Изменено 21 апреля, 2017 пользователем AndreyGold

#542
AndreyGold - может пока пойти радикальным путем, поставить делитель высчитанного лота на 10 раз (индивидуально для меня o:-)), но вообще не понятно почему у меня не уменьшается расчет открываемого ордера если я ставлю коэффициент множителя лота нового колена 0,1, по теории на пяти знаке у меня должны были последующие ордера открываться именно в 10 раз меньше и я бы получил как раз желаемый результат, тоже вопрос :-?
#543

Ок - сделаю автоматическую корректировку при инициализации всех параметров советника из сетапа в пунктах 5 знака на 4ех знак делением на 10

#544

А на выложенном Вами отчете там действительно у последнего колена сетки вместо например необходимой прибыли 40$ получается неправильные 400$. Ну в общем я пока не врубаюсь в чем проблема.



Уровень ТП в советнике очень стабилен сколько задаешь столько он и устанавливает, завышение идет только в размере высчитанной лотности следующего открываемого ордера.
Советник почему то считает, что убыток от прошлой сделки больше чем положено в 10 раз и тем самым увеличивает лот в 10 раз чтобы покрыть этот убыток при стабильном ТП на закрытие.
Получается - где то идет либо увеличенный убыток при расчете, либо подсчет самого лота для открытия идет неправильно для 5ти знака и 4х знаков.
#545
Сергей С
Давайте все-таки попытаемся найти причину.
Прикладываю версию, которая в Лог при тестировании фиксирует все переменные, связанные, как с убытком конкретного ордера, так и с подсчетом
лота.
Необходимо в тестере запустить советника, чтобы был зацеплен хотя бы один период открытия ордера вытягивающей сетки завышенным лотом.
Затем сделать отчет (вкладка отчет тестера - сохранить как отчет после нажатия правой кнопки мыши).
И взять файл лога -> Файл -> Открыть каталог данных -> tester\logs -> выбираем лог с последней датой.
И эти оба файла прикрутить к ответу.
Надеюсь там пойму, откуда ноги растут у таких лотов )))

Mix_v2.30111111.ex44 скач.

#546

Ну вот что получается во вложении

PS результаты 4х знака

StrategyTester.htm9 скач.
20170424.log8 скач.
4х_StrategyTester.htm4 скач.
4х_20170424.txt3 скач.

Изменено 24 апреля, 2017 пользователем Сергей С

#547

Это лог версии 2,30 нужен лог последней версии 2,30111111

#548

там в самом низу файла лог от 2,30111111

#549

Ок - увидел )))


Добавлено: 24-04-2017 19:30:03

Сергей С
Нашел по ходу в чем ошибка - все таки в рассчете убытка из-за комиссии будущего ордера (кстати сама комиссия равна 10 за Лот, отсюда величины
Лотов на порядок больше и отсутствие ошибки на четырех знаке - там комиссии нет).
А получить у себя тесты с комиссией у меня почему-то не получается - придется Вас поюзать :">

Выкладываю попытку исправления данного косяка - а проверить это на Вас возлагается )))

//v2.31 Попытка исправления расчета убытка из-за комиссии открываемого ордера

Mix_v2.31.ex411 скач.

Изменено 24 апреля, 2017 пользователем AndreyGold

#550

Проверил вроде бы заработало, теперь можно начать тестирование AndreyGold - =d>

PS очень хочется уточнить, как работает коэффициент умножения высчитанного лота, а именно я ставлю 1,5 по идеи второй лот при начальном 0,01 каким бы он не был, он должен быть не менее 0,02.
Поясню мы высчитали размер второго ордера на открытие, лот на открытие меньше минимального разрешенного ДЦ не может быть значит второй лот должен высчитываться если он меньше 0,01 приравниваться к минимальному разрешенному ДЦ, то есть в данном случае будет как раз 0,01. Теперь если высчитанный лот мы умножаем на коэффициент 1,5 получаем лот 0,015 и округляя его до 2х знаков после запятой по всем правилам мы должны получить 0,02 лота, а советник иногда открывает вторые ордера лотами по 0,01. Прошу уточнить как происходит расчет лота с множителем и как происходит округление полученного результата до 2х знаков после запятой (по идее округлять должно всегда в большую сторону, для нормальной работы, даже если полученный лот будет 0,020001 он все равно должен быть выставлен как 0,03 )

5з_StrategyTester.htm10 скач.

Изменено 25 апреля, 2017 пользователем Сергей С

Для публикации сообщений создайте учётную запись или авторизуйтесь

Перейти к списку тем
Форум · 2.0.20260627.0025