ESTRATÉGIA DO ICHIMOKU

 

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);
}
//+------------------------------------------------------------------+

 

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

 

Olá ToBa,

Três coisas;

Deve haver apenas 1 x init, 1 x deinit + 1 x start.

A função start é o corpo principal de seu roteiro que processa o movimento de mercado (ou carrapatos).

Além disso, assegure-se de que cada bracelete encaracolado seja fechado corretamente e declare cada variável.

 
Ickyrus:

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  (
 
Por favor, use isto para postar o código . . torna a leitura mais fácil.

 

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);
   }
 
Muito obrigado :)