Mire el código de ejemplo de MACD.
Cambie las variables obtenidas para el indicador interno Use By MACD para obtener los valores del indicador Ichmoku.
Haga pequeños cambios y luego complie el código para comprobar que su sintaxis es correcta.
edit - También es de utilidad cómo utilizar el indicador Ichmoku aquí
Mire el código de ejemplo de MACD.
Cambie las variables obtenidas para el indicador interno Use By MACD para obtener los valores del indicador Ichmoku.
Haga pequeños cambios y luego complie el código para comprobar que su sintaxis es correcta.
edit - También es útil como usar el indicador Ichmoku aquí
Ok lo he rehecho basándome en el ejemplo del MACD, pero con estos errores:
'\end_of_program' - ending bracket '}' expected C:\gram Files (x86)\MetaTrader 4\experts\ICHIMOKU.mq4 (80, 13)
'\_end_of_program' - paréntesis izquierdo desequilibrado C:\Program Files (x86)\MetaTrader 4\experts\ICHIMOKU.mq4 (80, 13)
Esta es la nueva versión:
//+------------------------------------------------------------------+
//| 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;
//+------------------------------------------------------------------+
//| función de inicialización de expertos ||.
//+------------------------------------------------------------------+
int inicio()
{
double tenkan_sen
double kijun_sen;
int cnt, ticket, total;
//----
if(Bares<100)
{
Print("barras menos de 100");
return(0);
}
if(TakeProfit<10)
{
Print("TakeProfit menos de 10");
return(0); // comprobar TakeProfit
}
//----
total=Total de pedidos();
if(total<1)
{
// no se identifican órdenes abiertas
if(AccountFreeMargin()<(1000*Lots))
{
Print("No tenemos dinero. Margen libre = ", AccountFreeMargin());
return(0);
}
// comprobar la posibilidad de una posición larga (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)) Print("Orden de COMPRA abierta : ",OrderOpenPrice());
}
else Print("Error al abrir la orden de COMPRA : ",GetLastError());
return(0);
// es importante entrar en el mercado correctamente,
// pero es más importante salir de él correctamente...
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // comprueba la posición abierta
OrderSymbol()==Symbol()) // comprueba el símbolo
{
if(OrderType()==OP_BUY) // se abre una posición larga
{
// ¿se debe cerrar?
if((tenkan_sen<kijun_sen)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // cierra la posición
return(0); // salir
}
// comprobar el trailing stop
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Punto*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
}
}
return(0);
}
En este punto de "su" 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 aquí ! ¡! ¡! ... has pasado de colocar Órdenes a cerrarlas ... pero te faltan quizás 2 llaves de cierre ( } ) de la parte de compra del código ... si indentas tu código de forma razonable es fácil de ver.
Bien, gracias. He hecho este cambio que elimina '\end_of_program' - corchete final '}' esperado C:\Program Files (x86)\MetaTrader 4\experts\ICHIMOKU.mq4 (80, 13)
Se marca <=======
// comprueba la posibilidad de posición larga (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)) Print("Orden de COMPRA abierta : ",OrderOpenPrice());
}
else Print("Error al abrir la orden de COMPRA : ",GetLastError());
return(0);
}
// es importante entrar en el mercado correctamente,
// pero es más importante salir de él correctamente...
Aunque no parece que deba estar ahí
Te sobra el corchete de apertura en esta línea. . .
if ( ( tenkan_sen<kijun_sen ) // <-- surplus (
Su código en una versión con sangría y 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); }
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
He estado tratando de crear un asesor experto que comprará automáticamente 1 unidad cuando el tenkan-sen>kijun-sen (cuando la línea tenkan-sen está por encima de la línea kijun-sen) y luego venderlo una vez que el tenkan-sen es menor que el kijun-sen.
Soy un completo novato y lo empecé ayer tratando de juntar muestras, etc.
Abajo está el resultado y aprecio que es probablemente un montón de mierda.
Me sale el clásico "'(' - definición de función inesperada" en las líneas int start() (copiadas del script "trade" en el navegador) al intentar compilar
Por favor, podéis sugerirme cómo puedo conseguir que esta idea funcione y gracias de antemano.
#property copyright "#copyright#"
#property link "#link#"
extern double Lots = 0.1
extern double Tenkan = 9;
extern double Kijun = 26;
//+------------------------------------------------------------------+
//| función de inicialización de expertos ||.
//+------------------------------------------------------------------+
int init()
{
Bares<=Tenkan, Bares<=Kijun;
//----
if(Bars<=Tenkan>Bars<=Kijun)
{
Print ("Tenkan-sen mayor que Kijun-sen");
return(0);
}
//----
//+------------------------------------------------------------------+
//| script "trading para todo el dinero" |
//+------------------------------------------------------------------+
int inicio()
{
//----
if(MessageBox("¿Realmente quiere COMPRAR 1,00"+Símbolo()+" al precio ASK?",
"Script",MB_YESNO|MB_ICONQUESTION)!=IDYES) return(1);
//----
int ticket=OrderSend(Symbol(),OP_BUY,1.0,Ask,3,0,0, "comentario experto",255,0,CLR_NONE);
if(ticket<1)
{
int error=GetLastError();
Print("Error = ",ErrorDescription(error));
devolver;
}
//----
OrderPrint();
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| función de desinicialización experta |
//+------------------------------------------------------------------+
int deinit()
{
Bares<=Tenkan, Bares<=Kijun;
//----
if(Bars<=Tenkan<Bars<=Kijun)
{
Print ("Tenkan-sen menos que Kijun-sen");
return(0);
}
//----
int inicio()
{
//----
if(MessageBox("¿Realmente quiere VENDER 1,00"+Símbolo()+" al precio de la Oferta? ",
"Script",MB_YESNO|MB_ICONQUESTION)!=IDYES) return(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));
devolver;
}
//----
OrderPrint();
return(0);
}
//+------------------------------------------------------------------+