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

 
artem artem #:

SanAlex, ja, habe mir den Tester für das aktuelle Jahr angesehen, alles ok) Die Ergebnisse sind gut, in naher Zukunft werde ich versuchen, es auf einem echten Konto laufen zu lassen

Wie lautet der Name des Expert Advisors? Haben Sie es von kodobase heruntergeladen? Ich muss sehen, wie der Autor es in der Funktion implementiert hat

//+------------------------------------------------------------------+
// Permission to trade in this day                                   |
//+------------------------------------------------------------------+
bool TradingDay(int hmin, int hmax) // Определение времени и дня разрешения торговли
  {
   bool dtrade = false;
   switch(DayOfWeek())
     {
      case 1: // Monday
         if(Monday == 1)
            dtrade = true;
         break;
      case 2: // Tuesday
         if(Tuesday == 1)
            dtrade = true;
         break;
      case 3: // Wednesday
         if(Wednesday == 1)
            dtrade = true;
         break;
      case 4: // Thursday
         if(Thursday == 1)
            dtrade = true;
         break;
      case 5: // Friday
         if(Friday == 1)
            dtrade = true;
         break;
      default: //
         dtrade = false;
         break;
     }
   if(dtrade && !(Hour() >= hmin && Hour() <= hmax))
      dtrade = true;
   return dtrade;
  }
//+------------------------------------------------------------------+

Uns fehlt etwas - die Bedingung zum Ontik hinzufügen

 
SanAlex #:

Wie lautet der Name des Experten? Haben Sie es von kodobase heruntergeladen? Ich muss sehen, wie der Autor es in der Funktion implementiert hat

Es fehlt noch etwas - eine Bedingung für die Ontik hinzufügen

Sasha, die Zeitmessung wurde nicht berücksichtigt. Es wurden gerade einige Funktionen hinzugefügt, die während der Entwicklung hinzugefügt werden können)
 
MakarFX #:
Sasha, die Zeitmessung wurde nicht berücksichtigt. Es wurden gerade einige Funktionen hinzugefügt, die während der Entwicklung hinzugefügt werden können)

Ich werde es auf meine Art neu machen.

 
artem artem #:

SanAlex, ja, habe mir den Tester für das aktuelle Jahr angesehen, alles ok) Die Ergebnisse sind gut, in naher Zukunft werde ich versuchen, es auf einem echten Konto laufen zu lassen

Diese und die Zeit werden funktionieren - ich habe die Funktion geändert

//---
input string   s0 = "Баланс";                  // 1
input string   Template       = "ADX";         // Имя шаблона(without '.tpl')
input double   TargetProfit   = 1000000;       // Баланс + Прибыль(прибавить к балансу)
input double   TargetLoss     = 0;             // Баланс - Убыток(отнять от баланса)
input string   s2 = "Trading options";         // 2
input double   Lots           = 0.1;           // Lots
input double   MaximumRisk    = 0.02;          // MaximumRisk
input double   DecreaseFactor = 3;             // DecreaseFactor
input double   InpSLoss       = 4000;          // стоплосс
input double   InpTProfit     = 2000;          // тейкпрофит
input string   s3 = "TP SL";                   // 3
input double   InpTakeProfit  = 2000;          // Exchange TP
input double   InpStopLoss    = 4000;          // Exchange SL
input string   s4 = "Индикатор MA";            // 4
input int      MovingPeriodLw = 13;            // MovingPeriodLw
input int      MovingPeriodS1 = 55;            // MovingPeriodS1
input int      MovingPeriodS2 = 89;            // MovingPeriodS2
input string   s5 = "Индикатор MACD";          // 5
input int      InpFastEMA     = 12;            // Fast EMA Period
input int      InpSlowEMA     = 26;            // Slow EMA Period
input int      InpSignalSMA   = 9;             // Signal SMA Period
input string   s6 = "Start Stop";              // 6
input datetime HoursFrom      = D'1970.01.02'; // 1 Время: старт
input datetime HoursTo        = D'1970.01.01'; // Время: стоп
input datetime HoursFrom2     = D'1970.01.01'; // 2 Время: старт
input string   s7 = "Time:Start Stop";         // 7
input int      HoursFrom1     = 0;             // Время: старт
input int      HoursTo1       = 24;            // Время: стоп
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- Закрыть Общий профит или профит на паре
   if(ProfitTarget())
     {
      return;
     }
//--- Закрыть профит BUY или SELL на паре
   ProfitOnTick();
//---
   if((HoursFrom<HoursTo && TimeLocal()>=HoursFrom && TimeLocal()<HoursTo) ||
      (HoursFrom>HoursTo && (TimeLocal()<HoursTo || TimeLocal()>=HoursFrom)) ||
      (HoursFrom2<HoursTo2 && TimeLocal()>=HoursFrom2 && TimeLocal()<HoursTo2) ||
      (HoursFrom2>HoursTo2 && (TimeLocal()<HoursTo2 || TimeLocal()>=HoursFrom2)))
     {
      MqlDateTime currTime;
      TimeLocal(currTime);
      int hour0 = currTime.hour;
      if((HoursFrom1 < HoursTo1 && hour0 >= HoursFrom1 && hour0 < HoursTo1) ||
         (HoursFrom1 > HoursTo1 && (hour0 < HoursTo1 || hour0 >= HoursFrom1)))
        {
         // Определение направления пересечения мувингов
         if(Init)
            InitMetod();
         // Ожидание нового бара на графике
         if(timeprev == Time[0])
            return;
         timeprev = Time[0];
         // Открытие ордера по методу Пуриа
         CheckForOpen();
        }
     }
  }
//+------------------------------------------------------------------+

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Die Funktion Zeit in mt4 und mt5 funktioniert

Dateien:
 
MakarFX #:
Willst du den Unterricht nicht abschaffen?

Ich habe erst kürzlich von ihnen erfahren. Ich weiß nicht, das ist eine mega praktische Sache. Was schlagen Sie vor? Alles in Funktionen packen? Wenn das das Problem lösen würde.

Ich habe zwei globale Objekte (bar, db_last) der Klasse Bar, das erste wird mit den Parametern jedes neuen Balkens (üblicher Balken im Diagramm) initialisiert, und das zweite speichert einen Balken, der allen Bedingungen entspricht. In einem anderen lokalen Objekt der Klasse Order werden alle Berechnungen anhand der Parameter db_last durchgeführt, um einen Auftrag zu eröffnen. Die Parameter db_last und bar werden an vielen Stellen verwendet, aber nur zum Lesen, Initialisierung und Zuweisung erfolgen an einer Stelle, in OnTick (), so dass unerwartete Änderungen an Objekten nicht sein sollten.

void OnTick()
{
  last_time = iTime(NULL, 0, 0);
  BreakevenActivate();

  if(last_time > bar.time_open){
    bar.Initialize();
    TrawlOnFractals();

    if(BarRelativeMA() == "bear"){
      n_arrow_down++;
      db_last = bar;
      if(db_last.IsBearishDB() == true) OpenOrder("bear");
      ArrowCreate(OBJ_ARROW_DOWN,0,"ArrowDown"+IntegerToString(n_arrow_down,4,'0'),
                  0, iTime(NULL,0,1),AnchorPrise("bear"),ANCHOR_BOTTOM);
    }

    if(BarRelativeMA() == "bull"){
      n_arrow_up++;
      db_last = bar;
      if(db_last.IsBullishDB() == true) OpenOrder("bull");
      ArrowCreate(OBJ_ARROW_UP,0,"ArrowUp"+IntegerToString(n_arrow_down++,4,'0'),
                  0, iTime(NULL,0,1),AnchorPrise("bull"),ANCHOR_TOP);
    }

    bar.time_open = last_time;
  }
   
}
 
Nerd Trader #:

Ich habe erst kürzlich von ihnen erfahren. Ich weiß nicht, das ist eine mega praktische Sache. Was schlagen Sie vor? Alles in Funktionen packen? Wenn das das Problem lösen würde.

Ich habe zwei globale Objekte (bar, db_last) der Klasse Bar, das erste wird mit den Parametern jedes neuen Balkens (üblicher Balken im Diagramm) initialisiert, und das zweite speichert einen Balken, der allen Bedingungen entspricht. In einem anderen lokalen Objekt der Klasse Order werden alle Berechnungen anhand der Parameter db_last durchgeführt, um einen Auftrag zu eröffnen. Die Parameter db_last und bar werden an vielen Stellen verwendet, aber nur zum Lesen, die Initialisierung und die Zuweisung erfolgen an einer Stelle, nämlich in OnTick (), so dass keine unerwarteten Änderungen an Objekten auftreten sollten.

Ich würde es versuchen - es kostet kein Geld).

Aber es gibt Fehler, vor allem Fehler bei der einfachen Normalisierung

Können Sie mir die Datei in einer privaten Nachricht schicken? Ich werde es mir ansehen.
 
SanAlex #:

Wie lautet der Name des Experten? Haben Sie es von kodobase heruntergeladen? Ich muss sehen, wie der Autor es in der Funktion implementiert hat

Ich habe etwas übersehen - um die Bedingung zum Ontik hinzuzufügen

SanAlex, ich habe die heruntergeladene Version in dieser Nachricht angehängt - sie hat Puria + Trailing Stop + Breakeven Level + Watchdog Trading. Ich würde den Handel nach der Uhr testen, ich bin nur noch nicht dazu gekommen)

 
MakarFX #:

Das Fehlen einer Vorgeschichte wirkt sich auf den Indikatorwert zu Beginn des Tests aus

MakarFX, daran habe ich auch gedacht, also sollte es so funktionieren, wie es sollte

 
artem artem #:

SanAlex, beigefügt die Version, die ich in diesem Beitrag heruntergeladen - es ist Puria + trailing stop + breakeven level + clock trading. Ich würde den Handel nach der Uhr testen, ich bin nur noch nicht dazu gekommen).

Dies wurde in kodobase https://www.mql5.com/ru/code/12654 gefunden.

- Ich habe Ihr Ziel verfehlt, was wollten Sie daran ändern?

Советник по методу Пуриа
Советник по методу Пуриа
  • www.mql5.com
Советник открывает позиции по алгоритму метода Пуриа.
 
SanAlex #:

Dies wurde in kodobase https://www.mql5.com/ru/code/12654 gefunden.

- Ich habe Ihr Ziel verfehlt, was wollten Sie daran ändern?

Welche Ergänzungen ich machen wollte:

1. Um so, dass die Eröffnung eines Geschäfts und überprüfen Sie für alle Indikatoren Bedingungen(Kreuzung einer schnellen (5) zwei langsame (75) (85) und der MACD bar Eröffnung in die gleiche Richtung mit einem schnellen (5) ) wurde nur bei der Eröffnung Preis einer neuen Kerze (der erste Tick von jeder 30 Minuten Kerze);
  1. Schaffung von Bedingungen für die "Nullstellung" von Indikatoren. Zum Beispiel, für eine schnell laufende (5) Wenn sie höher ist als langsam - dann ist das ein Kaufsignal. Wenn er dann nach unten geht und entweder einen von ihnen berührt oder sich zwischen den langsamen (75) und (85) befindet- dann wird das Signal des sich schnell bewegenden Indikators sozusagen" auf Null" gestellt und bleibt in dieser" Null"-Position, solange er die langsamen berührt oder zwischen ihnen bleibt. Wenn danach der schnelle Kurs die beiden langsamen Kurse auf einer Seite kreuzt(auch wenn er auf die Seite zurückgeht, von der er kam, bevor er die langsamen Kurse berührte), dann ist das ein Signal dieses Indikators. Beim MACD ist die Situation ähnlich- Nur MACD=0 wird als "Nullung" betrachtet(wenn der MACD auf der ersten Kerze z.B. mit 0,0043 eröffnete und auf der zweiten Kerze mit -0,0010, bedeutet dies, dass der MACD auf der zweiten Kerze" genullt" hat und ein neues Signal gegeben hat). Es gibt jedoch einen Zeitpunkt, an dem die schnelle Kerze (5) und der MACD gleichberechtigt sein sollten- wenn (5) seine Position gegenüber der langsamen Kerze nicht verändert und der MACD bei der vorherigen Kerze in der falschen Zone eröffnet hat (kein Einstieg) und bei der nächsten Kerze in der gleichen Zone wie die schnelle Kerze, dann haben sich alle Bedingungen angenähert und ein Einstieg in die Order sollte erfolgen. Beachten Sie, dass all dies nur für die Eröffnungskurse der Kerzen gelten sollte - nur für diesen einen Tick;
  1. Und die letzte, um den Expert Advisor auf 4 aufeinanderfolgende Kerzeneröffnungen warten zu lassen:

    1. 1. Eröffnungskurs - (5) über (75) und (85) + MACD-Balken über 0 geöffnet- 1 von 4 Bestätigungen;
    2.Der Eröffnungskurs der zweiten Kerze - (5) über (75) und (85) + MACD-Balken über 0 geöffnet- 2 von 4 Bestätigungen ist;
    3. Der Eröffnungskurs der dritten Kerze - (5) über (75) und (85) + MACD-Balken über 0 geöffnet- 3 von 4 Bestätigungen ist;
    4.Eröffnungskurs der 4. Kerze - (5) über (75) und (85) + MACD-Balken über 0 eröffnet- 4 von 4 Bestätigungen ja- Eröffnen Sie den Kaufhandel auf derselben Kerze (4.).
Die gleiche Situation mit Verkaufsaufträgen, nur in die andere Richtung sollten Indikatoren öffnen. Und es gibt einen wichtigen Punkt- wenn, sagen wir, in irgendeiner Phase von der 1. bis zur 4. Kerze, die Indikatoren ihre Position ändern(z.B. bei der 3. Eröffnungskerze öffnet sich der MACD-Balken entweder unter 0 oder = 0)- dann wird alles zurückgesetzt, weil die Signale bei der Eröffnung der 4-ten Kerze in Folge nicht überprüft wurden.