Job finished
Specification
Название: Oscillator_MA_CenterF
Требуется осциллятор на основании 1 МА и конверта от него, плюс 1 ма.
Настройка индикатора:
extern string text1 = "1. Настройка координат";
extern int pipsH=1800; // Отступ от maС +
extern int pipsL=1800; //Отступ от maС -
Далее можно настроить уровни для отображения (как это делать знать лучше Вам)
IndicatorSetInteger(INDICATOR_LEVELS,2);
IndicatorSetDouble(INDICATOR_LEVELVALUE,0,10);
IndicatorSetDouble(INDICATOR_LEVELVALUE,1,100);
extern string text2 = "1.2 Настройка средней скользящей для определения цикла";
//maC – среднее скользящее:
extern int TFС=0;//тайм фрейм C
extern int pMAC=128;//период C средней
extern int priceMAC=0;//цена C средней
extern int typeMAC=0;//метод C средней
extern int shiftMAC=0;//сдвиг C средней
extern string text3 = "1.3 Настройка средней скользящей для определения цикла";
//maF – среднее скользящее:
extern int use_F=1;// 0 не отрисовывать maF, 1 отрисовывать maF
extern int TFF=0;//тайм фрейм F
extern int pMAF=12;//период F средней
extern int priceMAF=0;//цена F средней
extern int typeMAF=0;//метод F средней
extern int shiftMAF=0;//сдвиг F средней
extern string text4 = "1.4 Дополнительные настройки";
extern int HistoryBar=0;//0 не использовать ограничение для расчета на истории, >0 рассчитывать индикатор в глубину на заданное количество баров в истории.
extern int ZnakZerro=2;//показывает сколько знаков после запятой должно учитываться при отображении индикатора.
1 этап:
Расчет начинается при пересечении ценой maC
PointStart - цифровое значение начальной точки расчета.
Логика:
Если maC[1]>Low[1] && maC[1]<Close[1] то StartUP=1, StartDown=0, StopUP=0, StopDown=0, PointStart=maC[1]
Если maC[1]<High[1] && maC[1]>Close[1] то StartDown=1, StartUP=0, StopUP=0, StopDown=0, PointStart=maC[1]
2 этап:
Определяем точку пересечения ценой верхнего/нижнего канала от maC
PointStop - цифровое значение конечной точки расчета.
Логика:
Если StartUP==1
Если maC[1]+pipsH>Low[1] && maC[1]+pipsH<Close[1] то StopUP=1, PointStop=maC[1]+pipsH
Если StartDown==1
Если maC[1]-pipsL<High[1] && maC[1]-pipsL>Close[1] то StopDown=1, PointStart=maC[1]--pipsL
3 этап:
Производим расчет и начинаем отрисовку индикатора (до этого момента индикатор рисует 0)
Необходимо определить на сколько изменилась цена с начала расчета
Логика:
Если StartUP==1 && StopUP==1
Delta=PointStop-PointStart
MA_Center[0]=(maC[0]-PointStart)/Delta*100
MA_Fast[0]=(maF[0]-PointStart)/Delta*100
Если StartDown==1 && StopDown==1
Delta=PointStart-PointStop
MA_Center[0]=(PointStart-maC[0])/Delta*100
MA_Fast[0]=(PointStart-maF[0])/Delta*100
Если (StartUP!=1 || StopUP!=1) || (StartDown!=1 || StopDown!=1) , то MA_Center[0]=0, MA_Fast[0]=0
Возможно формула выше не верна - словами от StartUP до StopUP (от StartDown до StopDown) MA_Center[0]=0 и MA_Fast[0]=0