Помогите подобрать примерный алгоритм для счетчика сделок

Страницы: 1
RSS
Помогите подобрать примерный алгоритм для счетчика сделок
 
Добрый день, друзья. У меня возникла проблема с количеством исполнения сделок на одну свечку. У меня есть алгоритм для сохранения свечей в коллекцию. Однако у него одна особенность, а именно он сохраняет коллекцию только завершенные свечи, т.е. в коллекцию идут предыдущая свеча и несколько перед ней, а текущая незавершенная не учитывается. Сигнал на вход 2 последовательные свечи одного цвета с неким коротким стопом. Однако если данный вход будет "ложным" и сделку выбьет по стопу, алгоритм тут же войдет снова по рыночной цене, причем стоп может стоять выше покупки, если эта сделка, например, на покупку, а текущая свеча медвежья и имеет более широкий диапазон, чем предыдущая бычья. Выходом может служить знание алгоритма, что на одну свечу можно открывать только одну сделку и если, сделка стопится, то ждать следующую свечу. И вот здесь я никак не могу сообразить. Можно все таки учитывать текущую незавершенную свечку в коллекции, как самую первую с номером 0 например и уже известной ценой open. И как только данной значение open переместится на след. позицию в коллекции с номером 1, то все можно совершать еще одну сделку. И вот как это реализовать не понятно, прошу помощи  
 
Артем,
на сколько становится понятно, вопрос сводится к тому что нужно определить появление новой свечки?
Если так, что таким сигналом может быть номер свечки.
Если номер изменился, значит это новая свечка.
Через CreateDataSource подписаться на нужный график.
Установить колбек через SetUpdateCallback.
В колбеке ловить все свечки.
Можно создать таблицу t={}
И записывать в эту таблицу свечки по номеру
t.[index]=..

Если свечка изменилась то t.[index] обновится
Если случилась новая свечка, то в таблице t появится новая запись
если index не равен предыдущему значению, значит случилась новая свечка.

Тут следует заметить что могут быть нюансы при первичном запуске, когда прокачивается старая информация.
Следует предусмотреть логику проверки, старая это свечка или новая. например проверять время свечки.
 
Sergey Gorokhov, добрый вечер. Я совсем недавно в алгоритмизации на Quik'ке., поэтому могут задать глупый вопрос, но все-таки. То что вы предлагаете в целом понятно, однако не ясно как хранить пред. значение t.[index]. Т.е. допустим сейчас t.[index] равен некому n. Через несколько минут появляется новая свеча и t.[index] становится n+1. Не понятно где и как хранить предыдущее значение индекса n, чтобы их сравнивать и понять, что они отличаются? С другой стороны точно также текущий индекс n текущей свечи будет отличаться от свечи n-1, и следовательно при прогонке всего цикла сохранения свечей в коллекцию относительно пред. свечи текущая свеча будет обозначаться, как новая, (а ведь за время жизни свечи алгоритм может отработаться несколько раз и скорее всего алгоритм будет считать ее, как только что появившееся) и будет сбрасывать флаг совершения сделки по данной свечи снова в 0  
 
Цитата
Артем написал:
Через несколько минут появляется новая свеча и t.[index] становится n+1.
index ведь изменится не так ли (появляется новая свеча).
А значит ничего не мешает обратиться к данным предыдущей свечки через t[index-1]
 
Sergey Gorokhov, согласен, но как я уже сказал время прогонки всего алгоритма много меньше жизни одной свечи, например 15 минутки. Да, в первые секунды появления новой свечи, он ( алгоритм) увидит новый индекс, который логично не равен индекс -1, все, классно, если флага совершения сделки нет или равен 0, он ее совершит. Секунд через 45 он снова прогонит весь алгоритм, в который переменная флага совершения сделки, которая стоит в начале каждого шага цикла for, будет снова ровна 0 и новый индекс все также не равен индекс -1. Т.е. алгоритм не будет знать какую пар свечей он сравнивает: 2 раза пару (index-1;index) или по разу две пары (index-1;index) и (index;index+1), потому что разница  между ними одно и тоже значение. Удобней здесь, на мой взгляд, сравнивать не индексы, а цены открытия свечи, т. е. open(index) - open(index-1)  с большой долей вероятности будет отличаться от open(index+1) - open(index), и, соответсвенно, даже если 20 раз прогнать алгоритм по свечи со значением open(index) - open(index-1), а на 21 появляется pen(index+1) - open(index) мы будем знать, что именно сейчас появилась новая свеча. Но для этого мы должны знать, как хранить, именно, open(index) - open(index-1). Т. е. задача сводиться к тому чтобы задать некие 2 переменные: одна из которых будет отслеживать текущую разницу open, а вторая хранить контрольную  и массив примет след. вид


прогонка 1 open(index) - open(index-1) ; open(index) - open(index-1)
прогонка 2 open(index) - open(index-1) ; open(index) - open(index-1)
прогонка 3 open(index) - open(index-1) ; pen(index+1) - open(index) именно здесь появляется новая свеча, и текущая разница не равна контрольной
прогонка 4 open(index+1) - open(index) ; pen(index+1) - open(index) до
прогонка n open(index+1) - open(index) ; pen(index+2) - open(index+1)
но вот как создать переменную с контрольной разницей не понятно , чтобы в момент появления свечи, алгоритм все еще ее помнил, но в тоже время,  тупо не брал ее из предыдущих значений массива. Видимо контрольная переменная должна запаздывать на 1 шаг от текущий, но не в рамка цикла for, а в рамках одной прогонки всего алгоритма
 
Цитата
Артем написал:
Т.е. алгоритм не будет знать какую пар свечей он сравнивает:
Давайте еще раз.
Сравнить текущий номер свечки и номер предыдущей свечки Вы можете, так? Так.
Что мешает использовать это для проверки новая свечка или нет?

oldIndex=0
....
if (oldIndex~=index) then
--случилась новая свеча
oldIndex==index
else
--старая свеча
end
Страницы: 1
Читают тему
Наверх