Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 730

 
evillive:
PeriodSeconds() это имя встроенной функции, скорее всего в  коде неправильный вызов, покажите строку 25.
Не вызов, а описание/объявление функции внутри другой функции, что недопустимо - об этом компилятор и говорит.
 

День добрый!  Текст ниже картинки и картинка взяты с описания одного из индикаторов в интернете. Насколько я понимаю речь идет о EMA первой и второй степени.  Подскажите пожалуйста формулу для второй степени  или ссылки на описание аналогичных тем на этом форуме.  Заранее спасибо.

 

 

Принцип УСРЕДНЕНИЯ (сглаживания) 

Если Х1 значение графика (предположим колеблется от минус Х1 до плюс Х1), точка Х5 с координатами (0;0) последняя точка усредненной линии, то значение Х2 получится при помощи усреднения первой степени или прямой (рычаг Архимеда – проигрываем в расстоянии выигрываем в силе), а значение Х3 получится при помощи усреднения второй степени или квадратной параболы. Можно видеть, что парабола обеспечивает большую гладкость усредненной линии. С ростом степени и длинны плеча гладкость возрастает. С точки зрения механики, изменение значения Х1 при усреднении первой степени связано с изменением скорости, а при усреднении второй степени с изменением ускорения. В результате усреднения N последних точек связанны соответствующим уравнением. 

Принцип ЛИНЕЙНОЙ ИНТЕРПОЛЯЦИИ 

Известно, что минимально необходимо две точки чтобы провести прямую, три точки, чтобы провести квадратную параболу, четыре кубическую и т.д. Или Х4 и Х5 для интерполяции первой степени и Х4, Х5 и Х6 для интерполяции второй степени. Чтобы интерполированные точки образовывали достаточно гладкую линию нужно, чтобы или степень или плечо интерполяции была меньше степени или плеча усреднения. При равной степени и плече получим начальное значение Х1. (индикатор работает по точкам открытия последнего бара) 

Прямая это арифметическая прогрессия, чтобы получить третью точку после первых двух:

У3= (У2-У1)+У2 = 2*У2 – У1 - возвратное уравнение первой степени для равноотстоящих точек. (Аналогично уравнению после сокращения всех коэффициентов уравнения Лагранжа) 


Принцип ТРИГОНОМЕТРИЧЕСКОЙ ИНТЕРПОЛЯЦИИ.

Используем формулу синуса двойного угла: Sin 2a = 2* Cos a* Sin a . Геометрически можно доказать её справедливость в виде : Sin 2a = 2* Cos a* Sin a - 0 

и соответственно: Sin 3a = 2* Cos a* Sin 2a - Sin a и т.д. где Cos a - косинус угла одного шага, а Sin по сути соответствующее значение графика. Тогда возвратное уравнение первой степени для синусойды около нуля выглядит: У3 = 2* Cos a * У2 – У1 . Видим полную аналогию с уравнением для прямой. В индикаторе переход от тригонометрических уравнений к линейным обеспечивается назначением периода равного единице. Cos 360 равен 1 , тогда уравнение вырождается в линейное. 
 

  В предыдущем посте картинка не отобразилась. 

 
evillive:
PeriodSeconds() это имя встроенной функции, скорее всего в  коде неправильный вызов, покажите строку 25.

    Я пытаюсь использовать PeriodSeconds(), для удаления отложки на новом баре текущего таймфрейма.

    Если знаете как правильно, подскажите пожалуйста. 

//----глобальные переменные 
int PeriodSeconds(ENUM_TIMEFRAMES  period=PERIOD_CURRENT);
//----ф-ия start

int ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask,3,stoploss,takeprofit,"MAxx",MAGICMA,PeriodSeconds(),clrGreen);
 

Вечер добрый!

Как прописать внешние параметры скрипта, чтобы при его запуске по умолчанию стояла пятница текущей недели, время 23:00

Пример

2014.10.10 23:00:00 

 

//------- Внешние параметры скрипта -----------------------------------------+

extern datetime   DT = ?

 
skyjet:

    Я пытаюсь использовать PeriodSeconds(), для удаления отложки на новом баре текущего таймфрейма.

    Если знаете как правильно, подскажите пожалуйста.

//----глобальные переменные 
int PeriodSeconds(ENUM_TIMEFRAMES  period=PERIOD_CURRENT);
//----ф-ия start

int ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask,3,stoploss,takeprofit,"MAxx",MAGICMA,PeriodSeconds(),clrGreen);
//----глобальные переменные 
int per; 
per=PeriodSeconds(PERIOD_CURRENT); // вызывать там где надо по алгоритму. Нельзя объявлять предопределённую функцию, только вызывать с нужными параметрами и значение присваивать пользовательской переменной

int ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask,3,stoploss,takeprofit,"MAxx",MAGICMA,TimeCurrent()+600,clrGreen); //срок истечения отложенного ордера не может быть меньше 10 минут с момента его выставления

 
Где-то упоминалась статья или что-то другое с помощью нуждающимся в приёмах программирования экспертов, работающих с одной парой на счету, на котором работают другие или аналогичные эксперты, но с другими парами и, соответственно, с другими значениями параметров. Только проверкой символа и магика тут не обойдёшься, т.к. всё не загонишь в циклы. Прошёлся по всем статьям и в поиске не нашёл. Может, кто даст наводку?! Спасибо!
 
borilunad:
Где-то упоминалась статья или что-то другое с помощью нуждающимся в приёмах программирования экспертов, работающих с одной парой на счету, на котором работают другие или аналогичные эксперты, но с другими парами и, соответственно, с другими значениями параметров. Только проверкой символа и магика тут не обойдёшься, т.к. всё не загонишь в циклы. Прошёлся по всем статьям и в поиске не нашёл. Может, кто даст наводку?! Спасибо!
Борис, подробнее можешь? А то как-то сумбурно.
 
Здравствуйте! Помогите, пожалуйста. Допустим у нас есть несколько МА (3,4,...,10,...) с разными периодами. Как найти МА с наибольшим (наименьшим) значением на текущем баре? Спасибо.
 
artmedia70:
Борис, подробнее можешь? А то как-то сумбурно.
Благодарю за отклик, Артём! Сейчас делаю эксперта, не требующего большого запаса прочности. Попробовал вручную на нескольких парах, и выходит неплохо! Потому хочу на каждую пару поставить эксперта, но чтобы ни в чём друг другу не мешали и были полностью независимыми, даже время работы может не совпадать! Я каждого отдельно прооптимизирую в тестере. Что ещё необходимо для понимания, что они такие уж свободолюбивые будут у меня?! ;)