Конвертировать MT3 в MT4 для меня - очень просто. - страница 2

 

Конвертируйте MT3 в MT4 для меня - очень просто

Я рассматриваю возможность перехода с MT4 на MT3.

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

Мне потребовалось около 4 недель, чтобы узнать достаточно об MT и MQL4, чтобы наконец-то запрограммировать свою стратегию, но теперь я думаю, что мог бы просто перевести программу на MQL2.

Из того, что я прочитал на этом форуме, я не вижу никаких преимуществ MT4.

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

Я уже скачал и установил MT3 и взглянул на словарь редактора. Я вижу, что в MT3 меньше функций, чем в MT4, но я не думаю, что это будет серьезной проблемой.

Одной из функций моего советника MQL4, на которую я сильно полагался, был OrderMagicNumber для хранения первоначальной цены отложенного ордера, которая может меняться при проскальзывании, когда ордер исполняется.

Ордера MQL2 не имеют OrderMagicNumber, но я заметил в словаре MQL2 функцию OrderValue, в описании которой говорится, что эта функция может получить комментарий ордера (VAL_COMMENT).

Если я смогу использовать комментарий для хранения предпочтительной цены, я думаю, что смогу перейти на MT3. Однако я не смог найти в словаре, как установить комментарий ордера. В описании функции SetOrder в качестве одного из параметров не указан "комментарий".

Может ли кто-нибудь, знакомый с этой функцией MQL2, рассказать мне, как задается комментарий к ордеру?

 
BC Brett:

Из того, что я прочитал на этом форуме, я не вижу никаких преимуществ MT4.

То, что я прочитал и узнал в ходе бэктестинга моего советника, - это то, что тестер стратегий MT4 не работает. Только по этой причине я думаю, что имеет смысл потратить еще несколько дней на переход, чтобы получить точный бэктест в MT3.

Итак, где вы прочитали, что бэктестер МТ3 более надежен, чем бэктестер МТ4?

Я думаю, что вы очень неправильно информированы об этом!

Бэктестинг MT4 может быть очень надежным, но это зависит от качества исторических данных, которые у вас есть, и вашего % качества моделирования.

Вы не сможете добавлять "комментарии" или присваивать "MagicNumbers" отправленным ордерам в MQL2 так, как это можно сделать в программировании MT4. Программирование на MT4 более продвинуто, чем на MQL2, зачем двигаться назад?

 

Вы можете почитать о бэктестинге MT4 здесь: http://www.strategybuilderfx.com/forums/showthread.php?t=15309&page=1&pp=8.

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

 

Из того, что я собрал здесь и там, люди, которые серьезно относятся к бэктестингу, используют такие программы, как WealthLab, Amibroker или MetaStocks, а не mt3 или mt4.

Возможно, бэктестинг на mt4 может быть нормальным, если вы не используете никаких внутрибарных данных. Например, если вы работаете с дневными барами, вы должны использовать только значения Open и Close дневных баров (и даже не High и Low, если вы устанавливаете StopLosses или Take Profits). Больше ничего.

Причина в том, что, несмотря на "качество моделирования", единственный метод бэктестинга mt4, который использует РЕАЛЬНЫЕ данные, это"Только цены открытия".

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

Я все еще изучаю mt4, но по моему опыту, я бы не стал использовать бэктестинг mt4 по-другому. Я даже не уверен на 100%, что предложенный мной способ на 100% надежен. Если я хочу провести хороший бэктестинг, я приобрету программное обеспечение для бэктестинга.

О mt4 vs mt3 для торговли в реальном времени: из того, что я узнал здесь и там ;-) mt4 нельзя доверять. Иногда ордера, которые, по словам mt4, не были исполнены, на самом деле исполняются!!! Об этом сообщили брокеры. Если это правда, то брокеры, предлагающие торговлю на mt4 в реальном времени, несерьезны. Или они позаботились о том, чтобы баги mt4 не происходили на их платформе, это тоже возможно.

С другой стороны, "я собрал здесь и там" lol, что торговля в реальном времени с mt3 возможна.

 

Преобразуйте этот MT3 в MT4 для меня - очень просто

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

Вот код:

/*[[

Name := TTM Stoch

Author := Scott Black

Link := http://www.tradethemajors.com

Separate Window := yes

First Color := Cyan

First Draw Type := Line

Use Second Data := yes

second Color := Magenta

second Draw Type := Line

Minimum Chart Limits := 0.000000

Maximum Chart Limits := 100.000000

]]*/

Inputs : Slw(8),Pds(13),Slwsignal(9);

Variables : AA(0),bb(0),aa1(0),cnt1(0);

Variables : shift(0), cnt(0), loopbegin(0),loopbegin2(0),loopbegin3(0), first(True), prevbars(0);

Variables : sum(0), smconst(0),smconst1(0), prev(0),prev1(0),prev2(0),prev3(0), weight(0), linear(0);

Variables : MAValue(0),MAValue2(0),mavalue3(0), MAstring("");

Variables : MyHigh(0),MyLow(0),counter(0),Price(0),Price1(0);

SetLoopCount(0);

smconst = 2 / (1+SLW);

smconst1 = 2 / (1+slwsignal);

loopbegin = loopbegin+1;

For shift = 2000 Downto 0 Begin

prev = GetIndexValue2(shift+1);

AA =100* ((Close[shift] - Low[Lowest(MODE_LOW,shift+pds,Pds)]) / (High - low[Lowest(MODE_LOW,shift+pds,Pds)]));

MAValue2 = smconst * (aa-prev) + prev;

SetIndexValue2(shift,MAValue2);

loopbegin = loopbegin-1;

End;

loopbegin2 = loopbegin2+1;

For shift = 2000-pds downto 0 Begin

MyHigh = -999999;

MyLow = 99999999;

For counter = shift to pds + shift Begin

PRICE= GetIndexValue2(counter);

If Price > MyHigh Then

MyHigh = Price;

If pds <= 0 Then

MyHigh = Price;

If Price < MyLow Then

MyLow = Price;

If pds <= 0 Then

MyLow = Price;

end;

prev1 = GetIndexValue(shift+1);

aa1=GetIndexValue2(shift);

bb=100*(aa1-mylow)/(myhigh-mylow);

MAValue = smconst * (bb-prev1) + prev1;

SetIndexValue(shift,mavalue);

loopbegin2 = loopbegin2-1;

End;

loopbegin3 = loopbegin3+1;

For shift = 2000 downto 0 Begin

prev2=GetIndexValue2(shift+1);

prev3=GetIndexValue(shift);

MAValue3= smconst1 * (prev3-prev2) +Prev2;

SetIndexValue2(shift,mavalue3);

loopbegin3 = loopbegin3-1;

end;

/*[[

Спасибо большое!!!

 
scott TTM:
Привет, ребята, я был бы признателен, если бы кто-нибудь мог перевести это на язык MT4 для меня - наш брокер только что перешел на MT4.

Вот код:

/*[[

Name := TTM Stoch

Author := Scott Black

Link := http://www.tradethemajors.com

Separate Window := yes

First Color := Cyan

First Draw Type := Line

Use Second Data := yes

second Color := Magenta

second Draw Type := Line

Minimum Chart Limits := 0.000000

Maximum Chart Limits := 100.000000

]]*/

Inputs : Slw(8),Pds(13),Slwsignal(9);

Variables : AA(0),bb(0),aa1(0),cnt1(0);

Variables : shift(0), cnt(0), loopbegin(0),loopbegin2(0),loopbegin3(0), first(True), prevbars(0);

Variables : sum(0), smconst(0),smconst1(0), prev(0),prev1(0),prev2(0),prev3(0), weight(0), linear(0);

Variables : MAValue(0),MAValue2(0),mavalue3(0), MAstring("");

Variables : MyHigh(0),MyLow(0),counter(0),Price(0),Price1(0);

SetLoopCount(0);

smconst = 2 / (1+SLW);

smconst1 = 2 / (1+slwsignal);

loopbegin = loopbegin+1;

For shift = 2000 Downto 0 Begin

prev = GetIndexValue2(shift+1);

AA =100* ((Close[shift] - Low[Lowest(MODE_LOW,shift+pds,Pds)]) / (High - low[Lowest(MODE_LOW,shift+pds,Pds)]));

MAValue2 = smconst * (aa-prev) + prev;

SetIndexValue2(shift,MAValue2);

loopbegin = loopbegin-1;

End;

loopbegin2 = loopbegin2+1;

For shift = 2000-pds downto 0 Begin

MyHigh = -999999;

MyLow = 99999999;

For counter = shift to pds + shift Begin

PRICE= GetIndexValue2(counter);

If Price > MyHigh Then

MyHigh = Price;

If pds <= 0 Then

MyHigh = Price;

If Price < MyLow Then

MyLow = Price;

If pds <= 0 Then

MyLow = Price;

end;

prev1 = GetIndexValue(shift+1);

aa1=GetIndexValue2(shift);

bb=100*(aa1-mylow)/(myhigh-mylow);

MAValue = smconst * (bb-prev1) + prev1;

SetIndexValue(shift,mavalue);

loopbegin2 = loopbegin2-1;

End;

loopbegin3 = loopbegin3+1;

For shift = 2000 downto 0 Begin

prev2=GetIndexValue2(shift+1);

prev3=GetIndexValue(shift);

MAValue3= smconst1 * (prev3-prev2) +Prev2;

SetIndexValue2(shift,mavalue3);

loopbegin3 = loopbegin3-1;

end;

/*[[

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

Привет, Скотт...

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

Файлы:
ttm_stoch.mq4  5 kb
 

Хелкас,

боюсь, что это не совсем сработало. Зайдите на www.compoundfx.com/mt3stoch.jpg, чтобы увидеть, как это должно выглядеть на графике MT3 - я пытался загрузить это, но не получилось.

Спасибо за ваши усилия, возможно, это поможет?

Когда я строю график в MT4, я вижу только пурпурную линию, а не голубую - хотя я вижу, что вход есть.

Скотт

 

Привет,

Во-первых hellkas Я буду признателен, если вы сохраните заголовок моего файла после конвертации mql индикатора с помощью моего инструмента Mql2Mq4 !!!

Тогда это нормально, что конвертированный индикатор не работает должным образом, если вы посмотрите в Metatrade 4 в журнале сообщений эксперта TabSheet (Panel) вы увидите "Zero Devide exception" как на этой картинке. В скрипте индикатора вы используете оператор divide, причем иногда NULL:-( отсюда и ошибка, и повторяю, в Metatrade 3 исключений на это не выдавалось, тем не менее в Metatrade 4.

Я выложил переделанный вариант, который работает как на MT 3, и вы можете видеть, какие изменения я сделал.

До свидания

Файлы:
exception.jpg  52 kb
ttmstoch.mq4  5 kb
 

yousky,

Большое спасибо, все выглядит идеально! Я ценю это.

-SB

 

Тыски,

Хорошо, после дальнейшего рассмотрения, он еще не полностью готов. Он все еще дает мне ложные показания на MT4, т.е. линии не пересекаются там, где они должны быть. Я использовал код, который вы разместили здесь. Есть идеи?

SB

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