Нет проблем
Проблема есть!
ZigZag Метастока и МТ4 - это две большие разницы, у них совершенноразные алгоритмы работы.
И соответственно индикатор или система работаюшая в Метасе в МТ будет работать совершенно по другому.
Может кто знает код ZigZag именно Метастока?!
ZigZag Метастока и МТ4 - это две большие разницы, у них совершенноразные алгоритмы работы.
И соответственно индикатор или система работаюшая в Метасе в МТ будет работать совершенно по другому.
Может кто знает код ZigZag именно Метастока?!
.
Индикатор для MetaStock нужно преобразовать для " MT-4 "
{Зиг-заг}
a:=Input("size %", 0.01,10,0.3);
LEx:=If((Ref(L,-1)>=L),L,H);
HEx:=If((Ref(H,-1)<=H),H,L);
HL:=If(Abs(LEx-Ref(LEx,-1))/Ref(LEx,-1)>=Abs(Hex-Ref(HEx,-1))/Ref(HEx,-1),LEx,HEx);
HiLo:=If(PeakBars(1,HL,a)<TroughBars(1,HL,a),
If(H>=Peak(1,HL,a), H, L), If(L<=Trough(1,HL,a), L, H));
ZZ:= Zig(HiLo,a,%);
ZZ;
{Зиг-заг}
a:=Input("size %", 0.01,10,0.3);
LEx:=If((Ref(L,-1)>=L),L,H);
HEx:=If((Ref(H,-1)<=H),H,L);
HL:=If(Abs(LEx-Ref(LEx,-1))/Ref(LEx,-1)>=Abs(Hex-Ref(HEx,-1))/Ref(HEx,-1),LEx,HEx);
HiLo:=If(PeakBars(1,HL,a)<TroughBars(1,HL,a),
If(H>=Peak(1,HL,a), H, L), If(L<=Trough(1,HL,a), L, H));
ZZ:= Zig(HiLo,a,%);
ZZ;
Я могу преобразовать, но я не знаю язык, используемый MetaStock, и не очень то хочу знать, т.к. никогда не буду им пользоваться. Но если вы объясните, что делает каждый вышеприведенный оператор, т.е. если вы объясните используемый алгоритм, то я буду вам признателен.
Я изучаю все индикаторы на основе ZigZag, чтобы разработать наиболее совершенный. Я уже улучшил алгоритм MetaQuotes (т.е. МТ4), устранив ряд ошибок и упростив настройку (всего один естественный параметр, типа процента). Могу выслать мой индикатор ZigZagEF и буду благодарен за ваши замечания и предложения по улучшению.
если можно, киньте мне zigzagEF
vvvall at inbox.ru
спасибо
vvvall at inbox.ru
спасибо
a:=Input("size %", 0.01,10,0.3); - открывает окно ввода данных с возможностью изменить значение от 0,01 до 10, по умолчанию устновлено 0,3
LEx:=If((Ref(L,-1)>=L),L,H); - если Low[предыдущее]>=Low[текущее], тогда LEx=Low[текущее], иначе High[текущий]
HEx:=If((Ref(H,-1)<=H),H,L); - если High[предыдущее]>=High[текущее], тогда HEx=High[текущее], иначе Low[текущий]
HL:=If(Abs(LEx-Ref(LEx,-1))/Ref(LEx,-1)>=Abs(Hex-Ref(HEx,-1))/Ref(HEx,-1),LEx,HEx); - если MathAbs(LEx - предыдущий LEx)/предыдущий LEx >= MathAbs(HEx - предыдущий HEx)/предыдущий HEx, то HL = LEx иначе HEX
HiLo:=If(PeakBars(1,HL,a)<TroughBars(1,HL,a),
If(H>=Peak(1,HL,a), H, L), If(L<=Trough(1,HL,a), L, H)); -
если последний экстремум зигзага построенного по значению HL наверху{
если текущий High>этого экстремума, то HiLo=текущму High, иначе текщему Low
}
иначе{
если текущtt Low<этого экстремума, то HiLo=текущму Low, иначе текщему High}
ZZ:= Zig(HiLo,a,%); - рассчитывается значение зигзага по знчению HiLo
ZZ; - рисуем згзаг
у функции зигзага метастока первый аргумент - массив данных, второй значение чувствительность (ну или как его там назвать), третий означает в чем вести рассчет чувствительности в абсолютном значении или в процентах.
LEx:=If((Ref(L,-1)>=L),L,H); - если Low[предыдущее]>=Low[текущее], тогда LEx=Low[текущее], иначе High[текущий]
HEx:=If((Ref(H,-1)<=H),H,L); - если High[предыдущее]>=High[текущее], тогда HEx=High[текущее], иначе Low[текущий]
HL:=If(Abs(LEx-Ref(LEx,-1))/Ref(LEx,-1)>=Abs(Hex-Ref(HEx,-1))/Ref(HEx,-1),LEx,HEx); - если MathAbs(LEx - предыдущий LEx)/предыдущий LEx >= MathAbs(HEx - предыдущий HEx)/предыдущий HEx, то HL = LEx иначе HEX
HiLo:=If(PeakBars(1,HL,a)<TroughBars(1,HL,a),
If(H>=Peak(1,HL,a), H, L), If(L<=Trough(1,HL,a), L, H)); -
если последний экстремум зигзага построенного по значению HL наверху{
если текущий High>этого экстремума, то HiLo=текущму High, иначе текщему Low
}
иначе{
если текущtt Low<этого экстремума, то HiLo=текущму Low, иначе текщему High}
ZZ:= Zig(HiLo,a,%); - рассчитывается значение зигзага по знчению HiLo
ZZ; - рисуем згзаг
у функции зигзага метастока первый аргумент - массив данных, второй значение чувствительность (ну или как его там назвать), третий означает в чем вести рассчет чувствительности в абсолютном значении или в процентах.
Алгоритм понятен и довольно прост. Можно реализовать в МТ4. Лучше, если это сделают разработчики МТ4, им за это платят.
GS&Rosh
Лицом к лицу лица не видно. Этот код приведен ниже.
Проблема есть!
ZigZag Метастока и МТ4 - это две большие разницы, у них совершенноразные алгоритмы работы.
И соответственно индикатор или система работаюшая в Метасе в МТ будет работать совершенно по другому.
Может кто знает код ZigZag именно Метастока?!
ZigZag Метастока и МТ4 - это две большие разницы, у них совершенноразные алгоритмы работы.
И соответственно индикатор или система работаюшая в Метасе в МТ будет работать совершенно по другому.
Может кто знает код ZigZag именно Метастока?!
Лицом к лицу лица не видно. Этот код приведен ниже.
Вот код метастоковского индикатора ZigZagMS (MS - это MetaStock). Для простоты я ограничился массивом Close. Проверил, все работает. Заглядывает в "будущее", т.е. последняя точка зигзага раположена на последней свече.
#property copyright "MetaStock" #property link "http://www.eforex.ultranet.ru/" #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Blue extern double ExtProcent=0.3; double ExtMapBuffer[],Procent,min,max; int m,shift,shift0; int init()//================================================ {IndicatorBuffers(1); //---- drawing settings SetIndexStyle(0,DRAW_SECTION); //---- indicator buffers mapping SetIndexBuffer(0,ExtMapBuffer); SetIndexEmptyValue(0,0.0); ArraySetAsSeries(ExtMapBuffer,true); IndicatorShortName("ZigZag("+DoubleToStr(ExtProcent,2)+" %)")"); Procent=ExtProcent*0.01; Comment(" Procent="+DoubleToStr(ExtProcent,2)+" %"); return(0); }int deinit() {Comment(" ");} int start()//============================================================================= {min=Close[Bars-1];max=min;m=0;//m=0:building the first left point of ZigZag for (shift=Bars-2;shift>=0;shift--) {if (Close[shift]>max) {max=Close[shift];if (m!=2)//m=1:building the down-point (min) of ZigZag {if (max-min>=Procent*min)//min (m!=2) end,max (m=2) begin {m=2;ExtMapBuffer[shift]=max;shift0=shift;min=max; }else ExtMapBuffer[shift]=0.0;//max-min=miser,(m!=2) continue }else //max (m=2) continue {ExtMapBuffer[shift0]=0.0;ExtMapBuffer[shift]=max;shift0=shift;min=max; }}else if (Close[shift]<min) {min=Close[shift]; if (m!=1)//m=2:building the up-point (max) of ZigZag {if (max-min>=Procent*max)//max (m!=1) end,min (m=1) begin {m=1;ExtMapBuffer[shift]=min;shift0=shift;max=min; }else ExtMapBuffer[shift]=0.0;//max-min=miser,(m!=1) continue }else //min (m=1) continue {ExtMapBuffer[shift0]=0.0;ExtMapBuffer[shift]=min;shift0=shift;max=min; }}else ExtMapBuffer[shift]=0.0; }if (ExtMapBuffer[0]==0.0) ExtMapBuffer[0]=Close[0]; }
Индикатор для MetaStock нужно преобразовать для " MT-4 "
{Зиг-заг}
a:=Input("size %", 0.01,10,0.3);
LEx:=If((Ref(L,-1)>=L),L,H);
HEx:=If((Ref(H,-1)<=H),H,L);
HL:=If(Abs(LEx-Ref(LEx,-1))/Ref(LEx,-1)>=Abs(Hex-Ref(HEx,-1))/Ref(HEx,-1),LEx,HEx);
HiLo:=If(PeakBars(1,HL,a)<TroughBars(1,HL,a),
If(H>=Peak(1,HL,a), H, L), If(L<=Trough(1,HL,a), L, H));
ZZ:= Zig(HiLo,a,%);
ZZ;
{Зиг-заг}
a:=Input("size %", 0.01,10,0.3);
LEx:=If((Ref(L,-1)>=L),L,H);
HEx:=If((Ref(H,-1)<=H),H,L);
HL:=If(Abs(LEx-Ref(LEx,-1))/Ref(LEx,-1)>=Abs(Hex-Ref(HEx,-1))/Ref(HEx,-1),LEx,HEx);
HiLo:=If(PeakBars(1,HL,a)<TroughBars(1,HL,a),
If(H>=Peak(1,HL,a), H, L), If(L<=Trough(1,HL,a), L, H));
ZZ:= Zig(HiLo,a,%);
ZZ;
Объясните поподробнее алгоритмы функций PeakBars, TroughBars, Peak, Trough и Zig.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
{Зиг-заг}
a:=Input("size %", 0.01,10,0.3);
LEx:=If((Ref(L,-1)>=L),L,H);
HEx:=If((Ref(H,-1)<=H),H,L);
HL:=If(Abs(LEx-Ref(LEx,-1))/Ref(LEx,-1)>=Abs(Hex-Ref(HEx,-1))/Ref(HEx,-1),LEx,HEx);
HiLo:=If(PeakBars(1,HL,a)<TroughBars(1,HL,a),
If(H>=Peak(1,HL,a), H, L), If(L<=Trough(1,HL,a), L, H));
ZZ:= Zig(HiLo,a,%);
ZZ;