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

 

привет кодеры,

Я создал очень простой индикатор, который показывает алерт, когда последний бар выше sma10 или ниже. ничего больше. но я хотел бы проверить его на 3 разных таймфреймах. я никогда не работал с mtf-индикаторами и поэтому у меня есть некоторые проблемы с ним. эта версия проверяет график m1, m5 и m15. он работает хорошо, но есть проблема, что алерт отображается на каждом тике, а не только один раз на таймфрейме, где выполняются условия.

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

спасибо!

Файлы:
test.mq4  3 kb
 

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

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

Может быть, кто-нибудь видит мою неудачу?!

Вот код из индикатора

#property indicator_chart_window

#property indicator_buffers 5

double WidestChannel_high[];

double InsideChannel_high[];

double StandardDeviation[];

double InsideChannel_low[];

double WidestChannel_low[];

extern int STD.Rgres.period=0; /*default 0 means the channel will use the open

time from "x" bars back on which ever time period

the indicator is attached to. one can change to 1,5,

15,30,60...etc to "lock" the start time to a specific

period, and then view the "locked" channels on a different time period...*/

extern int STD.Rgres.length=56; // bars back regression begins

extern double STD.Rgres.width=1.618;// widest channel

extern double STD.width=0.618; // inside channel

int init()

{

SetIndexBuffer(0,WidestChannel_high);

SetIndexLabel(0,"WidestChannel_high");

SetIndexBuffer(1,InsideChannel_high);

SetIndexLabel(1,"InsideChannel_high");

SetIndexBuffer(2,StandardDeviation);

SetIndexLabel(2,"StandardDeviation");

SetIndexBuffer(3,InsideChannel_low);

SetIndexLabel(3,"InsideChannel_low");

SetIndexBuffer(4,WidestChannel_low);

SetIndexLabel(4,"WidestChannel_low");

return(0);

}

int deinit() {

ObjectDelete("regression channel");ObjectDelete("std channel");return(0);

}

int start() {

int counted_bars=IndicatorCounted(),limit, iTF;

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//to refresh properly delete old objects...

ObjectDelete("regression channel");ObjectDelete("std channel");

//widest channel

ObjectCreate("regression channel",OBJ_STDDEVCHANNEL,0,iTime(Symbol(),STD.Rgres.period,STD.Rgres.length),

Close[STD.Rgres.length],Time[0],Close[0]);

ObjectSet("regression channel",OBJPROP_DEVIATION,STD.Rgres.width);

ObjectSet("regression channel",OBJPROP_COLOR,Orange);

ObjectSet("regression channel",OBJPROP_RAY,true);

//inside channel

ObjectCreate("std channel",OBJ_STDDEVCHANNEL,0,iTime(Symbol(),STD.Rgres.period,STD.Rgres.length),

Close[STD.Rgres.length],Time[0],Close[0]);

ObjectSet("std channel",OBJPROP_DEVIATION,STD.width);

ObjectSet("std channel",OBJPROP_COLOR,Olive);

ObjectSet("std channel",OBJPROP_RAY,true);

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

{

double dev = iStdDev(NULL,STD.Rgres.period,STD.Rgres.length,0,MODE_SMA,PRICE_CLOSE,i);

double innerWidth = STD.width*dev;

double outerWidth = STD.Rgres.width*dev;

double price = ObjectGetValueByShift("std channel", i);

WidestChannel_high= price + outerWidth/2;

InsideChannel_high= price + innerWidth/2;

StandardDeviation= price;

InsideChannel_low= price - innerWidth/2;

WidestChannel_low= price - outerWidth/2;

}

return(0);}
 
sunshineh:
Привет,

Я должен спросить еще раз, потому что я не могу найти ошибку, но я получаю только неправильные значения :-(

Может быть, кто-нибудь видит мою неудачу?!

Вот код индикатора

#property indicator_chart_window

#property indicator_buffers 5

double WidestChannel_high[];

double InsideChannel_high[];

double StandardDeviation[];

double InsideChannel_low[];

double WidestChannel_low[];

extern int STD.Rgres.period=0; /*default 0 means the channel will use the open

time from "x" bars back on which ever time period

the indicator is attached to. one can change to 1,5,

15,30,60...etc to "lock" the start time to a specific

period, and then view the "locked" channels on a different time period...*/

extern int STD.Rgres.length=56; // bars back regression begins

extern double STD.Rgres.width=1.618;// widest channel

extern double STD.width=0.618; // inside channel

int init()

{

SetIndexBuffer(0,WidestChannel_high);

SetIndexLabel(0,"WidestChannel_high");

SetIndexBuffer(1,InsideChannel_high);

SetIndexLabel(1,"InsideChannel_high");

SetIndexBuffer(2,StandardDeviation);

SetIndexLabel(2,"StandardDeviation");

SetIndexBuffer(3,InsideChannel_low);

SetIndexLabel(3,"InsideChannel_low");

SetIndexBuffer(4,WidestChannel_low);

SetIndexLabel(4,"WidestChannel_low");

return(0);

}

int deinit() {

ObjectDelete("regression channel");ObjectDelete("std channel");return(0);

}

int start() {

int counted_bars=IndicatorCounted(),limit, iTF;

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//to refresh properly delete old objects...

ObjectDelete("regression channel");ObjectDelete("std channel");

//widest channel

ObjectCreate("regression channel",OBJ_STDDEVCHANNEL,0,iTime(Symbol(),STD.Rgres.period,STD.Rgres.length),

Close[STD.Rgres.length],Time[0],Close[0]);

ObjectSet("regression channel",OBJPROP_DEVIATION,STD.Rgres.width);

ObjectSet("regression channel",OBJPROP_COLOR,Orange);

ObjectSet("regression channel",OBJPROP_RAY,true);

//inside channel

ObjectCreate("std channel",OBJ_STDDEVCHANNEL,0,iTime(Symbol(),STD.Rgres.period,STD.Rgres.length),

Close[STD.Rgres.length],Time[0],Close[0]);

ObjectSet("std channel",OBJPROP_DEVIATION,STD.width);

ObjectSet("std channel",OBJPROP_COLOR,Olive);

ObjectSet("std channel",OBJPROP_RAY,true);

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

{

double dev = iStdDev(NULL,STD.Rgres.period,STD.Rgres.length,0,MODE_SMA,PRICE_CLOSE,i);

double innerWidth = STD.width*dev;

double outerWidth = STD.Rgres.width*dev;

double price = ObjectGetValueByShift("std channel", i);

WidestChannel_high= price + outerWidth/2;

InsideChannel_high= price + innerWidth/2;

StandardDeviation= price;

InsideChannel_low= price - innerWidth/2;

WidestChannel_low= price - outerWidth/2;

}

return(0);}

sunshineh,

Вам не нужно делить отклонение на 2, чтобы получить максимум и минимум - уберите часть "/2" и все будет в порядке, при условии, что средняя цена в порядке. Ширина канала всегда постоянна: текущее стандартное отклонение должно быть использовано для с, а не какое-то другое значение. И последнее, насколько я понимаю, ObjectGetValueByShift("std channel", i); не работает на канале стандартного отклонения, как это работает на линиях тренда. Какое значение он возвращает, я не знаю (см. прилагаемый индикатор, и вы увидите, почему я говорю, что не знаю, что это за цена).

Файлы:
_test_4.mq4  3 kb
 

Привет, Младен,

Я прилагаю пример индикатора, использующего внутренние предустановленные символы, довольно сложные для меня для понимания внутри, возможно ли получить некоторые подсказки от этого индикатора, чтобы адаптировать к моим индикаторам или/и вашим индикаторам, чтобы предотвратить проблему перерисовки или обновления линии сдвига/проблемы с тиками или сделать какую-то синергию? Спасибо за внимание.

 
kenwa:
HI mladen, я прилагаю пример индикатора, использующего внутренние предустановленные символы, довольно трудные для меня для понимания внутри, возможно ли получить некоторые подсказки от этого индикатора, чтобы адаптировать к моим индикаторам или/и вашим индикаторам, чтобы предотвратить перерисовку или обновление линии сдвига проблемы/тиковые проблемы или сделать некоторые виды sy nergy? Спасибо за внимание.

kenwa

Я не работаю над декомпилированными материалами. Извините

 
mladen:
Кенва, я не работаю с декомпилированным материалом. Извините

Хорошо, тогда я удалю его, но интересно, почему никто не просматривает его, но вы можете знать, что это декомпилированный материал.

 
kenwa:
Хорошо, тогда я удалю его, но интересно, почему никто не просматривает его, но вы можете знать, что это декомпилированный код

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

И даже если вы вообще ничего не знаете о кодировании, когда у вас есть такая вещь, как эта:

/*

Сгенерировано декомпилятором EX4-TO-MQ4 FREEWARE V4.0.451.1 [-]

Сайт: Торговая платформа MetaTrader 5 / MetaQuotes Software Corp.

E-mail : support@metaquotes.net

*/

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

Всего наилучшего

 

Младен, мой код не декомпилирован. может быть, вы захотите взглянуть на него?

 
Marbo:
Младен, мой код не декомпилирован. может быть, вы захотите взглянуть на него?

Marbo

Вы можете сделать что-то вроде того, что показано в приложении. Он будет оповещать вас один раз на каждом баре целевого таймфрейма или при изменении состояния (типа оповещения). Если вы хотите игнорировать тип, то пропустите проверку типа в процедуре doAlert. Если вы хотите пропустить проверку времени (в этом случае будет проверяться только тип), то пропустите проверку времени в процедуре doAlert.

Файлы:
test_4.mq4  3 kb
 

Привет, Младен,

Вы, вероятно, помните, что на прошлой неделе я попросил помощи в работе с советником MA cross EA. и, конечно, неправильно сослался на раздел Elite. Подскажите, пожалуйста, куда мне следует обратиться с этой просьбой. Я искал и не нашел очевидного ответа. Чтобы освежить вашу память, вот что это была за спецификация:

1.Пересечение SMA EMA

2.На закрытии свечи

3.OCO с размещением нового ордера в новом направлении

4.Возможность регулировать проскальзывание

5.Звуковой сигнал о пересечении

6.Крест не является настоящим крестом без задаваемого разрыва между пунктами

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

8. желательно, если ордер выставлен, как в пункте 7, подавать сигнал тревоги

9.надежность кросса имеет первостепенное значение. На моих графиках - FXCM, Vantage, FX Choice - некоторые советники, в том числе и Universal Cross не принимают сделки или принимают их слишком поздно

10. Настраиваемый SL, но его можно не ставить, если в нем нет необходимости

11.Трейлинг-стоп

12.SL переходит в безубыток автоматически после X пунктов прибыли

13. Максимальное количество открытых сделок

14. магическое число

С уважением,

Джефф

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