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

 
Andrey Sokolov #:

Sehen Sie es wirklich nicht selbst?

"Wie schreibe ich das auf?" - wo 0,01 Lot steht, müssen Sie den verfügbaren Mindestbetrag berechnen.

Das kann ich sehen. Wenn Sie 0,02 einstellen, wird der Auftrag mit dem 0,02-Lot ausgewählt. Ich habe gefragt, wie man einstellen kann, dass zuerst das 0,01-Lot betrachtet wird, dann das 0,02-Lot und so weiter.

 
Sergey Gridnev #:
Sie benötigen 2 Zyklen: im ersten ermitteln Sie das Mindestvolumen, im zweiten schließen Sie es. Und beachten Sie, dass beim Schließen die Aufträge um 1 Position verschoben werden, so dass Sie den Zyklus von der maximalen Position bis 0 durchführen müssen.

Wie geht man vom Maximum auf 0?

 
Rustam Bikbulatov #:

Ich möchte wissen, wie man zuerst 0,01, dann 0,02 und so weiter anzeigen lassen kann.

Wie das geht, wurde Ihnen bereits zweimal gesagt.

 
Rustam Bikbulatov #:

Das kann ich sehen. Wenn Sie es auf 0,02 einstellen, werden Aufträge mit 0,02 Lot ausgewählt. Ich frage, wie man es so einstellt, dass es zuerst 0,01, dann 0,02 usw. betrachtet.

Aggregieren Sie das Array in ein zweidimensionales Array, mit Losen in der ersten und Tickets in der zweiten Dimension. Sortieren Sie das Array und schließen Sie es, wenn die erste Dimension die kleinste Menge hat. Oder wenn Sie alle schließen müssen, aber da die Menge zunimmt, schließen Sie zum Ende hin...

 
Sergey Gridnev #:
Sie benötigen 2 Zyklen: im ersten ermitteln Sie das Mindestvolumen und im zweiten schließen Sie es. Und beachten Sie, dass beim Schließen die Aufträge um 1 Position verschoben werden, so dass Sie den Zyklus von der maximalen Position bis 0 durchführen müssen.

Nein. Vom frühesten bis zum spätesten.

 

Ich wusste, was sie sagten. Nun, ich werde wie immer durch Versuch und Irrtum lernen müssen.

 
Rustam Bikbulatov #:

Ich wusste, was sie sagten. Nun, ich werde wie immer durch Versuch und Irrtum lernen müssen.

//+------------------------------------------------------------------+
//|                                                       Око_01.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#include <GrosBuch.mqh>
#property script_show_inputs

//input double Max_loss=0; //
extern int N=6;           // Количество ордеров
input int SLpips=0;      // Количество пунктов
//Вычисляем возможное оставшееся количество лотов при N лоссов от оставшихся свободных средств
// Buch bi;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   double PipValue = MarketInfo(NULL, MODE_TICKVALUE),
          min_lot = MarketInfo(NULL, MODE_MINLOT),
          lot_step = MarketInfo(NULL, MODE_LOTSTEP),
          Margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED),
          Max_loss=N*SLpips*PipValue*min_lot,                 //Вычисляем сумму совокупного возможного лосса
          M_m=DBL_MIN;
   double remains= AccountFreeMargin()-Max_loss;  //Значение свободных средств для открыти ордера Margin*Lots;
   while(remains>Margin*min_lot&&!IsStopped())   //если они больше,чем необходимо для открытия 1 лота
     {
      min_lot=NormalizeDouble(min_lot+lot_step,2);  //добавим минлот
      M_m=Margin*min_lot;                           //получим значени св средств при вычисленном лоте и размере стопа
      // Lots*=min_lot;
      Print("remains = ",remains," Margin =",Margin," PipValue =",PipValue," N =",N,"min_lot =",min_lot," Max_loss =",Max_loss," M-m =",M_m);
     }
  }
//+------------------------------------------------------------------+
 

Guten Abend, liebe Experten!

Bitte helfen Sie mir, eine Sache zu verstehen. Ich schreibe gerade den Anfang einer Funktion und habe beschlossen, einen Teil des Codes mit einem Skript zu überprüfen:

//+------------------------------------------------------------------+
//|                                                            3.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   /* Создадим запрос на сервер и получим ответ с результатом */
   MqlTradeRequest request= {};
   MqlTradeResult result= {0};
   /* запустим цикл для перебора всех установленных отложенных ордеров */
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      /* определим параметры установленного ордера */
      string symbol=OrderGetString(ORDER_SYMBOL);                        // символ ордера
      int    digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);        // количество знаков после запятой
      double point=SymbolInfoDouble(symbol,SYMBOL_POINT);                // значение одного пункта
      ulong  ticket=OrderGetTicket(i);                                   // тикет ордера
      ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE); // тип ордера
      double volume=OrderGetDouble(ORDER_VOLUME_INITIAL);                // объём ордера
      ulong  magic=OrderGetInteger(ORDER_MAGIC);                         // MagicNumber ордера
      double price_current=OrderGetDouble(ORDER_PRICE_CURRENT);          // текущая цена по символу ордера
      double price_order_open=OrderGetDouble(ORDER_PRICE_OPEN);          // цена открытия указанная в ордере
      double sl=OrderGetDouble(ORDER_SL);                                // стоп лосс ордера
      double tp=OrderGetDouble(ORDER_TP);                                // тейк профит ордера
      /* выведем информацию об установленных отложенных ордерах */
      PrintFormat("#%I64u %s  %s  %.2f price_current: %.5f price_order_open: %.5f sl: %.5f tp: %.5f magic: %d",
                  ticket,symbol,EnumToString(type),volume,price_current,price_order_open,sl,tp,magic);
     }
  }
//+------------------------------------------------------------------+


Aber das Ergebnis, das auf der Registerkarte "Experten" ausgedruckt wird, ist etwas rätselhaft. Der schwebende Auftrag ORDER_TYPE_BUY_STOP hat das Symbol, aber der ORDER_TYPE_SELL_STOP hat es aus irgendeinem Grund nicht.

Womit kann sie in Verbindung gebracht werden? Mit freundlichen Grüßen, Vladimir.



 
MrBrooklin #:

Guten Abend, liebe Experten!

Bitte helfen Sie mir, eine Sache zu verstehen. Ich schreibe gerade den Anfang einer Funktion und habe beschlossen, einen Teil des Codes mit einem Skript zu überprüfen:


Aber das Ergebnis, das auf der Registerkarte "Experten" ausgedruckt wird, ist ein wenig rätselhaft. Der schwebende Auftrag ORDER_TYPE_BUY_STOP hat das Symbol, aber der ORDER_TYPE_SELL_STOP hat es aus irgendeinem Grund nicht.

Womit kann sie in Verbindung gebracht werden? Mit freundlichen Grüßen, Vladimir.



Das liegt daran, dass Sie kein Ticket ausgewählt haben, sondern versuchen, dessen Eigenschaften zu ermitteln.
 
Sergey Gridnev #:
Das hat damit zu tun, dass Sie kein Ticket ausgewählt haben, sondern versuchen, dessen Eigenschaften zu erfahren.

Vielen Dank, Sergey, für deine Antwort! Ihre Antwort hat mich noch mehr verblüfft. Wie kann das sein? Wenn ich das Skript ausführe, werden alle eingestellten schwebenden Aufträge abgefragt. Wie in der Abbildung zu sehen ist, gibt es zwei von ihnen auf dem Diagramm, und zur gleichen Zeit ist ein Ticket ausgewählt und das andere nicht? Das ist nicht ganz klar.

Können Sie das näher erläutern?

Ich stelle diese Frage nicht aus reiner Neugierde, sondern um das Selbststudium fortzusetzen.

Mit freundlichen Grüßen, Vladimir.