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

 
Bitte teilen Sie mit, warum Transaktionen nicht geöffnet werden.... Der Code scheint sinnvoll zu sein, aber er lässt sich einfach nicht öffnen.
 
//+------------------------------------------------------------------+ 
  //| 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 int TF = 1; 
  extern double lots = 0.1; 
  int fast_ema = 5; 
  int slow_ema = 34; 
  int signal_period = 5; 
  int slip = 3; 
  int Magic = 1; 

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

 //+------------------------------------------------------------------+ 
  //| expert initialization function | 
  //+------------------------------------------------------------------+ 
  int init() 
    { 
  //---- 

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

 //---- 
     return(0); 
    } 
  //+------------------------------------------------------------------+ 
  //| expert start function | 
  //+------------------------------------------------------------------+ 
  int start() 
    { 
  //---- 
  
 CheckTicket();
 bool signal = signal_MACD(); 
 AnalyzeSignal(signal); 

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

 bool signal_MACD() 
  { 
    bool signal_MACD = false; 
    double tmp = iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0); 
    for(int i=1;i<=5;i++) 
    { 
       if(NormalizeDouble(iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0)*tmp,4)<0.0) 
       { 
          signal_MACD = true; 
          break; 
       } 
    } 
  } 

 void AnalyzeSignal(bool signal) 
  { 
    double MACD = iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0);
    total = OrdersTotal();
    if(total < 0)
    {
      if(signal == true)
      {
         if(MACD > 0)
         {
                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(MACD < 0)
         {
               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); 
               } 
         }
         else
            return(0);
      }
    }
  }
  
void CheckTicket()
{
   if(OrderSelect(ticket,SELECT_BY_TICKET))
   {
      if(OrderCloseTime()>0)
      {
         ticket = 0;
      }
   }   
}
 

Das ist ein Punkt, den ich nicht zusammenbringen kann, helfen Sie mir bei der Erstellung:

Ich muss einen Nullpunkt für den Gewinn von zwei oder mehr Aufträgen definieren, die in eine Richtung eröffnet wurden, zum Beispiel zum Kauf.

und addieren Sie den Take Profit zu diesem Punkt und weisen Sie ihn allen offenen Kaufaufträgen zu.

Und der Take Profit sollte auf dem Chart angezeigt werden, d.h. er sollte sichtbar sein.

Zum Beispiel, zum Preis von 1500 eröffnen wir den ersten Kaufauftrag

um 1600 eröffnen wir den zweiten Kaufauftrag.

Ihr Nullpunkt liegt bei 1550 + (Take Profit = 20)

und hier werden die erste und die zweite Order mit einem Take-Profit von 1570 versehen. Wenn der Preis dieses Niveau erreicht, werden beide Orders geschlossen,

und wenn der Preis dieses Niveau überschreitet (springt), folgt er und schließt die Aufträge.

Es ist sehr wichtig, Kauf- und Verkaufsaufträge gleichzeitig zu erfassen und sich nicht gegenseitig zu behindern. Sie sollten den Take-Profit separat für den Kauf und den Take-Profit separat für den Verkauf festlegen, und zwar nur dann, wenn zwei oder mehr Aufträge gleichzeitig in einer Richtung eröffnet werden.

 
CLAIN:
Bitte teilen Sie mit, warum Transaktionen nicht geöffnet werden.... Der Code scheint sinnvoll zu sein, aber er lässt sich einfach nicht öffnen.
Denn OrdesTotal() gibt niemals einen negativen Wert zurück.
 
Danke, guter Hinweis.... korrigiert... aber die Gewerke lassen sich immer noch nicht öffnen.... Was ist zu tun?
 
CLAIN:
Danke, guter Hinweis.... korrigiert... aber die Gewerke lassen sich immer noch nicht öffnen.... Was ist zu tun?


Wahrscheinlich wird die Funktion signal_MACD() korrigiert.

Na ja, dass sie doch noch etwas zurückgeben würde.

 

Hallo.

Können Sie mir bitte sagen, ob ich die Bedingungen richtig geschrieben habe? ( Die Parameter Fractal_point_up_buy und Fractal_point_down_buy sind normalisiert).

Ich danke Ihnen im Voraus.

      Fractal_point_up_buy=TF1B;
      Flow_differential_buy=Fractal_point_up_buy-Bid;
      if (timf1s>timf2b && timf2s>timf2b && timf3s>timf2b && timf3s<timf1b)
       {
        Fractal_point_down_buy=TF3S;   
       }
      else
       {
        if (timf1s>timf2b && timf2s>timf2b && timf3s<timf2b && timf2s<timf1b)
         {
          Fractal_point_down_buy=TF2S;   
         }
        else
         {
          if (timf1s>timf2b && timf2s<timf2b && timf3s<timf2b && timf1s<timf1b)
          Fractal_point_down_buy=TF1S; 
         }     
       }
      Fractal_fibo_buy=100*Flow_differential_buy/(Fractal_point_up_buy-Fractal_point_down_buy);
 
belck:

Das ist ein Punkt, den ich nicht zusammenbringen kann, helfen Sie mir bei der Erstellung:

Ich muss einen Gewinnpunkt Null für zwei oder mehr Aufträge definieren, die in einer Richtung geöffnet sind, z.B. Kauf.

und addieren Sie den Take Profit zu diesem Punkt und weisen Sie ihn allen offenen Kaufaufträgen zu.

Und der Take Profit sollte auf dem Chart angezeigt werden, d.h. er sollte sichtbar sein.

Zum Beispiel, zum Preis von 1500 eröffnen wir den ersten Kaufauftrag

um 1600 eröffnen wir den zweiten Kaufauftrag.

Ihr Nullpunkt liegt bei 1550 + (Take Profit = 20)

und hier werden die erste und die zweite Order mit einem Take-Profit von 1570 versehen; wenn der Preis dieses Niveau erreicht, werden beide Orders geschlossen,

und wenn der Preis dieses Niveau überschreitet (springt), folgt er und schließt die Aufträge.

Es ist sehr wichtig, Kauf- und Verkaufsaufträge gleichzeitig zu erfassen und sich nicht gegenseitig zu behindern. Sie sollten den Take-Profit separat für den Kauf und den Take-Profit separat für den Verkauf festlegen, und zwar nur dann, wenn zwei oder mehr Aufträge gleichzeitig in einer Richtung eröffnet werden.


Bei einer Position, die bei 1500 eröffnet wurde, wäre ein Take bei 1570 in Ordnung (wenn Sie StopLevel nicht berücksichtigen), aber bei einer Position, die bei 1600 eröffnet wurde, würde ein Take bei 1570 einen Fehler 130 verursachen - falsche Stops. Schließlich kann ein Take nicht niedriger sein als der Eröffnungskurs eines Buy. Dies ist bereits ein StopLoss.
Für zwei Positionen haben Sie Ihren Break-even-Punkt definiert, aber für drei-vier-fünf?
Sie sollten zunächst die Break-even-Formel für unidirektionale Positionen bestimmen und können dann eine Logik erstellen.
 
nemo811:

Hallo.

Können Sie mir bitte sagen, ob ich die Bedingungen richtig geschrieben habe? (Die Parameter Fractal_point_up_buy und Fractal_point_down_buy sind normalisiert).

Ich danke Ihnen im Voraus.

Hallo.

Wenn alle Variablen deklariert sind, sehe ich keine Fehler in der MQL4-Syntax...

Wo liegt das Problem?

 
,
artmedia70:
Für eine Position, die bei 1500 geöffnet ist, wäre ein Take bei 1570 in Ordnung (wenn Sie StopLevel nicht berücksichtigen), aber für eine Position, die bei 1600 geöffnet ist, würde ein Take bei 1570 einen 130-Fehler verursachen - falsche Stops. Schließlich kann ein Take nicht niedriger sein als der Eröffnungskurs eines Buy. Dies ist bereits ein StopLoss.
Für zwei Positionen haben Sie Ihren Break-even-Punkt definiert, aber für drei-vier-fünf?
Sie sollten zuerst die Breakeven-Formel für unidirektionale Positionen definieren, und dann können Sie die Logik ausarbeiten.

Es hängt alles davon ab, wann wir den Take Profit festlegen oder ändern. Er basiert auf dem aktuellen Preis.