Converta este MT3 em MT4 para mim - muito fácil - página 2

 

Converta este MT3 em MT4 para mim - muito fácil

Estou considerando mudar do MT4 para o MT3.

Acabo de editar meu primeiro assessor especializado.

Levei cerca de 4 semanas para aprender o suficiente sobre MT e MQL4 para finalmente ter minha estratégia programada, mas agora acho que posso apenas converter o programa para MQL2.

Pelo que li neste fórum, não vejo nenhuma vantagem para o MT4.

O que li, e aprendi através de um backtesting em minha EA, é que o MT4 Strategy Tester não funciona. Somente por esta razão, acho que só faz sentido passar mais alguns dias fazendo a troca para que eu possa obter um backtest preciso com o MT3.

Eu já baixei e instalei o MT3 e dei uma olhada no dicionário do editor. Posso ver que há menos recursos com o MT3 do que com o MT4, mas não acho que isso será um grande problema.

Uma característica do meu MQL4 EA com a qual eu contava muito, era o OrderMagicNumber para armazenar o preço do pedido original pendente, que pode mudar com o escorregamento quando o pedido é preenchido.

Os pedidos MQL2 não têm OrderMagicNumber, mas notei no dicionário MQL2 uma função chamada OrderValue que, em sua descrição, diz que a função pode recuperar um comentário do pedido (VAL_COMMENT).

Se eu puder usar o comentário para armazenar o preço preferido, acho que posso fazer a troca para o MT3. Entretanto, não consegui encontrar no dicionário, como definir o comentário do pedido. A descrição da função SetOrder não lista "comentário" como um de seus parâmetros.

Alguém familiarizado com esta característica da MQL2 pode me dizer como o comentário de ordem é definido?

 
BC Brett:

Pelo que li neste fórum, não vejo nenhuma vantagem para o MT4.

O que eu li, e aprendi através de um backtesting em minha EA, é que o Testador de Estratégia MT4 não funciona. Somente por esta razão, acho que só faz sentido passar mais alguns dias fazendo a troca para que eu possa obter um backtest preciso com o MT3.

Então, onde você já leu que o testador MT3 é mais confiável do que o MT4???

Eu acho que você está muito mal informado sobre isso!

O backtest MT4 pode ser muito confiável, mas depende da qualidade dos dados históricos que você tem e da sua % de qualidade de modelagem.

Você não poderá adicionar "comentários" ou atribuir "MagicNumbers" aos pedidos enviados em MQL2 da forma como pode ser feito na programação MT4. A programação MT4 é mais avançada que a programação MQL2, por que retroceder?

 

Você pode querer ler sobre o MT4 de volta aqui: http://www.strategybuilderfx.com/forums/showthread.php?t=15309&page=1&pp=8

(se você não puder acessar a página você precisará se inscrever como membro - é gratuito)

 

Pelo que eu reuni aqui e ali, as pessoas que são um pouco sérias em relação aos testes de retaguarda usam softwares como WealthLab, Amibroker ou MetaStocks, NÃO mt3 ou mt4.

Talvez o backtesting do mt4 possa ser mais ou menos ok se você não usar nenhum dado intrabarramento. Por exemplo, se você trabalha com barras diárias, você deve usar apenas valores Abertos e Fechados de barras diárias (e nem mesmo Alto e Baixo se você definir StopLosses ou Take Profits). Nada mais.

A razão é que, apesar do que sua "qualidade de modelagem" poderia dizer, o único método de retrocesso mt4 que usa dados REAIS é"Somente preços Abertos".

Os métodos "Cada carrapato" e "Pontos de Controle" são belos contos de fadas. Pessoalmente, não vou trocar dinheiro com base em dados de contos de fadas de backtesting.

Ainda estou aprendendo o mt4, mas em minha experiência, eu não usaria o mt4 de nenhuma outra forma. Não estou nem 100% certo de que a maneira que sugeri seja 100% confiável. Se eu quiser fazer um bom backtesting, eu vou obter um software de backtesting.

Sobre o mt4 vs mt3 para negociação ao vivo: pelo que reuni aqui e ali ;-) o mt4 não pode ser confiável. Às vezes, as ordens que o mt4 diz que não foram executadas, na verdade são executadas!! Isto foi relatado por corretores. Se isto for verdade, então os corretores que oferecem o mt4 ao vivo não são sérios. Ou, eles se certificaram de que os bugs mt4 não aconteciam em sua plataforma, também é possível.

Por outro lado, "eu me reuni aqui e ali" rs que negociar ao vivo com o mt3 é possível.

 

Converta este MT3 em MT4 para mim - muito fácil

Oi pessoal, eu apreciaria se alguém pudesse converter isto para o MT4 para mim - nosso corretor acabou de se atualizar para o MT4.

Aqui está o código:

/*[[

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;

/*[[

Muito obrigado!!

 
scott TTM:
Olá pessoal, eu apreciaria se alguém pudesse converter isto para o MT4 para mim - nosso corretor acabou de fazer um upgrade para o MT4.

Aqui está o código:

/*[[

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;

/*[[

Muito obrigado!!

Olá Scott...

Tente esta....

Arquivos anexados:
ttm_stoch.mq4  5 kb
 

Hellkas,

Receio que isso não tenha funcionado muito bem. Vá para www.compoundfx.com/mt3stoch.jpg para ver como deve ficar no gráfico MT3 - tentei carregar isto, mas não funcionou.

Obrigado por seus esforços, talvez isto ajude?

Quando o traço no MT4, vejo apenas uma linha magenta e não um ciano - embora eu veja que a entrada está lá.

scott

 

Hi,

Primeiramente hellkas Eu vou agradecê-lo por manter meu cabeçalho de arquivo após converter o indicador mql com minha ferramenta Mql2Mq4 !!!

Então é normal que o convertido não funcione corretamente, se você olhar no Metatrade 4 na TabSheet (Painel) de Log de Mensagens Especializadas você verá "Exceção Zero Devide" como nesta foto. No roteiro do Indicador você usa o operador de divisão, com algumas vezes NULL:-( é por isso que este erro, e repito, no Metatrade 3, não houve exceções geradas para isso, no entanto no Metatrade 4.

Eu coloquei o convertido funcionando como no MT 3, e você pode ver que tipo de mudança eu fiz.

Tchau, tchau.

Arquivos anexados:
exception.jpg  52 kb
ttmstoch.mq4  5 kb
 

yousky,

Muito obrigado, parece perfeito! Fico-lhe grato.

-SB

 

yousky,

Ok, depois de mais revisões, ainda não está totalmente lá. Ainda me dá leituras falsas no MT4, ou seja, as linhas não estão cruzando onde deveriam estar. Eu usei o código que você colocou aqui. Alguma idéia?

SB

Razão: