Precisa de ajuda com a codificação

 

Hi

Estou tentando codificar uma EA muito simples, mas não sou um programador e nunca fiz uma EA antes.

Peguei o MACD Sample do MT4 e editei algumas partes e excluí todo o resto que achei que não precisava.

Tenho certeza de que meu código é realmente horrível.

Eu gostaria que a EA trabalhasse assim:

Meu indicador personalizado ELine tem duas linhas que se movem em etapas. Às vezes uma é mais alta que a outra, às vezes elas são as mesmas.

Quando uma linha cruza a outra, gostaria que o EA entrasse em uma posição longa ou curta, dependendo de qual linha cruza.

Há sempre uma posição aberta, exceto no início da EA.

Quando tento compilá-la, diz "se" - ponto-e-vírgula esperado (20,7)

Então, na próxima etapa, deve sempre fechar uma posição já existente quando abre uma nova, mas até agora não consegui codificar isto.

Alguém poderia corrigir os erros no meu código e talvez me dizer como posso fechar as posições sempre que a EA entrar em uma nova posição?

Muito obrigado!

Arquivos anexados:
el1.mq4  2 kb
 

Hi

Agora eu resolvi este problema. Eu pude compilar a EA e tentei fazer um backtest. Mas infelizmente ele não compra nem vende nada!

Além disto, parece funcionar, esta é a revista:

14:16:18 entradas EL1: Lotes=0,1; Prazo=240;

14:16:18 ELine GBPUSD,H4: removido

14:16:18 2005.11.14 00:00 ELine GBPUSD,H4: carregado com sucesso

E este é o Código EA:

//+------------------------------------------------------------------+

//| T1.mq4

//|

//|

//+------------------------------------------------------------------+

Lotes duplos externos = 0,1;

Tempo int externo = 240;

string strDirCurrent="none";

string strDirPrevious="none";

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

int start()

{

// verificar a direção atual

if(iCustom(NULL,Timeframe, "ELine",0,0)>iCustom(NULL,Timeframe, "ELine",1,0))

strDirCurrent="longo";

if(iCustom(NULL,Timeframe, "ELine",0,0)<iCustom(NULL,Timeframe, "ELine",1,0))

strDirCurrent="short";

// comparar com a direção anterior e abrir uma posição se houvesse uma mudança

if(strDirCurrent=="long" && strDirPrevious==="short")

OrderSend(Symbol(),OP_BUY,Lots,Ask,3,50,200, "EABuyOrder",16384,0,Green);

if(strDirCurrent=="short" && strDirPrevious==="long")

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,50,200, "EASellOrder",16384,0,Red);

strDirPrevious=strDirCurrent;

}

// o fim.

Qualquer ajuda é muito bem-vinda!!

Obrigado

Eric

 

Hi,

quando mudo NUL L em NULL, não recebo nenhum erro da copilação

 

se você olhar no curso de desenvolvimento neste quadro, você encontrará "My_First_EA", um codinome com cruzamento de MAs

Não consegui nenhum resultado testando sua EA e sou muito novo na EA-Proramming também. Desculpe

 

Obrigado Balue. O espaço em NULL é somente de copiar e colar, em meu código está escrito corretamente. E ele faz a compilação (a segunda versão).

Eu conheço o curso MQL (embora ainda não tenha passado por tudo).

Escrevi um EA semelhante para o ADX para testar e lá ele funciona. Somente quando tento usar meu indicador personalizado, ele não é comercializado.

 

Por favor, anexe seu indicador - para que possamos fazer o backtesting

Hi

Grande código - eu adoraria fazer um backtest - por favor, nos dê seu Eline de luxo.

Eu modifiquei seu código extensivamente.

/*

* Created by SharpDevelop.

* User: CARDIO

* Date: 1/17/2006

* Time: 4:55 AM

*

*Todo: if there is an ope position - close it- then open in opposite direction.

*

*/

//+------------------------------------------------------------------+

//| T1.mq4

//|

//|

//+------------------------------------------------------------------+

#include

extern double Lots = 0.1;

extern int Timeframe = 240;

string strDirCurrent="none";

string strDirPrevious="none";

int cnt, magicEA;

bool isclosing = false;

double slippage = 3;

int init() {

return(0);

}

int deinit() {

return(0);

}

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

int start()

{

magicEA = 16384;

// check for current direction

if(iCustom(NULL,Timeframe,"ELine",0,0)>iCustom(NULL,Timeframe,"ELine",1,0))

{

strDirCurrent="long";

}

if(iCustom(NULL,Timeframe,"ELine",0,0)<iCustom(NULL,Timeframe,"ELine",1,0))

{strDirCurrent="short";

}

// compare to previous direction and open a position if there was a change

if(strDirCurrent=="long" && strDirPrevious=="short")

{

//firs close open positions

isclosing = true;

isclosing1();

OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,"T1_EA_Buy_Order",16384,0,Green);

return(0);

}

if(strDirCurrent=="short" && strDirPrevious=="long")

{

isclosing = true;

isclosing1();

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,"T1_EA_Sell_Order",16384,0,Red);

return(0);

}

strDirPrevious=strDirCurrent;

return(0);

}

// the end.

void isclosing1(){

//Close all open orders

//todo: get a requote on the prices if error 138 occurs, use refreshrates

//todo: check if the last 3 closes where losers - if so stop the ea

int totalOrders = OrdersTotal();

int numPos = 0;

for(cnt=0; cnt<totalOrders; cnt++) { // scan all orders and positions...

OrderSelect(cnt, SELECT_BY_POS); // the next line will check for ONLY market trades, not entry orders

if(OrderSymbol() == Symbol() && OrderType() <= OP_SELL && OrderMagicNumber() == magicEA) { // only look for this symbol, and only orders from this EA

numPos++;

if(OrderType() == OP_BUY) { // Check for close signal for bought trade

if(isclosing) {

if (OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Violet)) { // Close bought trade

//writetofile("10","Closed buy", OrderTicket());

//prtAlert("Day Trading: Closing BUY order");

} else {

// writetofile("10b","Closed buy fail", ErrorDescription(GetLastError()));

}

}

} else { // Check sold trade for close signal

if(isclosing) {

OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Violet);

//writetofile("10","Closed buy", OrderTicket());

// prtAlert("Day Trading: Closing SELL order");

}else {

//writetofile("10c","Closed sell fail", ErrorDescription(GetLastError()));

}

}

}

}

}

 

Fixo, espero

Incómodos fixos. Experimente este

Ainda temos que trabalhar na gestão de dinheiro, etc.

Arquivos anexados:
el1.mq4  4 kb
 

Obrigado, agora eu entendo isso:

2006.01.17 18:59:102006.01.12 08:20 EL1: número duplo inválido como parâmetro 7 para a função OrderSend

2006.01.17 18:59:102006.01.12 08:10 EL1: comentário para a função OrderSend deve ser uma string

2006.01.17 18:59:09EL1: carregado com sucesso

e o erro se repete cerca de um milhão de vezes ;-)

mas eu acho que este é fácil de corrigir.

 

Tente isto

Eu não estou testando o código - se você der o indicador - eu testarei - na verdade, testarei em breve com outro indicador. Ainda espero que isto ajude.

Arquivos anexados:
el1_1.mq4  5 kb
 

ainda tentando consertar - espere um pouco, eu vou postar agora

Ainda fixando

 

Fixo - esperemos

Na verdade, você estava apenas perdendo um valor de take profit (tp).

Você não quer um tp e um stoploss?

Boa sorte.

Arquivos anexados:
el1_2.mq4  5 kb