[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 198

 
mmmmm.... Nun, ich persönlich denke, es ist richtig geschrieben - das einzige Problem ist die Platzierung der Codeschnipsel.... Könnten Sie es richtig platzieren? Mir ist nicht klar, wie man das macht.
 
splxgf:
Ehrlich gesagt, weiß ich nicht, ob man eine Funktion innerhalb einer anderen beschreiben kann, ich bin noch nie darauf gestoßen.
Verwirren Sie uns Dunkelhäutige nicht. Auf der Ebene dieses Zweigs genügt die Feststellung, dass alle Benutzerfunktionen außerhalb der Funktion Start liegen müssen.
 
CLAIN:
mmmmm.... Nun, ich persönlich denke, es ist alles richtig geschrieben - das einzige Problem ist die Platzierung der Codeschnipsel.... Könnten Sie es richtig platzieren? Mir ist nicht klar, wie man das macht.

Nun, ich werde es nicht genau posten, aber wie bereits geschrieben, sind alle benutzerdefinierten Funktionen über den Anfang hinaus.

Auf Konzeptebene

Start (){}

MACD{}

Signal auswerten(){}

Verschieben Sie die Beschreibung der benutzerdefinierten Funktionen in eine separate Datei, stellen Sie sicher, dass der Rest des Programms ohne Fehlermeldungen kompiliert werden kann, und hängen Sie jede Funktion an das Ende des resultierenden Codes an.

 

Danke, es hat geklappt =) nur die Angebote öffnen sich nicht, aber das ist eine Kleinigkeit =) ohne dich hätte ich es nicht geschafft )

//+------------------------------------------------------------------+
//|                                                     MACD ^^^.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern int TP = 100; 
extern int TS = 100;
extern double lots = 0.1;
int slip = 3;
int Magic = 1;

int total;
int ticket = 0; //объявил тотал и тикет



//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----


int signal = signal_MACD(); 
AnalyzeSignal(signal);




//----
   return(0);
  }
//+------------------------------------------------------------------+






int signal_MACD()
{
   int MACD[8] = {0,1,2,3,4,5,6,7};
MACD[0] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,7);
MACD[1] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,6);
MACD[2] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,5);
MACD[3] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,4);
MACD[4] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,3);
MACD[5] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,2);
MACD[6] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,1);
MACD[7] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,0);
   total = OrdersTotal();
   if(total<1)
   {
      if(MACD[0]<0)
      {
         if(MACD[1]>0)
         {
            if(MACD[2]>0)
            {
               if(MACD[3]>0)
               {
                  if(MACD[4]>0)
                  {
                     if(MACD[5]>0)
                     {
                        if(MACD[6]>0)
                        {
                           if(MACD[7]<0)
                           {
                              return(-100);
                           }
                        }
                     }
                  }
               }
            }
         }
      }
      if(MACD[0]>0)
      {
         if(MACD[1]<0)
         {
            if(MACD[2]<0)
            {
               if(MACD[3]<0)
               {
                  if(MACD[4]<0)
                  {
                     if(MACD[5]<0)
                     {
                        if(MACD[6]<0)
                        {
                           if(MACD[7]>0)
                           {
                              return(100);
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }
}

void AnalyzeSignal(int signal)
{
   if(signal == 100)
   {
      ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,"покупаем",Magic,0,Green);
      if(ticket>0)
      {
         OrderSelect(ticket,SELECT_BY_TICKET);
         Print("открылись на покупку по цене:", OrderOpenPrice());
      }
      else
      {
         Print("открыться не удалось по причине:", GetLastError());
         return(0);
      }
   }
   if(signal == -100)
   {
      ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,"Продаем",Magic,0,Green);
      if(ticket>0)
      {
         OrderSelect(ticket,SELECT_BY_TICKET);
         Print("открылись на продажу по цене:", OrderOpenPrice());
      }
      else
      {
         Print("открыться не удалось по причине:", GetLastError());
         return(0);
      }
   }
}

 

sich von einem Programmierer beraten lassen


Avatar
1
Metamql 20.09.2011 14:31
Liebe Fachleute, bitte geben Sie mir einen Rat. Es gibt zwei gleitende Durchschnitte mit Perioden von 5 und 60. Wenn der schnelle MA den langsamen MA von unten nach oben überquert + Filter, wird ein Kaufgeschäft eröffnet. Das Problem ist, wie kann man einen Handel nur einmal öffnen und, wenn er geschlossen wird, keinen neuen Handel eröffnen, selbst wenn es geeignete Bedingungen zum Öffnen gibt, bis es einen umgekehrten Crossover gibt?
 

Hallo.

Bitte helfen Sie - bitte antworten Sie auf meinen Beitrag auf Seite 196. (Frage zu int MAGIC;)

Ich danke Ihnen im Voraus.

 
nemo811:

Hallo.

Bitte helfen Sie - bitte antworten Sie auf meinen Beitrag auf Seite 196. (Frage zu int MAGIC;)

Ich danke Ihnen im Voraus.


Haben Sie versucht, Funktionen mit Parametern zu erstellen? Um keine externen globalen Variablen zu verwenden (jeder kann sie mit seinem eigenen Namen benennen)
 
sergeev:

sich von einem Programmierer beraten lassen


1
Metamql 20.09.2011 14:31
Liebe Fachleute, bitte geben Sie mir einen Rat. Es gibt zwei gleitende Durchschnitte mit Perioden von 5 und 60. Beim Überschreiten eines schnellen MA über einen langsamen MA von unten nach oben + Filter, wird ein Handel auf Buy eröffnet. Das Problem ist, wie kann man einen Handel nur einmal öffnen und, wenn er geschlossen wird, keinen neuen Handel eröffnen, selbst wenn es geeignete Bedingungen zum Öffnen gibt, bis ein umgekehrter Crossover auftritt?

Setzen Sie eine Flagge, um ein weiteres Öffnen zu verhindern, und entfernen Sie die Flagge, wenn Sie zurückgehen; ein paar Takte können verzögert werden, um ein Zurückspringen zu vermeiden.
 
Vinin:

Haben Sie versucht, Funktionen mit Parametern zu erstellen? Um keine externen globalen Variablen zu verwenden (jeder kann sie auf seine eigene Weise nennen)

Ich meine, zum Beispiel:

int OrdTicket_b(int MAGIC)
 {
  string SMB=Symbol();
  int OrdTicket;
  int i;
  for(i=0;i<OrdersTotal();i++)
   {
    if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)
     {
      if(OrderSymbol()==SMB)
       {
        if(OrderMagicNumber()==MAGIC || OrderMagicNumber()==777)
         {
          if(OrderType()==OP_BUY || OrderType()==OP_SELL)
           {
            OrdTicket=OrderTicket();
           }  
         }  
       }          
     }
   }
  return(OrdTicket);
 }

???

...und die Bedingung

    if(OrderMagicNumber()==MAGIC || OrderMagicNumber()==777)

korrekt nachverfolgt werden?

 
nemo811:

Ich meine, zum Beispiel:

???

...und die Bedingung

korrekt nachverfolgt werden?


int OrdTicket_b(int lMAGIC)
 {
  string SMB=Symbol();
  int OrdTicket=0;
  int i;
  for(i=0;i<OrdersTotal();i++)
   {
    if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)
     {
      if(OrderSymbol()==SMB)
       {
        if(OrderMagicNumber()==lMAGIC)
         {
          if(OrderType()==OP_BUY || OrderType()==OP_SELL)
           {
            OrdTicket=OrderTicket();
           }  
         }  
       }          
     }
   }
  return(OrdTicket);
 }
So sollte der Variablen OrdTicket ein Standardwert zugewiesen werden. Andernfalls gibt es keine offenen Stellen und die Funktion gibt etwas zurück