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

 
Tanita Gajduchok:
Hallo. Wie erstelle ich hier eine Rangliste?

oben ?

 
Grüße!

Wie schreibt man eine Funktion wie diese?

Die Summe des steigenden Kerzenvolumens sollte das 2-fache der Summe des fallenden Volumens betragen, z.B. für die letzten 10 Bars.

Wie auf dem Screenshot.


Dateien:
IMG_9206.PNG  87 kb
 

Guten Tag zusammen. Ich versuche, eine Losgrößenberechnung an den Gral-Automaten anzuhängen, so dass das Los im Falle eines Verlustes als Prozentsatz der Einlage festgelegt wird. Mit anderen Worten, wenn ein Stop-Loss ausgelöst wird, geht der angegebene Prozentsatz der Einlage verloren, oder wenn die Einlage für diesen Prozentsatz klein ist, wird das Lot auf das für den Broker mögliche Minimum gesetzt... Ich habe auf einer Website ein Skript gefunden, das solche Dinge tut, und den Skriptcode auf mich selbst übertragen, aber das Lot wird nicht korrekt berücksichtigt... Ich habe das getan. Bei den Eingabevariablen habe ich eine Variable angegeben, die für das maximale Risiko verantwortlich ist.

extern int MaxRisk=1;// МАКСИМАЛЬНЫЙ % УБЫТКА ПРИ СТОП ЛОССЕ?

Dann deklariere ich Variablen im On-Tick. Eine Variable, die den Betrag der freien Mittel auf dem Konto speichert. Eine Variable für einen Punktwert eines Symbols. Eine Variable für das Mindestlos eines Brokers. Eine Variable, die den Wert des maximalen Lots beim Broker speichert. Und die Variable, die den Losgrößenschritt speichert.

  double Free =AccountFreeMargin();// ПОЛУЧАЕМ СВОБОДНЫЕ СРЕДССТВА ДЛЯ РАСЧЁТА ОБЪЁМА ЛОТА
  double LotVal =MarketInfo(Symbol(),MODE_TICKVALUE); //СТОИМОСТЬ 1 ПУНКТА
  double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);   // МИНИМАЛЬНЫЙ ЛОТ РАЗРЕШЁННЫЙ БРОКЕРОМ
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);     // МАКСИМАЛЬНЫЙ ЛОТ РАЗРЕШЁННЫЙ БРОКЕРОМ
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);    // ШАГ ИЗМЕНЕНИЯ РАЗМЕРА ЛОТА

Und dann wird das Losvolumen mit einem bestimmten Risiko bei einem bestimmten Stop-Loss berechnet. Stop Loss wird von atp oder fest in Pips berechnet - diese Berechnung funktioniert korrekt, denn wenn ich ein festes Lot setzen, dann ist alles gut offen und funktioniert. Die Formel zur Berechnung des Losvolumens lautet wie folgt.

double lot =MathFloor((Free*MaxRisk/100)/(sl*LotVal)/Step)*Step; //СТРАШНАЯ ФОРМУЛА РАСЧЁТА ОБЪЁМА ЛОТА, КОТОРУЮ Я СОВСЕМ НЕ ПОНИМАЮ((((
  if(lot<Min_Lot) lot=Min_Lot; //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ МЕНЬШЕ ЧЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ЛОТ ПРИСВАЕМАЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРА
if(lot>Max_Lot) lot=Max_Lot;  //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ БОЛЬШЕ ЧЕМ МАКСИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ОЛТ ПРИСВАЕВАЕМ МАКС ЛОТ У БРОКЕРА

 


Nach allen Berechnungen durch den Druck drucken Sie den Wert der Partie aus, um ihn zu sehen.

Print("ЛОТ ДО НОРМАЛИЗАЦИИ= "+lot);
 lot=NormalizeDouble(lot,Digits());
Print("ЛОТ ПОСЛЕ НОРМАЛИЗАЦИИ= "+lot);

Was im Logbuch angezeigt wird was für Lot und Stop protokolliert wird - die Stop-Werte sind korrekt, aber das Lot ist es nicht((((

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Информация о счете - Состояние окружения - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
DanilaMactep:

Guten Tag zusammen. Ich versuche, eine Losgrößenberechnung an den Gral-Automaten anzuhängen, so dass das Los im Falle eines Verlustes als Prozentsatz der Einlage festgelegt wird. Mit anderen Worten, wenn ein Stop-Loss auslöst, ist der angegebene Prozentsatz der Einlage verloren, oder wenn die Einlage für diesen Prozentsatz klein ist, dann wird das Lot auf das für den Broker mögliche Minimum gesetzt... Ich fand ein Skript auf einer Website, die solche Dinge tut und übertrug den Skriptcode auf mich selbst, aber das Lot wird nicht korrekt berücksichtigt... Ich tat das Folgende. Bei den Eingabevariablen habe ich eine Variable angegeben, die für das maximale Risiko verantwortlich ist.

Dann deklariere ich Variablen im On-Tick. Eine Variable, die den Betrag der freien Mittel auf dem Konto speichert. Eine Variable für einen Punktwert eines Symbols. Eine Variable für das Mindestlos eines Brokers. Eine Variable, die den Wert des maximalen Lots beim Broker speichert. Und die Variable, die den Losgrößenschritt speichert.

Und dann wird das Losvolumen mit einem bestimmten Risiko bei einem bestimmten Stop-Loss berechnet. Stop Loss wird von atp oder fest in Pips berechnet - diese Berechnung funktioniert korrekt, denn wenn ich ein festes Lot setzen, dann ist alles gut offen und funktioniert. Die Formel zur Berechnung des Losvolumens lautet wie folgt.


Nach all diesen Berechnungen drucke ich den Wert der Partie aus, um ihn zu überprüfen.

Was im Logbuch gedruckt wird, kann unter *** eingesehen werden.

Auf den ersten Blick scheint die Funktion in Ordnung zu sein. Das Einzige, was Sie in die Formel einsetzen sollten, ist nicht der Stop-Loss-Kurs der Order, sondern der Abstand von der Ordereröffnung bis zum Stop in Punkten.

Dann müssen wir das Los auf die Genauigkeit normalisieren, nicht auf _Digits, sondern auf Step - (inkrementeller Schritt der Losgröße). Print sollte durch DoubleToString() mit der gleichen Genauigkeit ausgegeben werden, dann werden Sie sehen, was Sie sehen wollen.

 
DanilaMactep:

Guten Tag zusammen. Ich versuche, eine Losgrößenberechnung in die Gralsmaschine zu bekommen,

Ich habe das getan

Order_Lots = NormalizeDouble((AccountBalance()/100*Percen)/(MarketInfo(Symbol(),MODE_TICKVALUE)*Stop_Point)-0.005,2);
 
Alexey Viktorov:

Auf den ersten Blick scheint die Funktion in Ordnung zu sein. Das Einzige, was wir der Formel hinzufügen sollten, ist der Abstand in Punkten von der Ordereröffnung bis zum Stop, und nicht der Stop-Loss-Kurs der Order.

Außerdem sollten wir das Los auf die Genauigkeit normalisieren, nicht auf _Digits, sondern auf Step - (inkrementeller Schritt der Losgröße), und Sie sollten es mit DoubleToString() mit der gleichen Genauigkeit in Print ausgeben.

Meine Mathematik ist nicht sehr gut - wie kann ich den Abstand von der Ordereröffnung bis zum Stop berechnen und sl durch diesen ersetzen?

DoubleToString("ЛОТ ПОСЛЕ НОРМАЛИЗАЦИИ= "+lot);// ВЫВОД ЗНАЧЕНИЯ ЛОТА
Der Wert der Partie wurde wie folgt anormalisiert
lot=NormalizeDouble(lot,Step);// НОРМАЛИЗАЦИЯ ЗНАЧЕНИЯ ЛОТА 

Es bleibt also zu klären, wie der Abstand zwischen der offenen Position und dem Stopp im Code berechnet werden kann.

 
DanilaMactep:

Es bleibt also zu klären, wie der Abstand von der Eröffnung bis zum Stopp im Code zu berechnen ist.

if(buy)
Stop_Point= (Pric_UP-Loss_UP)/Point+Spread; 
else
Stop_Point= (Loss_DN-Pric_DN)/Point+Spread; 
 
MakarFX:

Vielen Dank für das Codestück, aber die Frage ist nun, welchen Typ die Variablen in diesem Codestück deklarieren und welche Werte ihnen zuweisen sollen? Ich bin kein Zauberer, ich lerne nur.

 
DanilaMactep:

Vielen Dank für das Codestück, aber die Frage ist nun, welchen Typ die Variablen in diesem Codestück deklarieren und welche Werte ihnen zuweisen sollen? Ich bin kein Zauberer, ich lerne nur

Pric_UP

offener Preis zum Kauf

Loss_UP

Stop-Loss-Kurs kaufen

   Spread = StrToInteger(DoubleToString(MarketInfo(Symbol(),MODE_SPREAD),0));
Verbreitung
 
Порт-моне тв:
Grüße!

Wie schreibt man eine Funktion wie diese?

Die Summe des steigenden Kerzenvolumens sollte das 2-fache der Summe des fallenden Volumens betragen, z.B. für die letzten 10 Bars.

Wie auf dem Screenshot.


Kann mir jemand helfen?

Grund der Beschwerde: