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

 

Guten Tag, meine Herren!)

Versuch, Daten für das Training eines neuronalen Netzes vorzubereiten. Die Aufgabe lautet.

Sie haben eine Matrix, in der zum Beispiel jede Zeile (Zeitmoment - Balken) ein Eingangsvektor ist, und Spalten zum Beispiel 10000. Was ist zu tun, wenn es dynamische Daten gibt (Anzahl der Zeilen1, Zeilen2) und sich die Anzahl zu verschiedenen Zeitpunkten ändert?

Zum Beispiel wird eine Matrix in ein Netz geladen, jede Zeile ist ein Lernvektor, aber für jede Zeile gibt es n Zeilen, die sich dynamisch mit der Zeit verändern.

Ein möglicher Lösungsansatz besteht darin, der Matrix zusätzliche Spalten hinzuzufügen, die der Anzahl der Spalten in der dynamischen Zeile entsprechen; es stellt sich heraus, dass jeder Vektor Spalten aus der denamischen Matrix hat, aber so, als ob er aus einer Zeile bestünde.

zum Beispiel

1. Vektor

1.365 0 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 ... "Zeile1 dynamisch" 1 1 1 1 1

ssssssssssssssssssssssssssssssss "Linie2 dynamisch" 1 1 1 1 1

Lösung

1.365 0 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 ... "Linie1 dynamisch" 2 2 2 2 2

 
Top2n:

Guten Tag, meine Herren!)

Versuch, Daten für das Training eines neuronalen Netzes vorzubereiten. Die Aufgabe lautet.

Sie haben eine Matrix, in der zum Beispiel jede Zeile (Zeitmoment - Balken) ein Eingangsvektor ist, und Spalten zum Beispiel 10000. Was ist zu tun, wenn es dynamische Daten gibt (Anzahl der Zeilen1, Zeilen2) und sich die Anzahl zu verschiedenen Zeitpunkten ändert?

Zum Beispiel wird eine Matrix in ein Netz geladen, jede Zeile ist ein Lernvektor, aber für jede Zeile gibt es n Zeilen, die sich dynamisch mit der Zeit verändern.

Ein möglicher Lösungsansatz besteht darin, der Matrix zusätzliche Spalten hinzuzufügen, die der Anzahl der Spalten in der dynamischen Zeile entsprechen; es stellt sich heraus, dass jeder Vektor Spalten aus der denamischen Matrix hat, aber so, als ob er aus einer Zeile bestünde.

zum Beispiel

1. Vektor

1.365 0 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 ... "Zeile1 dynamisch" 1 1 1 1 1

ssssssssssssssssssssssssssssssss "Linie2 dynamisch" 1 1 1 1

Lösung

1.365 0 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 ... "Linie1 dynamisch" 2 2 2 2 2

Und wie lernt man eine Sprache, die ihren Wortschatz dynamisch (z. B. einmal pro Stunde) ändert? So macht es ein neuronales Netz.
 
Das ist also MQL5, so wie ich es verstehe. Oder ist sie identisch?
 
Andrey Sokolov:
Das ist also MQL5, so wie ich es verstehe. Oder ist sie identisch?
Das ist genau dasselbe.
 
Guten Tag. Ich habe einen EA erstellt, der gut funktioniert, aber wenn ich das Terminal ausschalte, während der EA läuft, und das Terminal wieder einschalte, beginnt der EA wieder von vorne zu zählen. Also, ich habe eine Frage. Was muss ich in meinen EA schreiben, damit er die Eingabeparameter beim Start zurücksetzt?
 
XFaost:
Guten Tag. Ich habe einen EA erstellt, der gut funktioniert, aber wenn ich das Terminal ausschalte, während der EA läuft, und das Terminal wieder einschalte, beginnt der EA wieder von vorne zu zählen. Also, ich habe eine Frage. Was muss ich im EA vorschreiben, damit er die Input-Parameter zurücksetzt, wenn er startet?
Ich möchte, dass mein Expert Advisor die Eingabeparameter nicht zurücksetzt, sondern Informationen über die Aufträge sammelt, die vor seiner Schließung geöffnet wurden.
 
XFaost:
Guten Tag. Ich habe einen EA erstellt, der gut funktioniert, aber wenn ich das Terminal ausschalte, während der EA läuft, und das Terminal wieder einschalte, beginnt der EA wieder von vorne zu zählen. Ich habe also eine Frage. Was muss ich in meinem EA schreiben, so dass es die Input-Parameter zurücksetzen würde, wenn ich es starte?
Bitte beschreiben Sie die Funktionsweise des EA. Vielleicht müssen Sie ein anderes Prinzip anwenden. Und wenn Sie trotzdem zurücksetzen müssen, dann sollten Sie zuerst definieren, was mit "beim Start" gemeint ist. Und im Allgemeinen ist ein Reset ein Übergang zur Ausgangsposition. Schreiben Sie die Grundeinstellungen auf und stellen Sie sie zum richtigen Zeitpunkt ein.
 

Grüße. Können Sie mir sagen, was los ist?

Der EA platziert Aufträge mit Stops über und unter dem Preis. Wenn einer der beiden auslöst, wird der Stopp angepasst, wenn sich der Kurs mehr als der eingestellte Wert vom Stopp entfernt, wenn sich der Kurs auf den Stopp zubewegt, erfolgt keine Änderung.

Zuerst habe ich nur Kaufauftrag geschrieben und es hat wie erwartet funktioniert. Wenn ich ein Spiegelbild für den Verkauf hinzufüge, werden die Stopps um den eingestellten Wert korrigiert, egal wie sich der Preis bewegt.

Im Allgemeinen, wenn separat, oder zu kaufen oder zu verkaufen - alles funktioniert, wie es sollte, aber beide Teile zusammen - es ist ein Fehler.

#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern double Lot             = 0.01;
extern int    StopLoss        = 50;
extern int    Slippage        = 5;
extern int    Delta           = 60;
extern int    Delta2          = 170;
extern int    Magic           = 321;

int ticket;
double price, sl, sl2;
datetime counted_bar = 0;

int OnInit()
  {
    if (Digits == 3 || Digits == 5)
   {

       StopLoss      *= 10;
       Delta         *= 10;
       Delta2        *= 10;
      
   }

  
   return(INIT_SUCCEEDED);
  }


void OnTick() {
//////        ПРОДАЖА  ///////////////////////////////////////////////////////
if (SellLimitCount()==0 && SellCount()==0)
{    
  price = NormalizeDouble(Bid - Delta*Point, Digits);
  sl = NormalizeDouble(price + StopLoss*Point, Digits);
  ticket = OrderSend (Symbol(), OP_SELLSTOP, Lot, price, Slippage, sl, 0, "", Magic, 0, Red);
}

if (SellCount()!=0)
  {
   if (Bid < (OrderStopLoss() - NormalizeDouble (StopLoss*Point, Digits)))
     {
     sl = NormalizeDouble (Bid + StopLoss*Point, Digits);
     if (OrderModify(ticket, price, sl, 0, 0, Red)) Print ("Sell_Order_Modify_Ok");
     else Print ("ERROR_Sell_Order_Modify");
     }  
  }
if (SellLimitCount()!=0)
{
  if(Bid > (OrderOpenPrice() + NormalizeDouble (Delta2*Point, Digits)))
   {    
    if (OrderDelete(ticket, Red)) Print ("BuyLimit_Order_Delete_Ok");
    else Print ("ERROR_BuyLimit_Odrer_Delete");
   }  
}
/////////////////////////////////////////////////////////////////////////////////
///////       ПОКУПКА ////////////////////////////////////////////////////////
if (BuyLimitCount()==0 && BuyCount()==0)
{
  price = NormalizeDouble(Ask + Delta*Point, Digits);
  sl = NormalizeDouble(price - StopLoss*Point, Digits);
  ticket = OrderSend (Symbol(), OP_BUYSTOP, Lot, price, Slippage, sl, 0, "", Magic, 0, Blue);
}

if (BuyCount()!=0)
  {
    if (Ask > (OrderStopLoss() + NormalizeDouble (StopLoss*Point, Digits)))
     {
     sl = NormalizeDouble (Ask - StopLoss*Point, Digits);
     if (OrderModify(ticket, price, sl, 0, 0, Blue)) Print ("Buy_Order_Modify_Ok");
     else Print ("ERROR_Buy_Order_Modify");
     }  
  }
if (BuyLimitCount()!=0)
{
  if(Ask < (OrderOpenPrice() - NormalizeDouble (Delta2*Point, Digits)))
   {
    if (OrderDelete(ticket, Blue)) Print ("BuyLimit_Order_Delete_Ok");
    else Print ("ERROR_BuyLimit_Orde_Delete");
   }  
}
///////////////////////////////////////////////////////////////////////////////

}
//+------------------------------------------------------------------+
int BuyLimitCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==Magic){
if(OrderType()==OP_BUYSTOP)
count++;}}}return(count);}

int BuyCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==Magic){
if(OrderType()==OP_BUY)
count++;}}}return(count);}

int SellLimitCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==Magic){
if(OrderType()==OP_SELLSTOP)
count++;}}}return(count);}

int SellCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==Magic){
if(OrderType()==OP_SELL)
count++;}}}return(count);}
 
Andrey Sokolov:

Grüße. Können Sie mir sagen, was los ist?

Der EA platziert Aufträge mit Stopps über und unter dem Preis. Wenn einer der beiden auslöst, wird der Stopp angepasst, wenn sich der Kurs mehr als der eingestellte Wert vom Stopp entfernt, wenn sich der Kurs auf den Stopp zubewegt, erfolgt keine Änderung.

Zuerst habe ich nur Kaufauftrag geschrieben und es hat wie erwartet funktioniert. Wenn ich ein Spiegelbild für den Verkauf hinzufüge, werden die Stopps um den eingestellten Wert korrigiert, egal wie sich der Preis bewegt.

Im Allgemeinen, wenn separat, oder zu kaufen oder zu verkaufen, alles funktioniert, wie es sein sollte, aber beide Teile zusammen - es gibt einen Fehler.

...

Der gesamte Code, den Sie uns gezeigt haben, ist ein Fehler, nicht wahr? Zumindest ist die OnTick-Funktion fast ausschließlich ein Fehler...

 
Vitalie Postolache:

Ein Fehler, meinen Sie den gesamten angezeigten Code?

Wenn es beide Teile des Codes gibt, sowohl für den Kauf als auch für den Verkauf, dann wird nach dem Auslösen der schwebenden Order ihr Stop aus irgendeinem Grund in jede Preisrichtung korrigiert. Und wenn es nur einen Kauf- oder Verkaufsteil des Codes gibt, wird der Stopp nur dann wie vorgesehen korrigiert, wenn sich der Preis davon entfernt.
Grund der Beschwerde: