Общие вопросы по разработке > Медианный фильтр в Cyber_Cycle_Period Джона Элерса

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
ChurOlNik
Сообщения: 6
Зарегистрирован: 20 окт 2021, 14:46
Благодарил (а): 6 раз

Медианный фильтр в Cyber_Cycle_Period Джона Элерса

Непрочитанное сообщение ChurOlNik » 20 окт 2021, 15:25

Попытался написать на C# - походу не работает медианный фильтр. Подскажите, что у меня не так.

Код: Выделить всё

function Initialize()
{
 
   IndicatorName = "Cyber_Cycle_Period_OlNi";   // Задайте название индикатора и сохраните с данным именем
   PriceStudy = false;   // Рисовать в области цены (true – да, false – нет)
   AddInput("Input", Inputs.Candle);   // Input - входной ряд (Inputs.Price) или свечи (Inputs.Candle)
   AddParameter("alfa",0.07);
    AddSeries("Period", DrawAs.Line, Color.Green);   
    AddSeries("Price", DrawAs.Line, Color.Red, false);
    AddSeries("h", DrawAs.Line, Color.Red, false );
    AddSeries("l", DrawAs.Line, Color.Red, false );
    AddSeries("Cycle", DrawAs.Line, Color.Red );
    AddSeries("Smootch", DrawAs.Line, Color.Gray, false );
    AddSeries("Q1", DrawAs.Line, Color.Red, false );
    AddSeries("I1", DrawAs.Line, Color.Red, false );
    AddSeries("DeltaPhase", DrawAs.Line, Color.Red, false );
    AddSeries("Median", DrawAs.Line, Color.Red, false );
    AddSeries("InstPeriod", DrawAs.Line, Color.Red, false );
    AddSeries("DC", DrawAs.Line, Color.Red , false );
    AddSeries("L0", DrawAs.Line, Color.Green, false );
    AddSeries("L1", DrawAs.Line, Color.Green, false );
    AddSeries("L2", DrawAs.Line, Color.Green, false );
    AddSeries("L3", DrawAs.Line, Color.Green, false );
    AddSeries("L4", DrawAs.Line, Color.Green, false );
   
}

function Evaluate()
{
 

 if (CurrentIndex <7)
 
   Cycle=(Price[0]-2*Price[1]+Price[2])/4;
 else
{   h=Input.High[0];
    l=Input.Low[0];
    Price=(h+l)/2;
 //Применение Элерсом фильтра НЧ(КИХ) для устранения шумов:
    Smootch=(Price[0]+2*Price[1]+2*Price[2]+Price[3])/6;

    Cycle=(1-0.5*alfa)*(1-0.5*alfa)*(Smootch[0]-2*Smootch[1]+Smootch[2])+2*(1-alfa)*Cycle[1]-(1-alfa)*(1-alfa)*Cycle[2];
 }
 //Вычисление реальной части:   
Q1 = (0.0962*Cycle[0] + 0.5769*Cycle[2] - 0.5769*Cycle[4]-0.0962*Cycle[6])*(0.5 + 0.08*InstPeriod[1]);
//Мнимая часть:
I1 = Cycle[3];

if (Q1[0] != 0 && Q1[1] != 0)
    DeltaPhase = (I1/Q1-I1[1]/Q1[1]) / (1 + I1*I1[1]/(Q1*Q1[1]));
if (DeltaPhase < 0.1)
    DeltaPhase = 0.1;
if (DeltaPhase > 1.1) 
    DeltaPhase = 1.1;
   
 
   
 //////////////////////////////______SORT_______________///////////////////////////////////////////
     
   double [] inputArray  = {DeltaPhase[0], DeltaPhase[1],DeltaPhase[2],DeltaPhase[3],DeltaPhase[4]};
 
     
   Array.Sort(inputArray);
 
   double MedianDelta =inputArray[2];


 if (inputArray[2]==0)
     DC = 15;
 else
 {    DC = 6.28318 / MedianDelta + 0.5;
 }
 InstPeriod = 0.33*DC + 0.67*InstPeriod[1];
 Period =0.15*InstPeriod + 0.85*Period[1];
 
 
}
Вложения
Cyber_Cycle_Period_OlNi.script
(2.7 КБ) 603 скачивания
Последний раз редактировалось ChurOlNik 20 окт 2021, 17:05, всего редактировалось 1 раз.

BugsDigger
Сообщения: 533
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 91 раз

Re: Медианный фильтр в Cyber_Cycle_Period Джона Элерса

Непрочитанное сообщение BugsDigger » 20 окт 2021, 16:25



Вернуться в «Общие вопросы по разработке»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 34 гостя