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

 
DanilaMactep:

Ich habe mit dem Code gemacht, was Sie mir geraten haben. Am Anfang des Codes habe ich eine Bedingung, um die Art des Stopps zu wählen - atp oder fest

Dann habe ich meine Normalisierung auskommentiert und sie so eingestellt

Die Gewinnberechnung ist der nächste Teil des Codes, wo es keine Probleme gibt, und nach der Berechnung des Gewinns habe ich die beängstigende Formel hinzugefügt, die mir empfohlen wurde.

Alles wurde ohne Fehler kompiliert. Aber wenn ich den Test ausführe, zeigt das Protokoll einen Fehler an, dass ich eine Division durch Null erhalte und der Test abgebrochen wird. Wo habe ich etwas falsch gemacht oder was habe ich falsch gemacht?


Löschen Sie es einfach.

     sl = fabs(OrderOpenPrice()-OrderStopLoss())/_Point;// ПРИСВОИЛ ЗНАЧЕНИЕ КАК СОВЕТОВАЛИ
     //sl= NormalizeDouble(sl,Digits());// НОРМАЛИЗАЦИЯ ЗНАЧЕНИЯ СТОП ЛОССА ДЛЯ ОТКРЫТИЯ СДЕЛКИ ТО  ЧТО БЫЛО ЗАКОМЕНТИРОВАЛ
 
DanilaMactep:

Ich habe mit dem Code gemacht, was Sie mir geraten haben. Am Anfang des Codes habe ich eine Bedingung, um die Art des Stopps zu wählen - atp oder fest

Dann habe ich meine Normalisierung auskommentiert und sie so eingestellt

Die Gewinnberechnung ist der nächste Teil des Codes, und nachdem ich den Gewinn berechnet hatte, fügte ich die beängstigende Formel hinzu, zu der ich geraten worden war.

Alles wurde ohne Fehler kompiliert. Aber wenn ich den Test ausführe, zeigt das Protokoll einen Fehler an, dass ich eine Division durch Null erhalte und der Test abgebrochen wird. Was habe ich hier falsch gemacht oder was habe ich nicht richtig gemacht?


Gerade wenn Ihnen zwei verschiedene Möglichkeiten angeboten werden, sollten Sie nicht beide auf einmal anwenden.

Zählen Sie sl als zwei verschiedene Möglichkeiten

sl= iATR( NULL,PeriodForWork_sl,atr_sl_period,1);// ПОЛУЧЕНИЕ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА

oder

sl= razmer_fikc_sl*Point; // ПЕЕРМЕННОЙ СТОП ЛОССА ПРИСВАЕВАЕМ ФИКСИРОВАНОНЕ ЗНАЧЕНИЕ ПУНКТОВ И ДОМНОЖАЕМ НА ПОИНТ

erhalten Sie den Wert in Preiswerten. Und die Formel sollte Punkte von ... bis .... enthalten.

Also, der Stopp in einem Abstand vom Preis ist entweder iATR(.........)/_Point oder razmer_fikc_sl, aber mit zwei verschiedenen Werten in der Funktion ist nicht sehr bequem, daher ist es besser, nur eine Variante zu verlassen

double lot =MathFloor((Free*MaxRisk/100)/(sl/Point*LotVal)/Step)*Step; //СТРАШНАЯ ФОРМУЛА РАСЧЁТА ОБЪЁМА ЛОТА

Und vergessen Sie nicht, dass sl berechnet werden sollte, BEVOR Sie versuchen, die Losgröße zu berechnen.

 
sl= iATR( NULL,PeriodForWork_sl,atr_sl_period,1)/Point;// ПОЛУЧЕНИЕ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА
Bitte beachten Sie
 

Mach es so...

void OnTick()
  {
//---
if(tip_sl==en_po_atr)
     { //ЕСЛИ ТИП СТОП ЛОССА СТОИТ ПО АТР ТО ВЫСЧИТЫВАЕМ ЕГО ИЗ АТР
     sl= iATR( NULL,PeriodForWork_sl,atr_sl_period,1)/Point;// ПОЛУЧЕНИЕ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА
      Print("СТОП ПО АТР, ЕГО РАЗМЕР "+sl);
     }
     else //ИНАЧЕ- ТО ЕСТЬ ЕСЛИ СТОП ЛОСС ФИКСИРОВАННЫЙ В ПУНКТАХ
     {
     sl= razmer_fikc_sl; // ПЕЕРМЕННОЙ СТОП ЛОССА ПРИСВАЕВАЕМ ФИКСИРОВАНОНЕ ЗНАЧЕНИЕ ПУНКТОВ И ДОМНОЖАЕМ НА ПОИНТ
      Print("СТОП ПО АТР, ЕГО РАЗМЕР "+sl);
     }
double lot =MathFloor((Free*MaxRisk/100)/(sl*LotVal)/Step)*Step; //СТРАШНАЯ ФОРМУЛА РАСЧЁТА ОБЪЁМА ЛОТА
 
MakarFX:

Löschen Sie es einfach.

Ich habe die Zeile korrigiert und der Test wurde gestartet - DANKE! Ich habe nur nicht verstanden, warum der Stoploss von iATR in eine Variable übertragen und durch den Punkt am Ende geteilt wird. P/S Ich habe eine harte Zeit mit der Mathematik, ich bin nicht messing around :-( Aber ich denke, der Test ging gut und mit einem 100 lot setzen das Minimum, und mit einem 10000 lot anders die ganze Zeit, so dass es funktioniert gut... Nochmals vielen Dank für die Hilfe...

 
DanilaMactep:

Ich habe die Zeichenfolge korrigiert und der Test wurde gestartet - DANKE! Ich habe nur nicht verstanden, warum der Stoploss von iATR in eine Variable übertragen und durch den Punkt am Ende geteilt wird. P/S Ich habe eine harte Zeit mit Mathe, ich bin nicht messing around :-( Aber ich denke, der Test ging gut und bei 100 depo ist die Menge minimal, und bei 10000 depo ist es anders die ganze Zeit, so dass es funktioniert ok... Nochmals danke für die Hilfe...

ATR gibt eine Dezimalzahl aus, etwa 0,00120

razmer_fikc_sl ist eine ganze Zahl.

für die Berechnung des Loses braucht man Punkte, d.h. ganze Zahlen

ATR/Point gibt eine ganze Zahl an

 
Es ist ein altes Thema, aber ich kann keine Lösung finden. Wie kann man ein Zeitintervall festlegen (z.B. von 12:00 bis 14:00) und eine Order nur einmal innerhalb dieses Intervalls eröffnen, wenn sie eine Bedingung erfüllt (z.B. RSI<30).

Oder

Ähnlich wie bei Sleep: einen Auftrag zu einer bestimmten Bedingung eröffnen und 2 Stunden lang nichts tun. Aber Sleep funktioniert im Testgerät nicht.
 
Порт-моне тв:
Dies ist ein altes Thema, aber ich kann keine Lösung finden. Wie kann man ein Zeitfenster festlegen (z.B. von 12:00 bis 14:00) und nur einmal in diesem Zeitfenster eine Order eröffnen, die eine Bedingung erfüllt (z.B. RSI<30).

Oder

Ähnlich wie bei Sleep: einen Auftrag zu einer bestimmten Bedingung eröffnen und 2 Stunden lang nichts tun. Aber Sleep funktioniert im Testgerät nicht.

erste Bedingung - die Zeit ist gekommen
zweite Bedingung - rsi
dritte Bedingung - es gibt keinen solchen Auftrag in der Geschichte zum Preis der Eröffnung in Intervallen

 

Guten Tag.

Es gibt einen Indikator Elliott Wave Oscillator, der numerische Werte der Variable EWO angibt. Es gibt positive EWOs, die über Null liegen, und negative EWOs, die unter Null liegen.

Aus den letzten 100 Messwerten der EWO muss der Durchschnittswert der positiven EWO und separat der Durchschnittswert der negativen EWO berechnet werden.

Ich erhalte die Werte aus dem Indikator double EWO=iCustom(Symbol(),0, "Elliott Wave Oscillator",0,0);

Bitte beraten Sie, welche mql4 Code kann dies in einem EA implementieren?


Es ist mir gelungen, den Modulo-Durchschnitt zu finden.

double avarage_EWO = 0;
for(int g=0;g<100;g++)
avarage_EWO = avarage_EWO + MathAbs( iCustom(Symbol(),0, "Elliott Wave Oscillator",0,g) ); // modulo average
avarage_EWO = avarage_EWO/100;


Aber wie berechnet man getrennt den durchschnittlichen positiven und den durchschnittlichen negativen EWO?

Ich danke Ihnen!



 

Take Profit platziert

Ich kann nicht herausfinden, wie und wozu ORDER_REASON_TP dient,

Ich weiß, wieDEAL_REASON_TP funktioniert, aber ich weiß nicht, was mit den Aufträgen hier los ist

Grund der Beschwerde: