ICHIMOKU-STRATEGIE

 

Ich habe versucht, einen Expert Advisor zu erstellen, der automatisch 1 Einheit kauft, wenn der tenkan-sen>kijun-sen (wenn die tenkan-sen-Linie über der kijun-sen-Linie liegt) und dann verkauft, sobald der tenkan-sen niedriger ist als der kijun-sen.

Ich bin ein absoluter Neuling und habe gestern damit angefangen, indem ich versucht habe, Muster zusammenzusetzen usw.

Unten ist das Ergebnis und ich weiß, dass es wahrscheinlich ein Haufen Mist ist.

Ich erhalte die klassische "'(' - Funktionsdefinition unerwartet" in den int start()-Zeilen (kopiert aus dem "trade"-Skript im Navigator), wenn ich versuche, zu kompilieren

Bitte können Sie vorschlagen, wie ich diese Idee zum Laufen bringen kann und vielen Dank im Voraus.


#property copyright "#copyright#"
#property link "#link#"

extern double Lots = 0.1;
extern double Tenkan = 9;
extern double Kijun = 26;

//+------------------------------------------------------------------+
//| Experten-Initialisierungsfunktion |
//+------------------------------------------------------------------+
int init()
{
Balken<=Tenkan, Balken<=Kijun;
//----
if(Balken<=Tenkan>Balken<=Kijun)
{
Print ("Tenkan-sen größer als Kijun-sen");
return(0);
}
//----
//+------------------------------------------------------------------+
//| Skript "trading for all money" |
//+------------------------------------------------------------------+
int start()
{
//----
if(MessageBox("Wollen Sie wirklich 1,00"+Symbol()+" zum ASK-Preis KAUFEN?",
"Script",MB_YESNO|MB_ICONQUESTION)!=IDYES) return(1);
//----
int ticket=OrderSend(Symbol(),OP_BUY,1.0,Ask,3,0,0, "Expertenkommentar",255,0,CLR_NONE);
if(ticket<1)
{
int error=GetLastError();
Print("Fehler = ",ErrorDescription(error));
zurückgeben;
}
//----
OrderPrint();
return(0);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
int deinit()
{
Balken<=Tenkan, Balken<=Kijun;
//----
if(Balken<=Tenkan<Balken<=Kijun)
{
Print ("Tenkan-sen kleiner als Kijun-sen");
return(0);
}
//----
int start()
{
//----
if(MessageBox("Wollen Sie wirklich 1,00"+Symbol()+" zum Geldkurs VERKAUFEN?",
"Script",MB_YESNO|MB_ICONQUESTION)!=IDYES) return(1);
//----
int ticket=OrderSend(Symbol(),OP_SELL,1.0,Bid,3,0,0, "Expertenkommentar",255,0,CLR_NONE);
if(ticket<1)
{
int error=GetLastError();
Print("Fehler = ",ErrorDescription(error));
zurückgeben;
}
//----
OrderPrint();
return(0);
}
//+------------------------------------------------------------------+

 

Sehen Sie sich den MACD-Beispielcode an.

Ändern Sie die Variablen, die für den internen Use By MACD-Indikator abgerufen werden, um Ichmoku-Indikatorwerte zu erhalten.

Nehmen Sie kleine Änderungen vor und vergleichen Sie den Code, um zu prüfen, ob die Syntax korrekt ist.

bearbeiten - Auch von Nutzen ist, wie man Ichmoku Indikator hier verwenden

 

Hallo ToBa,

drei Dinge;

Es sollte nur 1 x init, 1 x deinit + 1 x start geben.

Die Startfunktion ist der Hauptteil deines Skripts, der die Marktbewegung (oder Ticks) verarbeitet.

Achten Sie außerdem darauf, dass jede geschweifte Klammer richtig geschlossen ist und deklarieren Sie jede Variable.

 
Ickyrus:

Sehen Sie sich den MACD-Beispielcode an.

Ändern Sie die Variablen, die für den internen Use By MACD-Indikator abgerufen werden, um Ichmoku-Indikatorwerte zu erhalten.

Nehmen Sie kleine Änderungen vor und vergleichen Sie den Code, um zu prüfen, ob die Syntax korrekt ist.

edit - Auch von Nutzen ist, wie man Ichmoku Indicator hier verwenden


Ok, ich habe es auf der Grundlage des MACD-Beispiels neu erstellt, aber mit diesen Fehlern:

'\end_of_program' - endende Klammer '}' erwartet C:\Program Files (x86)\MetaTrader 4\experts\ICHIMOKU.mq4 (80, 13)

'\Ende_des_Programms' - unausgewogene linke Klammer C:\Program Files (x86)\MetaTrader 4\experts\ICHIMOKU.mq4 (80, 13)


Dies ist die neue Version:

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

//+------------------------------------------------------------------+
//| Experten-Initialisierungsfunktion |
//+------------------------------------------------------------------+
int start()
{
double tenkan_sen;
double kijun_sen;
int cnt, ticket, total;
//----
if(Balken<100)
{
Print("Balken weniger als 100");
return(0);
}
if(TakeProfit<10)
{
Print("TakeProfit kleiner als 10");
return(0); // TakeProfit prüfen
}
//----
total=OrdersTotal();
if(gesamt<1)
{
// keine offenen Aufträge identifiziert
if(AccountFreeMargin()<(1000*Lots))
{
Print("Wir haben kein Geld. Freie Marge = ", KontoFreieMarge());
return(0);
}
// Prüfung auf Long-Position (BUY) möglich
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("Fehler beim Öffnen der BUY-Order : ",GetLastError());
return(0);

// Es ist wichtig, den Markt richtig zu betreten,
// aber noch wichtiger ist es, ihn richtig zu verlassen...
for(cnt=0;cnt<gesamtzahl;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // Prüfung auf offene Position
OrderSymbol()==Symbol()) // Prüfung auf Symbol
{
if(OrderType()==OP_BUY) // Long-Position ist eröffnet
{
// soll sie geschlossen werden?
if((tenkan_sen<kijun_sen)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // Position schließen
return(0); // Ausstieg
}
// Prüfung auf 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);
}


 

An dieser Stelle in "Ihrem" Code . . .

}
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++)
{

. . . hier markiert ! ! ! haben Sie vom Platzieren von Aufträgen zum Schließen von Aufträgen gewechselt ... aber es fehlen vielleicht 2 schließende Klammern ( } ) im kaufenden Teil des Codes ... wenn Sie Ihren Code vernünftig einrücken, ist das leicht zu erkennen.

 

Ok, danke. Ich habe diese Änderung vorgenommen, die '\end_of_program' entfernt - Endklammer '}' erwartet C:\Program Files (x86)\MetaTrader 4\experts\ICHIMOKU.mq4 (80, 13)

Es ist markiert <=======

// Prüfung auf die Möglichkeit einer Long-Position (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("BUY order opened : ",OrderOpenPrice());
}
else Print("Fehler beim Öffnen der BUY-Order : ",GetLastError());
return(0);
}
// Es ist wichtig, den Markt richtig zu betreten,

// aber noch wichtiger ist es, ihn richtig zu verlassen...


Es sieht nicht so aus, als ob es dort sein sollte

 

Sie haben eine überschüssige öffnende Klammer in dieser Zeile....

if  ( (  tenkan_sen<kijun_sen )   // <--  surplus  (
 
Bitte verwenden Sie diesen Code zum Posten . . das macht es einfacher zu lesen.

 

Sie initialisieren diese Variablen, geben ihnen aber keine Werte. . .

if (  tenkan_sen  > kijun_sen  )

. . . so wird der Test immer falsch sein. Dieser EA wird niemals einen Auftrag erteilen.

 

Ihr Code in einer Version mit Einrückung, die kompilierbar ist . . .

//+------------------------------------------------------------------+
//| 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);
   }
 
Ich danke Ihnen vielmals :)