Fehler, Irrtümer, Fragen - Seite 1550

 

Es gibt komplexe Logiken, die vierundzwanzig Stunden lang funktionieren, aber an einem bestimmten Punkt frieren sie ein. Dies geschieht manchmal in EX5, dessen Quellcode nicht bearbeitet werden kann. Ist es möglich, von außen zu erkennen, dass ein Indikator oder ein Expert Advisor hängt? Statistiken über den berechneten Teil eines bestimmten Indikators sammeln?

Bei Indikatoren scheint es möglich zu sein, dass sie in einem hängenden Zustand die Aktualisierung der Diagramme für ihr Symbol verhindern. Der Expert Advisor kann dies nachvollziehen, allerdings ohne anzugeben, welcher Indikator den Schwebezustand verursacht hat.

 
Rekorde für Verbote. Während der Sperren erhalte ich Antworten im Forum, kann sie aber nur lesen. Und nachdem ein weiteres Verbot aufgehoben wurde, ist es sehr schwer, sich daran zu erinnern, wer und wo geantwortet hat, um fortzufahren. Ist es möglich, dieses Problem zu lösen (ohne den Rat, nicht mehr gesperrt zu werden)? Und im Allgemeinen liest man manchmal, hat aber keine Zeit, sofort zu antworten. Ist es möglich, ein Erinnerungskennzeichen auf "später antworten" zu setzen?
 
comp:
Rekorde für Verbote. Während der Sperren erhalte ich Antworten im Forum, kann sie aber nur lesen. Und nachdem ein weiteres Verbot aufgehoben wurde, ist es sehr schwer, sich daran zu erinnern, wer und wo geantwortet hat, um fortzufahren. Ist es möglich, dieses Problem zu lösen (ohne den Rat, nicht mehr gesperrt zu werden)? Und im Allgemeinen liest man manchmal, hat aber keine Zeit, sofort zu antworten. Ist es möglich, ein Erinnerungskennzeichen auf "später antworten" zu setzen?
Zuerst muss man denken und dann handeln. Nicht andersherum. Dann wird es keine Probleme mit dem Speicher geben.
 
Karputov Vladimir:
Man sollte erst denken und dann handeln. Nicht andersherum. Dann wird es keine Probleme mit dem Speicher geben.
Worte aus Gold !!!
 
Vladimir Pastushak:
Goldene Worte!!!
Vollständig unterstützt!!! Ist es möglich, die Frage-Vorschlag zu beantworten
comp:
Manchmal liest man sie und hat keine Zeit, sofort zu antworten. Ist es möglich, eine Art Erinnerungsfahne mit dem Hinweis "Später antworten" zu setzen?
 
comp:
Ist es möglich, sich selbst eine Erinnerungsfahne zu setzen, um "später zu antworten"?
Ich verstehe Sie teilweise. Jeder will eine Lösung für seine unmittelbaren Probleme. In Ihrem Fall ist es zu viel. Sie sitzen sogar in einem Badehaus und versuchen, Entwickler aufzubauen.
 

Frage zu MathRound() in MQL4, die "einen Wert zurückgibt, der auf die nächste Ganzzahl eines angegebenen numerischen Wertes gerundet ist".

Code:

#property strict
void OnStart()
  {
   Print("1) MathRound(10.50001) = ",MathRound(10.50001));  // 11.0
   Print("2) MathRound(10.49999) = ",MathRound(10.49999));  // 10.0
  }

Ergebnis:


Können Sie uns bitte erklären, warum dies der Fall ist? Wenn es so sein soll, fügen Sie bitte in der Dokumentation hinzu, dass nur die erste Ziffer nach dem Punkt berücksichtigt wird.

MathRound - Математические функции - Справочник MQL4
MathRound - Математические функции - Справочник MQL4
  • docs.mql4.com
MathRound - Математические функции - Справочник MQL4
 

Kolleginnen und Kollegen, bitte helfen Sie. Ich habe selbst nicht genug Verstand.

Der Roboter, der Limit-Orders platziert hat, muss die verbleibende Order löschen, wenn er eine offene Position schließt (egal ob mit Stop oder Profit), aber nicht jede Order, sondern diejenige, deren magische Zahl gleich dem Ticket der geschlossenen Position ist. Der Auslöser für die Löschung muss also das Ereignis der Positionsschließung sein. Für mich spielt es in diesem Fall keine Rolle, wie diese Position geschlossen wurde (nur unter der Bedingung, dass sich herausstellt, dass, wenn sie durch SL geschlossen wurde, es keine Limits gibt, die entfernt werden müssen). Aber wenn wir es genau nehmen und richtig machen, ist der Auslöser ein TP.

Der Roboter löscht also den Auftrag, aber nicht nachdem die Position geschlossen wurde, sondern sobald sie eröffnet wurde. Und es fängt an, sich selbst zu bekämpfen, indem es ständigdie ausstehenden Aufträge platziert undlöscht. Bitte sehen Sie nach, was los ist.

input double   lot                  = 0.2;
input double   TakeProfitPips       = 50;
input double   StopLossPips         = 200;

int               bar=0;
int               shift=1;
int               tiket;
int               otkt;
double            price;
int               cnt;
double            TPp,SLp;
int               tkt;
int               n;
int               type;

    int _OrdersTotal = 0;
    // кол-во позиций, соответствующих критериям (текущий инструмент и заданный MagicNumber),
    // состоянием на текущий тик
    int now_OrdersTotal = 0;
    // кол-во позиций, соответствующих критериям (текущий инструмент и заданный MagicNumber),
    // состоянием на предыдущий тик
    static int pre_OrdersTotal = 0;
    // массив открытых позиций состоянием на текущий тик
    int now_OrdersArray[][2]; // [№ в списке][№ тикета, тип позиции]
    // текущий номер позиции в массиве now_OrdersArray (для перебора)
    int now_CurOrder = 0;
    // текущий номер позиции в массиве pre_OrdersArray (для перебора)
    int pre_CurOrder = 0;
    // массив для хранения количества закрытых позиций каждого типа
    int now_ClosedOrdersArray[6][3]; // [тип ордера][тип закрытия] 
 
    // временные флаги
    bool OrderClosed = true, PendingOrderOpened = false;
    // временные переменные
   

    int pre_OrdersArray[][2]; // [количество позиций][№ тикета, тип позиции]
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }


void OnTick()

  {

        if(OrdersTotal()== 0 && iTime(Symbol(),PERIOD_M1,1)==D'14.01.16 16:30')

        {
        
         price=Open[shift];

         tiket=OrderSend(Symbol(),OP_SELLLIMIT,lot,price,3,price+StopLossPips*Point,price-TakeProfitPips*Point);
         if(tiket<0)
           {
            Print("Ошибка OrderSend № - ",GetLastError());
           }
        }

     

   if(OrdersTotal()!=0)
     {
      for(cnt=0; cnt<OrdersTotal(); cnt++)

         OrderSelect(cnt,SELECT_BY_POS); // Если есть следующий
        {                                    // Анализ ордеров:
         price=OrderOpenPrice();
         otkt = OrderTicket();
         n=otkt;
         //--------------------------------------------------------------

 
         if(OrderType()==OP_SELL && OrderMagicNumber()==0)

           {
            tiket=OrderSend(Symbol(),OP_SELLLIMIT,lot*3,price+100*Point,1,price+StopLossPips*Point,price-TakeProfitPips*Point,"My order",n);
            tiket=OrderSend(Symbol(),OP_SELLLIMIT,lot*9,price+200*Point,1,price+StopLossPips*Point,price-TakeProfitPips*Point,"My order",n);
           }
        }

     }

  
        _OrdersTotal = OrdersTotal(); // запоминаем общее количество позиций
        ArrayResize( now_OrdersArray, _OrdersTotal ); // изменяем размер массива открытых позиций под текущее кол-во
        ArrayInitialize( now_OrdersArray, 0.0 ); // обнуляем массив
        now_OrdersTotal = 0; // обнуляем количество позиций, соответствующих критериям
        ArrayInitialize( now_ClosedOrdersArray, 0.0 ); // обнуляем массивы закрытых позиций и сработавших ордеров
       
 
        //+------------------------------------------------------------------+
        //| Перебираем все позиции и записываем в массив 
        //+------------------------------------------------------------------+
        for ( int z = _OrdersTotal - 1; z >= 0; z -- )
        {
            if ( OrderSelect( z, SELECT_BY_POS ) )
           
            {
                now_OrdersArray[now_OrdersTotal][0] = OrderTicket();
                now_OrdersArray[now_OrdersTotal][1] = OrderType();
                now_OrdersTotal ++;
            }
        }
        
        ArrayResize( now_OrdersArray, now_OrdersTotal ); // изменяем размер массива открытых позиций под кол-во позиций, соответствующих критериям
 
        //+------------------------------------------------------------------+
        //| Перебираем список позиций предыдущего тика, и считаем сколько закрылось позиций и
        //| сработало отложенных ордеров
        //+------------------------------------------------------------------+
        for ( pre_CurOrder = 0; pre_CurOrder < pre_OrdersTotal; pre_CurOrder ++ )
        {
            tkt = pre_OrdersArray[pre_CurOrder][0]; // запоминаем тикет и тип ордера
            type   = pre_OrdersArray[pre_CurOrder][1];
            
            OrderClosed = true; // предпологаем, что если это позиция, то она закрылась
           
            for ( now_CurOrder = 0; now_CurOrder < now_OrdersTotal; now_CurOrder ++ ) // перебираем все позиции из текущего списка открытых позиций
            {
                if ( tkt == now_OrdersArray[now_CurOrder][0] ) // если позиция с таким тикетом есть в списке,
                {   OrderClosed = false; // значит позиция не была закрыта (ордер не был удалён)
                    break;
                }
            }
           
            if ( OrderClosed )  // если была закрыта позиция (удалён ордер),
            {
                
                if (OrderSelect( tkt, SELECT_BY_TICKET )) // выбиаем ее
               
                    n = tkt; // присваеваем n номер тикета
                
            }   
      }  
     
        //+------------------------------------------------------------------+
        //| Удаляем ордер с магическим номером = тикету закрытой ранее позиции 
        //+------------------------------------------------------------------+
     for ( int z = _OrdersTotal - 1; z >= 0; z -- )
        {
            if ( OrderSelect( z, SELECT_BY_POS ) )
            otkt = OrderTicket();
            if (n == OrderMagicNumber ())
             {OrderDelete( otkt );}
         }
         
         return;
      }
Помогите отредактировать код, пожалуйста
Помогите отредактировать код, пожалуйста
  • www.mql5.com
И начинает бороться сам с собой, постоянно выставляя и удаляя отложенные ордера. - - Категория: общее обсуждение
 
Können Sie mir sagen, ob es einen eingebauten Mechanismus gibt, um festzustellen, in welchem Markt der Handelsroboter läuft, müssen Sie die FOREX und FORTS Märkte identifizieren.
 

Hilfe, Jungs, kann nicht die russische Sprache auf MT4 auf Macbook setzen, scheint es vorhanden zu sein, aber es ist in Hieroglyphen angezeigt, aber in der Meta-Editor ist in Ordnung. Ich habe alles mit Play on mac erstellt,

Wine 1.9.4 wäre sehr zu begrüßen.