Помощь в кодировании - страница 61

 
mladen:
Этот индикатор использует "силу змеи" (centered TMA) для сглаживания, и ее нельзя изменить, чтобы не пересчитывать и чтобы она оставалась такой же. "Неперерисовывающаяся" (end-pointed) версия centered TMA - это простая LWMA, но не ожидайте от нее тех же результатов, что и от centered TMA. Еще немного о центрированном TMA вы можете прочитать здесь: https: //www.mql5.com/en/forum/181241 Что касается изменения или улучшения этого кода: основа его - декомпилированный код. Я сомневаюсь, что кто-то будет менять декомпилированный код.

Большое спасибо Mladen за информацию, она была очень полезной.

 

Здравствуйте,

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

Можете ли вы помочь мне исправить это?

Спасибо

oscillator.mq4

Файлы:
 

дасио,

Это просто другой индикатор солнечного ветра (кто-то пытался что-то изменить в нем).

dasio:
Привет,

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

Можете ли вы помочь мне исправить это?

Спасибо

oscillator.mq4
 
mladen:
dasio, Это просто другой индикатор солнечного ветра (кто-то пытался что-то изменить в нем).

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

Спасибо.

 

dasio

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

dasio:
Спасибо. Но когда я запускаю бэктест, бары появляются. Как это возможно? Спасибо.
 

Младен

Когда вы пишете код или смотрите на чужой код, как вы оцениваете качество кода? Когда вы пишете код, как вы проверяете его на прочность? Спасибо.

 

:)

Мои два основных критерия: :

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

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

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

nevar:
Младен, когда вы пишете код или смотрите в чей-то код, как вы оцениваете качество кода? Когда вы пишете код, как вы проверяете его надежность? Спасибо.
 
drofwarc:
Привет,

Я пытаюсь адаптировать индикатор, который вызывает iFractals, и вместо этого вызвать пользовательский фрактальный индикатор, который имеет функцию регулируемого периода. Индикатор, который я пытаюсь адаптировать, прилагается. Он называется "closesrelativejtozpreviousofractal".

closesrelativejtozpreviousofractal.mq4

Код рисует стрелку вверх, если цена пробивает предыдущий максимум фрактала, и стрелку вниз в обратном случае.

Индикатор, который я пытаюсь вызвать с помощью iCustom, также прилагается. Он называется "Фракталы - регулируемый".

fractal_-_adjustable.mq4

Ниже приведена моя попытка модифицировать оригинальный индикатор так, чтобы он вызывал Fractals - adjustable. Код успешно строит точки на высоких и низких фракталах, а период фрактала регулируется, как я и хотел. Проблема заключается в стрелках, предназначенных для отображения прорывов предыдущих уровней фракталов максимума и минимума. Я не могу заставить их отображаться правильно.

Любая помощь в этом вопросе была бы очень признательна.

С уважением,

drofwarc

int start()

{

int counted_bars = IndicatorCounted();

if (counted_bars > 0) counted_bars--;

int limit = Bars - counted_bars;

for(int i=limit; i>0; i--)

{

UpFractalsBuffer=iCustom(NULL,0,"Fractal - Adjustable", dist, arrowPosition, 0, i); //-Draw the high fractal

if (UpFractalsBuffer!=0) //-If it is available, put in the array of fractals for higher levels

HighLevel=iCustom(NULL,0,"Fractal - Adjustable", dist, arrowPosition, 2, i);

if(Close>HighLevel)

UpArrowBuffer=(Low-(PipBuffer)*Poin); //Arrows

DownFractalsBuffer=iCustom(NULL,0,"Fractal - Adjustable", dist, arrowPosition, 1, i); //-Draw the low fractal

if(DownFractalsBuffer!=0) //- If it is available put in the array of lower levels

LowLevel=iCustom(NULL,0,"Fractal - Adjustable", dist, arrowPosition, 3, i);

if(Close<LowLevel)

DownArrowBuffer=(High+(PipBuffer)*Poin);//Arrows

}

return(0);

}

В конце концов, я решил эту проблему. Проблема была в путанице буферов.

 

Код для того, чтобы индикатор пропускал n баров между сигналами

Привет всем,

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

Но можно ли сделать то же самое для индикатора?

Например, я хотел бы, чтобы индикатор, который строит стрелки на пересечении двух скользящих средних, пропускал n баров после пересечения, прежде чем построить другую стрелку. Другими словами, если еще одно пересечение произошло до того, как прошло n баров, индикатор будет игнорировать пересечение и не будет строить стрелку.

Я много искал, чтобы найти индикатор, который делает это, но мне не повезло.

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

Большое спасибо,

drofwarc

 

он не может нормально отображаться, кто-нибудь может помочь мне исправить это?

#property indicator_separate_window

#property indicator_buffers 1

#property indicator_color1 Red

#property indicator_maximum 100

#property indicator_level1 70

#property indicator_level2 50

#property indicator_level3 30

#property indicator_minimum 0

//---- входные параметры

extern int rsiperiod = 14 ;

extern int Shortperiod = 5 ;

extern int Middleperiod = 8;

extern int Longperiod = 13;

extern int mamode = 2 ;

//---- буферы

double RSI[];

double ShortRSI[];

double MiddleRSI[];

double LongRSI[];

double SMRSI[];

int period ;

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

//| Пользовательская функция инициализации индикатора |

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

int init()

{

//---- индикаторы

IndicatorBuffers(5);

SetIndexBuffer(0,SMRSI);

SetIndexBuffer(1,RSI);

SetIndexBuffer(2,ShortRSI);

SetIndexBuffer(3,MiddleRSI);

SetIndexBuffer(4,LongRSI);

//---- имя для DataWindow и метки подокна индикатора

IndicatorShortName("SMRSI("+rsiperiod+", "+Shortperiod+", "+Middleperiod+", "+Longperiod+", "+mamode+")");

SetIndexDrawBegin(0,rsiperiod+Longperiod);

period=Shortperiod+Middleperiod+Longperiod;

return(0);

}

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

//| Пользовательская функция итерации индикатора |

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

int start()

{

int counted_bars=IndicatorCounted();

int i,limit;

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

limit = Bars-counted_bars;

for( i=limit; i>=0; i--) RSI=iRSI(NULL,0,rsiperiod,0,i);

for( i=limit; i>=0; i--) ShortRSI=iMAOnArray(RSI,0,Shortperiod,0,mamode,i);

for( i=limit; i>=0; i--) MiddleRSI=iMAOnArray(RSI,0,Middleperiod,0,mamode,i);

for( i=limit; i>=0; i--) LongRSI=iMAOnArray(RSI,0,Longperiod,0,mamode,i);

for( i=limit; i>=0; i--) { if(period!=0) SMRSI=(Shortperiod/period)*ShortRSI+(Middleperiod/period)*MiddleRSI+(Longperiod/period)*LongRSI;}

return(0);

}

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