Высокочастотный советник-скальпер

andre.nn

Новичок форума
Знатоки, не подскажете, в каких строках кода происходит наполнение массивов, а то кроме как в ините нигде не видать.
 

senchakv

VIP-участник
Знатоки, не подскажете, в каких строках кода происходит наполнение массивов, а то кроме как в ините нигде не видать.

for (int i=0; i<K-1; i++)
{
mass_tick=mass_tick[i+1];
mass_range=mass_range[i+1];
}
mass_tick[K-1]=kol_tick;
mass_range[K-1]=MathAbs(range_start-range_end);

Структура очередь по типу FIFO.
 

Геша5

ỔχστĦиҜ Ħ₳ ҦթტФИŢ
Подскажи какой ставить?С какими сетами?
Тайм,пара,брокер?
А то были переделки.Спасибо. :)
я же написал СОВА С ПЕРВОГО ПОСТА...
без сета по дефолтным.
надо крутить настройки
тайм вроде не играет роли
в теме идёт обсуждение на русском:)
 
  • Like
Реакции: gek

Геша5

ỔχστĦиҜ Ħ₳ ҦթტФИŢ
привет! И как резы?
Привет, резы вроде не плохие
завысил лот,поставил 0.1
поменял период в секундах на 120
тестю только на кабеле пока
всего 2 дня на демке торговал,так что не спешу с выводами
 

Вложения

  • Screenshot_1.png
    Screenshot_1.png
    48,3 КБ · Просмотры: 409

Heroix

Активный участник
Хм, а вы берете в расчет объем бест банда?
Одно дело, когда он равен 10000, другое, когда 1000000.
 

SW111

Гуру форума
об чём речь! конечно! банда дело святое...особенно если она бест! :laugh:
 

Heroix

Активный участник
об чём речь! конечно! банда дело святое...особенно если она бест! :laugh:

Что-то не очень смешно. Раньше шутки лучше были, Евгений Ваганович.

--------

Теперь по коду. Глянул его краем глаза.. Жесть, господа. Начну с основного, с условия открытия:
if (kol_tick>tick_avg && MathAbs(range_start-range_end)>range_avg && MathAbs(range_start-range_end)>min_range)

Перевожу на русский язык условие.
Если последний тик больше среднего арифметического из массива тиков
и если модуль разницы значения тика при инициализации и значения последнего известого тика больше среднего арифметического массива разниц (разница значения тика при инициализации и значениями последующих тиков)
и если модуль если модуль разницы значения тика при инициализации и значения последнего известого тика больше минимального порога (min_range)
то идет открытие.

Извините, но это бред. Особенно то, как в советнике присваивается значение range_start.. и как это напрямую влияет на выполнение условий при уходе цены от той, что была при запуске советника.
Логичнее же присваивать значение range_start=mass_range[0] в момент пересчета массива, если mass_range[0]!=0.

И это только то, что просто бросилось в глаза. Есть еще косяки... ну да ладно.
 

senchakv

VIP-участник
Что-то не очень смешно. Раньше шутки лучше были, Евгений Ваганович.

--------

Теперь по коду. Глянул его краем глаза.. Жесть, господа. Начну с основного, с условия открытия:
if (kol_tick>tick_avg && MathAbs(range_start-range_end)>range_avg && MathAbs(range_start-range_end)>min_range)

Перевожу на русский язык условие.
Если последний тик больше среднего арифметического из массива тиков
и если модуль разницы значения тика при инициализации и значения последнего известого тика больше среднего арифметического массива разниц (разница значения тика при инициализации и значениями последующих тиков)
и если модуль если модуль разницы значения тика при инициализации и значения последнего известого тика больше минимального порога (min_range)
то идет открытие.

Извините, но это бред. Особенно то, как в советнике присваивается значение range_start.. и как это напрямую влияет на выполнение условий при уходе цены от той, что была при запуске советника.
Логичнее же присваивать значение range_start=mass_range[0] в момент пересчета массива, если mass_range[0]!=0.

И это только то, что просто бросилось в глаза. Есть еще косяки... ну да ладно.

"Я вижу дерево. Оно зеленое. Знаете, это бред. Почему? Потому что оно с листьями."

Вот как-то так выглядит твоя критика.

Начну с самого простого. Предложи что-то лучше?

Далее. Если ты не понимаешь до конца смысл параметра "range_start", да и вообще ты явно не понимаешь весь принцип работы алгоритма, о чем тут говорить?

Условия if...then...else умеют читать даже последние ламеры.

Проведи модуляцию на листке бумаги всего алгоритма, скажем, с 1 тика до 100го с учетом времени. Допустим, 1 тик = 1 секунда. Может быть тогда тебе станет ясно как работает алгоритм и в чем была задумка.
 
Последнее редактирование модератором:

senchakv

VIP-участник
range_start и range_end - это параметры, которые запоминают границы последнего интервала в секундах, запись идет в пунктах.

в массиве mass_range хранится K интервалов по N секунд. Запись и удаление элементов в массив происходит по типу FIFO.

далее по структуре идет расчет среднего по интервалам. А сравниваем мы именно последний известный интервал со средним по K интервалам.
 
Последнее редактирование модератором:
  • Like
Реакции: svoi

Heroix

Активный участник
Ища причину твоей агрессии, пересмотрел код еще раз. Да, действительно, range_star считается не только в OnInit, но и в конце OnTick. Т.к. смотрел бегло, не заметил. Это сводит на нет мой прошлый пост здесь.
Можно это объяснить по-человечески?
 
Последнее редактирование модератором:

yisfx

Местный знаток
senchakv, привет! Интересная идея. А если добавить к среднему еще и первую, вторую производную? То бишь, смотреть не только отклонение величины но и скорость, ускорение этого отклонения? В начале резкого движения не только прыгает сама цена, но и увеличивается скорость в сторону возможного движения. Как вариант, смотрим на изменение среднего движения, имеем увеличение скорости в ту же сторону (для простоты можно заменить просто на количество тиков в сторону предполагаемого движения или, что на мой взгляд, правильнее - произведение однонаправленных тиков на их количество). Получили например, рывок вверх, произведение up-тиков на их количества > down-тиков на их количество, взводим курок. Как только знак произведения меняется или они становятся примерно равны, входим в сделку. Обычно любой движняк состоит из рывка, отката или паузы и продолжения движения. Так мы будем входить на откате, потом брать свой кусок движения и сваливать... Как-то так...
Стоплосс можно ставить на уровень с которого началось движение. Выходить опять по смене знака произведения и/или приросту в обратную сторону, тралу...
 
Последнее редактирование:

senchakv

VIP-участник
Ища причину твоей агрессии, пересмотрел код еще раз. Да, действительно, range_star считается не только в OnInit, но и в конце OnTick. Т.к. смотрел бегло, не заметил. Это сводит на нет мой прошлый пост здесь.
Можно это объяснить по-человечески?

Прошу прощения за агрессию. Был не прав.
 

senchakv

VIP-участник
senchakv, привет! Интересная идея. А если добавить к среднему еще и первую, вторую производную? То бишь, смотреть не только отклонение величины но и скорость, ускорение этого отклонения? В начале резкого движения не только прыгает сама цена, но и увеличивается скорость в сторону возможного движения. Как вариант, смотрим на изменение среднего движения, имеем увеличение скорости в ту же сторону (для простоты можно заменить просто на количество тиков в сторону предполагаемого движения или, что на мой взгляд, правильнее - произведение однонаправленных тиков на их количество). Получили например, рывок вверх, произведение up-тиков на их количества > down-тиков на их количество, взводим курок. Как только знак произведения меняется или они становятся примерно равны, входим в сделку. Обычно любой движняк состоит из рывка, отката или паузы и продолжения движения. Так мы будем входить на откате, потом брать свой кусок движения и сваливать... Как-то так...
Стоплосс можно ставить на уровень с которого началось движение. Выходить опять по смене знака произведения и/или приросту в обратную сторону, тралу...

Честно сказать, долго и вдумчиво читал твой пост. Очень интересные мысли.

Мне пока сложно представить расчет параметра а (ускорение), имея текущие исходные данные. Поможешь советом?

На данном этапе я могу произвести расчет среднеквадратического отклонения на каждом отрезке времени в массиве. Как известно, этот принцип заложен в Болингер.
Можно создать отдельный массив отклонений.
Сама идея ср.квадратического в форексе - цена никогда не сможет уйти за рамки границ отклонения, а ширина этих границ характеризует волатильность. Усредняя данные массива, можно получить сглаженный параметр и уже входить от рынка при выходе за границы средней.
Но это так, в качестве дополнительного фильтра.

Может скооперируемся?
 

dimeon

Местный знаток
сов пытается определить по импульсу направление движения. У нормальных брокеров стоповые ордера скользят в минус. При этом используется фрмирование свечи в тестере. НА реале результат будет совсем непредсказуемый.
 
Верх