Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 274

 
STARIJ:
ein Skript schreiben und nach jeder Anweisung die Informationen anzeigen + GetLastError() mit Alert() - siehe Beispielskript oben
Wie mache ich das, wenn ich einen Fehler in meinem Code habe? Alert() wird mir nicht helfen, wenn das Skript nicht funktioniert!
 
Lowech:
Wie kann ich dies tun, wenn ich einen Fehler in meinem Code habe? Alert() wird mir nicht helfen, wenn das Skript nicht funktioniert!

alles bis auf die erste Zeile des Skripts wegwerfen und "Alert" hinzufügen. Dann nach und nach hinzufügen - lernen, wie man programmiert und debuggt

 
LRA:
Das ging schnell. Wie werden Sie nach Bars suchen? In einer Schleife oder unter Verwendung der Zeitstruktur?

EUR USD

//+-------------------------------------------------------+
//| Проверка дней недели                       PRVERKA.mq4|
//| если первая пятница месяца была бычьей, а             |
//| 2-й понедельник медвежий - открываем сделку на продажу|
//+-------------------------------------------------------+
#property strict
void OnStart()
{
  int День=Day(), ДеньН=DayOfWeek();
  Alert("----------------------");
  int ДеньНачалаМесяца = (ДеньН-День+36) % 7;

// Если день начала месяца = 6, то число первой пятницы равно 7. Иначе 6 - день начала месяца
  int ЧислоПервойПятницы = ДеньНачалаМесяца==6?7:6-ДеньНачалаМесяца;

// Если день начала месяца < 2, то число второго понедельника равно 9 - день начала месяца. Иначе 16 - день начала месяца
  int ЧислоВторогоПонедл = (ДеньНачалаМесяца<2?9:16)-ДеньНачалаМесяца;
  Alert("ЧислоПервойПятницы = ", ЧислоПервойПятницы, "  ЧислоВторогоПонедл = ", ЧислоВторогоПонедл);

  if(ЧислоВторогоПонедл>=День)
  {
    Alert("Надо подождать числа ", ЧислоВторогоПонедл+1);
    return;   // Отключил до числа, следующего за вторым понедельником
  }

  int Продавать=0;
  for(int Бар=0;;Бар++)  //  Ищем на D1 номера баров для заданных чисел месяца
  {
    if(TimeDay(iTime(NULL,PERIOD_D1,Бар))==ЧислоВторогоПонедл)
    {
      if(iClose(NULL,PERIOD_D1,Бар)<iOpen(NULL,PERIOD_D1,Бар)) Продавать++;
      break;
    }
    if(TimeDay(iTime(NULL,PERIOD_D1,Бар))==ЧислоПервойПятницы)
      if(iClose(NULL,PERIOD_D1,Бар)>iOpen(NULL,PERIOD_D1,Бар)) Продавать++;
  }
  if(Продавать==2) bool x=OrderSend(_Symbol, OP_SELL, 0.1, Bid, 7, 0, 0);
}
 
LRA:

Lassen Sie alles aus dem Skript weg, bis auf die erste Zeile, und fügen Sie Alert hinzu. Fügen Sie es dann nach und nach hinzu - Sie werden lernen, wie man programmiert und debuggt.

Es hat nicht funktioniert( aber danke für Ihre Hilfe.
 
int 1 = OrdersHistoryTotal();
if (OrderSelect(1,SELECT_BY_POS,MODE_HISTORY))
int tip=OrderType();
Afternoon. Ich brauche Hilfe, ich brauche zu verkaufen, um zu schließen, und dann die nächste Bestellung kann nur offen sein kaufen, ich möchte, um Geschichte zu verwenden, um die letzte geschlossene Bestellung zu finden und wissen, seine Art, aber ich kann es nicht tun (wer weiß, was ich falsch mache, sagen Sie mir), wenn ich nicht wissen, die Antwort, die mir helfen würde, um den Code zu arbeiten, bitte nicht schreiben!
 
Lowech:
int 1 = OrdersHistoryTotal();
if (OrderSelect(1,SELECT_BY_POS,MODE_HISTORY))
int tip=OrderType();
Afternoon. Ich brauche Hilfe, ich brauche zu verkaufen, um zu schließen, und dann die nächste Bestellung kann nur offen sein kaufen, ich möchte, um Geschichte zu verwenden, um die letzte Bestellung zu schließen und wissen, seine Art, aber ich kann nicht (wer weiß, was ich falsch mache, sagen Sie mir), wenn ich nicht weiß, die Antwort, die mir helfen würde, um den Code zu arbeiten, bitte nicht schreiben!
Wenn wir versuchen zu übersetzen, wird eine Fehlermeldung angezeigt: 1' - Name erwartet. Der Variablenname ist anstelle der Nummer 1 erforderlich
 

Guten Abend, unten ist der Code, ich schrieb einen Tick-Zähler, meine Idee ist, dass die Ticks auf jedem Balken in der Schleife gezählt werden, auf jedem neuen Balken der Zähler zurückgesetzt wird, wenn ich den Indikator ausführen, sagt es in den Kommentaren, dass auf der vorherigen Bar 1 Tick und die aktuellen Ticks beginnt Zählen von

Wenn ich versuche, ein anderes magisches Sprite zu verwenden, weiß ich nicht, warum ich es versucht habe, aber ich weiß auch nicht, warum ich es versucht habe, es zu verwenden. Vielleicht habe ich es falsch geschrieben?

#property indicator_chart_window
double old_price;
double count_plus=0,count_minus=0,sum=0,psum=0;
bool Fun_New_Bar=false;
datetime Prev_Time=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

  double price;
  int i=0;
  int limit; 
  double delta; 
limit=rates_total-prev_calculated;
if(prev_calculated<1) limit=rates_total-1;
for(i=limit; i>=0; i--)  
{
 if (Fun_New_Bar==false)                              
  {                                             
   
   if (Prev_Time==0) 
     {
        Prev_Time=time[i];
        Fun_New_Bar=false;
     }
   if(Prev_Time!=time[i])                        
     {
      Prev_Time=time[i];
      psum=sum;
      count_plus=0;
      count_minus=0;
      sum=0;                         
      Fun_New_Bar=false;                            
     }
    } 
  if(old_price==0) old_price=close[i];
   
    price = close[i];
    delta = price - old_price;
     
     //-- считаем "верхние" тики 
    if(delta>=0) {
      count_plus++;
               }
      
     //-- считаем "нижние" тики
    if(delta<0) {
      count_minus++;
        }
    sum=count_minus+count_plus;   
        //----
    old_price=price;
    
  Comment(StringFormat("Выводим цены\ncount_minus = %G\ncount_plus = %G\nsum = %G\npsum = %G",count_minus,count_plus,sum,psum));
}

   return(rates_total);
  }
 
PokrovMT5:

Guten Abend, unten ist der Code, ich schrieb einen Tick-Zähler, meine Idee ist, dass die Ticks auf jedem Balken in der Schleife gezählt werden, auf jedem neuen Balken der Zähler zurückgesetzt wird, wenn ich den Indikator starten, sagt es in den Kommentaren, dass auf der vorherigen Bar 1 Tick und die aktuellen Ticks beginnt Zählen von

Wenn ich versuche, ein anderes magisches Sprite zu verwenden, weiß ich nicht, warum ich es versucht habe, aber ich weiß auch nicht, warum ich es versucht habe, es zu verwenden. Vielleicht habe ich es falsch geschrieben?

Wenn ich das Problem und die Frage richtig verstehe, werden die Häkchen nicht in der Historie gespeichert. Werfen Sie einen Blick auf meinen Indikator.

 
Alexey Viktorov:

Wenn ich das Problem und die Frage richtig verstanden habe, werden keine Zecken im Verlauf gespeichert. Siehe meinen Indikator.


Der Link funktioniert nicht, es wird keine Seite angezeigt.

 
PokrovMT5:

Guten Abend, unten ist der Code, ich schrieb einen Tick-Zähler, meine Idee ist, dass die Ticks auf jedem Balken in der Schleife gezählt werden, auf jedem neuen Balken der Zähler zurückgesetzt wird, wenn ich den Indikator starten, sagt es in den Kommentaren, dass auf der vorherigen Bar 1 Tick und die aktuellen Ticks beginnt Zählen von

Wenn ich versuche, ein anderes magisches Sprite zu verwenden, weiß ich nicht, warum ich es versucht habe, aber ich weiß auch nicht, warum ich es versucht habe, es zu verwenden. Vielleicht habe ich es falsch geschrieben?

return rates_total-1 oder 0