Como codificar? - página 179

 
Roger09:
Tentei várias vezes por conta da Alpari, sem erros. Apenas uma vez, quando coloquei script no diretório de especialistas e lancei como EA.

É porque eu lhe perguntei sobre os diretórios.

Desculpe.

Acho que descobri o problema. Estou à vista da janela e normalmente faço "correr como administrador". tentei sem fazer isso e parecia funcionar bem agora

 

Passando um Array de MT4 .mq4 para C++ DLL

Qualquer ajuda, por favor.

Estou tendo problemas ao passar um único Array que contém 8 valores indicadores para uma DLL C++ . É muito simples, mas parece que eu recebo -1 quando chamo a

Função Forexindex() que na verdade chama a função importada de gepModel ( d [] ) a partir da DLL . A função ForexIndex deve retornar 0 ou 1 a partir da DLL

Eu suspeito que estou fazendo algo errado no arquivo .mq4 no Forexindex() . Qualquer ajuda será altamente apreciada. Abaixo está o código simples . O arquivo C++ DLL está bem, ele compila OK sem erros, então a questão é com o arquivo mq4 .

================================MQ4 file====================

#importar "JadeClass.dll"

int gepModel( double& d[] );

#importar

int start()

{

........

........

........

ForexIndex();

.......

......

......

.....

}

int ForexIndex()

{

int myindex;

double ind[] , MA_Close, MA_High, MA_Low, MA_Open, Macd, Rsi, Stoch, Vol;

int counted_bars=IndicatorCounted();

if (counted_bars<0) return(-1);

if (counted_bars>0) counted_bars--;

int pos=Barras_contadas_combars;

MA_Fechar = iMA(NULL,PERÍODO_M5,8,0,0,0,0) ;

MA_High = iMA(NULL,PERÍODO_M5,8,0,0,0,0,0) ;

MA_Low = iMA(NULL,PERÍODO_M5,8,0,0,0,0,0) ;

MA_Open = iMA(NULL,PERÍODO_M5,8,0,0,0,0,0) ;

Macd = iMACD(NULL,PERÍODO_M5,12,26,9,0,0,0,0) ; Macd = iMACD(NULL,PERÍODO_M5,12,26,9,0,0,0,0)

Rsi = iRSI(NULL,PERÍODO_M5,10,0,0,0);

Stoch = iStochastic(NULL,PERÍODO_M5,14,3,3,0,0,0,0,0);

Vol = iVolume(NULL,PERÍODO_M5,0);

while(pos>=0)

{

ind[0] = MA_Close;

ind[1] = MA_Alto;

ind[2] = MA_Baixo;

ind[3] = MA_Abrir;

ind[4] = Macd;

ind[5] = Rsi;

ind[6] = Stoch;

ind[7] = Vol;

myindex = gepModel(ind);

pos[4] = Macd; ind[5] = Macd;

}

Imprimir( " Myindex = " , myindex);

retornar (myindex);

}

=========================DLL Código fonte ===========================

#incluir "stdafx.h"

#incluir "JadeClass.h"

#incluir

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

#define MT4_EXPFUNC __declspec(dllexport)

// O único e único objeto CJadeClassApp

CJadeClassApp aApp;

MT4_EXPFUNC int __stdcall gepModel(double d[]);

MT4_EXPFUNC int __stdcall gepModel(double d[])

{

.....

.....

.....

.....

}

============================ O arquivo Def para DLL Código fonte ===================

JadeClass.def : Declara os parâmetros do módulo para a DLL.

BIBLIOTECA "JadeClass".

EXPORTAÇÕES

Exportações explícitas podem ser feitas aqui.

gepModel

========================================

 

Precisa de ajuda para adicionar código para apenas um comércio por sinal

Estou apenas aprendendo código mq4 e passei muitas horas tentando descobrir como codificar apenas uma negociação por sinal. Tentei de algumas maneiras, mas não consegui fazer apenas uma troca. O exemplo seria se o TP fosse atingido, ele colocaria outra troca do mesmo lado por causa do sinal ainda ser bom. Eu gostaria que ele esperasse até o sinal inverso e depois o colocasse nesse comércio. Anexei a EA aqui sem nenhuma das minhas alterações. Obrigado antecipadamente pela ajuda. Marty

Arquivos anexados:
 
martypatty:
Estou apenas aprendendo código mq4 e passei muitas horas tentando descobrir como codificar apenas uma operação por sinal. Tentei algumas maneiras, mas não consigo entender como fazer apenas uma troca. O exemplo seria se o TP fosse atingido, ele colocaria outra troca do mesmo lado por causa do sinal ainda ser bom. Eu gostaria que ele esperasse até o sinal inverso e depois o colocasse nesse comércio. Anexei a EA aqui sem nenhuma das minhas alterações. Obrigado antecipadamente pela ajuda. Marty

Descobri como fazer isso recentemente em mql4.com depois de ter tido problemas com muitos negócios abertos em um único bar. Os artigos no mql4 me ajudaram muito no início, além disso, eles têm um banco de dados de códigos que lhe dá bons exemplos para trabalhar. Ainda assim este site tem um excelente histórico de posts e alguns codificadores realmente bons, basta usar o recurso de busca e clicar no botão exibir como posts, poupa você de procurar em páginas e páginas de um tópico apenas para a única resposta que você precisa. Quanto ao seu problema, basta usar este código:

int BarsCount=0;

if(Bars<BarsCount)

{

//Code to do once goes here

BarsCount=Bars;

}

[/CODE]

Personally I'm having problems with an array. I cant for the life of me figure out why the following code returns 0 all the time... Any help would be much appreciated. I'm trying to create an array of length STD_MA_Period+1 to later use with iMAOnArray but it doesnt work so its back to the drawing board I guess.

[CODE]for(i=0;i<=STD_MA_Period+1;i++)

{

STD_MA_Buffer=iStdDev(Symbol(),Period(),STD_Period,0,MODE_SMA,PRICE_CLOSE,i);

}

Print(STD_MA_Buffer[1]);

PS duplo STD_MA_Buffer[]; é definido na seção de variáveis globais.

 

conserte minha EA, por favor

tenho uma idéia, mas posso escrevê-la em código mql4, você pode me ajudar????

este é meu problema

esta é a definição do meu sistema :

A. se pedidos=0 >> OP compra && OP venda

B. Fazer grelha por + ou - condição

ex. se OPbuy + grid = OPbuy

se OPbuy - grade = OPsell

o mesmo para OPsell

C. se lucro > 0 & & & lucro > lucro mínimo ( profit locking )

parar qualquer pedido ( OP compra || OP venda ) e movimentar o patrimônio líquido ou ponto de lucro

D. fechar por lucro pode por equidade ou por ponto

formato E. .mq4 porque quero saber onde está minha culpa

Tenho um problema no ponto B. Por favor, me ajude

 
mazgen:
Tenho uma idéia, mas posso escrevê-la no código mql4, você pode me ajudar????

este meu problema

esta é a definição do meu sistema :

A. se pedidos=0 >> OP compra && OP venda

B. Fazer grelha por + ou - condição

ex. se OPbuy + grid = OPbuy

se OPbuy - grade = OPsell

o mesmo para OPsell

C. se lucro > 0 & & & lucro > lucro mínimo ( profit locking )

parar qualquer pedido ( OP compra || OP venda ) e movimentar o patrimônio líquido ou ponto de lucro

D. fechar por lucro pode por equidade ou por ponto

formato E. .mq4 porque quero saber onde está minha culpa

Tenho um problema no ponto B. Por favor, me ajude

Que tal enviar o código fonte instigado do ex4 ?

 
figurelli:
Que tal enviar o código fonte instigado do ex4 ?

apenas me mostre como codificá-lo,

este meu último detalheDeclaração

consertar isto.rar

espero que consiga entender meu EA, o problema que o loop na OP vende por que ???

 

questão dalinha de tendência

Novo na codificação e apenas fazendo coisas para praticar, eu queria parar uma linha de tendência no bar atual. O que eu inventei foi simplesmente mudar a cor da mesma na barra atual para a cor de fundo. Em essência, apenas misturando a linha que passava pela barra ao fundo e fazendo-a desaparecer naquele ponto.

Então agora eu pergunto aos especialistas qual era a maneira correta de fazer isso. Sei que há muitas maneiras de realizar a mesma coisa, então estou apenas procurando ver algumas outras idéias sobre o que eu poderia ter feito, num esforço para aprender mais.

Obrigado

 

Comportamento Muito Estranho do Código MQL

Olá a todos,

Versão Metatrader: 4.00 Build 224 (15 de maio de 2009)

Versão Metaeditor: 4.00 Build 224 (14 de maio de 2009)

Encontrei um bug muito estranho no MQL que me deixou completamente perplexo, tanto que estou olhando para TODO meu antigo código para ter certeza de que ele está escrito para evitar este problema.

Espero que alguém possa lançar alguma luz sobre o que exatamente está acontecendo aqui.

Aqui está o código, um simples indicador que essencialmente não faz nada. Entretanto, na seção init() fiz uma chamada a 2 funções quando o período do gráfico é H1.

As duas funções são idênticas em todos os aspectos, menos em um. Uma tem uma matriz int estática definida e a outra tem uma matriz int não estática definida. Tudo o que as funções fazem é imprimir o tamanho de sua matriz definida localmente, atribuir alguns valores aos elementos da matriz e então imprimi-los.

#property indicator_chart_window

void afunc() {

int i;

int array[4];

array[0] = 100;

array[1] = 101;

array[2] = 102;

array[3] = 103;

Print("afunc array[4] size="+ArraySize(array));

for (i = 0; i < 4; i++) {

Print("afunc array["+i+"]="+array);

}

}

void afunc_static() {

int i;

static int array[4];

array[0] = 100;

array[1] = 101;

array[2] = 102;

array[3] = 103;

Print("afunc_static array[4] size="+ArraySize(array));

for (i = 0; i < 4; i++) {

Print("afunc_static array["+i+"]="+array);

}

}

int init() {

if (Period() == PERIOD_H1) {

afunc();

afunc_static();

}

return(0);

}

int deinit() {

return(0);

}

int start() {

return(0);

}

Se você olhar para o código, nunca deve haver nenhuma circunstância em que as duas funções se comportem de forma diferente uma da outra.

Entretanto, se eu anexar o indicador a um gráfico M5 e depois mudar para o período de tempo H1, obtenho a seguinte saída.

2009.05.23 18:12:47 afunc EURUSD,H1: initialized

2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[3]=103

2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[2]=102

2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[1]=101

2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[0]=100

2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[4] tamanho=4

2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[3]=0

2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[2]=0

2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[1]=0

2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[0]=0

2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[4] tamanho=0

2009.05.23 18:12:47 afunc EURUSD,M5: razão uninit 3

2009.05.23 18:12:47 afunc EURUSD,M5: deinicializado

2009.05.23 18:12:45 afunc EURUSD,M5: inicializado

2009.05.23 18:12:43 afunc EURUSD,M5: carregado com sucesso

Observe que embora eu tenha definido 'int array[4]' em afunc(), o tamanho desse array é na verdade ZERO e eu não posso atribuir valores aos elementos do array. Esta função obviamente não funciona como esperado.

Observe que defini 'static int array[4]' em afunc_static() e o tamanho é corretamente mostrado como 4, assim como os valores que atribuo aos elementos do array. Esta função funciona bem.

Resumindo. Se você definir um array não estático em uma função e se essa função não for chamada por seu indicador, então você poderá ter um problema.

Se você posteriormente mudar o cronograma do gráfico e depois chamar a função o tamanho de qualquer matriz definida localmente na função será zero irreseptiva do que você definiu o tamanho das matrizes a serem.

A única maneira de contornar este problema, até onde posso ver, é certificar-se de que quaisquer matrizes definidas localmente em suas funções sejam definidas como sendo matrizes estáticas. Eu sei, mas não vejo nenhuma outra maneira de evitar o problema.

Eu realmente apreciaria qualquer feedback sobre esta questão.

Cumprimentos,

Laurence.

Arquivos anexados:
afunc.mq4  1 kb
 
Razão: