АвторСообщение
Anatoliy



Сообщение: 2
Зарегистрирован: 13.07.14
Репутация: 0
ссылка на сообщение  Отправлено: 21.07.14 21:22. Заголовок: Я новичок.


Пишу пользовательский индикатор на основе пересечение уровни 20 и 80. Если главная линия Stochastic пересекла уровень 80 (сверху - вниз), то выводит стрелка Sell на ценовых графиках, а если главная линия Stochastic пересекла уровень 20 (снизу - верх), то стрелка Buy на ценовых графиках.

#property strict
#property indicator_chart_window
#property indicator_buffers 2
//--- plot Buy
#property indicator_type1 DRAW_ARROW
#property indicator_color1 clrGreen
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
//--- plot Sell
#property indicator_type2 DRAW_ARROW
#property indicator_color2 clrRed
#property indicator_style2 STYLE_SOLID
#property indicator_width2 1
//--- input parameters

//--- indicator buffers
double BuyBuffer[];
double SellBuffer[];
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
//+------------------------------------------------------------------+
//| Функция инициализации пользовательского индикатора |
//+------------------------------------------------------------------+
int init()
{
//---
SetIndexBuffer(0,BuyBuffer);
SetIndexArrow(0,233);
SetIndexStyle(0,DRAW_ARROW);
//---
SetIndexBuffer(1,SellBuffer);
SetIndexArrow(1,234);
SetIndexStyle(1,DRAW_ARROW);
//---
SetIndexEmptyValue(0,80.0);
SetIndexEmptyValue(1,20.0);
//---
return(0);
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
//+------------------------------------------------------------------+
//| Функция пользовательского индикатора итерации |
//+------------------------------------------------------------------+
int start()
{
//---
int i, Counted_bars;

double mainStoc_1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,1); // бар 1
double mainStoc_2 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,2); // бар 2

Counted_bars=IndicatorCounted(); // Количество просчитанных баров
i=Bars-Counted_bars-1;

for(i=0;i>=0;i--)
{
if (mainStoc_2 > 80.0 && mainStoc_1 < 80.0)
SellBuffer = Low-5*Point;
else
SellBuffer = 0.0;

if (mainStoc_2 < 20.0 && mainStoc_1 > 20.0)
BuyBuffer = High+5*Point;
else
BuyBuffer = 0.0;
}
//---
return(0);
}

И в результатах индикатор вообще не работает.
Как его исправит?



Спасибо: 0 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 All [только новые]


Balbesik



Сообщение: 272
Зарегистрирован: 13.03.13
Репутация: -1
ссылка на сообщение  Отправлено: 02.06.15 17:45. Заголовок: Блин! Сто раз я тебе..


Блин!
Сто раз я тебе говорил - ну не умею я объяснять!
Вот разрывы -



Да не приделах тут бары вообще, а эквиобъемные вообще - как зайцу пятая нога.
Запутался я в этих записях, перезаписях и обращениях в твоем алгоритме -
надо мне время раз тебе некогда.

P.S.
Покажи мне хоть один график каги, ренки, ренджи, крестики - нолеки, синтетики и проч.,
где есть "разрывы" - да это и есть цель этих "изголяций".
Все от "разрывов" стараются уйти.
Просто методом "укрупнения" (большой размах) идет потеря "чувствительности".
Я уже не знаю как объяснять.

Спасибо: 0 
Профиль
Scriptong





Сообщение: 1574
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 02.06.15 21:37. Заголовок: Balbesik пишет: Бли..


Balbesik пишет:

 цитата:
Блин!
Сто раз я тебе говорил - ну не умею я объяснять!


Мне это известно.
Раз ты сам это хорошо понимаешь, то не нервничай, когда тебя не понимает собеседник, а попытайся терпеливо объяснить другими словами, чего хотел. Ведь от признания тобой факта не умения объяснять я все равно не смогу правильно понять суть того, что ты сказал.

Balbesik пишет:

 цитата:
Вот разрывы -


Да, есть гэпы между тиками (когда между соседними тиками более одного пункта). И что? Для меня это не новость. Для того чтобы убрать эти гэпы, нужно сделать то, о чем ты просишь - "график без дыр". Этим я пока заниматься не буду. Возможно, когда-то в будущем.

Balbesik пишет:

 цитата:
Покажи мне хоть один график каги, ренки, ренджи, крестики - нолеки, синтетики и проч.,
где есть "разрывы" - да это и есть цель этих "изголяций".


Все существующие индикаторы основаны на данных минутного графика, который скрывает гэпы между тиками. Соответственно, на графиках, которые строят эти индикаторы (скрипты), нет такого количества гэпов.
Мой же способ построения - на основе тиков. Он абсолютно точный, показывает реальность такой, какая она есть. Да, она не такая красивая и причесанная, но это 100%-ая реальность. Если сделать по этому методу "график без дыр", то мы получим не причесанную реальность, которую показывают имеющиеся каги, ренджи и т. д., а дополненную реальность. Итоговый график все равно будет отличаться от тех графиков, которые строят перечисленные индикаторы.

Спасибо: 0 
Профиль
Balbesik



Сообщение: 273
Зарегистрирован: 13.03.13
Репутация: -1
ссылка на сообщение  Отправлено: 03.06.15 18:30. Заголовок: Scriptong пишет: Мо..


Scriptong пишет:

 цитата:
Мой же способ построения - на основе тиков. Он абсолютно точный,



Самое смешное, что об этом никто и не спорит.
Только я тебе про черное, а ты мне про белое.

Да не нужна твоя точность никому.
Людям (если ты не работаешь на "кухни") нужен прогноз на основании
индикаторов, сове6тников м прочих инструментах (математики - другого мы не знаем).
Это не возможно сделать "на рваном пространстве".
Ну не работает функция (индикатор) на "рваных" данных.
Пока "Ньютоноское яблоко" падает вниз - соблюдаются законы математики.
Твоя "точность" просто мешает и искажает.

Да сделал я уже все (тебе бы понадобилась минут 15).
Сейчас ( в течении часа) картинку (надо поймать характерную) выложу.
Если кому интересно - пишите - алгоритм прямо здесь выложу.
Там действительно 2*2 = 4, но как я и писал - с этими "записями- перезаписями в схеме Игоря"
пришлось повозится.

Пока не характерно -



Спасибо: 0 
Профиль
Scriptong





Сообщение: 1579
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 04.06.15 09:26. Заголовок: Balbesik пишет: Тол..


Balbesik пишет:

 цитата:
Только я тебе про черное, а ты мне про белое.


Еще раз: все я прекрасно понял. Просто ты, почему-то, не можешь сложить у себя целостное представление о проблеме, постоянно вырезая ее кусочки.

Balbesik пишет:

 цитата:
Да сделал я уже все (тебе бы понадобилась минут 15).


Опять 25. Не делается все на "раз два". Тяп-ляп - это не мой подход. Для нормальной разработки требуется несколько дней. И то после этого выплывает куча нюансов, которые не смог предусмотреть.

Спасибо: 0 
Профиль
Balbesik



Сообщение: 275
Зарегистрирован: 13.03.13
Репутация: -1
ссылка на сообщение  Отправлено: 04.06.15 10:59. Заголовок: Scriptong пишет: Оп..


Scriptong пишет:

 цитата:
Опять 25. Не делается все на "раз два". Тяп-ляп - это не мой подход. Для нормальной разработки требуется несколько дней. И то после этого выплывает куча нюансов, которые не смог предусмотреть.



Я не мудрствовал - взял по аналогии Синбара - изменена только
bool NonStandartTFChart::ConvertData(datetime time, double bid, bool doFlush) .
Меня не интересуют временной и объемный график (только под равновысокий).
Пока работает нормально.
Но у меня есть три вопроса.
Найдешь время посмотреть?

Спасибо: 0 
Профиль
Scriptong





Сообщение: 1582
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 04.06.15 12:40. Заголовок: Balbesik пишет: Най..


Balbesik пишет:

 цитата:
Найдешь время посмотреть?


Только выкладывай файлами.

Спасибо: 0 
Профиль
Balbesik



Сообщение: 276
Зарегистрирован: 13.03.13
Репутация: -1
ссылка на сообщение  Отправлено: 04.06.15 13:39. Заголовок: Scriptong пишет: То..


Scriptong пишет:

 цитата:
Только выкладывай файлами.



click here


bool NonStandartTFChart::ConvertData(datetime time, double bid, bool doFlush)
{
if (!m_isActive)
return true;

H_0 = m_chartProperty * m_point; // ????????????????????????????????????????

// Обновление данных текущего бара /**/
m_rates.high = MathMax(m_rates.high, bid);
m_rates.low = MathMin(m_rates.low, bid);
m_rates.close = bid;
m_rates.tick_volume++;

// Формирование нового бара
if (m_rates.time == 0 || IsNewBarByConvertType(time))
{
// ??????????? - странно как-то, если вынести наверх if (m_rates.time == 0)....
// то график сразу не появляется в "открыть автономно".

if (m_rates.time == 0)
{
m_rates.open = bid;
m_rates.close = bid;
m_rates.high = bid;
m_rates.low = bid;
m_rates.tick_volume = 1;
if ((int)(time - m_rates.time) < 60) // Время открытия нового бара отличается от времени открытия предыдущего бара менее, чем на 1-у минуту
time = m_rates.time + 60; // Сдвиг времени открытия нового бара на одну минуту вперед
m_rates.time = time;
last_fpos=(long)FileTell(m_fileHandle);
}

while( m_rates.close - m_rates.low > H_0) // вверх
{
m_rates.high = m_rates.low + H_0;
m_rates.close = m_rates.low + H_0;
FileSeek(m_fileHandle, last_fpos, SEEK_SET); // SEEK_CUR SEEK_SET
FileWriteStruct(m_fileHandle, m_rates);
//FileFlush(m_fileHandle); // ????????????????????????????????????????
if ((int)(time - m_rates.time) < 60) // Время открытия нового бара отличается от времени открытия предыдущего бара менее, чем на 1-у минуту
time = m_rates.time + 60; // Сдвиг времени открытия нового бара на одну минуту вперед
m_rates.time = time;
m_rates.low = m_rates.low + H_0;
m_rates.open=m_rates.low;
m_rates.tick_volume = 0; // 1 0 ????????????????????????????????????????
last_fpos=(long)FileTell(m_fileHandle);
}

while(m_rates.high - m_rates.close > H_0) // вниз
{
m_rates.low = m_rates.high - H_0;
m_rates.close = m_rates.high - H_0;
FileSeek(m_fileHandle, last_fpos, SEEK_SET); // SEEK_CUR SEEK_SET
FileWriteStruct(m_fileHandle, m_rates);
//FileFlush(m_fileHandle); // ????????????????????????????????????????
if ((int)(time - m_rates.time) < 60) // Время открытия нового бара отличается от времени открытия предыдущего бара менее, чем на 1-у минуту
time = m_rates.time + 60; // Сдвиг времени открытия нового бара на одну минуту вперед
m_rates.time = time;
m_rates.high = m_rates.high - H_0;
m_rates.open = m_rates.high;
m_rates.tick_volume = 0; // 1 0 ????????????????????????????????????????
last_fpos=(long)FileTell(m_fileHandle);
}

}
// Продолжение формирования бара
else
FileSeek(m_fileHandle, -m_ratesSize, SEEK_CUR);

// Запись данных текущего бара
if (FileWriteStruct(m_fileHandle, m_rates) != m_ratesSize)
{
Alert(WindowExpertName(), ": ошибка при записи в файл истории. Индикатор отключен.");
return false;
}

if (doFlush)
FileFlush(m_fileHandle);

return true;
}


Недостаток - идеально работает только свыше спреда (20 пунктов и более).

Оснавная моя проблема - ине вечно не хватает памяти.
Вопросы
1. H_0 = m_chartProperty * m_point; - можно ли это "загнать" в инит? - меньше считать.
2. //FileFlush(m_fileHandle); - закоментировал, чтобы меньше считало - разницы нет,
но есть сомнение - а правомерно ли?

Ну и самое не понятное
3.
if (m_rates.time == 0)
{
m_rates.open = bid;
m_rates.close = bid;
m_rates.high = bid;
m_rates.low = bid;
m_rates.tick_volume = 1;
if ((int)(time - m_rates.time) < 60) // Время открытия нового бара отличается от времени открытия предыдущего бара менее, чем на 1-у минуту
time = m_rates.time + 60; // Сдвиг времени открытия нового бара на одну минуту вперед
m_rates.time = time;
last_fpos=(long)FileTell(m_fileHandle); - это масло - масленое обязательно иначе барахлит
}
если вынести наверх - для красоты, то не сразу появляется грфик в "Открыть автономно",
если есть ранняя история то конечно есть и работает сразу.
Что не так?

Спасибо: 0 
Профиль
Balbesik



Сообщение: 274
Зарегистрирован: 13.03.13
Репутация: -1
ссылка на сообщение  Отправлено: 04.06.15 06:18. Заголовок: Сделал просто "и..


Сделал просто "искусственный Геп"

Более характерно.



Спасибо: 0 
Профиль
Scriptong





Сообщение: 1583
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 04.06.15 14:43. Заголовок: К сожалению, ты вооб..


К сожалению, ты вообще не разобрался в назначении той или иной строки в коде.
Самая главная ошибка - использование записи в файл внутри условий, которые корректируют структуру m_rates:

 цитата:
while( m_rates.close - m_rates.low > H_0) // вверх
{
....
FileWriteStruct(m_fileHandle, m_rates);
....
}

while(m_rates.high - m_rates.close > H_0) // вниз
{
....
FileWriteStruct(m_fileHandle, m_rates);
...
}


Это нельзя помещать перед штатной записью:

 цитата:
// Запись данных текущего бара
if (FileWriteStruct(m_fileHandle, m_rates) != m_ratesSize)
{
Alert(WindowExpertName(), ": ошибка при записи в файл истории. Индикатор отключен.");
return false;
}


Ну а по большому счету - направление мысли правильное. Просто не учитывается громадное количество нюансов. Как сделать правильно, сам не знаю, т. к. для этого нужно сесть и сделать, на что времени нет. Но так, как сделано, тоже нельзя.

Спасибо: 0 
Профиль
Balbesik



Сообщение: 277
Зарегистрирован: 13.03.13
Репутация: -1
ссылка на сообщение  Отправлено: 05.06.15 06:30. Заголовок: Scriptong пишет: К..


Scriptong пишет:

 цитата:

К сожалению, ты вообще не разобрался в назначении той или иной строки в коде.



Это нормально.
Я не программист, никогда меня этому не учили и поэтому и обращаюсь к профи.

Scriptong пишет:

 цитата:
Самая главная ошибка - использование записи в файл внутри условий



Даже не задумывался - повторил Синбар (все вопросы туда).

Scriptong пишет:

 цитата:
которые корректируют структуру m_rates:



А вот это не понял.
Вроде как структура остается, а меняются только величины параметров.

Интересно -

Вот если размах бара менее 20 пунктов (спред) при данном решении индикатор не работает.
У Компостера была та же проблема (он на ее плюнул), возможно это не
зависит от программиста (а зависит от каких-то потоков передачи информации).
Но если исправить мои ошибки (как-то) -
это может решить задачу уменьшения размаха бара (увеличения чувствительности)?



Спасибо: 0 
Профиль
Balbesik



Сообщение: 278
Зарегистрирован: 13.03.13
Репутация: -1
ссылка на сообщение  Отправлено: 05.06.15 08:47. Заголовок: Balbesik пишет: 2. ..




Спасибо: 0 
Профиль
Scriptong





Сообщение: 1586
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 05.06.15 18:22. Заголовок: Balbesik пишет: Но ..


Balbesik пишет:

 цитата:
Но если исправить мои ошибки (как-то) -
это может решить задачу уменьшения размаха бара (увеличения чувствительности)?


Чтобы исправить твои ошибки, мне самому нужно сесть и разобраться (придумать правильную архитектуру кода и ее реализацию), как переделать равновысокие бары в "графики без дыр". В ближайшее время я этим заняться не могу.

Balbesik пишет:

 цитата:
У Компостера была та же проблема (он на ее плюнул), возможно это не
зависит от программиста (а зависит от каких-то потоков передачи информации).


Эту проблему невозможно решить, имея только минутные данные. Нужны тики. На тот момент у komposter'а не было истории тиков.

Спасибо: 0 
Профиль
Balbesik



Сообщение: 279
Зарегистрирован: 13.03.13
Репутация: -1
ссылка на сообщение  Отправлено: 06.06.15 13:01. Заголовок: Scriptong пишет: пр..


Scriptong пишет:

 цитата:
придумать правильную архитектуру кода и ее реализацию



Игорь!

Абсолютно «не горит» по времени, но
очень интересно, если бы ты занялся этой проблемой.

Не понимая взаимосвязей, чисто методом «научного втыка»,
кажется добился стабильной работы на маленьких размахах и
при отсутствии тиковой истории, запуска графика сразу.



Вынес из циклов last_fpos=(long)FileTell(m_fileHandle); ,
но оставил под условием IsNewBarByConvertType(time),
а главное добавил last_fpos=(long)FileTell(m_fileHandle);
под else, без этого не работало стабильно.

Кажется при всех условиях работает – но сейчас проверяю.


На мои взгляд, у меня индикатор получился «очень тяжелый»,
Хотя получаемый график похож на построение "график без дыр",
ну или «гладкий» (по сленгу МКЛ).

Буду ждать.




Спасибо: 0 
Профиль
Scriptong





Сообщение: 1588
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 07.06.15 14:42. Заголовок: Balbesik пишет: Буд..


Balbesik пишет:

 цитата:
Буду ждать.


Да, пока, к сожалению, только так...

Спасибо: 0 
Профиль
Balbesik



Сообщение: 280
Зарегистрирован: 13.03.13
Репутация: -1
ссылка на сообщение  Отправлено: 08.06.15 18:55. Заголовок: Scriptong пишет: Да..


Scriptong пишет:

 цитата:
Да, пока, к сожалению, только так...



Да, пока, к сожалению и у меня нет решения и только так.
На «быстрых» движениях идет «слет» (менее спреда),
что фактически подтверждает, что решение неверно,
но и подтверждает, что график валют подвержен
законам математики (я бы удивился, если было бы иначе) –
идет разрыв и функция (индикатор, советник и скрипт)
не работают (или работают не корректно) – кстати,
это касается и стандартных графиков.

Видимо ты прав – конструкция алгоритма «неверна».

Но вот, что мне интересно –
Я утверждаю, что твое построение равновысоких баров
не имеет практического значения для трейдеров и того
набора инструментов (индикаторов, советников и скриптов),
что присутствуют в терминале, и в т.ч.
и пользовательских.
Ты это, пока, опровергнуть не можешь
(ну я не видел достаточного опровержения) .

И поэтому интересно - разработка твоя, я утверждаю,
что решение не имеет смысла и прошу доработать.

Тебе некогда.

А как же имидж, реклама, уважение и проч. (форум) , если говорят,
что не работает, а тебе не когда (хотя к этому «игнору» я привык – «проходили»).
Кроме точности отображения (которая не несет практического смысла)
не доводится иное обоснование принятого построения
(ну просто тебе так захотелось - в конце концов никому не обязан)?

Знаешь, есть закон (классика) – достоверность входных данных
более значима, чем сама система (индикатор, советник и скрипт)
работающая по этим данным.

Мой вышеизложенный «опус» не значит, что все надо бросить,
но и не надо вводить в заблуждение разработкой ради разработки.



Спасибо: 0 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  2 час. Хитов сегодня: 4
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет