Canal Forex

Canal Forex (http://www.canalforex.com/forum/index.html)
-   Sistemas de Trading Mecânicos para Forex (http://www.canalforex.com/forum/forumdisplay.html?f=10)
-   -   Iniciação à programação em MQL4 (http://www.canalforex.com/forum/showthread.html?t=231)

VAM 23-07-2009 23:22

Iniciação à programação em MQL4
 
5 Ficheiro(s) em Anexo
Com a popularização dos sistemas de trading automático, particularmente através da plataforma MetaTrader, são cada vez mais os que se interrogam como é que podem programar as suas estratégias ou apenas recolhas de informação mais simples de forma a automatizá-las.

Aquilo que recomendo vivamente é que se vá à fonte (the source:cool:), ou seja, ao livro do MQL4 que está disponível online em [URL="http://book.mql4.com/"]http://book.mql4.com/[/URL]

De qualquer forma pretendo com este post mostrar os passos básicos de como é que se constrói e usa um programa no MetaTrader para que seja mais fácil para todos compreender o que é que se deve fazer com linhas de programação que tenham sido ou venham a ser partilhadas no futuro e até quem sabe um dia construir EAs inteiros em conjunto.

O MetaTrader já tem um compilador da linguagem MQL4 incorporado por isso para passarem para a parte de programação basta clicarem no botão MetaEditor (Ponto de exclamação dentro do losango):

Anexo 58

Se é a primeira vez que abrem o MetaEditor devem estar a ver o código de um dos dois EAs disponibilizados pela MetaQuotes: a Moving Average e a MACD. Clicam em New que é logo o primeiro botão à esquerda...

Anexo 62

...e seleccionam que tipo de programa é que querem fazer. Neste caso será um script. Indicam o nome do script e o vosso nome e clicam em concluir.

Para este exemplo peguei na linha disponibilizada pelo afernandes noutro tópico para ver o spread de um par: double sprd =MarketInfo(Symbol(),MODE_SPREAD);

Depois de clicarmos em Concluir surge logo o corpo do script com o nome que escolhemos e o nosso e neste caso apenas uma função Start já que um script pressupõe que o programa só será executado uma vez. No caso de um EA também teria as funções Init e Deinit para a primeira e última vezes em que o EA corresse já que a função Start irá ser activada por defeito cada vez que o mercado se mova (cada tick).

Para fazer então funcionar a linha de programação mencionada basta colocá-la no interior (entre os {}) da função Start e antes do comando return. Coloquei também a linha Alert(sprd); para que o valor identificado na linha anterior seja divulgado no ecrã quando o script for executado.

Anexo 60

Quando estamos satisfeitos com o programa clicamos em Compile e se surgir a mensagem 0 error(s), 0 warning(s) está tudo bem pelo menos do ponto de vista da compilação.

Para utilizar o novo script voltamos à plataforma e abrimos o Navigator (botão com uma pasta e uma estrela) e abrimos o grupo scripts que deverá ser o último e parece um pergaminho.

Anexo 61

Lá no meio localizamos o nosso script e para o activar clicamo-lo e arrastamo-lo para o gráfico onde o queremos executar. Neste caso em concreto o resultado será um pop-up com a indicação de qual é o spread do par:

Anexo 59

Este valor está em pipettes e não em pips porque este broker em concreto decidiu acrescentar mais uma casa decimal às cotações, logo o spread neste caso é 4 pips para o USDCAD.

Temos assim um programa bastante simples mas que nos permite obter de imediato uma informação importante. Se mantivermos a mesma estrutura substituindo apenas o termo MODE_SPREAD na primeira linha podemos obter uma série de outras informações. Experimentem por exemplo com MODE_ASK, MODE_BID, MODE_POINT, MODE_STOPLEVEL, MODE_LOTSIZE, MODE_MINLOT, MODE_MAXLOT, etc.

afernandes 24-07-2009 07:01

E continuando o que ensina o VAM...
Além do Alert(); poderíamos tb usar uma função muito recorrida que é o Comment();

O Alert(); abre um popup como mostra a imagem...
O Comment(); escreve o resultado no canto superior esquerdo. Portanto sempre visivel.

É de salientar que ambas as funções tem a particularidade de converter os diferentes tipos de variáveis ao tipo carácter. Só temos que separar diferentes tipos com a virgula.

Não temos pois que nos preocupar com este aspecto, embora logicamente o MT4 tenha as correspondentes funções de conversão.

Poderíamos assim colocar:
Alert('O spread actual é de ',sprd);
Comment('O spread actual é de ',sprd);

Há ainda funções para por o texto em qualquer parte do ecrán, com cor, tipo e tamanho de letra entre outras subtilezas. Mas já um é algo mais complicadilho.

nunoviseu 24-10-2009 10:04

alguem pode ajudar a reprogramar este ea
 
ele abre posições sem parar. o que eu quero é que ele abra 6 posições e quando abre a 7 seja de igual valor da primeira mas feche a primeira. isto porque se trata de um ea martingale. assim teremos no maximo 6 posições abertas e não rebentamos a conta.
muito obrigado pelo tempo e cuidado dispensado. junto ea que é livre no forum tsd. chama-se fredmon pip10p3+.mq4.não consegui carregar o ficheiro

afernandes 25-10-2009 19:53

Vejamos...

Você pode limitar o numero de posições abertas em simultâneo.

Pode colocar uma var global nos externs..

extern int nPos = 7;

E depois antes da função de abertura, testar

int nP = OrdersTotal();
if( nP < nPos ) {
// Só entra aqui se o nº de ordens aberta é inferior a nPos
if (Abrir==1) { fOpenS();return(0);}
if (Abrir==2) { fOpenB();return(0);}
}


OrdersTotal(); // Dá o numero de ordens abertas. TODAS de qualquer PAR e Grafico.

Se não entende nada disto, aconselho a editar os EAs e procurar esta função OrdersTotal() e a lógica usada no seu uso.
Vai rapidamente ver como se usa.

bullinger 31-10-2009 19:19

boa tarde
 
afonseca, estava pesquisando pela internet como poderia fazer o meu expert advisor e vejo que voce percebe de programação.

Tenho ando a analisar gráficos e tenho uma teoria que gostaria de poder passar para um ea, voce podia ajudar-me?

julgo que esta teoria seja mesmo muito boa, diga-me qlq coisa para o meu e-mail, poix n gostaria de expor aqui a teoria

obrigado

[email]jpedropimenta@hotmail.com[/email]

afernandes 01-11-2009 08:48

Bullinger, suponho que se referia a AFernandes pois não vejo aqui nenhum AFonseca...

Com sinceridade, sim que sei algo de EAs, depois de testar milhares e fazer centenas... MAS ESTOU SEM DISPOSIÇÃO PARA PEGAR EM EAs.

Não é uma questão de TEMPO, que tenho, é não acreditar que um EA completamente automático seja lucrativo.
Eu uso um EA, mas é apenas um executor e alertador de situações.

Ao contrário, pelo menos o VAM, sim que aposta no EAs.
E acredito que tenha sucesso, que nos EAs, penso eu, tb funciona o principio do que funciona com um, não funciona forçosamente com outros.
Parece tudo muito automático, mas há questões como o risco, os PARES, as Horas e mais coisas de certeza que nao controlo)

De qualquer forma, agradeço a disponibilidade em compartir estratégias.

bullinger 01-11-2009 13:41

pode ajudar-me
 
entao so queria que voce visse essa ea e me disse-se como a posso meter a funcionar, porque eu fiz o dowload e n consigo que ela funcione.

sabe que posso fazer?

[url]http://www.forexfactory.com/showthread.php?t=19073[/url]

está neste link, é necessário fazer uma alteração mas isso já consegui, só n consigo fazer mete-la a funcionar..


pode ajudar-me por favor???

afernandes 01-11-2009 17:48

Sim...
Vou ver hoje ou amanha.. tá?
Já o baixei
AF

bullinger 01-11-2009 17:52

eu n sei se essa ea tem mais alguma analise, mas eu queria meter isso a funcionar só com bollinger a peridodo 10 e desviations 3 e shif 0 com aplicado ao fecho.

veja se é possivel funcionar com essa ea só com a analise das bollinger.

obrigado

afernandes 01-11-2009 23:19

O EA trabalha perfeitamente.

Há que levar em conta, que
se é testado em um broker de 5.º digito, como o Alpari, IBFX etc... se deve multiplicar o valor em:
TakeProfit e StopLossATR por 10
Ou seja em lugar dos 20 e 10 que lá estão, colocar 200 e 100 respectivamente.

Alem das Bandas de Bollinger usa tb o DeMarker e o ADX no que se refere à abertura de ordens.

No caso de querer alterar os valores para Bands... posso colocar 3 variáveis nos inputs para o Período, desviaçao e shift

Diga-me se efectivamente quer isso.

Uma coisa que não gostei... é que põe uns SLs exageradissimos... Mas tb opinar só na base dos testes históricos nao tem muita validade.


Todas horas estão no fuso horário GMT. A hora actual é 15:35.

Powered by vBulletin Version 3.6.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.