Как кодировать? - страница 282

 
gilben:
Я ищу решение для применения алгоритмики индикаторов на массиве цен.

В MQL4 некоторые индикаторы имеют такую функцию, например: iCCIOnArray, iBandsOnArray....

Но у таких индикаторов, как ADX, такой функции нет.

У кого-нибудь есть идея, как я могу применить расчет индикатора над заранее определенным массивом (не с сервера котировок)?

[lang=pl]Если знать, как калибруется данный индикатор, то можно сделать все:)

Пожалуйста, объясните более точно, что именно вам нужно.

Будьте здоровы,

Grzesiek[/lang]

 

...

ADX использует то, что называетсяatrue range(Max(High,PreviousClose)-Min(Low,PreviousClose) и это основа расчета ADX.

Из-за требуемых значений High, Low и Close он не может быть применен к массиву, В общем, если вы видите, что требуется цена, то индикатор должен быть применим к массиву. Если параметра цены нет, то почти наверняка он не может быть применен к массиву (предполагая, что индикатор в первую очередь оперирует ценами).

 
g.pociejewski:
[lang=pl]Если вы знаете, как калибруется данный индикатор, вы можете сделать все:)

Пожалуйста, объясните более точно, что именно вам нужно.

Ваше здоровье,

Grzesiek[/lang]

Спасибо, Гжешек.

Я искал хорошее решение. В конце концов, лучшее решение - это встроить код indi в код эксперта.

В любом случае, если никто не покажет мне другой способ, я буду применять его таким образом.

 

Есть ли у вас исходный файл? Файл *.ex4 скомпилирован, поэтому у вас нет доступа к исходному коду.

С уважением,

 

запрос

mladen:
star821

Попробуйте вот это

________________________

Некоторые пояснения : Я не использовал те, которые вы выложили, а сделал эти (индикатор, прикрепленный в вашем посте, имеет мое имя, но эта версия сделана не мной, но это не единственная причина, по которой я не использовал этот индикатор). ...

с уважением

Младен

привет Младен

возможно ли адаптировать советника stc для HMA цвета nrp-indi и High-low trend indi? ...

Я написал псевдокод (* не умею кодить вообще... *):

************************************************************

внешние данные:

Lot#

период для HMA

???.

.....................

повторить:

получите цвет зигзаг-точки (закрытие бара);

получить цвет тренда HMA (закрытие бара);

----------------------------------------------------------------

// открываем продажу

если последняя точка зигзага = синяя && HMA тренд = красный -> открываем тикет SELL (только один раз для каждого цвета HMA тренда)

если не удалось открыть продажу -> повторите попытку 3 раза

если нет успеха, предупреждение и письмо: не удалось открыть продажу для символа, ТФ, времени;

else

// открываем покупку

если последняя точка зигзага = красная && HMA тренд = синий -> открываем тикет BUY (только один раз на цвет HMA тренда)

если не удалось открыть покупку -> повторите попытку 3 раза

если нет успеха, предупреждение и письмо: не удалось открыть покупку для символа, ТФ, времени;

-------------------------------------------------------------------

если HMA тренд (красный) меняется на синий -> закрываем продажу, ждем 10 сек. ;

если HMA тренд (синий) меняется на красный -> закрываем покупку, ждем 10 сек;

-------------------------------------------------------------------

закрытие всех сделок в пятницу в 12:00 часов утра (GMT)...

****************************************************************

Я знаю, что будут некоторые потери, но меня это не беспокоит...

мне не нужны никакие SL...

с уважением

Кадо

hma_color_nrp.ex4high_-_low_trend.mq4

Файлы:
 

ATR + MA & Bandwidth + MA

[lang=it]Здравствуйте, мне нужен пользовательский индикатор, который в отдельном окне вычисляет ATR и скользящую среднюю, и то же самое для полосы пропускания. Я сделал код в mql4 и использовал IMAONARRAY для расчета MA, но индикатор не работает... кто-нибудь может мне помочь?

Это один из кодов teo.

Спасибо

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 Blue

#property indicator_color2 Red

//---- input parameters

extern int AtrPeriod=14;

//---- buffers

double AtrBuffer[];

double TempBuffer[];

double MaBuffer[];

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

string short_name;

//---- 1 additional buffer used for counting.

IndicatorBuffers(2);

//---- indicator line

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,AtrBuffer);

SetIndexBuffer(1,TempBuffer);

SetIndexStyle(2,DRAW_LINE);

SetIndexBuffer(2,MaBuffer);

//---- name for DataWindow and indicator subwindow label

short_name="ATR("+AtrPeriod+")";

IndicatorShortName(short_name);

SetIndexLabel(0,short_name);

//----

SetIndexDrawBegin(0,AtrPeriod);

//----

return(0);

}

//+------------------------------------------------------------------+

//| Average True Range |

//+------------------------------------------------------------------+

int start()

{

int i,counted_bars=IndicatorCounted();

//----

if(Bars<=AtrPeriod) return(0);

//---- initial zero

if(counted_bars<1)

for(i=1;i<=AtrPeriod;i++) AtrBuffer=0.0;

//----

i=Bars-counted_bars-1;

while(i>=0)

{

double high=High;

double low =Low;

if(i==Bars-1) TempBuffer=high-low;

else

{

double prevclose=Close;

TempBuffer=MathMax(high,prevclose)-MathMin(low,prevclose);

}

i--;

}

//----

if(counted_bars>0) counted_bars--;

int limit=Bars-counted_bars;

for(i=0; i<limit; i++)

AtrBuffer=iMAOnArray(TempBuffer,Bars,AtrPeriod,0,MODE_SMA,i);

//----

double MyArray[];

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

ArrayResize( MyArray, limit);

ArraySetAsSeries(MyArray,true);

for(i=0; i<limit; i++)

{

MyArray = AtrBuffer;

}

for(i=0; i<limit; i++)

{

MaBuffer = iMAOnArray(MyArray,limit,10,0,MODE_SMA,i);

}

//----

return(0);

}

//+------------------------------------------------------------------+

[/lang]

 

...

Попробуйте прямо сейчас

k3rn3l:
[lang=it]Здравствуйте, мне нужен пользовательский индикатор, который в отдельном окне пишет atr, рассчитывает скользящую среднюю и то же самое для полосы пропускания. Я сделал код в mql4 и использовал IMAONARRAY для расчета MA, но индикатор не работает... кто-нибудь может мне помочь?

Это один из кодов Teo...

Спасибо

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 Blue

#property indicator_color2 Red

//---- input parameters

extern int AtrPeriod=14;

//---- buffers

double AtrBuffer[];

double TempBuffer[];

double MaBuffer[];

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

string short_name;

//---- 1 additional buffer used for counting.

IndicatorBuffers(2);

//---- indicator line

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,AtrBuffer);

SetIndexBuffer(1,TempBuffer);

SetIndexStyle(2,DRAW_LINE);

SetIndexBuffer(2,MaBuffer);

//---- name for DataWindow and indicator subwindow label

short_name="ATR("+AtrPeriod+")";

IndicatorShortName(short_name);

SetIndexLabel(0,short_name);

//----

SetIndexDrawBegin(0,AtrPeriod);

//----

return(0);

}

//+------------------------------------------------------------------+

//| Average True Range |

//+------------------------------------------------------------------+

int start()

{

int i,counted_bars=IndicatorCounted();

//----

if(Bars<=AtrPeriod) return(0);

//---- initial zero

if(counted_bars<1)

for(i=1;i<=AtrPeriod;i++) AtrBuffer=0.0;

//----

i=Bars-counted_bars-1;

while(i>=0)

{

double high=High;

double low =Low;

if(i==Bars-1) TempBuffer=high-low;

else

{

double prevclose=Close;

TempBuffer=MathMax(high,prevclose)-MathMin(low,prevclose);

}

i--;

}

//----

if(counted_bars>0) counted_bars--;

int limit=Bars-counted_bars;

for(i=0; i<limit; i++)

AtrBuffer=iMAOnArray(TempBuffer,Bars,AtrPeriod,0,MODE_SMA,i);

//----

double MyArray[];

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

ArrayResize( MyArray, limit);

ArraySetAsSeries(MyArray,true);

for(i=0; i<limit; i++)

{

MyArray = AtrBuffer;

}

for(i=0; i<limit; i++)

{

MaBuffer = iMAOnArray(MyArray,limit,10,0,MODE_SMA,i);

}

//----

return(0);

}

//+------------------------------------------------------------------+
[/lang]
Файлы:
atr__ma.mq4  2 kb
 

[lang=tr]Здравствуйте, может ли кто-нибудь помочь мне построить эту формулу в коде метатрейдера?

(это в метатрейдере формула:)

Q1:=Input("PERIOD",1,1000,3);

Q2:=Input("PERIOD",0.001,100,1);

Q3:=Q2/100;

Q4:=Mov( Typical(),Q1,E) ;

Q5:=If((Q4*(1-Q3))>PREV,Q4*(1-Q3),If((Q4*(1+Q3))<PREV,Q4*(1+Q3),PREV));

Q5

[/lang]

 

...

Интересно.

Единственное, что вам нужно настроить для разных таймфреймов - это процент. 1% кажется хорошим выбором для 4-часового графика, но вот пример 15-минутного графика с 0,5% вместо 1% по умолчанию.

PS: Я понятия не имею, как он назывался изначально, поэтому назвал его так, как есть.

с уважением

mladen

cedid:
[lang=tr]Здравствуйте, может ли кто-нибудь помочь мне построить эту формулу в коде metatrader?

(это в формуле метастока:)

Q1:=Input("PERIOD",1,1000,3);

Q2:=Input("PERIOD",0.001,100,1);

Q3:=Q2/100;

Q4:=Mov( Typical(),Q1,E) ;

Q5:=If((Q4*(1-Q3))>PREV,Q4*(1-Q3),If((Q4*(1+Q3))<PREV,Q4*(1+Q3),PREV));

Q5

[/lang]
Файлы:
levels.gif  22 kb
 
mladen:
Интересно

Единственное, что вам нужно настроить для разных временных рамок, - это процент. 1% кажется хорошим выбором для 4-часового графика, но вот пример 15-минутного графика с 0,5% вместо 1% по умолчанию

PS: Я понятия не имею, как она называлась изначально, поэтому назвал ее так, как есть

с уважением

mladen

[lang=tr]спасибо mladen я попробую это, я думаю это сработает [/lang].

Причина обращения: