[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 410

 

Im MQL-Tutorial gibt es im Kapitel Standardfunktionen im Abschnitt Graphoperationen eine Funktion WindowHandle mit folgender Beschreibung: "... gibt den Systemdeskriptor des Fensters (Fensterhandle) zurück, das den angegebenen Graphen enthält".

Frage: Was bedeutet "Fenstergriff" (was ist das) und wofür ist er da?

P.S. Um das Forum nicht zu überfrachten, danke ich Ihnen im Voraus für Ihre Antwort

 
7777877:

Im MQL-Tutorial gibt es im Kapitel Standardfunktionen im Abschnitt Graphoperationen eine Funktion WindowHandle mit folgender Beschreibung: "... gibt den Systemdeskriptor des Fensters (Fensterhandle) zurück, das den angegebenen Graphen enthält".

Frage: Was bedeutet "Fenstergriff" (was ist das) und wofür ist er da?

P.S. Um das Forum nicht zu überladen, danke im Voraus für die Antwort


Antwort:

Der Fensterdeskriptor ist eine Zahl.

ein Fensterdeskriptor ist erforderlich, um ein Fenster zu bearbeiten

 
int start()
{
  for (int i=OrdersHistoryTotal()-1;i>=0; i--)
  {
    if( OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
    {
       if (TimeDay (OrderOpenTime())==Day()
        && TimeMonth(OrderOpenTime())==Month()
        && TimeYear (OrderOpenTime())==Year())
         if(OrderType()==OP_SELL && OrdersTotal()==0 || OrdersHistoryTotal()==0)
         {
            OrderSend( Symbol(), OP_BUY, 0.1, Ask, 5,Bid-25*Point,Bid+25*Point, "", 0, 0, Blue );
         }
         if( OrderType()==OP_BUY && OrdersTotal()==0 || OrdersHistoryTotal()==0)
         {
            OrderSend( Symbol(), OP_SELL, 0.1, Bid, 5,Ask-25*Point,Ask+25*Point, "", 0, 0, Red );
         }
    }
  }
  return(0);
}

Hallo! Problem mit dem Code!!! ich brauche die Aufträge zu öffnen, eine nach der anderen verkaufen, Bucht, verkaufen usw., aber die Zählung wurde während des Tages, am nächsten Tag durch eine neue, ohne Berücksichtigung der Reihenfolge der Eröffnung Aufträge des Vortages getan! das ist ein neuer Tag ein neuer Zyklus! oben Code ich denke, es sollte so aussehen! außer, dass die EA nicht öffnen keine Ordnung! kann nicht verstehen, was falsch ist ... sagen Sie mir, wenn Sie wissen!!!

 
Wie man es richtig macht.
Ich möchte, dass die schwebenden Aufträge geschlossen werden, wenn ein neuer Tag anbricht, wenn sie nicht ausgeführt wurden... Ich habe es geschrieben, aber es funktioniert nicht. Fehler 4051
  if (iTime(Symbol(),PERIOD_D1,0) != New_Day_DateTime)
   {
         New_Day_DateTime = iTime(Symbol(),PERIOD_D1,0); 
         GlobalVariableSet("gNew_Day_DateTime",New_Day_DateTime); 
  
for( i=1;i<=OrdersTotal(); i++)         
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) 
        {                                      

         if (OrderSymbol()!= Symb) continue;    
          Tip=OrderType();                   
         if (Tip==0) continue;           

            Limit_Stop=Tip;
             if (OrderMagicNumber()==3)                     
            {Ticket_B=OrderTicket();}
        }                                    
     }                                       

   while(true)                                
     {
      if (Limit_Stop==-1)                      
        {
         break;                                      
        }
       Ans_B=OrderDelete(Ticket_B);             

      if (Ans_B==true)                          
        {
         break;                                 
     }   }
        
for ( i=1; i<=OrdersTotal(); i++)         
     {        
    if (OrderSelect(i-1,SELECT_BY_POS)==true) 
        {                                      

         if (OrderSymbol()!= Symb) continue;    
          Tip=OrderType();                   
         if (Tip==1) continue;                 

      if (OrderMagicNumber()==4) 
      {Ticket_S=OrderTicket();}              
     }
     }
   while(true)                                
     {
      if (Limit_Stop==-1)                      
        {
         break;                                      
        }
        Ans_S=OrderDelete(Ticket_S);            

      if (Ans_S==true) 
        {
         break; 
        }
}
 
Egori4:


Wenn Sie einen schwebenden Auftrag eröffnen und eine Verfallszeit festlegen, z. B. 23:59 Uhr, wird der Auftrag von selbst geschlossen.

nt OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)

 
lowech:

Hallo! Problem mit dem Code!!! ich brauche die Aufträge zu öffnen, eine nach der anderen verkaufen, Bucht, verkaufen usw., aber die Zählung wurde während des Tages, am nächsten Tag durch eine neue, ohne Berücksichtigung der Reihenfolge der Eröffnung von Aufträgen des Vortages getan! das ist ein neuer Tag ein neuer Zyklus! oben Code ich denke, es sollte so aussehen! außer, dass die EA nicht öffnen keine Ordnung! kann nicht verstehen, was falsch ist ... sagen Sie mir, wenn Sie wissen!!!


Und warum sollte es Aufträge öffnen, vor allem, wenn der Verlauf leer ist. Und lernen Sie, wie man den Code menschlich einfügt, ich mag es nicht, die Beiträge anderer Leute zu bearbeiten.
 
Sepulca:
Danke! Ich werde es versuchen...
 

Wie man diesen Berater ergänzt

//+------------------------------------------------------------------+

//| CCI.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 LotTrend = 0.1;

extern int TP=100;

extern int SL=250;


//+------------------------------------------------------------------+

//| Experten-Initialisierungsfunktion |

//+------------------------------------------------------------------+

int init()

{

//----

//----

zurück(0);

}

//+------------------------------------------------------------------+

//| Experten-Deinitialisierungsfunktion |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

zurück(0);

}

//+------------------------------------------------------------------+

//| Expertenstartfunktion |

//+------------------------------------------------------------------+

int start()

{

if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)

{

if (Bid>iMA(Symbol(),PERIOD_M15,100,0,1,4,0)

)

{

OrderSend(Symbol(),OP_BUY,LotTrend,Ask,0,Ask-SL*Point,Ask+TP*Point,0,0,0,Green)

}

wenn (Bid<iMA(Symbol(),PERIOD_M15,100,0,1,4,0)

)

{

OrderSend(Symbol(),OP_SELL,LotTrend,Bid,0,Bid+SL*Point,Bid-TP*Point,0,0,0,Green);

}

}



//----

zurück(0);

}

//+------------------------------------------------------------------+

1. einen Handel nur beim Schließen einer Kerze zu eröffnen (wenn der Preis den SMA kreuzt)

 

Hallo! Ich habe eine Frage zu den Indikatoren in MQL4 und verstehe sie nicht ganz... Ich habe zum Beispiel einen einfachen Fraktal-Indikator:

//+===========================================================================+ 
//|                                                                  FRAC.mq4 | 
//+===========================================================================+ 
// Параметры: 
// 
// По умолчанию frac_5 - оранжевый, frac_3 - темно-синий. 
//----- 
// History    - определяет на сколько глубоко в историю вам нужно отображение  
//              индикатора (в количестве свечей). Минимальное значение = 2. 
//-----  
// frac_3     - если значение "on", то frac_3 отображается, иначе нет. 
//-----  
// frac_5     - если значение "on", то frac_5 отображается, иначе нет. 
//+===========================================================================+ 
#property indicator_chart_window 
#property indicator_buffers            4     
#property indicator_color1  MidnightBlue 
#property indicator_color2  MidnightBlue  
#property indicator_color3        Orange 
#property indicator_color4        Orange 
//-----         
extern int         history     =     500; 
extern string       frac_3     =    "on";   
extern string       frac_5     =    "on";
extern int          metka      =      20;
//-----         
double FRAC_3_POS[]; 
double FRAC_3_NEG[]; 
double FRAC_5_POS[]; 
double FRAC_5_NEG[]; 

//+===========================================================================+ 

int init() 
   { 
     SetIndexBuffer (0, FRAC_3_POS);  
              
     SetIndexStyle  (0, DRAW_ARROW, 0, 3); 
      
     SetIndexArrow  (0, 217); 
   //-----         
     SetIndexBuffer (1, FRAC_3_NEG);    
            
     SetIndexStyle  (1, DRAW_ARROW, 0, 3); 
      
     SetIndexArrow  (1, 218); 
   //-----         
     SetIndexBuffer (2, FRAC_5_POS);      
          
     SetIndexStyle  (2, DRAW_ARROW, 0, 3); 
      
     SetIndexArrow  (2, 217); 
   //-----         
     SetIndexBuffer (3, FRAC_5_NEG);        
        
     SetIndexStyle  (3, DRAW_ARROW, 0, 3); 
      
     SetIndexArrow  (3, 218); 
      
    return(0); 
   } 

//+===========================================================================+ 

int start() 
   { 
    int i,Counted_bars; 
     
    Counted_bars = IndicatorCounted(); 
     
     i = Bars - Counted_bars - 1; 
     
     if (history < 2) 
      
         history = 2; 
                   
     if (i > history - 1) 
      
         i = history - 1;
         //i=Bars -  1;
    //----- 
     if (Digits <= 3) 
       
         double K = 0.01; 
       
     else       K = 0.0001;     
              
    while (i >= 0) 
          { 
           double FR_3P=0, FR_3N=0, 
                  FR_5P=0, FR_5N=0; 
          //-----         
           if (High[i+1] >= High[i+2] && High[i+1] >= High[i]) 
            
               FR_3P = High[i+1] + metka*K; 
          //-----         
           if (Low[i+1] <= Low[i+2] && Low[i+1] <= Low[i]) 
            
               FR_3N = Low[i+1] - metka*K; 
          //-----         
           if (High[i+2] >= High[i+4] && High[i+2] >= High[i+3] && High[i+2] >= High[i+1] && High[i+2] >= High[i]) 
            
               FR_5P = High[i+2] + metka*K; 
          //-----         
           if (Low[i+2] <= Low[i+4] && Low[i+2] <= Low[i+3] && Low[i+2] <= Low[i+1] && Low[i+2] <= Low[i]) 
            
               FR_5N = Low[i+2] - metka*K; 
          //-----  
           if (frac_3 != "on") 
              { 
               FR_3P = EMPTY; 
                 
               FR_3N = EMPTY; 
              }  
          //-----  
           if (frac_5 != "on") 
              { 
               FR_5P = EMPTY; 
                 
               FR_5N = EMPTY; 
              }       
          //-----  
            
               FRAC_3_POS[i+1] = FR_3P; 
                
               FRAC_3_NEG[i+1] = FR_3N; 
                
               FRAC_5_POS[i+2] = FR_5P; 
                
               FRAC_5_NEG[i+2] = FR_5N; 
               
               i--; 
          } 
      return(0); 
   } 
//+===========================================================================+ 

Wenn Sie es in dieser Form kompilieren, fängt es an, beim Erweitern des linken Diagrammrandes und beim Laden der Historie zu stören und zeigt Markierungen an, wo sie nicht sein sollten (siehe Screenshot im Anhang). Wenn wir einen Teil des Codes auskommentieren:

if (history < 2) 
      
         history = 2; 
                   
     if (i > history - 1) 
      
         i = history - 1;

Dann verschwinden diese Pannen... Die gleichen Probleme treten beim Laden der Historie auf, wenn Sie nur "nicht leere" Elemente des Indikator-Arrays füllen und den Indikatorwert nicht zurücksetzen, wenn keine Beschriftungen vorhanden sind...

Warum ist das so? Warum, so stellt sich heraus, ist es notwendig, den gesamten Indikator beim Laden der Historie neu zu berechnen? Und warum muss ich die Werte von "leeren" Elementen des Arrays löschen?

Wenn die Balken von links nach rechts indiziert wären, würden sich beim Laden der Geschichte die Indizes der Balken ändern, und der Indikator würde ohne Neuberechnung falsch angezeigt werden, dann würden wir diese Störung verstehen ... Aber in MT4 Balken sind von rechts nach links indiziert, so dass, wenn das Laden der Geschichte, die Indizes der Balken, die zuvor dort sollte die gleiche geblieben sein (und die Indikatorwerte, auch), warum dann neu berechnen den Indikator und woher kommen diese Marker Verschiebungen?

 

Liebe Kolleginnen und Kollegen, könnten Sie bitte die folgende Frage beantworten?
Ich eröffne 4 Kaufaufträge von Hand, ich lasse einen EA laufen, der die eingestellten Aufträge zum Geldkurs löscht, die Slippage beträgt 100 Pips, die Löschung erfolgt in einer Schleife, die Überprüfung der Threadbelegung und die Kursaktualisierungen sind vorhanden. Warum werden nicht alle Aufträge in der Schleife gelöscht? Das Protokoll zeigt, dass die Löschung einige Initialisierungen der Funktion start()
benötigt.

int start()  
  {
   Print("Пришёл новый тик");
   int total=OrdersTotal();
   Print("Всего ордеров = "+total);
   for (int i=0;i<total;i++)
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
         //Print("Всего ордеров = "+OrdersTotal());
         Print("удаляем ордер = "+i+" тикет ордера = "+OrderTicket());
         while(IsTradeContextBusy())
            {
            Print("Торговый поток занят");
            Sleep(100);
            }
         RefreshRates();       
         OrderClose(OrderTicket(),OrderLots(),Bid,100,0);
         Print("ошибка="+GetLastError());
         }  
   return(0);
  }
       

Hier ist das EA-Protokoll:

17:16:59 temp EURUSD,M1: erfolgreich geladen
17:17:51 temp EURUSD,M1: Neuer Tick eingetroffen
17:17:51 temp EURUSD,M1: Total orders = 4
17:17:51 temp EURUSD,M1: delete order = 0 tick order = 2808657
17:17:52 temp EURUSD,M1: close #2808657 buy 1.00 EURUSD bei 1.28969 zum Preis 1.28973
17:17:52 temp EURUSD,M1: error=0
17:17:52 temp EURUSD,M1: remove order = 1 ticket order = 2808659
17:17:52 temp EURUSD,M1: close #2808659 buy 1.00 EURUSD bei 1.28974 zum Preis 1.28975
17:17:52 temp EURUSD,M1: Error=0
17:17:54 temp EURUSD,M1: New tick came
17:17:54 temp EURUSD,M1: Total orders = 2
17:17:54 temp EURUSD,M1: remove order = 0 tick order = 2808658
17:17:54 temp EURUSD,M1: close #2808658 buy 1.00 EURUSD at 1.28969 at price 1.28976
17:17:54 temp EURUSD,M1: Error=0
17:17:56 temp EURUSD,M1: New tick came
17:17:56 temp EURUSD,M1: Total orders = 1
17:17:56 temp EURUSD,M1: remove order = 0 tick order = 2808660
17:17:56 temp EURUSD,M1: close #2808660 buy 1.00 EURUSD bei 1.28976 zum Preis von 1.28977
17:17:56 temp EURUSD,M1: error=0