Veja o Código de Amostra MACD.
Altere as variáveis buscadas para uso interno pelo indicador MACD para obter os valores do Indicador Ichmoku.
Faça pequenos chages e depois complemente o código para verificar se sua sintaxe está correta.
editar - Também de uso é como usar o Indicador Ichmoku aqui
Ok, eu o refiz com base na amostra MACD, mas com estes erros:
Fim_do_programa' - parêntese final '} esperado C: Arquivos de programa (x86)MetaTrader 4: Especialistas em TICHIMOKU.mq4 (80, 13)
Fim_do_programa' - parêntese esquerda desequilibrada C: Arquivos de programa (x86)MetaTrader 4: Especialistas em TICHIMOKU.mq4 (80, 13)
Esta é a nova versão:
//+------------------------------------------------------------------+
//| ICHIMOKU.mq4 |
//| Copyright © 2012, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#direitos autorais "Copyright © 2012, MetaQuotes Software Corp."
#link do proprietário "http://www.metaquotes.net"
duplo TakeProfit externo = 50;
Duplo Lote Externo = 0,1;
Duplo TrailingStop externo = 30;
Duplo Externo Tenkan = 9;
duplo Kijun externo = 26;
//+------------------------------------------------------------------+
//| função de iniciação de especialista |
//+------------------------------------------------------------------+
int start()
{
duplo tenkan_sen;
duplo kijun_sen_sen;
int cnt, bilhete, total;
//----
if(Bars<100)
{
Impressão ("barras com menos de 100");
retornar(0);
}
if(TakeProfit<10)
{
Imprimir ("TakeProfit menos de 10");
retornar(0); // verificar TakeProfit
}
//----
total=OrdensTotal();
if(total<1)
{
// nenhuma ordem aberta identificada
if(AccountFreeMargin()<(1000*Lots))
{
Imprimir("Nós não temos dinheiro. Margem Livre = ", AccountFreeMargin());
devolução(0);
}
// verificar a possibilidade de posição longa (BUY)
if(tenkan_sen>kijun_sen)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "ichimoku",16384,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Imprimir("Pedido aberto : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError()));
retornar(0);
// é importante entrar no mercado corretamente,
// mas é mais importante sair corretamente...
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELLL && // verificar a posição aberta
OrderSymbol()==Symbol()) // verificar o símbolo
{
if(OrderType()==OP_BUY) // posição longa é aberta
{
// deve ser fechado?
if((tenkan_sen<kijun_sen)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // posição fechada
retornar(0); // sair
}
// verificar a parada de trilha
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
retornar(0);
}
}
}
}
}
}
retorno(0);
}
Neste ponto em "seu" código . . .
} else Print("Error opening BUY order : ",GetLastError()); return(0); // <------ here ! ! ! // it is important to enter the market correctly, // but it is more important to exit it correctly... for(cnt=0;cnt<total;cnt++) {
. . marcado aqui ! ! ! . . você trocou de fazer pedidos para fechá-los . . mas faltam talvez 2 chaves de fechamento ( } ) da parte de compra do código . . . se você recuar seu código de uma maneira razoável é fácil de ver.
Ok, obrigado. Fiz esta mudança que removeu o 'fim_do_programa' - parêntese final '} esperado C:\Program Files (x86)\MetaTrader 4\experts\ICHIMOKU.mq4 (80, 13)
Está marcado <=======
// verificar a possibilidade de posição longa (BUY)
if(tenkan_sen>kijun_sen)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "ichimoku",16384,0,Green);
if(ticket>0)
} <=======
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Imprimir("Pedido de compra aberto : ",OrderOpenPrice()));
}
else Print("Error opening BUY order : ",GetLastError()));
retornar(0);
}
// é importante entrar no mercado corretamente,
// mas é mais importante sair corretamente...
Mas não parece que deva estar lá
Você tem um suporte de abertura em excesso nesta linha . .
if ( ( tenkan_sen<kijun_sen ) // <-- surplus (
Você inicializa estas variáveis mas não lhes dá nenhum valor . . .
if ( tenkan_sen > kijun_sen )
. por isso, o teste será sempre falso. Este EA nunca fará um pedido.
Seu código em uma versão com recuo e que compila . . .
//+------------------------------------------------------------------+ //| ICHIMOKU.mq4 | //| Copyright © 2012, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2012, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" extern double TakeProfit = 50; extern double Lots = 0.1; extern double TrailingStop = 30; extern double Tenkan = 9; extern double Kijun = 26; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int start() { double tenkan_sen; double kijun_sen; int cnt, ticket, total; //---- if(Bars<100) { Print("bars less than 100"); return(0); } if(TakeProfit<10) { Print("TakeProfit less than 10"); return(0); // check TakeProfit } //---- total=OrdersTotal(); if(total<1) { // no opened orders identified if(AccountFreeMargin()<(1000*Lots)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } // check for long position (BUY) possibility if(tenkan_sen>kijun_sen) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"ichimoku",16384,0,Green); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); } else Print("Error opening BUY order : ",GetLastError()); return(0); } // added by RaptorUK } // added by RaptorUK // it is important to enter the market correctly, // but it is more important to exit it correctly... for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && // check for opened position OrderSymbol()==Symbol()) // check for symbol { if(OrderType()==OP_BUY) // long position is opened { // should it be closed? if(tenkan_sen<kijun_sen) // removed surplus ( RaptorUK { OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position return(0); // exit } // check for trailing stop if(TrailingStop>0) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()<Bid-Point*TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green); return(0); } } } } } } return(0); }
- 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
Tenho tentado criar um consultor especializado que comprará automaticamente 1 unidade quando o tenkan-sen>kijun-sen (quando a linha tenkan-sen estiver acima da linha kijun-sen) e depois a venderá uma vez que o tenkan-sen for inferior ao kijun-sen.
Eu sou um novato completo e comecei ontem tentando juntar amostras, etc.
Abaixo está o resultado e eu aprecio que isso é provavelmente um monte de porcaria.
Eu recebo o clássico "'(' - definição de função inesperada" nas linhas int start() (copiado do script "trade" no navegador) quando tento compilar
Por favor, você pode sugerir como posso fazer com que esta idéia funcione e agradecer antecipadamente.
#direitos autorais de propriedade "#copyright
#link de propriedade "#link
Lotes duplos externos = 0,1;
Duplo externo Tenkan = 9;
duplo Kijun externo = 26;
//+------------------------------------------------------------------+
//| função de iniciação de especialista |
//+------------------------------------------------------------------+
int init()
{
Bars<=Tenkan, Bars<=Kijun;
//----
if(Bars<=Tenkan>Bars<=Kijun)
{
Imprimir ("Tenkan-sen maior que Kijun-sen");
retornar(0);
}
//----
//+------------------------------------------------------------------+
//| script "trading for all money" |
//+------------------------------------------------------------------+
int start()
{
//----
if(MessageBox("Você quer realmente COMPRAR 1,00 "+Symbol()+" ao preço ASK? ",
"Script",MB_YESNO|MB_ICONQUESTION)!=IDYES) retorno(1);
//----
int ticket=OrderSend(Symbol(),OP_BUY,1.0,Ask,3,0,0, "expert comment",255,0,CLR_NONE);
if(ticket<1)
{
int error=GetLastError();
Print("Error = ",ErrorDescription(error));
retornar;
}
//----
OrderPrint();
retornar(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| função de desinicialização especializada |
//+------------------------------------------------------------------+
int deinit()
{
Bars<=Tenkan, Bars<=Kijun;
//----
if(Bars<=Tenkan<Bars<=Kijun)
{
Imprimir ("Tenkan-sen menos do que Kijun-sen");
retornar(0);
}
//----
int start()
{
//----
if(MessageBox("Você realmente quer vender 1,00 "+Symbol()+" a preço de licitação? ",
"Script",MB_YESNO|MB_ICONQUESTION)!=IDYES) retorno(1);
//----
int ticket=OrderSend(Symbol(),OP_SELL,1.0,Bid,3,0,0, "expert comment",255,0,CLR_NONE);
if(ticket<1)
{
int error=GetLastError();
Print("Error = ",ErrorDescription(error));
retornar;
}
//----
OrderPrint();
retornar(0);
}
//+------------------------------------------------------------------+