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

 
MakarFX:

Bitte sagen Sie mir, ob es möglich ist, diese Schriftart in einem Indikator zu wählen?


Warum nicht? Erstellen Sie Ihre eigene Aufzählung und alle Probleme.........

 
Alexey Viktorov:

Warum nicht? Erstellen Sie Ihre eigene Aufzählung und alle Probleme.........

Das ist klar, aber wie kann ich eine Liste der installierten Schriftarten anfordern?

 
Nikolai Semko:

Du bist ein Komiker.

Mit wem habe ich gesprochen?


Ich habe etwas übersehen. Danke. (lacht) Das war's!

 
ANDREY:

Ich hab's. Vielen Dank für die Hilfe.

Ich fand es auch schwierig für den EA, so viele Aufträge zu eröffnen. Ich habe versucht, die Anzahl der Aufträge mit diesem Code zu begrenzen

Das heißt, öffnen Sie eine Bestellung erst um 10:00 Uhr. Das Ergebnis ist jedoch das gleiche.

2020.10.27 10:25:17.548 Core 1 272 Mb Speicher verwendet, davon 36 Mb History-Daten, 64 Mb Tick-Daten



Um ehrlich zu sein, kenne ich mich mit MKL5 nicht gut aus. Aber die Logik ist lahm. Sie müssen einen Auftrag eröffnen. Dies wird dadurch erreicht, dass Sie zu Beginn der Funktion eine Stundenvariable auf den Tick und am Ende eine andere Variable zuweisen. In der Mitte, wenn die Variablen nicht gleich sind, eröffnen Sie einen Auftrag. Das obige Beispiel mit den Minuten ist dasselbe.

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //
int tm; 
//+------------------------------------------------------------------+
void OnTick()
  {
//Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
   MqlDateTime time_now;     // Будет использоваться для
   
 TimeCurrent(time_now);  
 if(!SymbolInfoTick(_Symbol,latest_price))
 if(time_now.hour==10 && tm != time_now.hour) //на первом тике, когда time_now.hour станет 10 а tm еще 9
                                           // и на следующем тике tm будет равно 10


   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_RETURN;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult);
    }  

tm= time_now.hour;
     return;
  }



 
MakarFX:

Das ist klar, aber wie kann man eine Liste der installierten Schriftarten anfordern?

Ich denke, in Ihrem Beispiel handelt es sich um eine hausgemachte Liste. Ohne Abfrage der Software.

 
Valeriy Yastremskiy:

Um ehrlich zu sein, kenne ich mich mit MKL5 nicht gut aus. Aber die Logik ist lahm. Sie benötigen eine Bestellung, um diese zu öffnen. Dies wird dadurch erreicht, dass man am Anfang der Funktion eine Stundenvariable auf den Tick und am Ende eine andere Variable zuweist. In der Mitte, wenn die Variablen nicht gleich sind, eröffnen Sie einen Auftrag. Das obige Beispiel mit den Minuten ist dasselbe.

Aus diesem Grund wird empfohlen, die EA-Arbeit ausschließlich mit den Magiern durchzuführen.

Wenn unsere Aufgabe darin besteht, einmal am Tag zu einer bestimmten Uhrzeit einen Auftrag zu eröffnen, dann sieht der Algorithmus wie folgt aus:

- EA starten, es prüft die Anzahl der offenen Aufträge, wenn der Auftrag mit unserem Zauberer offen ist, dann verlassen, bis der nächste Tick

- wenn keine Aufträge vorliegen, wartet der EA, bis die aktuelle Stunde und die Minuten größer als die angegebenen sind

- diese Zeit ist gekommen, EA wird die Auftragshistorie überprüfen und wenn in den letzten 24 Stunden kein Auftrag mit unserem Magier platziert wurde, dann wird er einen Auftrag platzieren und beenden - die Beendigung ist nützlich, um keine Serverfehler zu verarbeiten, wenn der Auftrag nicht platziert wurde, dann werden wir beim nächsten Tick versuchen, es wieder zu tun, d.h. wir brauchen keinen Zyklus für mehrere Auftragseröffnungen auf diesem Tick zu organisieren.... aber das ist eine Frage des Geschmacks und der Ziele, es ist die einfachste Umsetzung )))

 
Igor Makanu:

Deshalb ist es empfehlenswert, die EA-Arbeit ausschließlich mit den Magiern zu machen.

Wenn die Aufgabe darin besteht, einmal am Tag zu einer bestimmten Zeit einen Auftrag zu eröffnen, sieht der Algorithmus wie folgt aus:

- EA starten, es prüft die Anzahl der offenen Aufträge, wenn der Auftrag mit unserem Zauberer offen ist, dann verlassen, bis der nächste Tick

- wenn keine Aufträge vorliegen, wartet der EA, bis die aktuelle Stunde und die Minuten größer als die angegebenen sind

- diese Zeit ist gekommen, EA wird die Auftragshistorie überprüfen und wenn in den letzten 24 Stunden kein Auftrag mit unserem Magier platziert wurde, dann wird er einen Auftrag platzieren und beenden - die Beendigung ist nützlich, um keine Serverfehler zu verarbeiten, wenn der Auftrag nicht platziert wurde, dann werden wir beim nächsten Tick versuchen, es wieder zu tun, d.h. wir brauchen keinen Zyklus für mehrere Auftragseröffnungen auf diesem Tick zu organisieren.... Aber das ist eine Frage des Geschmacks und der Ziele und ist die einfachste Umsetzung )))

Wir haben dort noch nicht das Niveau eines Magiers erreicht. Ja, natürlich. Bei 5 c besteht das Dilemma natürlich darin, ob man eine Schleife mit Fehleranalyse durchführen oder versuchen sollte, eine Position mit einem Tick zu eröffnen. Bei langen Antworten kann es einfacher sein, das Häkchen zu setzen.

 
Valeriy Yastremskiy:

Um ehrlich zu sein, kenne ich mich mit MKL5 nicht gut aus. Aber die Logik ist lahm. Sie benötigen eine Bestellung, um diese zu öffnen. Dies wird dadurch erreicht, dass Sie zu Beginn der Funktion eine Stundenvariable auf den Tick und am Ende eine andere Variable zuweisen. In der Mitte, wenn die Variablen nicht gleich sind, eröffnen Sie einen Auftrag. Das obige Beispiel mit den Minuten ist dasselbe.



Ich danke Ihnen vielmals. Das Wissen, das Sie mir vermittelt haben, war genau das, was mir gefehlt hat. Ich habe versucht, dasselbe zu tun, aber in Analogie zu 4. Wie sich herausstellt, ist die Analogie in diesem Fall fehl am Platze.
Ich danke Ihnen nochmals.

 
Igor Makanu:

Deshalb wird empfohlen, die EA-Arbeit ausschließlich mit den Magiern zu machen.

Wenn die Aufgabe darin besteht, einmal am Tag zu einer bestimmten Zeit einen Auftrag zu eröffnen, sieht der Algorithmus wie folgt aus:

- EA starten, es prüft die Anzahl der offenen Aufträge, wenn der Auftrag mit unserem Zauberer offen ist, dann verlassen, bis der nächste Tick

- wenn keine Aufträge vorliegen, wartet der EA, bis die aktuelle Stunde und die Minuten größer als die angegebenen sind

- diese Zeit ist gekommen, EA wird die Auftragshistorie überprüfen und wenn in den letzten 24 Stunden kein Auftrag mit unserem Magier platziert wurde, dann wird er einen Auftrag platzieren und beenden - die Beendigung ist nützlich, um keine Serverfehler zu verarbeiten, wenn der Auftrag nicht platziert wurde, dann werden wir beim nächsten Tick versuchen, es wieder zu tun, d.h. wir brauchen keinen Zyklus für mehrere Auftragseröffnungen auf diesem Tick zu organisieren.... aber dies ist eine Frage des Geschmacks und der Ziele und ist die einfachste Umsetzung )))

Vielen Dank für die wertvollen Informationen. Dank Ihnen hat sich mein Verständnis von mql 5 erweitert und vertieft.
Ich wäre Ihnen sehr dankbar, wenn Sie meinen Code als Beispiel für Ihren Denkprozess zeigen könnten. Es wird mir helfen, Ihre Idee schnell und genau zu erfassen.
Nochmals herzlichen Dank.

Hier ist mein Code, in dem ich die Bedingung, dass ein Auftrag nur um 10:00 Uhr geöffnet werden soll, falsch geschrieben habe

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //

//+------------------------------------------------------------------+
void OnTick()
  {
//Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
   MqlDateTime time_now;     // Будет использоваться для
   
 TimeCurrent(time_now);  
 if(!SymbolInfoTick(_Symbol,latest_price))
 if(time_now.hour==10&&time_now.min==0)
   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_RETURN;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult);
    }   
     return;
  }
 
ANDREY:

Hier ist mein Code, in dem ich die Bedingung falsch geschrieben habe, wonach der Auftrag erst um 10:00 Uhr geöffnet werden soll

Ich schreibe nicht in reinem MQL5. Sie können eine Bestellung mit der CTrade SB-Klasse aufgeben

Suchen Sie bei CTrade nach Artikeln über die Verwendung von SB