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

 
Aleksey Mavrin:

Reden wir über das Testgerät oder online?

Wenn Sie online sind - sehen Sie sich den Code an, das Ereignis "Verschieben" wird nicht richtig weitergeleitet. Panels durch die Art und Weise auf der Website nur fünf verschiedene Bibliotheken, was meinst du?

Und im Tester - es scheint, es gibt keine Möglichkeit, und warum.

Nachdem Sie Bewegungsbefehle an ALLE Panel-Objekte gesendet haben, führen Sie ChartRedraw() aus.
 
Aleksey Mavrin:

Sprechen Sie über den Tester oder online?

Wenn Sie online sind - sehen Sie sich den Code an, irgendwo wird das Ereignis "Verschieben" nicht normal weitergeleitet. Panels durch die Art und Weise auf der Website nur fünf verschiedene Bibliotheken, was meinst du?

Und im Tester - es scheint, es gibt keine Möglichkeit, und warum.

Wir sprechen über das Internet. Ich brauche sie wirklich nicht im Testgerät. Bei den Bibliotheken bin ich mir nicht sicher - ich bin kein Experte in Sachen Programmierung. Ich habe gerade einen fertigen Code der Schaltfläche aus MQL5 Reference genommen.

Ich habe es bereits getan und es wird viel billiger sein. Dies ist offenbar der Grund, warum die Position der Schaltfläche beim nächsten Tick aktualisiert wird. Ich verstehe nicht, wie ich die Schaltflächen zusammen mit dem Hintergrund bewegen kann.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 
Artyom Trishkin:
Nach dem Senden von Bewegungsbefehlen an ALLE Panel-Objekte ChartRedraw() ausführen
Ich habe es auf diese Weise versucht, aber es hat nicht funktioniert.
   ObjectSetInteger(0, "Buy",            OBJPROP_XDISTANCE, x + 2);
   ObjectSetInteger(0, "Buy",            OBJPROP_YDISTANCE, y + 2);
   ChartRedraw();
  
   ObjectSetInteger(0, "Sell",           OBJPROP_XDISTANCE, x + 74);
   ObjectSetInteger(0, "Sell",           OBJPROP_YDISTANCE, y + 2);
   ChartRedraw();
 
Bitte helfen Sie mir zu verstehen. Ich habe einen Code für ein Handels-Panel, um eine schwebende Buy Stop Order mit anschließendem Trailing zu öffnen, wenn die Order nicht ausgelöst wird. Der Auftrag wird geöffnet, aber nicht geändert. Ich habe keine Fehler im Journal gesehen und es gibt keine Versuche, den Auftrag zu ändern. Ich habe versucht, anhand des Protokolls nachzuvollziehen, in welchem Stadium ein Fehler auftritt, indem ich die Funktion
verwendet habe.
Print("Ордер Выбран!");

Fügen Sie sie einfach nach jeder if-Bedingung ein.

Daraufhin habe ich herausgefunden, dass die Funktion:

 for(int i=OrdersTotal()-1;i>=0;i--)
          if(aorder.SelectByIndex(i))  

Wählt den Auftrag erfolgreich aus, um fortzufahren, aber wennPrint("Order Selected!"); nach diesem Codeeingefügt wird:

if(aorder.Symbol()==asymbol.Name() && aorder.Magic()==MagicNumber && Ask < aorder.PriceOp
en())

dann tritt ein Fehler auf:

2020.06.17 01:38:24.136 2020.01.02 07:40:00 failed modify order #2 buy stop 0.1 EURUSD_i at 1.12086 sl: 1.12023 tp: 1.12275 -> 1.00000, sl: 1.00000 tp: 1.00000 [Ungültiger Preis]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 CTrade::OrderSend: modify #2 at 1.00000 (sl: 1.00000 tp: 1.00000) [invalid price]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 BUY STOP modification failed! Ergebnis Retcode: 10015, Beschreibung des Retcodes: ungültiger Preis

Ich verwende den gleichen Code in einem anderen EA für Autotrading (der einzige Unterschied ist das Fehlen eines solchen Codes):

ObjectGetInteger(0, "Buy Stop", OBJPROP_STATE) == true


) und ich habe keine Probleme. Die Aufträge werden ohne Probleme geöffnet und geändert.

Hier ist der Code selbst:

     double Ask          = NormalizeDouble(PriceInformation_High_Buy[HighestCandle_High_Buy].high, _Digits) + indent; // максимум самой высокой свечи плюс отступ
     double sl_buy       = NormalizeDouble(PriceInformation_Low_Buy[LowestCandle_Low_Buy].low, _Digits) - indent;     // минимум самой низкой свечи минус отступ  
     double tp_buy       = Ask + ((Ask - sl_buy) * Профит_фактор);                                                    // количество стопов лоссов 
     
     if  (OrdersTotal()==0 && PositionsTotal()==0 &&                                         // проверка на наличие открытых позиций и ордеров
     ObjectGetInteger(0, "Buy Stop", OBJPROP_STATE) == true)                                 // проверка состояния кнопки
                                                                                             
     {
        atrade.BuyStop(Lots, Ask, _Symbol, sl_buy, tp_buy, ORDER_TIME_GTC, 0, "My comment"); // посылаем ордер Buy Stop
        ObjectSetInteger(0, "Buy Stop", OBJPROP_STATE, false);                               // отжимаем кнопку
     }

     else

     ObjectSetInteger(0, "Buy Stop", OBJPROP_STATE, false);                                  // отжимаем кнопку
       
//---Трейлинг Buy Stop---------------------------------------------------------------------------------------------------------------------------//     
      
        for(int i=OrdersTotal()-1;i>=0;i--)
          if(aorder.SelectByIndex(i))                                                                      // выбираем ордер 
       
            if(aorder.Symbol()==asymbol.Name() && aorder.Magic()==MagicNumber && Ask < aorder.PriceOpen()) // проверяем символ, мэджик номер, цену
               
              {
                 if(aorder.OrderType()==ORDER_TYPE_BUY_STOP)
                 Print("Ордер Выбран!"); 
                 if(aorder.PriceCurrent()<aorder.PriceOpen())
                 
                    {
                     if(atrade.OrderModify(aorder.Ticket(),
                        asymbol.NormalizePrice(Ask),
                        asymbol.NormalizePrice(sl_buy),
                        asymbol.NormalizePrice(tp_buy),
                        aorder.TypeTime(),
                        aorder.TimeExpiration()))
                        Print("Модификация BUY STOP прошла успешно! Тикет ордера = ",atrade.ResultOrder());
                     else
                        Print("Модификация BUY STOP прошла с ошибкой! Result Retcode: ",atrade.ResultRetcode(),
                              ", description of Retcode: ",atrade.ResultRetcodeDescription());
                    }
              }

Bitte sagen Sie mir, wo mein Fehler liegt?

 
Mikhail:

Es geht um Online. Ich brauche sie wirklich nicht im Testgerät. Die Frage nach den Bibliotheken kann ich nicht beantworten, ich bin ein totaler Programmier-Dummkopf. Ich habe gerade einen fertigen Code der Schaltfläche aus MQL5 Reference genommen.

Ich habe es bereits getan, und es wird viel billiger sein. Aus diesem Grund wird die Position der Schaltfläche beim nächsten Tick aktualisiert. Ich verstehe nicht, wie man Schaltflächen mit Hintergrund bewegen kann.

Und wie haben Sie festgestellt, dass es auf dem nächsten Häkchen steht und nicht auf diesem?)

 
Mikhail:
Bitte helfen Sie mir zu verstehen. Ich habe einen Code für das Trading-Panel, um eine schwebende Buy-Stop-Order mit anschließendem Trailing zu öffnen, falls die Order fehlschlägt. Der Auftrag ist geöffnet, aber es gibt keine Änderung des Auftrags. Im Journal werden keine Fehler angezeigt, und wir haben auch keine Versuche, den Auftrag zu ändern. Ich habe versucht, anhand des Protokolls nachzuvollziehen, in welchem Stadium ein Fehler auftritt, indem ich die Funktion
verwendet habe.

Fügen Sie sie einfach nach jeder if-Bedingung ein.

Daraufhin habe ich herausgefunden, dass die Funktion:

Wählt den Auftrag erfolgreich aus, um fortzufahren, aber wennPrint("Order Selected!"); nach diesem Codeeingefügt wird:

dann tritt ein Fehler auf:

2020.06.17 01:38:24.136 2020.01.02 07:40:00 failed modify order #2 buy stop 0.1 EURUSD_i at 1.12086 sl: 1.12023 tp: 1.12275 -> 1.00000, sl: 1.00000 tp: 1.00000 [Ungültiger Preis]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 CTrade::OrderSend: modify #2 at 1.00000 (sl: 1.00000 tp: 1.00000) [invalid price]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 BUY STOP modification failed! Ergebnis Retcode: 10015, Beschreibung des Retcodes: ungültiger Preis

Ich verwende den gleichen Code in einem anderen EA für Autotrading (der einzige Unterschied ist das Fehlen eines solchen Codes):


) und ich habe keine Probleme. Die Aufträge werden ohne Probleme geöffnet und geändert.

Hier ist der Code selbst:

Können Sie mir bitte sagen, wo mein Fehler liegt?

Offensichtlich funktioniert die Normalisierung nicht richtig. Unprint asymbol.Digits() asymbol.TickSize(),. Point() check .

 

Einen guten Tag an alle. Dieses Problem trat beim Zugriff auf EA to DLL auf:

'C:\....\shablon.dll' kann nicht geladen werden [487]

Der Fehler 487 scheintERROR_INVALID_ADDRESS zu bedeuten, aber der Pfad zur Bibliothek ist korrekt. Eigentlich habe ich diese dll schon in alle Ordner gelegt, es hilft nicht.

Was kann das sein? Ich werde Ihnen für Ihre Hilfe dankbar sein.


P.S. Zuerst war diese dll für 32 Bit und funktionierte in mt4*86. Ich habe es für 64 Bit neu kompiliert, jetzt habe ich es auf mt5*64 und habe solche Probleme.



 
Aleksey Mavrin:

Woher wissen Sie, was auf dem nächsten Häkchen steht und auf dem da nicht?)

Bis zum Eintreffen des neuen Häkchens werden die Tasten nicht bewegt. Das ist es, was ich mit meinen Augen sehen kann. Sobald sich der Preis ändert, bewegen sich die Schaltflächen.

Heute jedoch werden die Schaltflächen auch auf dem neuen Häkchen nicht mehr neu gezeichnet, obwohl ich nichts geändert habe. Nur der Hintergrund bewegt sich.
 
Aleksey Mavrin:

Offenbar funktioniert Normalize nicht richtig. rundet auf eins auf. Unprint asymbol.Digits() asymbol.TickSize(),. Point() check .

Wenn ich eine Abfrage wie diese mache:

Print("Symbol ", _Symbol, " Digits ", _Digits, " Point ", Point());

Ich erhalte dieses Ergebnis:

2020.06.17 13:49:53.270 2020.01.02 06:50:00 Symbol EURUSD_i Ziffern 5 Punkt 1e-05

Wenn ich eine Anfrage wie diese stelle:

Print("Symbol ",aorder.Symbol(), " Digits ", asymbol.Digits(), " Point ", asymbol.TickSize());

Ich erhalte dieses Ergebnis:

2020.06.17 13:51:58.787 2020.01.02 06:45:00 Symbol EURUSD_i Ziffern 0 Punkt 0.0

Gleichzeitig möchte ich anmerken, dass ich, wenn ich die Funktion Print nicht einfüge, überhaupt keinen Fehler erhalte, der Auftrag versucht nicht einmal, sich zu ändern. Es ist, als ob CTrade meine Bestellung nicht sieht.

Die Suche nach dem Symbol und der magischen Zahl funktioniert nicht:

Print("Symbol ", asymbol.Name(), " Magic ", aorder.Magic(), " Ticket ", aorder.Ticket()); 

Ergebnis:

2020.06.17 14:37:38.147 2020.01.02 06:50:00 Symbol Magic 0 Ticket 2

Die magische Zahl sollte 12345 sein, das Symbol ist Euro-Dollar.

Warum kann ich kein Symbol und kein Medikament bekommen?

Wenn Sie die Zeichenfolge ändern:

aorder.Symbol()==asymbol.Name()

wird geändert in

aorder.Symbol()==_Symbol

und die Validierung durch die magische Zahl entfernen, dann gibt es Probleme mit den Preisen

2020.06.17 01:38:24.136 2020.01.02 07:40:00 fehlgeschlagene Änderung der Order #2 buy stop 0.1 EURUSD_i bei 1.12086 sl: 1.12023 tp: 1.12275 -> 1.00000, sl: 1.00000 tp: 1.00000 [Ungültiger Preis]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 CTrade::OrderSend: modify #2 at 1.00000 (sl: 1.00000 tp: 1.00000) [invalid price]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 BUY STOP modification failed! Ergebnis Retcode: 10015, Beschreibung des Retcodes: ungültiger Preis

Ich habe mir bereits das Hirn zermartert, während derselbe Code in einem anderen Expert Advisor gut funktioniert.

Was mache ich falsch?

Документация по MQL5: Общие функции / Print
Документация по MQL5: Общие функции / Print
  • www.mql5.com
Данные типа double выводятся с точностью до 16 десятичных цифр после точки, при этом данные могут выводиться либо в традиционном либо в научном формате – в зависимости от того, как запись будет наиболее компактна. Данные типа float выводятся с 5 десятичными цифрами после точки. Для вывода вещественных чисел с другой точностью либо в явно...
 
dozolov:

Guten Tag an alle. Dieses Problem trat beim Zugriff auf EA to DLL auf:

'C:\....\shablon.dll' kann nicht geladen werden [487]

Der Fehler 487 scheintERROR_INVALID_ADDRESS zu bedeuten, aber der Pfad zur Bibliothek ist korrekt. Eigentlich habe ich diese dll schon in alle Ordner gelegt, es hilft nicht.

Was kann das sein? Ich werde Ihnen für Ihre Hilfe dankbar sein.


P.S. Zuerst war diese dll für 32 Bit und funktionierte in mt4*86. Ich habe es für 64 Bit neu kompiliert und jetzt habe ich es auf mt5*64 und habe solche Probleme.



ERROR_INVALID_ADDRESS bezieht sich nicht auf den Pfad. Sie geben die falschen Argumente an.

Grund der Beschwerde: