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
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.
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.
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.

- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
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!